From b4c3b3c785deefeefc8872e93508671d2e2b6fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D1=8F=201=D0=A1?= Date: Fri, 19 Jul 2013 14:29:00 +0300 Subject: [PATCH] 2_1_4_34 --- .../Forms/ФормаБизнесПроцесса/Form.form | 4 + .../Forms/ФормаБизнесПроцесса/Module.bsl | 98 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Задание/Forms/ФормаСписка/Module.bsl | 20 +- .../BusinessProcesses/Задание/Help/ru.html | 2 +- .../ПодборВалютИзКлассификатора/Help/ru.html | 2 +- .../ПодборВалютИзКлассификатора/Module.bsl | 3 +- .../Валюты/Forms/ФормаВыбора/Module.bsl | 3 +- .../Валюты/Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Валюты/Forms/ФормаЭлемента/Module.bsl | 6 +- SSL/src/Catalogs/Валюты/Help/ru.html | 2 +- SSL/src/Catalogs/Валюты/ObjectModule.bsl | 11 +- .../Template.txt | 2 + .../Forms/ФормаВыбора/Module.bsl | 2 - .../CommandModule.bsl | 14 +- .../CommandModule.bsl | 14 +- .../Forms/РазмещениеВРазделах/Help/ru.html | 2 +- .../Forms/РазмещениеВРазделах/Module.bsl | 13 +- .../Forms/ФормаСписка/Form.form | 18 +- .../Forms/ФормаСписка/Module.bsl | 24 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 3 +- SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html | 2 +- .../Catalogs/ВариантыОтчетов/ObjectModule.bsl | 14 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../ВерсииФайлов/Forms/ФормаВыбора/Form.form | 4 + .../ВерсииФайлов/Forms/ФормаВыбора/Module.bsl | 31 + .../Form.form | 2 +- .../Module.bsl | 4 +- .../Список/ExtInfo/ListSettings.dcss | 27 - .../ВерсииФайлов/Forms/ФормаСписка/Form.form | 4 + .../ВерсииФайлов/Forms/ФормаСписка/Module.bsl | 26 + .../Список/ExtInfo/ListSettings.dcss | 31 - .../Forms/ФормаСпискаВерсийФайла/Form.form | 4 + .../Forms/ФормаСпискаВерсийФайла/Module.bsl | 156 +- .../Forms/ФормаЭлемента/Module.bsl | 4 + SSL/src/Catalogs/ВерсииФайлов/Help/ru.html | 2 +- .../ВидыДокументовФизическихЛиц/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/ФормаВыбораГруппы/Form.form | 4 + .../Forms/ФормаВыбораГруппы/Module.bsl | 12 + .../Forms/ФормаСписка/Form.form | 2 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 105 +- .../ВидыКонтактнойИнформации/Help/ru.html | 2 +- .../ExtInfo/ListSettings.dcss | 31 - .../ExtInfo/ListSettings.dcss | 8 - .../Forms/ФормаСписка/Form.form | 5 +- .../Forms/ФормаСписка/Module.bsl | 113 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 10 +- .../Catalogs/ВнешниеПользователи/Help/ru.html | 2 +- .../ВнешниеПользователи/ManagerModule.bsl | 20 +- .../Список/ExtInfo/ListSettings.dcss | 20 - .../Forms/ФормаСписка/Form.form | 1 + .../Forms/ФормаСписка/Module.bsl | 46 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 15 +- .../ГруппыВнешнихПользователей/Help/ru.html | 2 +- .../ObjectModule.bsl | 29 + .../Forms/ВыборПоОтветственному/Module.bsl | 15 +- .../Form.form | 2 +- .../Список/ExtInfo/ListSettings.dcss | 0 .../Forms/ФормаВыбораГруппы/Form.form | 238 + .../Forms/ФормаВыбораГруппы/Module.bsl | 18 + .../ГруппыДоступа/Forms/ФормаГруппы/Form.form | 12 + .../Список/ExtInfo/ListSettings.dcss | 15 - .../ГруппыДоступа/Forms/ФормаСписка/Form.form | 6 - .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 32 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 60 +- SSL/src/Catalogs/ГруппыДоступа/Help/ru.html | 2 +- .../Catalogs/ГруппыДоступа/ManagerModule.bsl | 11 + .../Catalogs/ГруппыДоступа/ГруппыДоступа.mdo | 36 +- .../Список/ExtInfo/ListSettings.dcss | 20 - .../Forms/ФормаСписка/Form.form | 1 + .../Forms/ФормаСписка/Module.bsl | 46 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Catalogs/ГруппыПользователей/Help/ru.html | 2 +- .../Form.form | 2 +- .../Module.bsl | 12 +- .../Forms/ПодборРазделов/Form.form | 2 +- .../Forms/ПодборРазделов/Module.bsl | 9 +- .../Forms/ФормаСписка/Form.form | 2 +- .../Forms/ФормаСписка/Module.bsl | 15 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 172 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 42 +- .../Forms/ФормаСписка/Module.bsl | 9 +- .../Заметки/Forms/МоиЗаметки/Module.bsl | 4 + .../Список/ExtInfo/ListSettings.dcss | 12 - .../Forms/ФормаСписка/Module.bsl | 50 +- .../ЗначенияСвойствОбъектов/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 12 - .../Forms/ФормаСписка/Module.bsl | 44 +- .../Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 39 - .../Forms/ФормаСписка/Form.form | 75 +- .../Forms/ФормаСписка/Module.bsl | 99 +- .../Forms/ФормаЭлемента/Form.form | 9 +- .../ManagerModule.bsl | 53 +- .../ObjectModule.bsl | 4 + .../Forms/РасписаниеРаботы/Module.bsl | 5 +- .../Список/ExtInfo/ListSettings.dcss | 4 - .../Календари/Forms/ФормаСписка/Module.bsl | 4 + .../Календари/Forms/ФормаЭлемента/Form.form | 4 + .../Календари/Forms/ФормаЭлемента/Module.bsl | 117 +- SSL/src/Catalogs/Календари/ManagerModule.bsl | 14 +- .../Forms/ЗагрузкаКлассификатора/Form.form | 127 +- .../Forms/ЗагрузкаКлассификатора/Module.bsl | 591 +- .../Forms/ФормаВыбора/Module.bsl | 2 +- .../Forms/ФормаСписка/Module.bsl | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 8 +- .../КлассификаторБанковРФ/Help/ru.html | 2 +- .../Forms/ФормаВыбора/Module.bsl | 16 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/ФормаСписка/Form.form | 4 + .../Forms/ФормаСписка/Module.bsl | 16 + .../РедактированиеСоставаНаборов/Form.form | 2 +- .../РедактированиеСоставаНаборов/Module.bsl | 2 +- .../Forms/ФормаВыбора/Form.form | 2 +- .../Forms/ФормаСписка/Form.form | 2 +- .../Help/ru.html | 2 +- ...аборыДополнительныхРеквизитовИСведений.mdo | 7 + .../Организации/Forms/ФормаЭлемента/Form.form | 15 +- .../Forms/ФормаЭлемента/Form.form | 856 + .../Forms/ФормаЭлемента/Module.bsl | 97 + .../ОчередьЗаданий/ОчередьЗаданий.mdo | 10 + .../Forms/ФормаЭлемента/Form.form | 940 + .../Forms/ФормаЭлемента/Module.bsl | 104 + .../ОчередьЗаданийОбластейДанных.mdo | 11 + SSL/src/Catalogs/ПапкиФайлов/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 7 - .../Forms/ФормаСписка/Module.bsl | 4 + .../Forms/ПользователиИБ/Help/ru.html | 2 +- .../Forms/ФормаВыбораПользователяОС/Form.form | 2 +- .../ФормаВыбораПользователяОС/Help/ru.html | 2 +- .../ФормаВыбораПользователяОС/Module.bsl | 4 +- .../ExtInfo/ListSettings.dcss | 8 - .../ExtInfo/ListSettings.dcss | 36 - .../Пользователи/Forms/ФормаСписка/Form.form | 2 +- .../Пользователи/Forms/ФормаСписка/Module.bsl | 123 +- .../Forms/ФормаЭлемента/Form.form | 21 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 73 +- SSL/src/Catalogs/Пользователи/Help/ru.html | 2 +- .../Catalogs/Пользователи/ManagerModule.bsl | 19 - .../Forms/ФормаСписка/Module.bsl | 22 +- .../Forms/ФормаЭлемента/Form.form | 16 +- .../Forms/ФормаЭлемента/Module.bsl | 44 +- .../Forms/ФормаЭлемента/Form.form | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 30 +- .../ManagerModule.bsl | 14 +- .../Список/ExtInfo/ListSettings.dcss | 15 + .../Forms/ФормаВыбораГруппы/Form.form | 238 + .../Forms/ФормаВыбораГруппы/Module.bsl | 18 + .../Forms/ФормаГруппы/Form.form | 12 + .../Список/ExtInfo/ListSettings.dcss | 15 - .../Forms/ФормаСписка/Form.form | 8 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 27 +- .../Forms/ФормаЭлемента/Module.bsl | 6 +- .../Catalogs/ПрофилиГруппДоступа/Help/ru.html | 2 +- .../ПрофилиГруппДоступа/ManagerModule.bsl | 302 +- .../ПрофилиГруппДоступа/ObjectModule.bsl | 59 +- .../ПрофилиГруппДоступа.mdo | 36 +- .../ВыполнитьСейчас/CommandModule.bsl | 9 +- .../Forms/ПараметрыFTP/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/ФормаВыбораГруппы/Form.form | 4 + .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаВыбораГруппы/Module.bsl | 16 + .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 22 - .../Forms/ФормаСписка/Module.bsl | 21 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 120 +- SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html | 2 +- .../Catalogs/РассылкиОтчетов/ObjectModule.bsl | 5 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Module.bsl | 23 +- .../Catalogs/РолиИсполнителей/Help/ru.html | 2 +- .../Forms/ФормаСписка/Form.form | 30 + .../Forms/ФормаСписка/Module.bsl | 14 + .../Forms/ФормаЭлемента/Form.form | 66 + .../Forms/ФормаЭлемента/Module.bsl | 22 + .../ObjectModule.bsl} | 0 .../СообщениеSMSПрисоединенныеФайлы.mdo | 774 + .../Список/ExtInfo/ListSettings.dcss | 19 - .../Forms/ФормаСписка/Module.bsl | 40 +- .../Список/ExtInfo/ListSettings.dcss | 19 - .../Forms/ФормаСписка/Module.bsl | 40 +- .../СтраныМира/Forms/Классификатор/Form.form | 987 + .../Forms/Классификатор/Help/ru.html | 26 + .../СтраныМира/Forms/Классификатор/Module.bsl | 163 + .../СтраныМира/Forms/ФормаСписка/Form.form | 346 +- .../СтраныМира/Forms/ФормаСписка/Module.bsl | 205 + .../СтраныМира/Forms/ФормаЭлемента/Form.form | 221 +- .../СтраныМира/Forms/ФормаЭлемента/Module.bsl | 23 +- SSL/src/Catalogs/СтраныМира/Help/ru.html | 26 +- SSL/src/Catalogs/СтраныМира/ManagerModule.bsl | 481 + SSL/src/Catalogs/СтраныМира/ObjectModule.bsl | 86 + .../Templates/Классификатор/Template.txt | 14 + SSL/src/Catalogs/СтраныМира/СтраныМира.mdo | 23 +- .../Form.form | 199 +- .../Module.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 14 +- .../Forms/ФормаЭлемента/Module.bsl | 18 +- .../СценарииОбменовДанными/ManagerModule.bsl | 5 +- .../СценарииОбменовДанными/ObjectModule.bsl | 16 +- .../СценарииОбменовДанными.mdo | 1 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Catalogs/ТомаХраненияФайлов/Help/ru.html | 2 +- .../УдалитьКлассификаторВалют/Help/ru.html | 8 - .../ObjectModule.bsl | 5 - .../УдалитьКлассификаторВалют.mdo | 182 - .../Help/ru.html | 2 +- .../Module.bsl | 2 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 16 +- .../Help/ru.html | 2 +- .../Module.bsl | 13 +- .../Forms/ВопросПриИмпортеФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ВыборКодировки/Form.form | 2 +- .../Файлы/Forms/ВыборКодировки/Help/ru.html | 2 +- .../Файлы/Forms/ВыборКодировки/Module.bsl | 16 +- .../Help/ru.html | 2 +- .../Forms/НастройкаСканирования/Form.form | 2 +- .../Forms/НастройкаСканирования/Help/ru.html | 2 +- .../Forms/НастройкаСканирования/Module.bsl | 42 +- .../НастройкаСканированияНаСеанс/Form.form | 2 +- .../НастройкаСканированияНаСеанс/Help/ru.html | 2 +- .../НастройкаСканированияНаСеанс/Module.bsl | 37 +- .../РедактированиеТекстовогоФайла/Form.form | 4 + .../Help/ru.html | 2 +- .../РедактированиеТекстовогоФайла/Module.bsl | 190 +- .../Forms/РедактируемыеФайлы/Help/ru.html | 2 +- .../Файлы/Forms/РедактируемыеФайлы/Module.bsl | 17 +- .../Forms/РезультатСканирования/Form.form | 6 +- .../Forms/РезультатСканирования/Help/ru.html | 2 +- .../Forms/РезультатСканирования/Module.bsl | 98 +- .../Forms/СписокЗанятыхСВопросом/Help/ru.html | 2 +- .../Forms/СписокЗанятыхСВопросом/Module.bsl | 3 +- .../Help/ru.html | 2 +- .../Forms/ФормаВозвратаФайла/Help/ru.html | 2 +- .../Файлы/Forms/ФормаВопроса/Module.bsl | 8 +- .../Группы/ExtInfo/ListSettings.dcss | 5 - .../Файлы/Forms/ФормаВыбора/Module.bsl | 11 +- .../Forms/ФормаВыбораРежимаОткрытия/Form.form | 2 +- .../ФормаВыбораРежимаОткрытия/Help/ru.html | 2 +- .../ФормаВыбораРежимаОткрытия/Module.bsl | 12 +- .../Файлы/Forms/ФормаИмпортаПапки/Form.form | 4 + .../Forms/ФормаИмпортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаИмпортаПапки/Module.bsl | 28 +- .../Файлы/Forms/ФормаИмпортаФайлов/Form.form | 4 + .../Forms/ФормаИмпортаФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ФормаИмпортаФайлов/Module.bsl | 28 +- .../Файлы/Forms/ФормаНового/Help/ru.html | 2 +- .../Файлы/Forms/ФормаПеретаскивания/Form.form | 4 + .../Forms/ФормаПеретаскивания/Module.bsl | 28 +- .../Группы/ExtInfo/ListSettings.dcss | 5 - .../Файлы/Forms/ФормаПодбора/Module.bsl | 13 +- .../Список/ExtInfo/ListSettings.dcss | 6 - .../Файлы/Forms/ФормаСписка/Module.bsl | 10 +- .../Список/ExtInfo/ListSettings.dcss | 6 - .../ФормаСпискаПрисоединенныхФайлов/Form.form | 4 + .../Module.bsl | 104 +- .../Forms/ФормаЭкспортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭкспортаПапки/Module.bsl | 2 +- .../Файлы/Forms/ФормаЭлемента/Form.form | 2 +- .../Файлы/Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭлемента/Module.bsl | 2 +- .../Папки/ExtInfo/ListSettings.dcss | 6 - .../Список/ExtInfo/ListSettings.dcss | 6 - .../Файлы/Forms/ХранилищеФайлов/Form.form | 8 +- .../Файлы/Forms/ХранилищеФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ХранилищеФайлов/Module.bsl | 92 +- SSL/src/Catalogs/Файлы/Help/ru.html | 2 +- SSL/src/Catalogs/Файлы/ObjectModule.bsl | 3 +- SSL/src/Catalogs/Файлы/Файлы.mdo | 4 +- SSL/src/Catalogs/ФизическиеЛица/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ФормаМастераТабличныхВопросов/Module.bsl | 2 +- .../Forms/ФормаПростыхВопросов/Module.bsl | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 7 +- .../Список/ExtInfo/ListSettings.dcss | 45 - .../ВидыДоступа/Forms/ФормаВыбора/Form.form | 5 +- .../ВидыДоступа/Forms/ФормаВыбора/Module.bsl | 37 +- .../Список/ExtInfo/ListSettings.dcss | 44 - .../ВидыДоступа/Forms/ФормаСписка/Form.form | 4 + .../ВидыДоступа/Forms/ФормаСписка/Module.bsl | 22 +- .../ВидыДоступа/ManagerModule.bsl | 16 +- .../Forms/ФормаВыбора/Module.bsl | 2 - .../Forms/РазблокированиеРеквизитов/Form.form | 2 +- .../РазблокированиеРеквизитов/Module.bsl | 3 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/ФормаВыбора/Form.form | 20 + .../Forms/ФормаВыбора/Module.bsl | 26 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Module.bsl | 55 +- .../Help/ru.html | 2 +- .../ДополнительныеРеквизитыИСведения.mdo | 1 + .../ОбъектыАдресацииЗадач/Help/ru.html | 2 +- .../ОбластьДанныхВспомогательныеДанные.mdo | 12 + .../ОбластьДанныхОсновныеДанные.mdo | 50 +- .../АвтономнаяРабота/CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../ВыполнитьОбменДанными.mdo | 2 +- .../ВыполнитьОбменДаннымиИнтерактивно.mdo | 2 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../ЗагрузитьКурсыВалют/CommandModule.bsl | 5 +- ...оитьПараметрыТранспортаСообщенийОбмена.mdo | 2 +- .../CommandModule.bsl | 3 +- .../ОткрытьПравилаКонвертацииОбъектов.mdo | 2 +- .../ОткрытьПравилаРегистрацииОбъектов.mdo | 2 +- .../ОткрытьРезультатыОбменаДанными.mdo | 2 +- .../ОткрытьСценарииОбменовДанными.mdo | 6 +- ...менаДаннымиДляВторойИнформационнойБазы.mdo | 2 +- .../ПраваПоЗначениямДоступа/CommandModule.bsl | 9 +- .../ПрисоединенныеФайлыКОбъекту.mdo | 1 + .../CommandModule.bsl | 4 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 7 + .../СоставОтправляемыхДанных.mdo | 10 + .../CommandModule.bsl | 7 + .../УдалитьНастройкуСинхронизации.mdo | 13 + .../CommonForms/АвтономнаяРабота/Form.form | 338 +- .../CommonForms/АвтономнаяРабота/Module.bsl | 115 +- .../АвтономнаяРаботаВМоделиСервиса/Form.form | 289 +- .../АвтономнаяРаботаВМоделиСервиса/Module.bsl | 87 +- SSL/src/CommonForms/АдреснаяКнига/Form.form | 12 +- SSL/src/CommonForms/АдреснаяКнига/Module.bsl | 74 +- .../АутентификацияВСервисе/Form.form | 21 +- .../АутентификацияВСервисе/Module.bsl | 12 +- SSL/src/CommonForms/ВводАдреса/Form.form | 151 - SSL/src/CommonForms/ВводАдреса/Help/ru.html | 3 - SSL/src/CommonForms/ВводАдреса/Module.bsl | 83 - SSL/src/CommonForms/ВводАдреса/ВводАдреса.mdo | 15 - .../ВводПароляСОписаниями/Help/ru.html | 2 +- SSL/src/CommonForms/ВводТелефона/Form.form | 135 - SSL/src/CommonForms/ВводТелефона/Help/ru.html | 1 - SSL/src/CommonForms/ВводТелефона/Module.bsl | 83 - SSL/src/CommonForms/Вопрос/Module.bsl | 10 +- .../Form.form | 48 +- .../Module.bsl | 7 +- .../CommonForms/ВходВОбластьДанных/Module.bsl | 7 +- SSL/src/CommonForms/ВыборДаты/Form.form | 2 +- SSL/src/CommonForms/ВыборДаты/Module.bsl | 20 +- .../ВыборИсполнителяБизнесПроцесса/Form.form | 4 + .../Help/ru.html | 2 +- .../ВыборИсполнителяБизнесПроцесса/Module.bsl | 32 +- SSL/src/CommonForms/ВыборКонтакта/Form.form | 36 +- SSL/src/CommonForms/ВыборКонтакта/Module.bsl | 68 +- .../Form.form | 2 +- .../ВыборОбъектовМетаданных/Module.bsl | 28 +- .../CommonForms/ВыборПодписей/Help/ru.html | 2 +- .../ВыборПроизвольногоПериода/Form.form | 27 +- .../ВыборПроизвольногоПериода/Module.bsl | 5 +- .../ВыборПутиКАрхивуФайловТомов/Form.form | 2 +- .../ВыборРолиИсполнителя/Form.form | 2 +- .../ВыборРолиИсполнителя/Module.bsl | 14 +- .../CommonForms/ВыборСертификата/Form.form | 2 +- .../CommonForms/ВыборСертификата/Help/ru.html | 2 +- .../CommonForms/ВыборСертификата/Module.bsl | 12 +- .../ВыборСертификатовШифрования/Help/ru.html | 2 +- .../ВыборСертификатовШифрования/Module.bsl | 2 +- .../ВыборУзловПлановОбмена/Form.form | 2 +- .../ВыборУзловПлановОбмена/Module.bsl | 9 +- .../ВыборФорматаВложений/Form.form | 2 +- .../ВыборФорматаВложений/Module.bsl | 8 +- SSL/src/CommonForms/ВыгрузкаДанных/Module.bsl | 3 +- .../CommonForms/ГруппыПользователей/Form.form | 2 - .../ГруппыПользователей/Module.bsl | 6 + .../Module.bsl | 4 +- .../ДобавлениеПодписиИзФайла/Help/ru.html | 2 +- .../ДополнительныеОтчетыИОбработки/Form.form | 4 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 66 +- .../Form.form | 2 +- .../Module.bsl | 7 +- .../ЗагрузкаДанныхВОбласть/Module.bsl | 2 +- .../ЗагрузкаДанныхИзСервиса/Module.bsl | 3 +- .../ЗагрузкаДанныхИзСервиса.mdo | 2 +- .../Form.form | 13 +- .../Module.bsl | 2 +- .../МастерАнкетыПоРазделам/Module.bsl | 10 +- .../Module.bsl | 3 +- .../НапоминаниеПриРедактировании/Module.bsl | 4 +- .../НастройкаОбменаСообщениями/Form.form | 1003 +- .../НастройкаОбменаСообщениями/Module.bsl | 22 +- .../Form.form | 6 +- .../Help/ru.html | 2 +- .../Module.bsl | 19 +- .../НастройкаОтправкиSMS/Help/ru.html | 2 +- ...стройкиРезервногоКопированияПриложений.mdo | 11 - SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html | 2 +- SSL/src/CommonForms/НастройкиЭЦП/Module.bsl | 16 +- .../НерекомендуемаяВерсияПлатформы/Form.form | 478 - .../НерекомендуемаяВерсияПлатформы/Module.bsl | 49 - .../НерекомендуемаяВерсияПлатформы.mdo | 10 - SSL/src/CommonForms/ОбменыДанными/Form.form | 1245 +- .../CommonForms/ОбменыДанными/Help/ru.html | 13 +- SSL/src/CommonForms/ОбменыДанными/Module.bsl | 214 +- .../ОписаниеИзмененийСистемы/Form.form | 150 +- .../ОписаниеИзмененийСистемы/Help/ru.html | 2 +- .../ОписаниеИзмененийСистемы/Module.bsl | 53 +- .../Module.bsl | 12 +- .../ОтображениеНовостей.mdo | 10 - .../CommonForms/ОтправкаСообщения/Form.form | 5 +- .../ОтправкаСообщения/Help/ru.html | 2 +- .../CommonForms/ОтправкаСообщения/Module.bsl | 115 +- .../ОтправкаСообщенияВТехподдержку.mdo | 10 - .../CommonForms/ПанельОтчетов/Help/ru.html | 2 +- SSL/src/CommonForms/ПанельОтчетов/Module.bsl | 33 +- .../Form.form | 589 +- .../Help/ru.html | 2 +- .../ПараметрыПроксиСервера/Form.form | 4 + .../ПараметрыПроксиСервера/Help/ru.html | 2 +- .../ПараметрыПроксиСервера/Module.bsl | 56 +- .../ПарольДляСинхронизацииДанных/Help/ru.html | 3 - .../ПарольДляСинхронизацииДанных/Module.bsl | 86 - .../ПарольДляСинхронизацииДанных.mdo | 15 - .../ПерсональныеНастройкиЭЦП/Form.form | 10 +- .../ПерсональныеНастройкиЭЦП/Help/ru.html | 2 +- .../ПерсональныеНастройкиЭЦП/Module.bsl | 38 +- .../CommonForms/ПечатьДокументов/Form.form | 9 + .../CommonForms/ПечатьДокументов/Module.bsl | 138 +- .../ПодготовкаНовогоПисьма/Form.form | 6 +- .../ПодготовкаНовогоПисьма/Module.bsl | 31 +- .../ПодключениеКонечнойТочки/Module.bsl | 8 +- SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html | 2 +- .../Form.form | 17 + .../Help/ru.html | 2 +- .../Module.bsl | 16 +- SSL/src/CommonForms/ПоискПоИндексу/Module.bsl | 8 +- .../CommonForms/ПользователиСервиса/Form.form | 4 + .../ПользователиСервиса/Module.bsl | 39 +- SSL/src/CommonForms/ПраваДоступа/Form.form | 37 + SSL/src/CommonForms/ПраваДоступа/Module.bsl | 128 +- .../ПраваДоступаУпрощенно/Form.form | 5 + .../ПраваДоступаУпрощенно/Module.bsl | 42 +- .../ПраваПоЗначениямДоступа/Form.form | 6 +- .../ПраваПоЗначениямДоступа/Module.bsl | 6 +- .../Module.bsl | 90 +- .../CommonForms/ПрисоединенныеФайлы/Form.form | 2 +- .../CommonForms/ПрисоединенныйФайл/Form.form | 4 +- .../CommonForms/ПрисоединенныйФайл/Module.bsl | 11 +- .../Module.bsl | 4 +- .../Form.form | 2358 +++ .../Help/ru.html | 3 + .../Module.bsl | 822 + .../РедактированиеТабличногоДокумента.mdo} | 6 +- SSL/src/CommonForms/СертификатЭЦП/Form.form | 2 +- .../CommonForms/СертификатЭЦП/Help/ru.html | 2 +- SSL/src/CommonForms/СертификатЭЦП/Module.bsl | 3 +- .../Form.form | 172 +- .../Module.bsl | 128 +- .../Help/ru.html | 2 +- .../СозданиеРезервнойКопии/Module.bsl | 3 +- .../СообщениеОНеудачномОбновлении.mdo | 10 - .../СохранениеПечатнойФормы/Form.form | 2 +- .../СохранениеПечатнойФормы/Module.bsl | 19 +- .../СтруктураПодчиненности/Help/ru.html | 2 +- .../СтруктураПодчиненности/Module.bsl | 40 +- .../УстановкаВедущейКонечнойТочки/Module.bsl | 8 +- .../УстановкаПодписиЭЦП/Help/ru.html | 2 +- .../УстановкаПодписиЭЦП/Module.bsl | 2 +- .../CommonForms/УточнениеКонтактов/Form.form | 18 +- .../CommonForms/УточнениеКонтактов/Module.bsl | 87 +- .../CommonForms/ФормаВариантаОтчета/Form.form | 17 - .../ФормаВариантаОтчета/Module.bsl | 13 +- .../CommonForms/ФормаНастроекОтчета/Form.form | 17 - .../ФормаНастроекОтчета/Module.bsl | 13 +- SSL/src/CommonForms/ФормаОтчета/Form.form | 4 + SSL/src/CommonForms/ФормаОтчета/Module.bsl | 183 +- .../АвтономнаяРаботаСлужебный/Module.bsl | 83 +- .../АдресныйКлассификатор/Module.bsl | 575 +- .../АдресныйКлассификаторКлиент/Module.bsl | 30 +- .../CommonModules/Анкетирование/Module.bsl | 28 +- .../БизнесПроцессыИЗадачиСервер/Module.bsl | 96 +- .../CommonModules/ВариантыОтчетов/Module.bsl | 465 +- .../ВариантыОтчетовКлиент/Module.bsl | 46 +- .../ВариантыОтчетовКлиентСервер/Module.bsl | 4 +- .../ВерсионированиеОбъектов/Module.bsl | 433 +- .../ВерсионированиеОбъектовСобытия/Module.bsl | 30 +- .../CommonModules/Взаимодействия/Module.bsl | 460 +- .../ВзаимодействияВызовСервера/Module.bsl | 2 +- .../ВзаимодействияКлиент/Module.bsl | 337 +- .../ВзаимодействияКлиентСервер/Module.bsl | 226 +- .../ВыгрузкаЗагрузкаДанных/Module.bsl | 362 +- .../ДатыЗапретаИзменения/Module.bsl | 10 +- .../ДатыЗапретаИзмененияСлужебный/Module.bsl | 142 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 155 +- .../Module.bsl | 63 +- .../Module.bsl | 34 +- .../Module.bsl | 2 +- .../Module.bsl | 48 +- .../Module.bsl | 51 +- .../Module.bsl | 3 +- .../Module.bsl | 123 +- .../Module.bsl | 17 +- .../Module.bsl | 2 +- .../Module.bsl | 2 +- .../Module.bsl | 189 +- .../Module.bsl | 4 +- .../Module.bsl | 42 +- .../Module.bsl | 5 +- .../ЖурналРегистрации/Module.bsl | 86 +- .../ЖурналРегистрацииКлиент/Module.bsl | 68 +- .../Module.bsl | 35 +- .../Module.bsl | 59 + .../ИнформационныйЦентрКлиент/Module.bsl | 35 +- .../ИнформационныйЦентрСервер/Module.bsl | 680 +- .../Module.bsl | 2 +- .../Module.bsl | 82 +- .../ИнформационныйЦентрСлужебный/Module.bsl | 375 +- .../КалендарныеГрафики/Module.bsl | 289 +- .../КалендарныеГрафикиКлиентСервер/Module.bsl | 3 +- .../Module.bsl | 92 +- .../КонтактнаяИнформацияXML/Module.bsl | 676 + .../КонтактнаяИнформацияXML.mdo} | 6 +- .../Module.bsl | 52 - .../КонтактнаяИнформацияКлиент/Module.bsl | 250 - .../Module.bsl | 147 +- .../Module.bsl | 56 +- .../КонтактнаяИнформацияСлужебный/Module.bsl | 1087 +- .../Module.bsl | 63 + ...актнаяИнформацияСлужебныйВызовСервера.mdo} | 4 +- .../Module.bsl | 1172 + .../КонтактнаяИнформацияСлужебныйПовтИсп.mdo | 12 + .../Module.bsl | 3 +- .../Module.bsl | 2 +- .../Module.bsl | 3 +- .../ОбменДаннымиВМоделиСервиса/Module.bsl | 72 +- .../Module.bsl | 46 +- .../Module.bsl | 3 +- .../ОбменДаннымиВызовСервера/Module.bsl | 187 +- .../ОбменДаннымиКлиент/Module.bsl | 173 +- .../ОбменДаннымиКлиентСервер/Module.bsl | 14 +- .../ОбменДаннымиПереопределяемый/Module.bsl | 59 +- .../ОбменДаннымиПовтИсп/Module.bsl | 208 +- .../ОбменДаннымиСервер/Module.bsl | 1675 +- .../ОбменДаннымиСобытия/Module.bsl | 824 +- .../CommonModules/ОбменСообщениями/Module.bsl | 35 +- .../ОбменСообщениямиВнутренний/Module.bsl | 128 +- .../ОбменСообщениямиКлиент/Module.bsl | 6 +- .../ОбменСообщениямиПовтИсп/Module.bsl | 4 +- .../ОбновлениеИнформационнойБазы/Module.bsl | 1312 +- .../Module.bsl | 14 +- .../Module.bsl | 66 + .../Module.bsl | 36 + ...бновлениеИнформационнойБазыГлобальный.mdo} | 7 +- .../Module.bsl | 174 +- .../Module.bsl | 5 +- .../Module.bsl | 35 +- .../Module.bsl | 4 +- .../ОбновлениеКонфигурации/Module.bsl | 71 +- .../ОбновлениеКонфигурацииКлиент/Module.bsl | 72 +- .../Module.bsl | 7 - .../CommonModules/ОбщегоНазначения/Module.bsl | 597 +- .../ОбщегоНазначенияВызовСервера/Module.bsl | 3 +- .../ОбщегоНазначенияКлиентПовтИсп/Module.bsl | 10 +- .../ОбщегоНазначенияКлиентСервер/Module.bsl | 214 +- .../Module.bsl | 43 +- .../ОбщегоНазначенияПовтИсп/Module.bsl | 331 +- .../ОрганизацииСлужебный/Module.bsl | 2 +- .../ОтправкаSMSЧерезБилайн/Module.bsl | 32 +- .../ОтправкаSMSЧерезМТС/Module.bsl | 1 + .../Module.bsl | 3 +- .../Module.bsl | 6 +- .../CommonModules/ОчередьЗаданий/Module.bsl | 47 +- .../ОчередьЗаданийПереопределяемый/Module.bsl | 22 + .../ОчередьЗаданийСлужебный/Module.bsl | 209 +- .../ОчередьЗаданийСлужебныйПовтИсп/Module.bsl | 33 +- .../Module.bsl | 5 +- .../ПерепрефиксацияОбъектов/Module.bsl | 74 +- .../ПолнотекстовыйПоискКлиент/Module.bsl | 4 +- .../ПолнотекстовыйПоискСервер/Module.bsl | 13 +- .../Module.bsl | 3 +- .../Module.bsl | 13 +- SSL/src/CommonModules/Пользователи/Module.bsl | 4 +- .../ПользователиСлужебный/Module.bsl | 224 +- .../Module.bsl | 30 +- .../Module.bsl | 15 +- .../ПользователиСлужебныйПовтИсп/Module.bsl | 3 +- .../ПоставляемыеДанные/Module.bsl | 3 +- .../ПрефиксацияОбъектовСобытия/Module.bsl | 3 +- .../ПрисоединенныеФайлы/Module.bsl | 9 +- .../ПрисоединенныеФайлыКлиент/Module.bsl | 8 +- .../ПрисоединенныеФайлыСлужебный/Module.bsl | 25 +- .../Module.bsl | 15 + ...гальностиПолученияОбновленияГлобальный.mdo | 11 + .../Module.bsl | 42 +- .../РаботаВМоделиСервиса/Module.bsl | 355 +- .../РаботаВМоделиСервисаПовтИсп/Module.bsl | 6 +- .../CommonModules/РаботаСБанками/Module.bsl | 31 +- .../РаботаСБанкамиКлиент/Module.bsl | 11 +- .../РаботаСКурсамиВалют/Module.bsl | 24 +- .../РаботаСКурсамиВалютКлиент/Module.bsl | 11 +- .../Module.bsl | 10 +- .../Module.bsl | 24 +- .../РаботаСФайламиКлиент/Module.bsl | 41 +- .../РаботаСФайламиКлиентСервер/Module.bsl | 2 +- .../РаботаСФайламиСлужебный/Module.bsl | 29 +- .../Module.bsl | 46 +- .../РаботаСФайламиСлужебныйКлиент/Module.bsl | 121 +- .../CommonModules/РассылкаОтчетов/Module.bsl | 249 +- .../РассылкаОтчетовВызовСервера/Module.bsl | 6 +- .../РассылкаОтчетовКлиент/Module.bsl | 11 +- .../РассылкаОтчетовКлиентСервер/Module.bsl | 17 +- .../РассылкаОтчетовПовтИсп/Module.bsl | 7 +- .../РегламентныеЗаданияСлужебный/Module.bsl | 45 +- .../Module.bsl | 36 +- .../Module.bsl | 53 +- .../РезервноеКопированиеИБКлиент/Module.bsl | 394 +- .../Module.bsl | 72 +- .../РезервноеКопированиеИБСервер/Module.bsl | 205 +- .../Module.bsl | 505 +- .../Module.bsl | 47 + ...ваниеОбластейДанныхДанныеФормИнтерфейс.mdo | 11 + .../Module.bsl | 86 + ...тейДанныхДанныеФормРеализацияWebСервис.mdo | 11 + .../Module.bsl | 2 +- SSL/src/CommonModules/СоединенияИБ/Module.bsl | 118 +- .../СоединенияИБКлиент/Module.bsl | 2 + .../СоединенияИБКлиентСервер/Module.bsl | 103 +- .../Module.bsl | 2 +- .../Module.bsl | 2 +- .../Module.bsl | 2 +- .../Module.bsl | 50 +- .../СообщенияВМоделиСервиса/Module.bsl | 11 +- .../Module.bsl | 14 +- .../Module.bsl | 68 + ...общенияИнформационногоЦентраИнтерфейс.mdo} | 6 +- .../Module.bsl | 107 +- .../Module.bsl | 62 + ...нногоЦентраОбработчикСообщения_1_0_1_1.mdo | 11 + .../Module.bsl | 51 + ...общенияИнформационногоЦентраРеализация.mdo | 11 + .../Module.bsl | 123 + ...полнительныхОтчетовИОбработокИнтерфейс.mdo | 11 + .../Module.bsl | 73 + ...ИОбработокОбработчикТрансляции_1_0_0_1.mdo | 11 + .../Module.bsl | 10 +- .../Module.bsl | 128 + ...опированияОбработчикТрансляции_1_0_2_1.mdo | 11 + .../Module.bsl | 65 +- .../Module.bsl | 69 + ...трированияОбработчикТрансляции_1_0_2_4.mdo | 11 + .../Module.bsl | 2 +- .../Module.bsl | 2 +- .../Module.bsl | 17 +- .../Module.bsl | 2 +- .../Module.bsl | 117 +- .../Module.bsl | 65 +- .../Module.bsl | 93 +- .../Module.bsl | 291 +- .../Module.bsl | 184 + ...стрированияОбработчикСообщения_1_0_3_5.mdo | 11 + .../Module.bsl | 226 +- .../Module.bsl | 39 +- .../Module.bsl | 103 + ...опированиемОбработчикСообщения_1_0_3_1.mdo | 11 + .../Module.bsl | 91 +- .../Module.bsl | 153 + ...ительнымиОтчетамиИОбработкамиИнтерфейс.mdo | 11 + .../Module.bsl | 223 + ...ОбработкамиОбработчикСообщения_1_0_1_1.mdo | 11 + .../Module.bsl | 238 + ...тельнымиОтчетамиИОбработкамиРеализация.mdo | 11 + .../Module.bsl | 2 +- .../Module.bsl | 13 + .../СтандартныеПодсистемыКлиент/Module.bsl | 241 +- .../Module.bsl | 24 + .../Module.bsl | 20 + .../СтандартныеПодсистемыПовтИсп/Module.bsl | 109 +- .../СтандартныеПодсистемыСервер/Module.bsl | 751 +- .../СтроковыеФункцииКлиентСервер/Module.bsl | 7 +- .../СтруктураПодчиненности/Module.bsl | 54 - .../Module.bsl | 4 +- .../CommonModules/ТрансляцияXDTO/Module.bsl | 20 +- .../ТрансляцияXDTOСлужебный/Module.bsl | 3 +- .../УправлениеДоступом/Module.bsl | 61 +- .../УправлениеДоступомСлужебный/Module.bsl | 445 +- .../Module.bsl | 10 +- .../Module.bsl | 19 +- .../Module.bsl | 2 +- .../Module.bsl | 35 +- .../Module.bsl | 1060 +- .../Module.bsl | 19 +- .../Module.bsl | 388 +- .../Module.bsl | 4 +- .../Module.bsl | 36 - .../УправлениеПечатью/Module.bsl | 388 +- .../УправлениеПечатьюMSWordКлиент/Module.bsl | 6 +- .../УправлениеПечатьюВызовСервера/Module.bsl | 16 +- .../УправлениеПечатьюКлиент/Module.bsl | 107 + .../УправлениеПечатьюКлиентПовтИсп/Module.bsl | 17 + .../УправлениеПечатьюКлиентПовтИсп.mdo | 11 + .../Module.bsl | 30 +- .../УправлениеСвойствамиСлужебный/Module.bsl | 4 +- .../УправлениеЭлектроннойПочтой/Module.bsl | 22 +- .../Module.bsl | 3 +- .../ФайловыеФункцииСлужебный/Module.bsl | 33 +- .../Module.bsl | 3 +- .../ФайловыеФункцииСлужебныйКлиент/Module.bsl | 109 +- .../CommonModules/ФизическиеЛица/Module.bsl | 82 +- .../ФормаОтчетаПереопределяемый/Module.bsl | 2 + .../ФункцииОтчетовКлиентСервер/Module.bsl | 30 +- .../CommonModules/ЭлектроннаяПочта/Module.bsl | 6 +- .../ЭлектроннаяЦифроваяПодпись/Module.bsl | 16 +- .../Module.bsl | 52 +- .../CommonPictures/Взаимодействия/Picture.png | Bin 4418 -> 6938 bytes .../Picture.png | Bin 2827 -> 3244 bytes .../Picture.png | Bin 2754 -> 3162 bytes .../ВходящееСообщение/Picture.png | Bin 0 -> 198 bytes .../ВходящееСообщение/ВходящееСообщение.mdo | 8 + .../ВыравниваниеПоЛевомуКраю/Picture.png | Bin 0 -> 600 bytes .../ВыравниваниеПоЛевомуКраю.mdo | 8 + .../ВыравниваниеПоПравомуКраю/Picture.png | Bin 0 -> 676 bytes .../ВыравниваниеПоПравомуКраю.mdo | 8 + .../ВыравниваниеПоЦентру/Picture.png | Bin 0 -> 656 bytes .../ВыравниваниеПоЦентру.mdo | 8 + .../ВыравниваниеПоШирине/Picture.png | Bin 0 -> 637 bytes .../ВыравниваниеПоШирине.mdo | 8 + .../CommonPictures/ГраницаВезде/Picture.png | Bin 0 -> 548 bytes .../ГраницаВезде/ГраницаВезде.mdo | 8 + .../CommonPictures/ГраницаВнутри/Picture.png | Bin 0 -> 570 bytes .../ГраницаВнутри/ГраницаВнутри.mdo | 8 + .../CommonPictures/ГраницаВокруг/Picture.png | Bin 0 -> 556 bytes .../ГраницаВокруг/ГраницаВокруг.mdo | 8 + .../CommonPictures/ГраницаСверху/Picture.png | Bin 0 -> 530 bytes .../ГраницаСверху/ГраницаСверху.mdo | 8 + .../CommonPictures/ГраницаСлева/Picture.png | Bin 0 -> 537 bytes .../ГраницаСлева/ГраницаСлева.mdo | 8 + .../CommonPictures/ГраницаСнизу/Picture.png | Bin 0 -> 535 bytes .../ГраницаСнизу/ГраницаСнизу.mdo | 8 + .../CommonPictures/ГраницаСправа/Picture.png | Bin 0 -> 536 bytes .../ГраницаСправа/ГраницаСправа.mdo | 8 + .../CommonPictures/ИзменитьШрифт/Picture.png | Bin 0 -> 713 bytes .../ИзменитьШрифт/ИзменитьШрифт.mdo | 8 + .../ИсходящееСообщение/Picture.png | Bin 0 -> 207 bytes .../ИсходящееСообщение/ИсходящееСообщение.mdo | 8 + .../КурсивноеНачертание/Picture.png | Bin 0 -> 583 bytes .../КурсивноеНачертание.mdo | 8 + .../CommonPictures/НаписатьSMS/Picture.png | Bin 0 -> 430 bytes .../НаписатьSMS/НаписатьSMS.mdo | 8 + SSL/src/CommonPictures/НетГраницы/Picture.png | Bin 0 -> 517 bytes .../CommonPictures/НетГраницы/НетГраницы.mdo | 8 + .../ОбъединитьЯчейки/Picture.png | Bin 0 -> 757 bytes .../ОбъединитьЯчейки/ОбъединитьЯчейки.mdo | 8 + .../ПиктограммыЭлементов/Picture.png | Bin 2679 -> 1661 bytes .../CommonPictures/Подчеркивание/Picture.png | Bin 0 -> 589 bytes .../Подчеркивание/Подчеркивание.mdo | 8 + .../ПолужирноеНачертание/Picture.png | Bin 0 -> 599 bytes .../ПолужирноеНачертание.mdo | 8 + .../ТолстаяГраницаВокруг/Picture.png | Bin 0 -> 629 bytes .../ТолстаяГраницаВокруг.mdo | 8 + .../ТолстаяГраницаСверху/Picture.png | Bin 0 -> 553 bytes .../ТолстаяГраницаСверху.mdo | 8 + .../ТолстаяГраницаСнизу/Picture.png | Bin 0 -> 535 bytes .../ТолстаяГраницаСнизу.mdo | 8 + .../CommonPictures/УвеличитьШрифт/Picture.png | Bin 0 -> 826 bytes .../УвеличитьШрифт/УвеличитьШрифт.mdo | 8 + .../CommonPictures/УменьшитьШрифт/Picture.png | Bin 0 -> 616 bytes .../УменьшитьШрифт/УменьшитьШрифт.mdo | 8 + SSL/src/CommonPictures/Успешно/Picture.png | Bin 0 -> 315 bytes SSL/src/CommonPictures/Успешно/Успешно.mdo | 8 + SSL/src/CommonPictures/ЦветТекста/Picture.png | Bin 0 -> 743 bytes .../CommonPictures/ЦветТекста/ЦветТекста.mdo | 8 + SSL/src/CommonPictures/ЦветФона/Picture.png | Bin 0 -> 888 bytes SSL/src/CommonPictures/ЦветФона/ЦветФона.mdo | 8 + .../ru.html | 2 +- .../КомпонентаTWAIN/Template.bin | Bin 71826 -> 76708 bytes .../КомпонентаСклоненияФИО/Template.bin | Bin 0 -> 2196779 bytes .../КомпонентаСклоненияФИО.mdo | 9 + .../Template.dcs | 256 +- .../СтруктураПодчиненности/Template.mxlx | 2 +- SSL/src/Configuration/Configuration.mdo | 134 +- .../ManagedApplicationModule.bsl | 4 +- .../OrdinaryApplicationModule.bsl | 4 +- .../Configuration/ParentConfigurations.bin | 2 +- .../АдресВебСервисаОбменаДанными.mdo | 20 - ...ПубликацииИнформационнойБазыВИнтернете.mdo | 23 + .../АдресУправленияКонференцией.mdo | 20 + .../ДатаПоследнегоСтартаКлиентскогоСеанса.mdo | 26 + .../ЗагрузитьСообщениеОбменаДанными.mdo} | 8 +- ...вателяКонференцииИнформационногоЦентра.mdo | 20 + .../ValueManagerModule.bsl | 4 +- .../ValueManagerModule.bsl | 8 + .../ValueManagerModule.bsl | 4 +- ...вателяКонференцииИнформационногоЦентра.mdo | 21 + ...куСообщенияОбменаДаннымиПередЗапуском.mdo} | 4 +- ...ксУзлаРаспределеннойИнформационнойБазы.mdo | 2 +- .../РазделыОписанияИзмененийСистемы.mdo | 1 - .../СведенияОбОбновленииИБ.mdo | 23 + ...ватьКомандуДополнительныеПечатныеФормы.mdo | 20 + .../Forms/Форма/Module.bsl | 29 +- .../Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 31 +- .../Help/ru.html | 2 +- .../Form.form | 29 +- .../Help/ru.html | 2 +- .../Module.bsl | 19 +- .../АктивныеПользователи/Help/ru.html | 2 +- .../Module.bsl | 6 +- .../Forms/Форма/Form.form | 1 - .../Forms/Форма/Module.bsl | 12 +- .../Help/ru.html | 4 +- .../БлокировкаРаботыПользователей.mdo | 2 +- .../Forms/ВводАдреса/Form.form | 421 +- .../Forms/ВводАдреса/Help/ru.html | 25 +- .../Forms/ВводАдреса/Module.bsl | 699 +- .../Forms/ВводТелефона/Form.form | 43 +- .../Forms/ВводТелефона/Module.bsl | 75 +- .../Forms/НаселенныйПунктАдреса/Module.bsl | 39 +- .../Forms/Форма/Form.form | 107 - .../Forms/Форма/Module.bsl | 42 - .../ВводКонтактнойИнформации.mdo | 30 +- .../Forms/Форма/Form.form | 284 +- .../Forms/Форма/Module.bsl | 299 +- .../Forms/Настройка/Form.form | 2 +- .../Forms/Настройка/Help/ru.html | 8 +- .../Forms/Настройка/Module.bsl | 31 +- .../Forms/Форма/Form.form | 14 +- .../Forms/Форма/Module.bsl | 115 +- .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../ManagerModule.bsl | 2 +- .../ГрупповоеИзменениеОбъектов.mdo | 2 +- .../Forms/ЖурналРегистрации/Form.form | 2 +- .../Forms/ЖурналРегистрации/Module.bsl | 14 +- .../Forms/ОтборЖурналаРегистрации/Module.bsl | 4 +- .../Forms/РедакторСоставаСвойства/Module.bsl | 4 +- .../Forms/ФормаСобытия/Help/ru.html | 2 +- .../ЖурналРегистрации/Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 9 +- .../ЗагрузкаКурсовВалют/Help/ru.html | 2 +- .../ЗагрузкаКурсовВалют/ObjectModule.bsl | 5 +- .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ЗагрузкаПравилРегистрацииОбъектов.mdo | 10 + .../Forms/Форма/Module.bsl | 4 +- .../ВыборВидаОбъектаСоставаУзла/Form.form | 2 + .../ВыборВидаОбъектаСоставаУзла/Module.bsl | 4 +- .../РедактированиеПериодаИОтбора/Form.form | 14 +- .../РедактированиеПериодаИОтбора/Module.bsl | 31 +- .../РедактированиеСоставаНастроек/Form.form | 6 + .../РедактированиеСоставаНастроек/Module.bsl | 3 +- .../Forms/СоставВыгрузки/Module.bsl | 6 +- .../Forms/Форма/Form.form | 4 + .../Forms/Форма/Module.bsl | 48 +- .../ObjectModule.bsl | 258 +- .../ИнтерактивноеИзменениеВыгрузки.mdo | 1 - .../Forms/ВзаимодействияПоОбращению/Form.form | 1112 + .../ВзаимодействияПоОбращению/Module.bsl | 284 + .../Forms/ДобавлениеКомментария/Module.bsl | 8 +- .../Forms/ДобавлениеПожелания/Module.bsl | 10 +- .../ИнформационныеСсылкиВКонтексте/Form.form | 7 - .../ИнформационныеСсылкиВКонтексте/Module.bsl | 25 +- .../Forms/ИнформационныйЦентр/Form.form | 102 +- .../Forms/ИнформационныйЦентр/Module.bsl | 87 +- .../ConditionalAppearance.dcssca | 23 + .../Forms/ОбращенияПользователя/Form.form | 883 + .../Forms/ОбращенияПользователя/Module.bsl | 223 + .../Forms/ОбсужденияНаФоруме/Form.form | 376 + .../Forms/ОбсужденияНаФоруме/Module.bsl | 188 + .../Forms/ОтображениеСообщений}/Form.form | 32 +- .../Forms/ОтображениеСообщений}/Module.bsl | 109 +- .../ОтправкаСообщенияВПоддержку}/Form.form | 76 +- .../ОтправкаСообщенияВПоддержку}/Module.bsl | 84 +- .../Forms/Пожелание/Form.form | 175 +- .../Forms/Пожелание/Module.bsl | 81 +- .../Forms/ПожеланияПользователей/Form.form | 528 +- .../Forms/ПожеланияПользователей/Module.bsl | 149 +- .../ИнформационныйЦентр.mdo | 47 +- .../Forms/Форма/Form.form | 21 + .../Forms/Форма/Module.bsl | 22 +- .../ИнформацияПриЗапуске/Help/ru.html | 4 +- .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ObjectModule.bsl | 2168 +- .../КонвертацияОбъектовИнформационныхБаз.mdo | 10 + .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ObjectModule.bsl | 79 +- ...бъектовРаспределенныхИнформационныхБаз.mdo | 10 + .../Form.form | 24 +- .../Module.bsl | 48 +- .../УсловияРаспространенияОбновлений/ru.html | 2 +- .../ЛегальностьПолученияОбновлений.mdo | 1 - .../Form.form | 288 +- .../Module.bsl | 308 +- .../Help/ru.html | 2 +- .../Forms/НастройкаБезИнтервалов}/Form.form | 5 +- .../Forms/НастройкаБезИнтервалов}/Module.bsl | 4 - .../Forms/НастройкаСИнтервалами/Form.form | 1663 ++ .../Forms/НастройкаСИнтервалами/Module.bsl | 238 + .../ManagerModule.bsl | 45 + .../ObjectModule.bsl} | 0 ...стройкаРезервногоКопированияПриложения.mdo | 31 + .../Forms/ВыборНастроек/Help/ru.html | 2 +- .../Forms/ВыборПользователей/Form.form | 70 +- .../Forms/ВыборПользователей/Help/ru.html | 2 +- .../Forms/ВыборПользователей/Module.bsl | 8 +- .../Help/ru.html | 2 +- .../Forms/НастройкиПользователей/Form.form | 12 +- .../Forms/НастройкиПользователей/Help/ru.html | 2 +- .../Forms/НастройкиПользователей/Module.bsl | 4 +- .../ОчисткаНастроекПользователей/Help/ru.html | 2 +- .../НерекомендуемаяВерсияПлатформы/Form.form | 25 +- .../НерекомендуемаяВерсияПлатформы/Module.bsl | 54 +- .../ru.html | 2 +- .../ПорядокОбновленияДляФайловойБазы/ru.html | 2 +- .../НерекомендуемаяВерсияПлатформы.mdo | 1 - .../Forms/ИндикацияХодаОбновленияИБ/Form.form | 338 + .../ИндикацияХодаОбновленияИБ/Module.bsl | 166 + .../Form.form | 1729 ++ .../Module.bsl | 380 + .../Forms/ОтложенныеОбработчики/Form.form | 837 + .../Forms/ОтложенныеОбработчики/Module.bsl | 137 + .../СообщениеОНеудачномОбновлении/Form.form | 9 +- .../СообщениеОНеудачномОбновлении/Module.bsl | 15 +- .../ОбновлениеИнформационнойБазы.mdo | 49 + .../Forms/НастройкаРасписания/Form.form | 2 +- .../Forms/НастройкаРасписания/Module.bsl | 12 +- .../Forms/НастройкаРезервнойКопии/Form.form | 2 +- .../Forms/НастройкаРезервнойКопии/Module.bsl | 7 +- .../Forms/ПредупреждениеWMI/Form.form | 2 +- .../Forms/Форма/Form.form | 753 +- .../Forms/Форма/Module.bsl | 430 +- .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../Module.bsl | 25 +- .../Forms/ИсторияВыполнения/Form.form | 2 +- .../Forms/Форма/Form.form | 4 + .../Forms/Форма/Module.bsl | 136 +- .../Forms/ФормаОтбора/Form.form | 46 +- .../Forms/ФормаОтбора/Module.bsl | 38 +- .../ОценкаПроизводительности/Help/ru.html | 2 +- .../CommandModule.bsl | 3 +- .../НастройкиРаботыСФайлами/CommandModule.bsl | 3 +- .../Commands/ОбщиеНастройки/CommandModule.bsl | 3 +- .../Commands/Органайзер/CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../ПоддержкаИОбслуживание/CommandModule.bsl | 3 +- .../СинхронизацияДанных/CommandModule.bsl | 3 +- .../CommandModule.bsl | 6 +- .../НастройкиПользователейИПрав/Form.form | 208 +- .../НастройкиПользователейИПрав/Help/ru.html | 2 +- .../НастройкиПользователейИПрав/Module.bsl | 89 +- .../НастройкиРаботыСФайлами/Help/ru.html | 2 +- .../Forms/НастройкиРаботыСФайлами/Module.bsl | 51 +- .../Forms/ОбщиеНастройки/Form.form | 182 +- .../Forms/ОбщиеНастройки/Help/ru.html | 2 +- .../Forms/ОбщиеНастройки/Module.bsl | 50 +- .../Forms/Органайзер/Form.form | 4 +- .../Forms/Органайзер/Help/ru.html | 2 +- .../Forms/Органайзер/Module.bsl | 42 +- .../Help/ru.html | 2 +- .../ПечатныеФормыОтчетыИОбработки/Module.bsl | 26 +- .../Forms/ПоддержкаИОбслуживание/Form.form | 628 +- .../Forms/ПоддержкаИОбслуживание/Help/ru.html | 2 +- .../Forms/ПоддержкаИОбслуживание/Module.bsl | 153 +- .../Forms/СинхронизацияДанных/Form.form | 4 +- .../Forms/СинхронизацияДанных/Help/ru.html | 4 +- .../Forms/СинхронизацияДанных/Module.bsl | 19 +- .../Help/ru.html | 2 +- .../Module.bsl | 13 +- .../Form.form | 136 +- .../Help/ru.html | 2 +- .../Module.bsl | 21 +- .../Help/ru.html | 2 +- .../Module.bsl | 34 +- .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ПанельАдминистрированияБСП/Help/ru.html | 2 +- .../ПанельАдминистрированияБСП.mdo | 10 + .../ПереносФайловВТома/Forms/Форма/Module.bsl | 15 +- .../ПереносФайловВТома/Help/ru.html | 2 +- .../ПолнотекстовыйПоиск/CommandModule.bsl | 3 +- .../Forms/УпрощеннаяФорма/Module.bsl | 4 + .../Forms/Форма/Module.bsl | 29 +- .../ПолнотекстовыйПоискВДанных/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 7 +- .../Forms/Форма/Module.bsl | 401 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 8 +- .../Forms/Форма/Module.bsl | 365 +- .../ОтключениеСинхронизацииДанных/Module.bsl | 18 +- .../ПолучениеДанныхКорреспондента/Module.bsl | 18 +- .../Forms/Форма/Module.bsl | 97 +- .../ManagerModule.bsl | 41 +- .../Module.bsl | 8 +- .../ConditionalAppearance.dcssca | 28 + .../Forms/НастройкаНаСторонеСервиса/Form.form | 736 +- .../НастройкаНаСторонеСервиса/Module.bsl | 148 +- .../ObjectModule.bsl | 114 +- .../ru.html | 2 +- .../Template.htmldoc | 4 - .../ru.html | 17 - .../ru.html | 2 +- ...мощникСозданияАвтономногоРабочегоМеста.mdo | 25 - .../Forms/Форма/Form.form | 6 +- .../Forms/Форма/Module.bsl | 168 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 70 +- .../КакОпределитьПараметрыПодключения/ru.html | 2 +- .../ru.html | 2 +- .../ru.html | 2 +- .../ru.html | 2 +- .../ru.html | 2 +- .../Forms/ВыборКонстанты/Form.form | 754 + .../Items/Декорация1/Picture.png | Bin 0 -> 355 bytes .../Items/СписокКонстант/RowsPicture.png | Bin 0 -> 5137 bytes .../HeaderPicture.png | Bin 0 -> 355 bytes .../ValuesPicture.png | Bin 0 -> 778 bytes .../Forms/ВыборКонстанты/Module.bsl | 94 + .../СписокДанных/ExtInfo/ListSettings.dcss | 15 + .../Forms/ВыборОбъектовОтбором/Form.form | 1033 + .../Forms/ВыборОбъектовОтбором/Module.bsl | 206 + .../ConditionalAppearance.dcssca | 26 + .../Forms/ВыборУзлаПланаОбмена/Form.form | 743 + .../Items/ДеревоУзловОбмена/RowsPicture.png | Bin 0 -> 1455 bytes .../Forms/ВыборУзлаПланаОбмена/Module.bsl | 208 + .../Forms/Настройки/Form.form | 802 + .../Forms/Настройки/Module.bsl | 162 + .../НомераСообщенийУзлаПланаОбмена}/Form.form | 390 +- .../НомераСообщенийУзлаПланаОбмена/Module.bsl | 67 + .../СообщениеОбОбычномИнтерфейсе/Form.oform | Bin 0 -> 8033 bytes .../ConditionalAppearance.dcssca | 88 + .../Forms/УзлыРегистрацииОбъекта/Form.form | 1347 ++ .../Items/ДеревоУзловОбмена/RowsPicture.png | Bin 0 -> 1455 bytes .../ValuesPicture.png | Bin 0 -> 778 bytes .../Picture.png | Bin 0 -> 517 bytes .../СкрытаяКартинкаИнформация32/Picture.png | Bin 0 -> 784 bytes .../Forms/УзлыРегистрацииОбъекта/Module.bsl | 299 + .../СписокКонстант/ExtInfo/ListSettings.dcss | 15 + .../ExtInfo/ListSettings.dcss | 15 + .../СписокСсылок/ExtInfo/ListSettings.dcss | 39 + .../Forms/Форма/ConditionalAppearance.dcssca | 99 + .../Forms/Форма/Form.form | 5155 +++++ .../Items/ДеревоМетаданных/RowsPicture.png | Bin 0 -> 5137 bytes .../ValuesPicture.png | Bin 0 -> 778 bytes .../Picture.png | Bin 0 -> 738 bytes .../Picture.png | Bin 0 -> 738 bytes .../ПоказатьРезультатВыгрузки/Picture.png | Bin 0 -> 1563 bytes .../СкрытаяКартинкаИнформация32/Picture.png | Bin 0 -> 784 bytes .../Items/СписокКонстант/RowsPicture.png | Bin 0 -> 5137 bytes .../ValuesPicture.png | Bin 0 -> 778 bytes .../Picture.png | Bin 0 -> 1563 bytes .../Picture.png | Bin 0 -> 1563 bytes .../Picture.png | Bin 0 -> 1563 bytes .../Forms/Форма/Module.bsl | 1934 ++ .../ObjectModule.bsl | 1844 ++ .../РегистрацияИзмененийДляОбменаДанными.mdo | 178 + .../ВыполнениеРегламентныхЗаданий/Form.form | 6 +- .../ВыполнениеРегламентныхЗаданий/Module.bsl | 19 +- .../Help/ru.html | 2 +- .../Module.bsl | 2 +- .../Forms/РегламентноеЗадание/Help/ru.html | 2 +- .../Forms/РегламентноеЗадание/Module.bsl | 3 +- .../РегламентныеИФоновыеЗадания/Form.form | 4 +- .../РегламентныеИФоновыеЗадания/Module.bsl | 55 +- .../Forms/ФоновоеЗадание/Help/ru.html | 2 +- .../РегламентныеИФоновыеЗадания/Help/ru.html | 6 +- .../РегламентныеИФоновыеЗадания.mdo | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 52 +- .../Form.form | 287 +- .../Help/ru.html | 2 +- .../Module.bsl | 135 +- .../Template.txt | 80 +- .../Forms/ОсновнаяФорма/Module.bsl | 4 + .../Help/ru.html | 2 +- .../СдвигГраницыИтоговПриЗавершенииРаботы.mdo | 1 - .../Forms/Форма/Module.bsl | 5 + .../Form.form | 2 +- .../Module.bsl | 5 +- .../Forms/НастройкаПолейТаблицы/Form.form | 2 +- .../Forms/НастройкаПолейТаблицы/Module.bsl | 4 +- .../Form.form | 2 +- .../Module.bsl | 4 +- .../Forms/НастройкаСортировки/Form.form | 2 +- .../Forms/НастройкаСортировки/Module.bsl | 4 +- .../Form.form | 3029 ++- .../Module.bsl | 563 +- .../Forms/Форма/Form.form | 2868 ++- .../Forms/Форма/Module.bsl | 959 +- .../ФормаВыбораСвязиСопоставления/Form.form | 2 +- .../ФормаВыбораСвязиСопоставления/Module.bsl | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 111 + .../ObjectModule.bsl | 16 +- .../СписокРеспондента/Forms/Форма/Module.bsl | 4 + .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ObjectModule.bsl | 6 +- .../ТранспортСообщенийОбменаEMAIL.mdo | 10 + .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ObjectModule.bsl | 13 +- .../ТранспортСообщенийОбменаFILE.mdo | 10 + .../Forms/Форма/Form.form | 43 + .../Forms/Форма/Module.bsl | 11 + .../ObjectModule.bsl | 7 +- .../ТранспортСообщенийОбменаFTP.mdo | 10 + .../Forms/ОсновнаяФорма/Module.bsl | 6 +- .../УдалениеПомеченныхОбъектов/Help/ru.html | 2 +- .../ManagerModule.bsl | 5 +- .../Forms/УправляемаяФорма/Form.form | 885 +- .../ДекорацияИнформацияВыгрузка/Picture.png | Bin 0 -> 831 bytes .../ДекорацияИнформацияЗагрузка/Picture.png | Bin 0 -> 831 bytes .../Forms/УправляемаяФорма/Module.bsl | 220 +- .../Forms/Форма/Form.oform | Bin 213905 -> 214319 bytes .../Form.oform | Bin 42027 -> 42027 bytes .../Form.oform | Bin 5985 -> 5985 bytes .../УниверсальныйОбменДаннымиXML/Help/ru.html | 2 +- .../ObjectModule.bsl | 86 +- .../Forms/ОсновнаяФорма/Form.form | 14 +- .../Forms/ОсновнаяФорма/Module.bsl | 187 +- .../Forms/ФормаВыбораПериода/Form.form | 26 +- .../Forms/ФормаВыбораПериода/Help/ru.html | 2 +- .../Forms/ФормаВыбораПериода/Module.bsl | 24 +- .../ФормаПараметровПерестроения/Form.form | 2 +- .../ФормаПараметровПерестроения/Help/ru.html | 2 +- .../ФормаПараметровПерестроения/Module.bsl | 7 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 6 +- .../Help/ru.html | 2 +- .../CommandModule.bsl | 3 +- .../CommandModule.bsl | 3 +- .../ЗапланироватьВстречу/CommandModule.bsl | 3 +- .../Commands/НаписатьSMS/CommandModule.bsl | 8 + .../ПараметрыЭлектронногоПисьма/Form.form | 2 +- .../ПараметрыЭлектронногоПисьма/Module.bsl | 25 +- .../Forms/ФормаСписка/Form.form | 863 +- .../Forms/ФормаСписка/Module.bsl | 240 +- .../ФормаСпискаПараметрическая/Form.form | 306 +- .../ФормаСпискаПараметрическая/Module.bsl | 168 +- .../Template.dcs | 78 +- .../Template.dcs | 65 +- .../Взаимодействия/Взаимодействия.mdo | 35 +- .../Анкета/Forms/ФормаДокумента/Help/ru.html | 2 +- .../Анкета/Forms/ФормаДокумента/Module.bsl | 40 +- .../Встреча/Forms/ФормаДокумента/Form.form | 212 +- .../Встреча/Forms/ФормаДокумента/Module.bsl | 64 +- SSL/src/Documents/Встреча/Встреча.mdo | 2 + .../Forms/ФормаДокумента/Form.form | 188 +- .../Forms/ФормаДокумента/Module.bsl | 21 +- .../ЗапланированноеВзаимодействие.mdo | 2 + .../Forms/ФормаДокумента/Module.bsl | 2 +- .../ConditionalAppearance.dcssca | 48 + .../Forms/ФормаДокумента/Form.form | 2215 ++ .../Forms/ФормаДокумента/Module.bsl | 465 + .../Documents/СообщениеSMS/ManagerModule.bsl | 33 + .../Documents/СообщениеSMS/ObjectModule.bsl | 51 + .../Documents/СообщениеSMS/СообщениеSMS.mdo | 771 + .../Forms/ФормаДокумента/Form.form | 168 +- .../Forms/ФормаДокумента/Module.bsl | 21 +- .../ТелефонныйЗвонок/ТелефонныйЗвонок.mdo | 2 + .../Forms/ФормаВыбора/Form.form | 8 + .../{ФормаСписка => ФормаВыбора}/Module.bsl | 1 + .../Forms/ФормаДокумента/Form.form | 4 + .../Forms/ФормаДокумента/Module.bsl | 65 +- .../Forms/ФормаСписка/Form.form | 4 - .../ЭлектронноеПисьмоВходящее.mdo | 2 +- .../Forms/ФормаДокумента/Form.form | 224 +- .../Forms/ФормаДокумента/Module.bsl | 119 +- .../Form.form | 568 + .../Module.bsl | 59 + .../ЭлектронноеПисьмоИсходящее.mdo | 11 + .../СостоянияДокументаСообщениеSMS.mdo | 73 + .../СостоянияСообщенияSMS.mdo | 101 + .../УдалитьВидыПоставляемыхДанных.mdo | 101 - ...исьюПрисоединенногоФайлаВзаимодействия.mdo | 1 + ...ниемПрисоединенногоФайлаВзаимодействия.mdo | 1 + ...писиПрисоединенногоФайлаВзаимодействия.mdo | 1 + .../ЗаписатьВерсиюОбъектаПриОбменеДанными.mdo | 20 + .../ЗаполнитьКонтактнуюИнформацию.mdo | 2 +- ...льНеразделенныхНаборовЗаписейПриЗаписи.mdo | 3 +- ...КонтрольНеразделенныхОбъектовПриЗаписи.mdo | 10 +- ...енияПрисоединенныхФайловВзаимодействия.mdo | 1 + .../Forms/ФормаУзла/Form.form | 43 +- .../Forms/ФормаУзла/Module.bsl | 9 +- .../ОбменСообщениями/ManagerModule.bsl | 21 - .../ИспользоватьПризнакРассмотрено.mdo | 1 + .../ИспользоватьПрочиеВзаимодействия.mdo | 3 + .../ПоддержкаРезервногоКопирования.mdo | 1 - ...СтандартныеПодсистемыВАвтономномРежиме.mdo | 1 + .../СтандартныеПодсистемыВМоделиСервиса.mdo | 4 +- .../АдресныеСокращения/АдресныеСокращения.mdo | 1 - .../АдресныйКлассификатор/CommandModule.bsl | 3 +- .../Form.form | 50 +- .../Help/ru.html | 2 +- .../Module.bsl | 43 +- .../Forms/АдресныйКлассификатор/Help/ru.html | 2 +- .../Forms/АдресныйКлассификатор/Module.bsl | 8 +- .../ЗагрузкаАдресногоКлассификатора/Form.form | 8 + .../Help/ru.html | 2 +- .../Module.bsl | 26 +- .../Help/ru.html | 2 +- .../ОчисткаАдресногоКлассификатора/Module.bsl | 4 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/ФормаВыбора/Form.form | 1 + .../Forms/ФормаВыбора/Module.bsl | 36 +- .../АдресныйКлассификатор/Help/ru.html | 2 +- .../АдресныйКлассификатор.mdo | 3 - .../Forms/ОтчетПоВерсиямОбъекта/Module.bsl | 95 +- .../Template.mxlx | 299 +- .../ВерсииОбъектов/ВерсииОбъектов.mdo | 5 +- .../Список/ExtInfo/ListSettings.dcss | 5 - .../Forms/МоиБизнесПроцессы/Module.bsl | 11 +- .../ДанныеБизнесПроцессов/Help/ru.html | 2 +- .../Template.txt | 365 + .../Forms/ДатыЗапретаИзменения/Form.form | 4 + .../Forms/ДатыЗапретаИзменения/Module.bsl | 703 +- .../Forms/РедактированиеДатыЗапрета/Form.form | 21 +- .../РедактированиеДатыЗапрета/Module.bsl | 85 +- .../Список/ExtInfo/ListSettings.dcss | 12 - .../Forms/ФормаСписка/Module.bsl | 28 + .../ДатыЗапретаИзменения/Help/ru.html | 2 +- .../ДокументыФизическихЛиц/Help/ru.html | 2 +- .../ДополнительныеСведения/Help/ru.html | 2 +- ...ентификаторыПолученныхЭлектронныхПисем.mdo | 2 + .../ManagerModule.bsl | 8 + .../Forms/АдресацияПоОбъекту/Help/ru.html | 2 +- .../АдресацияПоОбъектуИРоли/Help/ru.html | 2 +- .../Исполнители/ExtInfo/ListSettings.dcss | 18 - .../Forms/ИсполнителиРоли/Help/ru.html | 2 +- .../Forms/ИсполнителиРоли/Module.bsl | 16 +- .../ИсполнителиЗадач/Help/ru.html | 2 +- .../КалендарныеГрафики/Help/ru.html | 2 +- .../КалендарныеГрафики/КалендарныеГрафики.mdo | 2 +- .../RecordSetModule.bsl | 40 +- .../CommandModule.bsl | 6 + .../Список/ExtInfo/ListSettings.dcss | 15 + .../Forms/ФормаСписка}/Form.form | 179 +- .../Forms/ФормаСписка/Module.bsl | 15 + .../ManagerModule.bsl | 18 +- .../НазначениеДополнительныхОбработок.mdo | 22 + .../НаличиеПрисоединенныхФайлов.mdo | 1 + .../Forms/Напоминание/Module.bsl | 10 +- .../Forms/ФормаОповещения/Form.form | 4 + .../Forms/ФормаОповещения/Module.bsl | 24 +- .../Forms/ВерсионированиеОбъектов/Form.form | 105 +- .../Forms/ВерсионированиеОбъектов/Module.bsl | 42 +- .../Help/ru.html | 2 +- .../НастройкаПодключенияКСервису/Form.form | 375 +- .../НастройкаПодключенияКСервису/Module.bsl | 129 +- .../Form.form | 419 + .../Module.bsl | 146 + .../Forms/ФормаЗаписи/Form.form | 104 +- .../НастройкиТранспортаОбмена/Help/ru.html | 2 +- .../ManagerModule.bsl | 25 +- .../НастройкиТранспортаОбмена.mdo | 9 + .../ManagerModule.bsl | 19 +- .../ManagerModule.bsl | 69 +- .../ОбщиеНастройкиУзловИнформационныхБаз.mdo | 19 + .../Список/ExtInfo/ListSettings.dcss | 5 - .../Module.bsl | 3 +- .../ВыбораРежимаОткрытияМакета/Help/ru.html | 2 +- .../ВыбораРежимаОткрытияМакета/Module.bsl | 14 +- .../Forms/ДиалогПовтораПечати/Form.form | 4 + .../Forms/ДиалогПовтораПечати/Module.bsl | 19 +- .../Forms/МакетыПечатныхФорм/Form.form | 8 + .../Forms/МакетыПечатныхФорм/Help/ru.html | 4 + .../Forms/МакетыПечатныхФорм/Module.bsl | 118 +- .../НастройкаКаталогаФайловПечати/Module.bsl | 2 +- .../Forms/РедактированиеМакета/Help/ru.html | 2 +- .../Forms/РедактированиеМакета/Module.bsl | 4 +- .../ПользовательскиеМакетыПечати.mdo | 5 + .../ПраваРолей/Forms/ФормаСписка/Module.bsl | 5 - .../ПравилаКонвертацииОбъектов/Help/ru.html | 2 +- .../ПравилаКонвертацииОбъектов/Module.bsl | 9 +- .../ПравилаРегистрацииОбъектов/Help/ru.html | 2 +- .../ПравилаРегистрацииОбъектов/Module.bsl | 11 +- .../ПравилаДляОбменаДанными/ManagerModule.bsl | 1 + .../ПредметыПапкиВзаимодействий.mdo | 2 + .../ПрисоединенныеФайлы.mdo | 1 + ...смотренныеДанныеИнформационногоЦентра.mdo} | 83 +- .../Коллизии/ExtInfo/ListSettings.dcss | 104 +- .../ExtInfo/ListSettings.dcss | 42 - .../ExtInfo/ListSettings.dcss | 48 +- .../ExtInfo/ListSettings.dcss | 42 - .../Forms/Форма/Form.form | 2781 ++- .../Forms/Форма/Module.bsl | 767 +- .../РезультатыОбменаДанными/Help/ru.html | 10 + .../РезультатыОбменаДанными/ManagerModule.bsl | 14 +- .../РезультатыОбменаДанными.mdo | 9 +- .../ManagerModule.bsl | 5 +- .../ТаблицыГруппДоступа/ManagerModule.bsl | 6 + .../УдалитьСвязиПоставляемыхДанных.mdo | 148 - .../УдалитьСтраныМира/ManagerModule.bsl | 0 .../УдалитьСтраныМира/УдалитьСтраныМира.mdo | 93 + .../АнализЖурналаРегистрации/Help/ru.html | 2 +- .../ManagerModule.bsl | 2 +- .../Template.mxlx | 6 +- SSL/src/Reports/АнализОпроса/АнализОпроса.mdo | 1 + .../АналитическийОтчетПоАнкетированию.mdo | 1 + SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html | 2 +- .../Задачи/Forms/ФормаОтчета/Form.form | 4 + .../Задачи/Forms/ФормаОтчета/Module.bsl | 17 + SSL/src/Reports/Задачи/Help/ru.html | 2 +- .../ЗадачиИстекающиеНаДату/Help/ru.html | 2 +- .../ПраваДоступа/Forms/ФормаОтчета/Form.form | 1 + .../ПраваДоступа/Forms/ФормаОтчета/Module.bsl | 20 +- .../Templates/Макет/Template.mxlx | 4 +- SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo | 1 + .../Reports/ПросроченныеЗадачи/Help/ru.html | 2 +- .../Roles/АдминистраторСистемы/Rights.rights | 425 +- SSL/src/Roles/Администрирование/Rights.rights | 21 +- SSL/src/Roles/БазовыеПрава/Rights.rights | 51 +- .../Rights.rights | 62 +- .../Rights.rights | 14 + .../Rights.rights | 25 - .../Rights.rights | 1814 +- .../Rights.rights | 7 + .../Rights.rights | 7 + .../ДобавлениеИзменениеЗаданий/Rights.rights | 1481 +- .../Rights.rights | 66 - .../Rights.rights | 13 +- .../Rights.rights | 62 +- .../Rights.rights | 17634 ++++++++++++++++ .../ДобавлениеИзменениеСтранМира.mdo | 8 + SSL/src/Roles/ЗапускAutomation/Rights.rights | 62 +- SSL/src/Roles/ЗапускВебКлиента/Rights.rights | 62 +- .../Roles/ЗапускТолстогоКлиента/Rights.rights | 62 +- .../Roles/ЗапускТонкогоКлиента/Rights.rights | 62 +- .../ИзменениеВыполнениеЗадач/Rights.rights | 1479 +- .../Rights.rights | 2 +- .../Rights.rights | 11 - .../Rights.rights | 1611 +- .../Rights.rights | 70 +- .../Rights.rights | 128 +- .../Rights.rights | 53 +- .../Rights.rights | 2 +- .../Rights.rights | 2 +- SSL/src/Roles/ПолныеПрава/Rights.rights | 644 +- .../ПросмотрЖурналаРегистрации/Rights.rights | 2 +- .../Roles/РаботаСПапкамиФайлов/Rights.rights | 1481 +- .../Rights.rights | 275 - .../Rights.rights | 275 - SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights | 29 +- .../Rights.rights | 2 +- SSL/src/Roles/ЧтениеЗаданий/Rights.rights | 1479 +- SSL/src/Roles/ЧтениеЗадач/Rights.rights | 1479 +- .../ОбновлениеСтатусовДоставкиSMS.mdo | 14 + .../ОтложенноеОбновлениеИБ/Schedule.schedule | 22 + .../ОтложенноеОбновлениеИБ.mdo | 11 + .../ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo | 14 + .../ВыполняетсяОбновлениеИБ.mdo | 11 + .../ПаролиСинхронизацииДанных.mdo | 11 + .../ПриоритетныеДанныеОбмена.mdo | 12 + .../Forms/ВыборВариантаОтчета/Help/ru.html | 2 +- .../Forms/ВыборВариантаОтчета/Module.bsl | 10 +- .../СохранениеВариантаОтчета/Help/ru.html | 2 +- .../Forms/СохранениеВариантаОтчета/Module.bsl | 32 +- .../ХранилищеВариантовОтчетов.mdo | 2 +- ...зводственногоКалендаряВоскресеньеЦвет.mdo} | 4 +- ...роизводственногоКалендаряНеУказанЦвет.mdo} | 2 +- ...роизводственногоКалендаряПраздникЦвет.mdo} | 4 +- ...ственногоКалендаряПредпраздничныйЦвет.mdo} | 4 +- ...ПроизводственногоКалендаряРабочийЦвет.mdo} | 4 +- ...ПроизводственногоКалендаряСубботаЦвет.mdo} | 4 +- .../ВидимыйВариантОтчетаЦвет.mdo | 2 +- .../ГруппаВариантовОтчетовЦвет.mdo | 2 +- .../ДатаГрафикаИзмененнаяФон.mdo | 2 +- .../ДобавленныйРеквизитФон.mdo | 2 +- .../ЗаблокированныйРеквизитЦвет.mdo | 2 +- .../ЗаголовокУдаленногоРеквизитаФон.mdo | 2 +- .../ИзмененноеЗначениеРеквизитаФон.mdo | 2 +- .../ИзмененноеЗначениеРеквизитаЦвет.mdo | 2 +- ...ИнформацияСРедактированиемВДиалогеЦвет.mdo | 2 +- .../МоиВариантыОтчетовЦвет.mdo | 2 +- .../НедоступныеДанныеЦвет.mdo | 2 +- .../ОшибкаПолнотекстовыйПоискФон.mdo | 2 +- .../СкрытыйВариантОтчетаЦвет.mdo | 2 +- .../УдаленныйДополнительныйРеквизитШрифт.mdo | 2 +- .../УдаленныйРеквизитФон.mdo | 2 +- .../CommandInterface.cmi | 6 - .../АнализЖурналаРегистрации/Help/ru.html | 2 +- .../БазоваяФункциональность.mdo | 29 +- .../БизнесПроцессыИЗадачи/Help/ru.html | 2 +- .../Subsystems/Валюты/Help/ru.html | 2 +- .../ВерсионированиеОбъектов/Help/ru.html | 2 +- .../ВерсионированиеОбъектов.mdo | 2 +- .../Взаимодействия/Взаимодействия.mdo | 8 + .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ДополнительныеОтчетыИОбработки.mdo | 3 + .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ИнформационныйЦентр.mdo | 16 +- .../КалендарныеГрафики/Help/ru.html | 2 +- .../КалендарныеГрафики/КалендарныеГрафики.mdo | 12 +- .../КонтактнаяИнформация/Help/ru.html | 2 +- .../КонтактнаяИнформация.mdo | 10 +- .../Help/ru.html | 2 +- .../НастройкаПорядкаЭлементов/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/ОбменДанными.mdo | 8 +- .../ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo | 8 +- .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../Subsystems/Печать/Help/ru.html | 2 +- .../Subsystems/Печать/Печать.mdo | 1 + .../ПолнотекстовыйПоиск/Help/ru.html | 2 +- .../ПолучениеФайловИзИнтернета/Help/ru.html | 2 +- .../Subsystems/Пользователи/Help/ru.html | 2 +- .../ПрефиксацияОбъектов/Help/ru.html | 2 +- ...ПроверкаЛегальностиПолученияОбновления.mdo | 1 + .../БазоваяФункциональностьВМоделиСервиса.mdo | 2 +- .../ВалютыВМоделиСервиса.mdo | 2 - ...ительныеОтчетыИОбработкиВМоделиСервиса.mdo | 7 + .../ОбменДаннымиВМоделиСервиса.mdo | 2 - .../ПоставляемыеДанные/ПоставляемыеДанные.mdo | 2 - .../РезервноеКопированиеОбластейДанных.mdo | 9 +- .../УдаленноеАдминистрирование.mdo | 3 + .../РаботаСПочтовымиСообщениями/Help/ru.html | 2 +- .../Subsystems/РаботаСФайлами/Help/ru.html | 2 +- .../РегламентныеЗадания/Help/ru.html | 2 +- .../Subsystems/Свойства/Help/ru.html | 2 +- .../СтруктураПодчиненности.mdo | 1 - .../УправлениеДоступом/Help/ru.html | 2 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../ФайловыеФункции/ФайловыеФункции.mdo | 1 - .../ФизическиеЛица/ФизическиеЛица.mdo | 1 + .../Forms/Дополнительно/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 11 - .../Forms/ЗадачиПоБизнесПроцессу/Module.bsl | 12 +- .../Список/ExtInfo/ListSettings.dcss | 12 - .../Forms/ЗадачиПоПредмету/Module.bsl | 15 +- .../Список/ExtInfo/ListSettings.dcss | 21 - .../Forms/МоиЗадачи/Help/ru.html | 2 +- .../Forms/МоиЗадачи/Module.bsl | 30 +- .../Список/ExtInfo/ListSettings.dcss | 21 - .../МоиЗадачиДляРабочегоСтола/Help/ru.html | 2 +- .../МоиЗадачиДляРабочегоСтола/Module.bsl | 29 +- .../Forms/ПеренаправитьЗадачи/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 22 - .../Forms/ФормаСписка/Module.bsl | 15 +- SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html | 2 +- .../Tasks/ЗадачаИсполнителя/ObjectModule.bsl | 25 +- SSL/src/WebServices/Exchange/Module.bsl | 30 +- .../WebServices/Exchange_2_0_1_6/Module.bsl | 30 +- .../WebServices/MessageExchange/Module.bsl | 9 +- .../MessageExchange_2_0_1_6/Module.bsl | 12 +- .../RemoteAdministrationOfExchange/Module.bsl | 6 +- .../Module.bsl | 12 +- .../ApplicationExtensionsControl_1_0_1_1.mdo | 9 + .../Package.xdto | 22 + ...pplicationExtensionsManagement_1_0_1_1.mdo | 9 + .../Package.xdto | 27 + .../MessageInfoCenter_1_0_1_1.mdo | 9 + .../MessageInfoCenter_1_0_1_1/Package.xdto | 11 + .../Package.xdto | 16 + ...вногоКопированияОбластейДанных_1_0_3_1.mdo | 9 + .../Package.xdto | 13 + ...ольУдаленногоАдминистрирования_1_0_2_5.mdo | 9 + .../Package.xdto | 63 + ...дминистрированиеВМоделиСервиса_1_0_3_5.mdo | 9 + .../Package.xdto | 23 + ...внымКопированиемОбластейДанных_1_0_3_1.mdo | 9 + 1473 files changed, 114465 insertions(+), 30756 deletions(-) create mode 100644 SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl create mode 100644 SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl rename SSL/src/Catalogs/{СтраныМира/Forms/ФормаВыбора => ГруппыДоступа/Forms/ФормаВыбораГруппы}/Attributes/Список/ExtInfo/ListSettings.dcss (100%) create mode 100644 SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form create mode 100644 SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl create mode 100644 SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form create mode 100644 SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl create mode 100644 SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form create mode 100644 SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form create mode 100644 SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl create mode 100644 SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Form.form create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Form.form create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl rename SSL/src/Catalogs/{УдалитьКлассификаторВалют/ManagerModule.bsl => СообщениеSMSПрисоединенныеФайлы/ObjectModule.bsl} (100%) create mode 100644 SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo create mode 100644 SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form create mode 100644 SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html create mode 100644 SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl create mode 100644 SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/Catalogs/СтраныМира/ManagerModule.bsl create mode 100644 SSL/src/Catalogs/СтраныМира/ObjectModule.bsl delete mode 100644 SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html delete mode 100644 SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl delete mode 100644 SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo create mode 100644 SSL/src/CommonCommands/СоставОтправляемыхДанных/CommandModule.bsl create mode 100644 SSL/src/CommonCommands/СоставОтправляемыхДанных/СоставОтправляемыхДанных.mdo create mode 100644 SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/CommandModule.bsl create mode 100644 SSL/src/CommonCommands/УдалитьНастройкуСинхронизации/УдалитьНастройкуСинхронизации.mdo delete mode 100644 SSL/src/CommonForms/ВводАдреса/Form.form delete mode 100644 SSL/src/CommonForms/ВводАдреса/Help/ru.html delete mode 100644 SSL/src/CommonForms/ВводАдреса/Module.bsl delete mode 100644 SSL/src/CommonForms/ВводАдреса/ВводАдреса.mdo delete mode 100644 SSL/src/CommonForms/ВводТелефона/Form.form delete mode 100644 SSL/src/CommonForms/ВводТелефона/Help/ru.html delete mode 100644 SSL/src/CommonForms/ВводТелефона/Module.bsl delete mode 100644 SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo delete mode 100644 SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form delete mode 100644 SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl delete mode 100644 SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo delete mode 100644 SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo delete mode 100644 SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo delete mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html delete mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl delete mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo create mode 100644 SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form create mode 100644 SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html create mode 100644 SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl rename SSL/src/CommonForms/{ВводТелефона/ВводТелефона.mdo => РедактированиеТабличногоДокумента/РедактированиеТабличногоДокумента.mdo} (62%) delete mode 100644 SSL/src/CommonForms/СообщениеОНеудачномОбновлении/СообщениеОНеудачномОбновлении.mdo create mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl rename SSL/src/CommonModules/{СтруктураПодчиненности/СтруктураПодчиненности.mdo => КонтактнаяИнформацияXML/КонтактнаяИнформацияXML.mdo} (62%) delete mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/Module.bsl delete mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияКлиент/Module.bsl create mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl rename SSL/src/CommonModules/{КонтактнаяИнформацияВызовСервера/КонтактнаяИнформацияВызовСервера.mdo => КонтактнаяИнформацияСлужебныйВызовСервера/КонтактнаяИнформацияСлужебныйВызовСервера.mdo} (58%) create mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl create mode 100644 SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/КонтактнаяИнформацияСлужебныйПовтИсп.mdo create mode 100644 SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl rename SSL/src/CommonModules/{КонтактнаяИнформацияКлиент/КонтактнаяИнформацияКлиент.mdo => ОбновлениеИнформационнойБазыГлобальный/ОбновлениеИнформационнойБазыГлобальный.mdo} (51%) create mode 100644 SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/Module.bsl create mode 100644 SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/ПроверкаЛегальностиПолученияОбновленияГлобальный.mdo create mode 100644 SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl create mode 100644 SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.mdo create mode 100644 SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl create mode 100644 SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис.mdo create mode 100644 SSL/src/CommonModules/СообщенияИнформационногоЦентраИнтерфейс/Module.bsl rename SSL/src/CommonModules/{УправлениеКонтактнойИнформациейСобытия/УправлениеКонтактнойИнформациейСобытия.mdo => СообщенияИнформационногоЦентраИнтерфейс/СообщенияИнформационногоЦентраИнтерфейс.mdo} (54%) create mode 100644 SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1.mdo create mode 100644 SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/СообщенияИнформационногоЦентраРеализация.mdo create mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo create mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo create mode 100644 SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1.mdo create mode 100644 SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4.mdo create mode 100644 SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5.mdo create mode 100644 SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1.mdo create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl create mode 100644 SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo delete mode 100644 SSL/src/CommonModules/СтруктураПодчиненности/Module.bsl delete mode 100644 SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl create mode 100644 SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl create mode 100644 SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo create mode 100644 SSL/src/CommonPictures/ВходящееСообщение/Picture.png create mode 100644 SSL/src/CommonPictures/ВходящееСообщение/ВходящееСообщение.mdo create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/Picture.png create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/ВыравниваниеПоЛевомуКраю.mdo create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/Picture.png create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/ВыравниваниеПоПравомуКраю.mdo create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоЦентру/Picture.png create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоЦентру/ВыравниваниеПоЦентру.mdo create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоШирине/Picture.png create mode 100644 SSL/src/CommonPictures/ВыравниваниеПоШирине/ВыравниваниеПоШирине.mdo create mode 100644 SSL/src/CommonPictures/ГраницаВезде/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаВезде/ГраницаВезде.mdo create mode 100644 SSL/src/CommonPictures/ГраницаВнутри/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаВнутри/ГраницаВнутри.mdo create mode 100644 SSL/src/CommonPictures/ГраницаВокруг/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаВокруг/ГраницаВокруг.mdo create mode 100644 SSL/src/CommonPictures/ГраницаСверху/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаСверху/ГраницаСверху.mdo create mode 100644 SSL/src/CommonPictures/ГраницаСлева/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаСлева/ГраницаСлева.mdo create mode 100644 SSL/src/CommonPictures/ГраницаСнизу/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаСнизу/ГраницаСнизу.mdo create mode 100644 SSL/src/CommonPictures/ГраницаСправа/Picture.png create mode 100644 SSL/src/CommonPictures/ГраницаСправа/ГраницаСправа.mdo create mode 100644 SSL/src/CommonPictures/ИзменитьШрифт/Picture.png create mode 100644 SSL/src/CommonPictures/ИзменитьШрифт/ИзменитьШрифт.mdo create mode 100644 SSL/src/CommonPictures/ИсходящееСообщение/Picture.png create mode 100644 SSL/src/CommonPictures/ИсходящееСообщение/ИсходящееСообщение.mdo create mode 100644 SSL/src/CommonPictures/КурсивноеНачертание/Picture.png create mode 100644 SSL/src/CommonPictures/КурсивноеНачертание/КурсивноеНачертание.mdo create mode 100644 SSL/src/CommonPictures/НаписатьSMS/Picture.png create mode 100644 SSL/src/CommonPictures/НаписатьSMS/НаписатьSMS.mdo create mode 100644 SSL/src/CommonPictures/НетГраницы/Picture.png create mode 100644 SSL/src/CommonPictures/НетГраницы/НетГраницы.mdo create mode 100644 SSL/src/CommonPictures/ОбъединитьЯчейки/Picture.png create mode 100644 SSL/src/CommonPictures/ОбъединитьЯчейки/ОбъединитьЯчейки.mdo create mode 100644 SSL/src/CommonPictures/Подчеркивание/Picture.png create mode 100644 SSL/src/CommonPictures/Подчеркивание/Подчеркивание.mdo create mode 100644 SSL/src/CommonPictures/ПолужирноеНачертание/Picture.png create mode 100644 SSL/src/CommonPictures/ПолужирноеНачертание/ПолужирноеНачертание.mdo create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаВокруг/Picture.png create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаВокруг/ТолстаяГраницаВокруг.mdo create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаСверху/Picture.png create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаСверху/ТолстаяГраницаСверху.mdo create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаСнизу/Picture.png create mode 100644 SSL/src/CommonPictures/ТолстаяГраницаСнизу/ТолстаяГраницаСнизу.mdo create mode 100644 SSL/src/CommonPictures/УвеличитьШрифт/Picture.png create mode 100644 SSL/src/CommonPictures/УвеличитьШрифт/УвеличитьШрифт.mdo create mode 100644 SSL/src/CommonPictures/УменьшитьШрифт/Picture.png create mode 100644 SSL/src/CommonPictures/УменьшитьШрифт/УменьшитьШрифт.mdo create mode 100644 SSL/src/CommonPictures/Успешно/Picture.png create mode 100644 SSL/src/CommonPictures/Успешно/Успешно.mdo create mode 100644 SSL/src/CommonPictures/ЦветТекста/Picture.png create mode 100644 SSL/src/CommonPictures/ЦветТекста/ЦветТекста.mdo create mode 100644 SSL/src/CommonPictures/ЦветФона/Picture.png create mode 100644 SSL/src/CommonPictures/ЦветФона/ЦветФона.mdo create mode 100644 SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.bin create mode 100644 SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo delete mode 100644 SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo create mode 100644 SSL/src/Constants/АдресПубликацииИнформационнойБазыВИнтернете/АдресПубликацииИнформационнойБазыВИнтернете.mdo create mode 100644 SSL/src/Constants/АдресУправленияКонференцией/АдресУправленияКонференцией.mdo create mode 100644 SSL/src/Constants/ДатаПоследнегоСтартаКлиентскогоСеанса/ДатаПоследнегоСтартаКлиентскогоСеанса.mdo rename SSL/src/Constants/{ЗапуститьОбновлениеИнформационнойБазы/ЗапуститьОбновлениеИнформационнойБазы.mdo => ЗагрузитьСообщениеОбменаДанными/ЗагрузитьСообщениеОбменаДанными.mdo} (63%) create mode 100644 SSL/src/Constants/ИмяПользователяКонференцииИнформационногоЦентра/ИмяПользователяКонференцииИнформационногоЦентра.mdo create mode 100644 SSL/src/Constants/ПарольПользователяКонференцииИнформационногоЦентра/ПарольПользователяКонференцииИнформационногоЦентра.mdo rename SSL/src/Constants/{ВыполнитьЗагрузкуПараметровРаботыПрограммы/ВыполнитьЗагрузкуПараметровРаботыПрограммы.mdo => ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.mdo} (78%) create mode 100644 SSL/src/Constants/СведенияОбОбновленииИБ/СведенияОбОбновленииИБ.mdo create mode 100644 SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo delete mode 100644 SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Form.form delete mode 100644 SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Form.form create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Module.bsl create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Form.form create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Module.bsl create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Form.form create mode 100644 SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Module.bsl rename SSL/src/{CommonForms/ОтображениеНовостей => DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений}/Form.form (92%) rename SSL/src/{CommonForms/ОтображениеНовостей => DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений}/Module.bsl (50%) rename SSL/src/{CommonForms/ОтправкаСообщенияВТехподдержку => DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку}/Form.form (91%) rename SSL/src/{CommonForms/ОтправкаСообщенияВТехподдержку => DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку}/Module.bsl (84%) create mode 100644 SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl rename SSL/src/{CommonForms/НастройкиРезервногоКопированияПриложений => DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов}/Form.form (99%) rename SSL/src/{CommonForms/НастройкиРезервногоКопированияПриложений => DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов}/Module.bsl (91%) create mode 100644 SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form create mode 100644 SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl create mode 100644 SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl rename SSL/src/{InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl => DataProcessors/НастройкаРезервногоКопированияПриложения/ObjectModule.bsl} (100%) create mode 100644 SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/НастройкаРезервногоКопированияПриложения.mdo create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Form.form create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Form.form create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl rename SSL/src/{CommonForms => DataProcessors/ОбновлениеИнформационнойБазы/Forms}/СообщениеОНеудачномОбновлении/Form.form (98%) rename SSL/src/{CommonForms => DataProcessors/ОбновлениеИнформационнойБазы/Forms}/СообщениеОНеудачномОбновлении/Module.bsl (71%) create mode 100644 SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo create mode 100644 SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/ConditionalAppearance.dcssca delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакИзменитьПарольСинхронизацииДанных/Template.htmldoc delete mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакИзменитьПарольСинхронизацииДанных/ru.html create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/HeaderPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl rename SSL/src/{CommonForms/ПарольДляСинхронизацииДанных => DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена}/Form.form (59%) create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/СкрытаяКартинкаИнформация32/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхАвторегистрация/ValuesPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ПоказатьРезультатВыгрузки/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СкрытаяКартинкаИнформация32/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстант/RowsPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантАвторегистрация/ValuesPicture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl create mode 100644 SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияВыгрузка/Picture.png create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияЗагрузка/Picture.png create mode 100644 SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMS/CommandModule.bsl create mode 100644 SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca create mode 100644 SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form create mode 100644 SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl create mode 100644 SSL/src/Documents/СообщениеSMS/ManagerModule.bsl create mode 100644 SSL/src/Documents/СообщениеSMS/ObjectModule.bsl create mode 100644 SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo rename SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/{ФормаСписка => ФормаВыбора}/Module.bsl (99%) create mode 100644 SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form create mode 100644 SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl create mode 100644 SSL/src/Enums/СостоянияДокументаСообщениеSMS/СостоянияДокументаСообщениеSMS.mdo create mode 100644 SSL/src/Enums/СостоянияСообщенияSMS/СостоянияСообщенияSMS.mdo delete mode 100644 SSL/src/Enums/УдалитьВидыПоставляемыхДанных/УдалитьВидыПоставляемыхДанных.mdo create mode 100644 SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъектаПриОбменеДанными/ЗаписатьВерсиюОбъектаПриОбменеДанными.mdo create mode 100644 SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl create mode 100644 SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss rename SSL/src/{Catalogs/СтраныМира/Forms/ФормаВыбора => InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка}/Form.form (69%) create mode 100644 SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form create mode 100644 SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl create mode 100644 SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html rename SSL/src/InformationRegisters/{УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo => ПросмотренныеДанныеИнформационногоЦентра/ПросмотренныеДанныеИнформационногоЦентра.mdo} (50%) create mode 100644 SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html delete mode 100644 SSL/src/InformationRegisters/УдалитьСвязиПоставляемыхДанных/УдалитьСвязиПоставляемыхДанных.mdo create mode 100644 SSL/src/InformationRegisters/УдалитьСтраныМира/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/УдалитьСтраныМира/УдалитьСтраныМира.mdo create mode 100644 SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights create mode 100644 SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo create mode 100644 SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo create mode 100644 SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/Schedule.schedule create mode 100644 SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo create mode 100644 SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo create mode 100644 SSL/src/SessionParameters/ВыполняетсяОбновлениеИБ/ВыполняетсяОбновлениеИБ.mdo create mode 100644 SSL/src/SessionParameters/ПаролиСинхронизацииДанных/ПаролиСинхронизацииДанных.mdo create mode 100644 SSL/src/SessionParameters/ПриоритетныеДанныеОбмена/ПриоритетныеДанныеОбмена.mdo rename SSL/src/StyleItems/{ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo => ВидДняПроизводственногоКалендаряВоскресеньеЦвет/ВидДняПроизводственногоКалендаряВоскресеньеЦвет.mdo} (76%) rename SSL/src/StyleItems/{ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo => ВидДняПроизводственногоКалендаряНеУказанЦвет/ВидДняПроизводственногоКалендаряНеУказанЦвет.mdo} (84%) rename SSL/src/StyleItems/{ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo => ВидДняПроизводственногоКалендаряПраздникЦвет/ВидДняПроизводственногоКалендаряПраздникЦвет.mdo} (77%) rename SSL/src/StyleItems/{ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo => ВидДняПроизводственногоКалендаряПредпраздничныйЦвет/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет.mdo} (74%) rename SSL/src/StyleItems/{ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo => ВидДняПроизводственногоКалендаряРабочийЦвет/ВидДняПроизводственногоКалендаряРабочийЦвет.mdo} (77%) rename SSL/src/StyleItems/{ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo => ВидДняПроизводственногоКалендаряСубботаЦвет/ВидДняПроизводственногоКалендаряСубботаЦвет.mdo} (78%) create mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo create mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo create mode 100644 SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/MessageInfoCenter_1_0_1_1.mdo create mode 100644 SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1.mdo create mode 100644 SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/Package.xdto create mode 100644 SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo create mode 100644 SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/Package.xdto create mode 100644 SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo create mode 100644 SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1.mdo diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index 5f18d9707..2c552e2f4 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -1124,6 +1124,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 33afebffe..0c38fd32c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -2,6 +2,8 @@ Перем ОткрытаФормаВыбораИсполнителя; // признак того, что исполнитель выбирается из формы, а не быстрым вводом &НаКлиенте Перем ОткрытаФормаВыбораПроверяющего; // признак того, что проверяющий выбирается из формы, а не быстрым вводом +&НаКлиенте +Перем КонтекстВыбора; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -21,14 +23,14 @@ Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.Предмет.Гиперссылка = Объект.Предмет <> Неопределено И НЕ Объект.Предмет.Пустая(); - ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Объект.Предмет); + ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Объект.Предмет); Элементы.ГруппаСостояние.Видимость = Объект.Завершен; Если Объект.Завершен Тогда ДатаЗавершенияСтрокой = ?(ИспользоватьДатуИВремяВСрокахЗадач, Формат(Объект.ДатаЗавершения, "ДЛФ=DT"), Формат(Объект.ДатаЗавершения, "ДЛФ=D")); ТекстСостояния = ?(Объект.Выполнено, НСтр("ru = 'Задание выполнено %1.'"), - НСтр("ru = 'Задание отменено %1.'")); + НСтр("ru = 'Задание отменено %1.'")); Элементы.ДекорацияТекст.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, ДатаЗавершенияСтрокой); @@ -38,7 +40,7 @@ Продолжить; КонецЕсли; Элемент.ТолькоПросмотр = Истина; - КонецЦикла; + КонецЦикла; КонецЕсли; @@ -51,7 +53,7 @@ Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПодчиненныеБизнесПроцессы") Тогда Элементы.ГлавнаяЗадача.Видимость = Ложь; - КонецЕсли; + КонецЕсли; БизнесПроцессыИЗадачиСервер.ПриОпределенииИспользованияВнешнихЗадачИБизнесПроцессов(ИспользоватьВнешниеЗадачиИБизнесПроцессы); @@ -66,6 +68,32 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборРолиИсполнителя") Тогда + + Если КонтекстВыбора = "ИсполнительПриИзменении" Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; + КонецЕсли; + + УстановитьДоступностьПроверяющего(ЭтаФорма); + + + ИначеЕсли КонтекстВыбора = "ПроверяющийПриИзменении" Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -134,19 +162,21 @@ Если ТипЗнч(Объект.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Исполнитель) Тогда Если ИспользуетсяСОбъектамиАдресации(Объект.Исполнитель) Тогда - Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", - Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", - Объект.Исполнитель, - ОсновнойОбъектАдресации, - ДополнительныйОбъектАдресации), - ЭтаФорма); - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Объект.Исполнитель = Результат.РольИсполнителя; - КонецЕсли; - КонецЕсли; + КонтекстВыбора = "ИсполнительПриИзменении"; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РольИсполнителя", Объект.Исполнитель); + ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); + + ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтаФорма); + + Возврат; + + КонецЕсли; - КонецЕсли; + КонецЕсли; УстановитьДоступностьПроверяющего(ЭтаФорма); @@ -160,7 +190,7 @@ СтандартнаяОбработка = Ложь; Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; Модифицированность = Истина; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -170,7 +200,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -202,22 +232,22 @@ ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; - Если ТипЗнч(Объект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Проверяющий) Тогда + Если ТипЗнч(Объект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Проверяющий) Тогда - Если ИспользуетсяСОбъектамиАдресации(Объект.Проверяющий) Тогда - Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", - Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", - Объект.Проверяющий, - ОсновнойОбъектАдресации, - ДополнительныйОбъектАдресации), - ЭтаФорма); + Если ИспользуетсяСОбъектамиАдресации(Объект.Проверяющий) Тогда - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Объект.Проверяющий = Результат.РольИсполнителя; - КонецЕсли; - КонецЕсли; + КонтекстВыбора = "ПроверяющийПриИзменении"; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РольИсполнителя", Объект.Проверяющий); + ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); + + ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтаФорма); + + КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -241,7 +271,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -308,7 +338,7 @@ Иначе Элементы.ФормаОстановить.Доступность = Истина; Элементы.ФормаПродолжить.Доступность = Ложь; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -333,7 +363,7 @@ Форма.Элементы.ГруппаПроверка.Доступность = Ложь; Иначе Форма.Элементы.ГруппаПроверка.Доступность = Истина; - КонецЕсли; + КонецЕсли; Иначе Форма.Элементы.ГруппаПроверка.Доступность = Истина; КонецЕсли; @@ -350,4 +380,4 @@ &НаСервереБезКонтекста Функция ВнешняяРольИсполнителя(Исполнитель) Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Исполнитель, "ВнешняяРоль"); -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index dc28febc7..19e2f0520 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ - - ЗадачаИсточник - Equal - Задача.ЗадачаИсполнителя.ПустаяСсылка - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl index 41dccfb8a..c148c5914 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl @@ -9,6 +9,12 @@ КонецЕсли; ПоАвтору = Пользователи.ТекущийПользователь(); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ЗадачаИсточник", Задачи.ЗадачаИсполнителя.ПустаяСсылка(), + ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + УстановитьОтбор(); КонецПроцедуры @@ -76,40 +82,40 @@ ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); ПараметрыОтбора.Вставить("ПоПроверяющему", ПоПроверяющему); - УстановитьОтборСписка(ПараметрыОтбора); -КонецПроцедуры + УстановитьОтборСписка(ПараметрыОтбора); +КонецПроцедуры &НаСервере Процедура УстановитьОтборСписка(ПараметрыОтбора) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Завершен"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Завершен"); Если НЕ ПараметрыОтбора["ПоказыватьЗавершенныеЗадания"] Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Завершен", Ложь); КонецЕсли; - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Остановлен"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Остановлен"); Если НЕ ПараметрыОтбора["ПоказыватьОстановленные"] Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Остановлен", Ложь); КонецЕсли; Если ПараметрыОтбора["ПоАвтору"].Пустая() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Автор"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Автор"); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Автор", ПараметрыОтбора["ПоАвтору"]); КонецЕсли; Если ПараметрыОтбора["ПоИсполнителю"].Пустая() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Исполнитель"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Исполнитель"); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Исполнитель", ПараметрыОтбора["ПоИсполнителю"]); КонецЕсли; Если ПараметрыОтбора["ПоПроверяющему"].Пустая() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Проверяющий"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Проверяющий"); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Проверяющий", ПараметрыОтбора["ПоПроверяющему"]); diff --git a/SSL/src/BusinessProcesses/Задание/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Help/ru.html index cb3d13f54..9dc8d1ef9 100644 --- a/SSL/src/BusinessProcesses/Задание/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Help/ru.html @@ -1,3 +1,3 @@ - +

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

См. также: Общая информация о бизнес-процессах.

\ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html index 1cdaf8f45..1162be1b4 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

Реквизиты:

diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl index 6e0229f6a..43186224d 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl @@ -111,8 +111,7 @@ ПоказатьОповещениеПользователя( НСтр("ru = 'Валюты добавлены.'"), , ?(ОбщегоНазначенияПовтИсп.РазделениеВключено() И ЕстьКурсы, НСтр("ru = 'Курсы будут загружены автоматически через непродолжительное время.'"), ""), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); Закрыть(); КонецПроцедуры diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl index f1185d8ec..dd42fd93a 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl @@ -11,8 +11,7 @@ ДатаКурса = НачалоДня(ТекущаяДатаСеанса()); Элементы.Курс.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Курс на %1'"), - Формат(ДатаКурса, "ДЛФ=DD") - ); + Формат(ДатаКурса, "ДЛФ=DD")); Элементы.Курс.Подсказка = Элементы.Курс.Заголовок; Список.Параметры.УстановитьЗначениеПараметра("КонецПериода", ДатаКурса); diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html index 99969a27e..3d3f5b0a4 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

Реквизиты:

diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index a04d351f2..065b79db8 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -55,8 +55,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Необходимо указать основную валюту'"), , "Объект.ОсновнаяВалюта", , - Отказ - ); + Отказ); КонецЕсли; Иначе Объект.ОсновнаяВалюта = Неопределено; @@ -285,9 +284,6 @@ &НаКлиентеНаСервереБезКонтекста Процедура УстановитьСвойстваЭлементовГруппыЗависимойВалюты(Форма) - // Управляет видимостью реквизитов зависимости от базовой валюты: - // ссылки на базовую валюту и коэфициента - Объект = Форма.Объект; Элементы = Форма.Элементы; diff --git a/SSL/src/Catalogs/Валюты/Help/ru.html b/SSL/src/Catalogs/Валюты/Help/ru.html index c052e48de..4110f6741 100644 --- a/SSL/src/Catalogs/Валюты/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Help/ru.html @@ -1,4 +1,4 @@ - +

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

Реквизиты:

diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index d2775b8ee..b8757f60e 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -7,15 +7,13 @@ Если ЗагружаетсяИзИнтернета И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Зависимая валюта не может быть загружена с сайта РБК'") - ); + НСтр("ru = 'Зависимая валюта не может быть загружена с сайта РБК'")); Отказ = Истина; КонецЕсли; Если ЗначениеЗаполнено(ОсновнаяВалюта.ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Основная валюта не может быть зависимой.'") - ); + НСтр("ru = 'Основная валюта не может быть зависимой.'")); Отказ = Истина; КонецЕсли; @@ -29,8 +27,7 @@ И РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(Ссылка).Количество() > 0 И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'") - ); + НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'")); Отказ = Истина; КонецЕсли; @@ -68,4 +65,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index da504e588..95bb19dbc 100644 --- a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -107,6 +107,7 @@ + @@ -133,6 +134,7 @@ + diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl index ec37d84a7..e633362d9 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl @@ -9,6 +9,4 @@ Возврат; КонецЕсли; - Анкетирование.УстановитьПараметрыОтбораФормуВыбора(Параметры,Список.Отбор); - КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl index c7b73ac15..6551ce333 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl @@ -12,9 +12,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользовательские настройки выбранных вариантов отчетов (%1 шт) не заданы или уже сброшены.'"), - Формат(КоличествоВариантов, "ЧГ=") - ) - ); + Формат(КоличествоВариантов, "ЧГ="))); Возврат; КонецЕсли; @@ -24,8 +22,7 @@ | |Нажмите ""Продолжить"" что бы сбросить пользовательские настройки |быстрого доступа и видимости выбранных вариантов отчетов (%1 шт).'"), - Формат(КоличествоВариантов, "ЧГ=") - ); + Формат(КоличествоВариантов, "ЧГ=")); Кнопки = Новый СписокЗначений; Кнопки.Добавить(1, НСтр("ru = 'Продолжить'")); @@ -41,8 +38,7 @@ ПоказатьОповещениеПользователя( НСтр("ru = 'Сброшены пользовательские настройки варианта отчета'"), ПолучитьНавигационнуюСсылку(МассивВариантов[0]), - Строка(МассивВариантов[0]) - ); + Строка(МассивВариантов[0])); Иначе ПоказатьОповещениеПользователя( , @@ -50,9 +46,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сброшены пользовательские настройки |вариантов отчетов (%1 шт.).'"), - Формат(МассивВариантов.Количество(), "ЧН=0; ЧГ=0") - ) - ); + Формат(МассивВариантов.Количество(), "ЧН=0; ЧГ=0"))); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl index d8f0b2789..d9a1a268f 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule.bsl @@ -18,9 +18,7 @@ |- Выбраны только пользовательские варианты отчетов. |- Выбранные варианты отчетов помечены на удаление. |- Выбраны варианты дополнительных или внешних отчетов.'"), - Формат(КоличествоПредопределенных, "ЧГ=") - ) - ); + Формат(КоличествоПредопределенных, "ЧГ="))); Возврат; КонецЕсли; @@ -30,8 +28,7 @@ | |Нажмите ""Продолжить"" что бы сбросить настройки размещения, |видимости и доступности выбранных вариантов отчетов (%1 шт).'"), - Формат(КоличествоПредопределенных, "ЧГ=") - ); + Формат(КоличествоПредопределенных, "ЧГ=")); Кнопки = Новый СписокЗначений; Кнопки.Добавить(1, НСтр("ru = 'Продолжить'")); @@ -48,8 +45,7 @@ ПоказатьОповещениеПользователя( НСтр("ru = 'Сброшены настройки размещения варианта отчета'"), ПолучитьНавигационнуюСсылку(ВариантСсылка), - Строка(ВариантСсылка) - ); + Строка(ВариантСсылка)); Иначе ПоказатьОповещениеПользователя( , @@ -57,9 +53,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сброшены настройки размещения |вариантов отчетов (%1 шт.).'"), - Формат(МассивВариантов.Количество(), "ЧН=0; ЧГ=0") - ) - ); + Формат(МассивВариантов.Количество(), "ЧН=0; ЧГ=0"))); КонецЕсли; ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html index 52148d8c5..b6a810744 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html @@ -1,3 +1,3 @@ - +

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

См. также: Вариант отчета, Общая информация о формах.

\ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl index 0a8948027..25f01a20a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -104,8 +104,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Необходимо заполнить список ""Варианты отчетов""'"), , - "ИзменяемыеВарианты" - ); + "ИзменяемыеВарианты"); Возврат Ложь; КонецЕсли; Возврат Истина; @@ -119,9 +118,7 @@ , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Изменены настройки вариантов отчетов (%1 шт.).'"), - Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0") - ) - ); + Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0"))); Модифицированность = Ложь; ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); @@ -320,14 +317,12 @@ ТекстСообщения = СтрЗаменить( НСтр("ru = 'После проверки варианты отчетов (%1 шт.) были исключены из списка выбранных.'"), "%1", - Формат(КоличествоОшибок, "ЧГ=") - ); + Формат(КоличествоОшибок, "ЧГ=")); Элементы.ДеревоПодсистем.Доступность = Истина; КонецЕсли; РезультатВыполнения.Вставить("ВыводПредупреждения", - Новый Структура("Использование, Текст, ПутьКРеквизитуФормы, ТекстОшибок", Истина, ТекстСообщения, "ИзменяемыеВарианты", ТекстОшибок) - ); + Новый Структура("Использование, Текст, ПутьКРеквизитуФормы, ТекстОшибок", Истина, ТекстСообщения, "ИзменяемыеВарианты", ТекстОшибок)); РезультатВыполнения = Новый ФиксированнаяСтруктура(РезультатВыполнения); Иначе Элементы.ДеревоПодсистем.Доступность = Истина; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index a4b1bd7f8..489b38537 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -711,7 +711,6 @@ ExpandTopLevel true true - true true None None @@ -1593,6 +1592,23 @@ ОтборАвтор + + КорневаяПодсистема + + <key>ru</key> + <value>Корневая подсистема</value> + + 8 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + ОтборНаименование diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 6eda4f563..a62c324a0 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -9,6 +9,7 @@ ВключаяПодчиненные = Истина; + //КорневаяПодсистема = Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы; ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); @@ -57,7 +58,6 @@ ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); Если НЕ ПолныеПраваНаВарианты Тогда Элементы.ОтборТипОтчета.Видимость = Ложь; - ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор, "ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Ложь,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецЕсли; СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора; @@ -79,6 +79,12 @@ Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); ТекущийЭлемент = Элементы.Список; + + // Установка отбора динамического списка. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + КонецПроцедуры &НаКлиенте @@ -105,11 +111,10 @@ Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора); КонецЕсли; - ДеревоПодсистемУстановитьПараметрыСписка(); - Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); + //Список.Параметры.УстановитьЗначениеПараметра("ВключаяПодчиненные", ВключаяПодчиненные); КонецПроцедуры &НаСервере @@ -161,6 +166,7 @@ &НаКлиенте Процедура ВключаяПодчиненныеПриИзменении(Элемент) + //Список.Параметры.УстановитьЗначениеПараметра("ВключаяПодчиненные", ВключаяПодчиненные); ДеревоПодсистемТекущаяСтрока = -1; ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); КонецПроцедуры @@ -261,8 +267,7 @@ Размещение.Варианты.Представление, Формат(Размещение.Варианты.Всего, "ЧГ=0"), Размещение.Источник.ПолноеПредставление, - Размещение.Приемник.ПолноеПредставление - ); + Размещение.Приемник.ПолноеПредставление); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; @@ -488,8 +493,7 @@ ВыводОповещения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Вариант отчета ""%1"" размещен в ""%2"".'"), Размещение.Варианты.Представление, - Размещение.Приемник.ПолноеПредставление - ); + Размещение.Приемник.ПолноеПредставление); ВыводОповещения.Текст = Размещение.Варианты.Представление; ВыводОповещения.Ссылка = ПолучитьНавигационнуюСсылку(Размещение.Варианты.Массив[0]); Иначе @@ -497,8 +501,7 @@ НСтр("ru = 'Варианты отчетов ""%1"" (%2 шт.) размещены в ""%3"".'"), Размещение.Варианты.Представление, Формат(Размещение.Варианты.Всего, "ЧН=0; ЧГ=0"), - Размещение.Приемник.ПолноеПредставление - ); + Размещение.Приемник.ПолноеПредставление); КонецЕсли; Иначе РезультатВыполнения.Вставить("ВыводПредупреждения", Новый Структура("Использование, Текст, ТекстОшибок")); @@ -507,8 +510,7 @@ ВыводПредупреждения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размещено вариантов отчетов: %1 из %2'"), Формат(Размещено, "ЧН=0; ЧГ=0"), - Формат(Размещение.Варианты.Всего, "ЧН=0; ЧГ=0") - ); + Формат(Размещение.Варианты.Всего, "ЧН=0; ЧГ=0")); ВыводПредупреждения.ТекстОшибок = НСтр("ru = 'Варианты отчетов, которые не могут размещаться в командном интерфейсе:'") + Символы.ПС + ТекстОшибок; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html index 210547771..a98448d86 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Справочник предназначен для хранения вариантов отчетов и настройки их размещения в командном интерфейсе.</p> <h2><a name="Реквизиты">Реквизиты:</a></h2> <p></p> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index ecdd0e360..219cf9d5f 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -120,8 +120,7 @@ Объект.Описание, Объект.Описание, Модифицированность, - НСтр("ru = 'Описание'") - ); + НСтр("ru = 'Описание'")); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index d6a3dc1c8..059916d38 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Редактирование, открытие и выбор вариантов отчетов.</p> <p>В левой части формы расположено дерево разделов и групп командного интерфейса.<br>Перемещаясь по узлам дерева, список "<strong>Варианты отчетов</strong>" автоматически фильтруется по выбранному разделу или группе.<br>Варианты отчетов можно перемещать из текущего раздела/группы в другие при помощи перетаскивания. Если при перетаскивании зажать клавишу Ctrl, то вариант отчета будет добавлен в новую группу, а также останется в текущей группе.</p> <p>Чтобы быстро найти нужный вариант отчета в списке "<strong>Варианты отчетов</strong>" также можно применять быстрые отборы по <strong>Наименованию</strong> и <strong>Автору</strong>. Для этого нужно указать искомые значения в соответствующих полях, расположенных над списком.</p> diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index 166a1d27f..d1cda85b8 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -20,8 +20,7 @@ Наименование ), , - "Наименование" - ); + "Наименование"); КонецЕсли; КонецПроцедуры @@ -33,8 +32,7 @@ ПользователемИзмененаПометкаУдаления = ( НЕ ЭтоНовый() И ПометкаУдаления <> Ссылка.ПометкаУдаления - И НЕ ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") - ); + И НЕ ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных")); Если НЕ Пользовательский И ПользователемИзмененаПометкаУдаления Тогда Если ПометкаУдаления Тогда @@ -54,13 +52,11 @@ Если НаименованиеЗанято Тогда ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Наименование ""%1"" уже занято другим вариантом этого отчета.'"), - Наименование - ); + Наименование); Иначе ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ключ варианта ""%1"" уже занят другим вариантом этого отчета.'"), - КлючВарианта - ); + КлючВарианта); КонецЕсли; ТекстОшибки = ТекстОшибки + НСтр("ru = 'Перед снятием пометки удаления варианта отчета |необходимо установить пометку удаления конфликтующего варианта отчета.'"); @@ -89,4 +85,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss index e66dc8781..91027f589 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">DeletionMark</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form index 17b2def98..dce3d5353 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form.form @@ -321,6 +321,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <width>70</width> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 000000000..70d3fb2d8 --- /dev/null +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,31 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Отбор не помеченных на удаление. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + // Оформление помеченных на удаление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаУдаления"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Список"); + ЭлементОформляемогоПоля.Использование = Истина; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form index afb3de3dd..1ffc01a29 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Form.form @@ -137,7 +137,7 @@ <horizontalAlign>Right</horizontalAlign> </autoCommandBar> <excludedCommands>CustomizeForm</excludedCommands> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl index 4118488e1..982d0a54f 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбораСпособаСравненияВерсий/Module.bsl @@ -20,6 +20,8 @@ ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения( МассивСтруктур); - Закрыть(КодВозвратаДиалога.ОК); + РезультатВыбора = КодВозвратаДиалога.ОК; + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры + diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 75d0a5f47..91027f589 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,41 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <use>false</use> - <left xsi:type="dcscor:Field">ПометкаУдаления</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <use>false</use> - <field>ДатаСоздания</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> <conditionalAppearance> - <item> - <selection/> - <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ПометкаУдаления</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">web:Gray</dcscor:value> - </dcscor:item> - </appearance> - </item> <viewMode>Normal</viewMode> <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> </conditionalAppearance> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form index 02f19bce1..2096fe479 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form.form @@ -657,6 +657,10 @@ <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> </handlers> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <excludedCommands>Copy</excludedCommands> <excludedCommands>Create</excludedCommands> <excludedCommands>Delete</excludedCommands> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl index 8a96d4178..1abdd84ad 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,32 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Оформление помеченных на удаление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаУдаления"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Список"); + ЭлементОформляемогоПоля.Использование = Истина; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss index 583141cee..91027f589 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,45 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <use>false</use> - <left xsi:type="dcscor:Field">DeletionMark</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <use>false</use> - <field>ДатаСоздания</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> <conditionalAppearance> - <item> - <selection/> - <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ПометкаУдаления</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">web:Gray</dcscor:value> - </dcscor:item> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>Шрифт</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Font" ref="sys:DefaultGUIFont" bold="false" italic="false" underline="false" strikeout="true" kind="WindowsFont"/> - </dcscor:item> - </appearance> - </item> <viewMode>Normal</viewMode> <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> </conditionalAppearance> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form index e9cd255bf..1d67c78b8 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Form.form @@ -948,6 +948,10 @@ </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl index 826f1d1ad..afb833274 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl @@ -1,3 +1,9 @@ +&НаКлиенте +Перем Ссылка1; + +&НаКлиенте +Перем Ссылка2; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -8,12 +14,25 @@ Возврат; КонецЕсли; + Элементы.ФормаСравнить.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); + УникальныйИдентификаторКарточкиФайла = Параметры.УникальныйИдентификаторКарточкиФайла; ЗаполнитьДеревоВерсий(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ВерсииФайлов.Форма.ФормаВыбораСпособаСравненияВерсий") Тогда + Если ВыбранноеЗначение <> КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; + ПродолжитьСравнениеВерсий(СпособСравненияВерсийФайлов); + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -23,7 +42,7 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; - КонецЕсли; + КонецЕсли; ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла(Неопределено, ТекущиеДанные.Ссылка); Если ДанныеФайла.Редактирует.Пустая() Тогда @@ -32,7 +51,7 @@ Оповестить("Запись_Файл", Новый Структура("Событие", "АктивнаяВерсияИзменена"), Параметры.Файл); Иначе Предупреждение(НСтр("ru = 'Смена активной версии разрешена только для не занятых файлов.'")); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -44,13 +63,13 @@ Если Версия.Ссылка = ТекущаяВерсия Тогда Идентификатор = Версия.ПолучитьИдентификатор(); Возврат Идентификатор; - КонецЕсли; + КонецЕсли; КодВозврата = ОбойтиВсеУзлыДерева(Версия.ПолучитьЭлементы(), ТекущаяВерсия); Если КодВозврата <> -1 Тогда Возврат КодВозврата; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; Возврат -1; КонецФункции @@ -100,7 +119,7 @@ ПараметрыОткрытияФормы = Новый Структура("Ключ", Версия); ОткрытьФорму("Справочник.ВерсииФайлов.ФормаОбъекта", ПараметрыОткрытияФормы); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -139,9 +158,6 @@ // Сравнить 2 выбранные версии. &НаКлиенте Процедура Сравнить(Команда) - Перем Ссылка1; - Перем Ссылка2; - ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество(); Если ЧислоВыделенныхСтрок = 2 ИЛИ ЧислоВыделенныхСтрок = 1 Тогда @@ -180,63 +196,18 @@ Если Расширение = "odt" Тогда СпособСравненияВерсийФайлов = "OpenOfficeOrgWriter"; - КонецЕсли; - Если Расширение = "htm" ИЛИ Расширение = "html" Тогда + ИначеЕсли Расширение = "htm" ИЛИ Расширение = "html" Тогда СпособСравненияВерсийФайлов = "MicrosoftOfficeWord"; - КонецЕсли; - - Если СпособСравненияВерсийФайлов = Неопределено Тогда + ИначеЕсли СпособСравненияВерсийФайлов = Неопределено Тогда СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; - КонецЕсли; - - Если СпособСравненияВерсийФайлов = Неопределено Тогда // первый вызов - еще не инициализирована настройка - Результат = ОткрытьФормуМодально("Справочник.ВерсииФайлов.Форма.ФормаВыбораСпособаСравненияВерсий"); - - Если Результат <> КодВозвратаДиалога.ОК Тогда + Если СпособСравненияВерсийФайлов = Неопределено Тогда // первый вызов - еще не инициализирована настройка + ПараметрыФормы = Новый Структура; + ОткрытьФорму("Справочник.ВерсииФайлов.Форма.ФормаВыбораСпособаСравненияВерсий", ПараметрыФормы, ЭтаФорма); Возврат; - КонецЕсли; - - СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; - КонецЕсли; - - Если СпособСравненияВерсийФайлов = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеФайла1 = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытия(Неопределено, Ссылка1, УникальныйИдентификатор); - ДанныеФайла2 = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытия(Неопределено, Ссылка2, УникальныйИдентификатор); - - ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется сравнение версий файла ""%1""...'"), ДанныеФайла1.Ссылка); - Состояние(ТекстСостояния); - - ПолноеИмяФайла1 = ""; - Результат1 = РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( - ДанныеФайла1, ПолноеИмяФайла1); - - ПолноеИмяФайла2 = ""; - Результат2 = РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( - ДанныеФайла2, ПолноеИмяФайла2); - - Если Результат1 И Результат2 Тогда - - ПутьКФайлу1 = ""; - ПутьКФайлу2 = ""; - - Если ДанныеФайла1.НомерВерсии < ДанныеФайла2.НомерВерсии Тогда - ПутьКФайлу1 = ПолноеИмяФайла1; - ПутьКФайлу2 = ПолноеИмяФайла2; - Иначе - ПутьКФайлу1 = ПолноеИмяФайла2; - ПутьКФайлу2 = ПолноеИмяФайла1; КонецЕсли; - - РаботаСФайламиСлужебныйКлиент.СравнитьФайлы( - ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов); - КонецЕсли; - Состояние(); + ПродолжитьСравнениеВерсий(СпособСравненияВерсийФайлов); #Иначе Предупреждение(НСтр("ru = 'Сравнение версий в веб-клиенте не поддерживается.'")); #КонецЕсли @@ -280,7 +251,7 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; - КонецЕсли; + КонецЕсли; РаботаСФайламиСлужебныйКлиент.ОткрытьВерсиюФайла( РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытия( @@ -295,7 +266,7 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; - КонецЕсли; + КонецЕсли; ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляСохранения( Неопределено, ТекущиеДанные.Ссылка, УникальныйИдентификатор); @@ -377,16 +348,16 @@ Если Строка.ЭтоТекущая Тогда НайденнаяСтрока = Строка; Прервать; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; Иначе Для Каждого Строка Из Данные Цикл Если Строка.Ссылка = ТекущаяВетвь.РодительскаяВерсия Тогда НайденнаяСтрока = Строка; Прервать; - КонецЕсли; + КонецЕсли; КонецЦикла; - КонецЕсли; + КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда Ветвь = Дерево.Строки.Добавить(); @@ -395,7 +366,7 @@ ДобавитьПодчиненныеВерсии(Ветвь, Данные); ДобавитьПредыдущуюВерсию(Ветвь, Дерево, Данные); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -432,18 +403,18 @@ Если ТекущиеДанные.ПометкаУдаления Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Cнять с ""%1"" пометку на удаление?'"), + НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), Строка(ТекущиеДанные.Ссылка)); Иначе ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пометить ""%1"" на удаление?'"), Строка(ТекущиеДанные.Ссылка)); - КонецЕсли; + КонецЕсли; Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Если Результат <> КодВозвратаДиалога.Да Тогда Возврат; - КонецЕсли; + КонецЕсли; ТекущиеДанные.ПометкаУдаления = Не ТекущиеДанные.ПометкаУдаления; УстановитьПометкуУдаления(ТекущиеДанные.Ссылка, ТекущиеДанные.ПометкаУдаления); @@ -456,4 +427,47 @@ КонецПроцедуры - +&НаКлиенте +Процедура ПродолжитьСравнениеВерсий(СпособСравненияВерсийФайлов) + #Если НЕ ВебКлиент Тогда + + Если СпособСравненияВерсийФайлов = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеФайла1 = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытия(Неопределено, Ссылка1, УникальныйИдентификатор); + ДанныеФайла2 = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаДляОткрытия(Неопределено, Ссылка2, УникальныйИдентификатор); + + ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется сравнение версий файла ""%1""...'"), ДанныеФайла1.Ссылка); + Состояние(ТекстСостояния); + + ПолноеИмяФайла1 = ""; + Результат1 = РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( + ДанныеФайла1, ПолноеИмяФайла1); + + ПолноеИмяФайла2 = ""; + Результат2 = РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог( + ДанныеФайла2, ПолноеИмяФайла2); + + Если Результат1 И Результат2 Тогда + + ПутьКФайлу1 = ""; + ПутьКФайлу2 = ""; + + Если ДанныеФайла1.НомерВерсии < ДанныеФайла2.НомерВерсии Тогда + ПутьКФайлу1 = ПолноеИмяФайла1; + ПутьКФайлу2 = ПолноеИмяФайла2; + Иначе + ПутьКФайлу1 = ПолноеИмяФайла2; + ПутьКФайлу2 = ПолноеИмяФайла1; + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.СравнитьФайлы( + ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов); + + КонецЕсли; + + Состояние(); + #КонецЕсли +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl index 698f1d516..3b8806f47 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -4,6 +4,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + Если ТипЗнч(Объект.Владелец) = Тип("СправочникСсылка.Файлы") Тогда Элементы.ПолноеНаименование.ТолькоПросмотр = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html index 5ae9dc878..08a4f0df3 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для просмотра списка всех версий файла откройте его карточку (<strong>F2</strong> или команда "<strong>Открыть карточку</strong>") и перейдите в раздел "<strong>Версии файлов</strong>".</p> <p>В списке версий можно:</p> <ul><li>открыть файл версии соответствующим приложением для просмотра (команда "<strong>Открыть карточку</strong>"); diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html index 0686fdbc2..1f123e498 100644 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html +++ b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p class="Usual">Для каждого физического лица можно указать реквизиты документа, удостоверяющего личность. Для указания вида документа и используется этот справочник.</p> <p class="Usual">Справочник уже содержит основные документы, удостоверяющие личность, но может быть расширен пользователем.</p> <p class="Usual"> </p> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss index 784796455..91027f589 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">ЭтоГруппа</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form index 15abae079..b5b71662c 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form.form @@ -198,6 +198,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <excludedCommands>Copy</excludedCommands> <excludedCommands>Create</excludedCommands> <excludedCommands>CreateFolder</excludedCommands> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl new file mode 100644 index 000000000..24aa767ae --- /dev/null +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Module.bsl @@ -0,0 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Истина); +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form index d8008aa9f..0f08570a7 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form.form @@ -211,13 +211,13 @@ <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> - <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> <verticalScrollBar>AutoUse</verticalScrollBar> <horizontalLines>true</horizontalLines> <verticalLines>true</verticalLines> + <horizontalLinesBWA>false</horizontalLinesBWA> <searchOnInput>Auto</searchOnInput> <initialListView>Auto</initialListView> <initialTreeView>ExpandAllLevels</initialTreeView> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html index 4446115b8..7e8afe0d4 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Конфигурация позволяет хранить следующие типы контактной информации:</p> <ul><li> <div>Адрес — реквизит с таким типом контактной информации предназначен для хранения адреса в виде произвольной строки или в виде шаблона адреса. Позволяет заполнять адрес, используя адресный классификатор, из формы‑шаблона ввода адреса. Если адрес заполняется с помощью адресного классификатора, то индекс адреса устанавливается из классификатора автоматически, после окончания ввода адреса. Предопределенные фактический и юридический адреса используются в печатных формах документов.</div> diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 17b7f06f3..0a935bb1d 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -21,25 +20,19 @@ КонецЕсли; Если ОбъектНаСервере.ЭтоНовый() Тогда - Объект.МожноИзменятьСпособРедактирования = Истина; - + Объект.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; Иначе - Если ЭтоПредопределенный Тогда - Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; Элементы.Подсказка.ТолькоПросмотр = Истина; Иначе - Если Не ИспользуетсяЗапретРедактированияРеквизитов Тогда - Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; - КонецЕсли; КонецЕсли; @@ -49,11 +42,9 @@ Элементы.РазрешитьВводНесколькихЗначений.Доступность = ?(ОбъектНаСервере.Уровень() = 2, Ложь, Истина); Если Не Объект.МожноИзменятьСпособРедактирования Тогда - Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; - КонецЕсли; КонецПроцедуры @@ -61,7 +52,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ПриИзмененииТип(); + ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры @@ -78,10 +69,8 @@ Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Если Не ЭтоПредопределенный Тогда - // Обработчик подсистемы запрета редактирования реквизитов объектов. УправлениеКонтактнойИнформацией.ПриБлокировкеРеквизитовОбъекта(ЭтаФорма); - КонецЕсли; КонецПроцедуры @@ -99,21 +88,30 @@ &НаКлиенте Процедура ТипПриИзменении(Элемент) - ПриИзмененииТип(); + ИзменитьРеквизитыПриИзмененииТипа(); + ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры &НаКлиенте Процедура АдресТолькоРоссийскийПриИзменении(Элемент) - ПриИзмененииАдресТолькоРоссийский(); + ИзменитьРеквизитыПриИзмененииТолькоРоссии(); + ИзменитьОтображениеПриИзмененииТолькоРоссии(); КонецПроцедуры &НаКлиенте Процедура ПроверятьПоКлассификаторуПриИзменении(Элемент) - ПриИзмененииПроверятьКорректность(); + ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверятьКорректностьПриИзменении(Элемент) + + ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); КонецПроцедуры @@ -124,16 +122,12 @@ Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) Если Не ЭтоПредопределенный Тогда - РедактированиеРазрешено = Ложь; УправлениеКонтактнойИнформациейКлиент.ПриРазрешенииРедактированияРеквизитовОбъекта(ЭтаФорма, РедактированиеРазрешено); Если РедактированиеРазрешено Тогда - УправлениеКонтактнойИнформациейКлиент.ПриУстановкеДоступностиЭлементовФормы(ЭтаФорма); - КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -142,58 +136,75 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте -Процедура ПриИзмененииАдресТолькоРоссийский() - - Элементы.ПроверятьПоКлассификатору.Доступность = Объект.АдресТолькоРоссийский; - Элементы.СкрыватьНеактуальныеАдреса.Доступность = Объект.АдресТолькоРоссийский; - - Если Не Объект.АдресТолькоРоссийский Тогда - - Объект.ПроверятьКорректность = Ложь; - Объект.СкрыватьНеактуальныеАдреса = Ложь; - - КонецЕсли; - - ПриИзмененииПроверятьКорректность(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииТип() +Процедура ИзменитьОтображениеПриИзмененииТипа() Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Адрес; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; - ПриИзмененииАдресТолькоРоссийский(); + + ИзменитьОтображениеПриИзмененииТолькоРоссии(); + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.АдресЭлектроннойПочты; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; - Объект.РедактированиеТолькоВДиалоге = Ложь; - ПриИзмененииПроверятьКорректность(); + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; + Иначе Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; - Объект.РедактированиеТолькоВДиалоге = Ложь; + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПроверятьКорректностьПриИзменении(Элемент) - - ПриИзмененииПроверятьКорректность(); +Процедура ИзменитьРеквизитыПриИзмененииТипа() + Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + ИзменитьРеквизитыПриИзмененииТолькоРоссии(); + + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда + Объект.РедактированиеТолькоВДиалоге = Ложь; + ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); + + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") + Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда + // Нет изменений + + Иначе + Объект.РедактированиеТолькоВДиалоге = Ложь; + + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПриИзмененииПроверятьКорректность() +Процедура ИзменитьОтображениеПриИзмененииТолькоРоссии() + + Элементы.ПроверятьПоКлассификатору.Доступность = Объект.АдресТолькоРоссийский; + Элементы.СкрыватьНеактуальныеАдреса.Доступность = Объект.АдресТолькоРоссийский; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРеквизитыПриИзмененииТолькоРоссии() + + Если Не Объект.АдресТолькоРоссийский Тогда + Объект.ПроверятьКорректность = Ложь; + Объект.СкрыватьНеактуальныеАдреса = Ложь; + КонецЕсли; + + ИзменитьРеквизитыПриИзмененииПроверятьКорректность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРеквизитыПриИзмененииПроверятьКорректность() Объект.ЗапрещатьВводНекорректного = Объект.ПроверятьКорректность; КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html index bb0aa15e9..88e7af97a 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Справочник <strong>Виды контактной информации</strong> имеет двухуровневую иерархию.  Группы справочника соответствуют справочникам-носителям контактной информации, а элементы внутри этих групп определяют состав контактной информации этих справочников. Добавление новых групп в этот справочник запрещено. Поставка конфигурации осуществляется c предопределенными группами и элементами справочника. Для добавления произвольного реквизита в один из этих справочников, необходимо добавить в справочник <strong>Виды контактной информации</strong> в соответствующую группу новый элемент.</p> <p><strong><font size="2">См. также</font></strong></p> <ul><li><font size="1"><a href="Catalog.ВидыКонтактнойИнформации.Form.ФормаЭлемента/Help">Типы контактной информации</a></font></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss index c8ebe3063..91027f589 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,45 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Недействителен</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> - <item xsi:type="FilterItemComparison"> - <use>false</use> - <left xsi:type="dcscor:Field">ПометкаУдаления</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <field>Наименование</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> <conditionalAppearance> - <item> - <selection/> - <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Недействителен</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">true</right> - </item> - </filter> - <appearance> - <dcscor:item xsi:type="SettingsParameterValue"> - <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:ТекстЗапрещеннойЯчейкиЦвет</dcscor:value> - </dcscor:item> - </appearance> - </item> <viewMode>Normal</viewMode> <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> </conditionalAppearance> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ГруппыВнешнихПользователей/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ГруппыВнешнихПользователей/ExtInfo/ListSettings.dcss index 31e6269dc..91027f589 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ГруппыВнешнихПользователей/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ГруппыВнешнихПользователей/ExtInfo/ListSettings.dcss @@ -5,14 +5,6 @@ <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <field>Предопределенный</field> - <orderType>Desc</orderType> - </item> - <item xsi:type="OrderItemField"> - <field>Наименование</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index d913d23e4..0c68387f4 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -1455,7 +1455,7 @@ </handlers> <handlers> <event>BeforeLoadDataFromSettingsAtServer</event> - <name>ПриЗагрузкеДанныхИзНастроекНаСервере</name> + <name>ПередЗагрузкеДанныхИзНастроекНаСервере</name> </handlers> <excludedCommands>Create</excludedCommands> <width>80</width> @@ -1488,6 +1488,9 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>ВнешниеПользователиСписок.Недействителен</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index e74290369..086fc82cf 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -31,11 +31,10 @@ ЗаполнитьПараметрыДинамическихСписков(); Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; - ОбновитьОтборНедействительныхПользователей(ЭтаФорма); - // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда @@ -62,9 +61,11 @@ "Ссылка", Параметры.СкрываемыеПользователи, ВидСравненияКД); - КонецЕсли; + НастроитьПорядокГруппыВсеВнешниеПользователи(ГруппыВнешнихПользователей); + ОформитьИСкрытьНедействительныхВнешнихПользователей(); + ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор); Элементы.ВыбранныеПользователиИГруппы.Видимость = ХранимыеПараметры.РасширенныйПодбор; ХранимыеПараметры.Вставить( @@ -81,7 +82,9 @@ КонецЕсли; // Отбор не помеченных на удаление. - ВнешниеПользователиСписок.Отбор.Элементы[0].Использование = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); Элементы.ВнешниеПользователиСписок.РежимВыбора = Истина; Элементы.ГруппыВнешнихПользователей.РежимВыбора = @@ -140,7 +143,7 @@ КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) +Процедура ПередЗагрузкеДанныхИзНастроекНаСервере(Настройки) Если ТипЗнч(Настройки["ВыбиратьИерархически"]) = Тип("Булево") Тогда ВыбиратьИерархически = Настройки["ВыбиратьИерархически"]; @@ -208,7 +211,7 @@ ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИзаполнитьСписокВыбранных(Значение); + ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); КонецЕсли; @@ -314,7 +317,7 @@ ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"); Иначе - ТекстВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); + ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонВопроса, ДействиеСПользователем, КоличествоПользователей, @@ -382,7 +385,7 @@ ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИзаполнитьСписокВыбранных(Значение); + ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); КонецЕсли; @@ -445,7 +448,12 @@ &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) - ОбновитьОтборНедействительныхПользователей(ЭтаФорма, Истина); + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "Недействителен", Ложь, , , + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка); КонецПроцедуры @@ -566,6 +574,61 @@ КонецПроцедуры +&НаСервере +Процедура НастроитьПорядокГруппыВсеВнешниеПользователи(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Предопределенный"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ОформитьИСкрытьНедействительныхВнешнихПользователей() + + // Оформление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок.Недействителен"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ВнешниеПользователиСписок"); + ЭлементОформляемогоПоля.Использование = Истина; + + // Скрытие. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ВнешниеПользователиСписок, "Недействителен", Ложь, , , Истина); + +КонецПроцедуры + &НаСервере Процедура УдалитьИзСпискаВыбранных(УдалитьВсех = Ложь) @@ -585,7 +648,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПолучитьКартинкиИзаполнитьСписокВыбранных(МассивВыбранныхЭлементов) +Процедура ПолучитьКартинкиИЗаполнитьСписокВыбранных(МассивВыбранныхЭлементов) ВыбранныеЭлементыИКартинки = Новый Массив; Для Каждого ВыбранныйЭлемент Из МассивВыбранныхЭлементов Цикл @@ -621,7 +684,7 @@ ВыбранныеПользователиИГруппы.Загрузить(ПараметрыРасширеннойФормыПодбора.ВыбранныеПользователи); ХранимыеПараметры.Вставить("ЗаголовокФормыПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора); Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); - // Установка параметров раширенной формы подбора. + // Установка параметров расширенной формы подбора. Элементы.ЗавершитьИЗакрыть.Видимость = Истина; Элементы.ГруппаВыбратьПользователя.Видимость = Истина; // Включение видимости списка выбранных пользователей. @@ -699,34 +762,6 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьОтборНедействительныхПользователей(Форма, ИзменитьОтбор = Ложь) - - Элементы = Форма.Элементы; - - Если ИзменитьОтбор Тогда - - Элементы.ПоказыватьНедействительныхПользователей.Пометка = - НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; - - ИначеЕсли Форма.Параметры.Отбор.Свойство("Недействителен") Тогда - - Элементы.ПоказыватьНедействительныхПользователей.Пометка = - Форма.Параметры.Отбор.Недействителен; - - КонецЕсли; - - Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Форма.ВнешниеПользователиСписок, "Недействителен", Ложь, , , Ложь); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Форма.ВнешниеПользователиСписок, "Недействителен", Ложь, , , Истина); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПриИзмененииИспользованияГруппПользователей() diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index 62e8ca2ac..fd5225672 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для редактирования сведений о внешнем ользователе необходимы права администрирования или права ответственного за внешних пользователей. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.</p> <p>Внешний пользователь связан с каким-то объектом программы (например, контрагентом, сотрудником и т.п.), указанным в поле <strong>Объект</strong>.</p> <p>Флажок <strong>Недействителен</strong> по умолчанию снят для всех внешних пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого внешнего пользователя нельзя выбрать, и он не отображается в списке внешних пользователей.</p> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index f7bc963a1..7c74d75e9 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -205,8 +205,12 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - ПараметрыЗаписи.Вставить( - ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + + ПараметрыЗаписи.Вставить( + ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); + КонецЕсли; ПрочитатьПользователяИБ(); @@ -417,7 +421,7 @@ ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда // Менеджер внешних пользователей. ДействияВФорме.Роли = ""; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; + ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; ДействияВФорме.СвойстваЭлемента = "Просмотр"; ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index ce4203dfd..873d50838 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке ведется учет пользователей, которые работают с программой "извне". Их доступ, как правило, сильно ограничен, они не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой.</p> <p>Основной способ создания и редактирования внешних пользователей через команду <strong>Внешний доступ</strong>, которая размещается в командной панели формы объектов, например, в карточке контрагента, физического лица. При выполнении команды сразу создается внешний пользователь, связанный с объектом, или открывается существующий внешний пользователь.</p> <p>В случае большого количества внешних пользователей список может быть сгруппирован, например, по видам отношений с ними: партнеры, контрагенты и т.д. Для того чтобы увидеть всех внешних пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать внешних пользователей дочерних групп</strong> в нижней части списка. Для добавления новых групп внешних пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа внешних пользователей можно открыть форму группы и воспользоваться командой <strong>Подобрать</strong>. Один и тот же внешний пользователь может одновременно входить в разные группы внешних пользователей.</p> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index c34684cd2..ca0981afe 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -13,25 +13,7 @@ Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - Если ВидФормы = "ФормаВыбора" Тогда - - ПараметрИзменен = Ложь; - - Если Не Параметры.Свойство("Отбор") Тогда - Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь)); - ПараметрИзменен = Истина; - - ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда - Параметры.Отбор.Вставить("Недействителен", Ложь); - ПараметрИзменен = Истина; - КонецЕсли; - - Если ПараметрИзменен Тогда - СтандартнаяОбработка = Ложь; - ВыбраннаяФорма = "ФормаСписка"; - КонецЕсли; - - ИначеЕсли ВидФормы = "ФормаОбъекта" И Параметры.Свойство("ОбъектАвторизации") Тогда + Если ВидФормы = "ФормаОбъекта" И Параметры.Свойство("ОбъектАвторизации") Тогда СтандартнаяОбработка = Ложь; ВыбраннаяФорма = "ФормаЭлемента"; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index a7bf3074a..91027f589 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,30 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <use>false</use> - <left xsi:type="dcscor:Field">ПометкаУдаления</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> - <item xsi:type="FilterItemComparison"> - <use>false</use> - <left xsi:type="dcscor:Field">Ссылка</left> - <comparisonType>NotInList</comparisonType> - <right xsi:type="dcscor:DesignTimeValue">Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <field>Предопределенный</field> - <orderType>Desc</orderType> - </item> - <item xsi:type="OrderItemField"> - <field>Наименование</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form index bc3040128..4cff6a4d9 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form.form @@ -240,6 +240,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <width>65</width> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index a5e2eb3bb..8ce442e58 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -8,14 +8,24 @@ Возврат; КонецЕсли; + НастроитьПорядокГруппыВсеВнешниеПользователи(Список); + Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.РежимВыбора = Истина; + // Отбор не помеченных на удаление. - Список.Отбор.Элементы[0].Использование = Истина; - Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя"); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + // Исключение выбора группы Все внешние пользователи в качестве родителя. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, + ВидСравненияКомпоновкиДанных.НеРавно, , Параметры.Свойство("ВыборРодителя")); Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. @@ -28,3 +38,35 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура НастроитьПорядокГруппыВсеВнешниеПользователи(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Предопределенный"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index 889e4eb46..c05c31be2 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Карточка группы внешних пользователей позволяет просматривать и редактировать свойства группы.</p> <p>Для группы пользователей можно установить <strong>Тип участников </strong>(например, контрагенты). Группа может неявно включать всех внешних пользователей для установленного типа участников. Для этого нужно установить флажок <strong>Все</strong>.</p> <p>При редактировании состава пользователей группы нужно учитывать, что они неявно входят в состав групп-родителей. Для добавления большого числа пользователей можно использовать команду <strong>Подобрать</strong>.</p> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index 70494bca7..4fad007b8 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -16,14 +16,17 @@ // Подготовка вспомогательных данных. ЗаполнитьСписокТиповОбъектовАвторизации(); - ОтобратьДоступныеДляВыбораТипыУчастниковГруппы(); - - Если Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка() - И Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + + Если Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи + Или ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Родитель, "ВсеОбъектыАвторизации") Тогда + Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); + КонецЕсли; - Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); КонецЕсли; + ОтобратьДоступныеДляВыбораТипыУчастниковГруппы(); + ОпределитьДействияВФорме(); // Установка постоянной доступности свойств. @@ -179,7 +182,7 @@ ПредставлениеТипаОбъектовАвторизации = ТипыОбъектовАвторизации[0].Представление; Объект.ТипОбъектовАвторизации = ТипыОбъектовАвторизации[0].Значение; КонецЕсли; - Иначе + Иначе ПредставлениеТипаОбъектовАвторизации = ""; Объект.ТипОбъектовАвторизации = Неопределено; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index 3a18ddebd..ec744cbaf 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p class="Usual">В этом списке ведется учет групп внешних пользователей.</p> <p class="Usual">Группы внешних пользователей могут использоваться для группировки большого числа внешних пользователей, а также когда нужно указывать не только внешнего пользователя, но и группу внешних пользователей, например, при настройке доступа.<br></p> <p class="Usual">Группы создаются плоским списком или иерархическим. В иерархическом списке, внешние пользователи вложенных групп неявно входят в группы-родители.</p> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 64d0fa846..4417b704c 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -110,6 +110,10 @@ ВызватьИсключение НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" |не может быть родителем.'"); + ИначеЕсли Родитель.ВсеОбъектыАвторизации Тогда + ВызватьИсключение + НСтр("ru = 'Группа, у которой стоит тип участников ""Все пользователи заданного типа"" + |не может быть родителем.'"); КонецЕсли; Если ТипОбъектовАвторизации = Неопределено Тогда @@ -172,6 +176,31 @@ КонецЕсли; КонецЕсли; + // Если группе внешних пользователей устанавливается тип участников "Все пользователи заданного типа", + // проверяем наличие подчиненных групп. + Если ВсеОбъектыАвторизации + И ЗначениеЗаполнено(Ссылка) Тогда + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + |ГДЕ + | ГруппыВнешнихПользователей.Родитель = &Ссылка"; + + РезультатЗапроса = Запрос.Выполнить(); + Если НЕ РезультатЗапроса.Пустой() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У группы внешних пользователей ""%1"" + |невозможно изменить тип участников, + |так как существует нижестоящая группа внешних пользователей'"), + Наименование); + КонецЕсли; + + КонецЕсли; + // Проверка, что при изменении типа объектов авторизации // нет подчиненных элементов другого типа (очистка типа допустима). Если ТипОбъектовАвторизации <> Неопределено diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl index 9cfef127a..b0376dad3 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоОтветственному/Module.bsl @@ -37,19 +37,20 @@ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | ВЫБОР - | КОГДА ГруппыДоступа.ПометкаУдаления - | ТОГДА ЛОЖЬ | КОГДА ГруппыДоступа.ЭтоГруппа | ТОГДА ИСТИНА - | КОГДА ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) - | ТОГДА ЛОЖЬ | КОГДА ГруппыДоступа.Ссылка В (&Выбранные) | ТОГДА ЛОЖЬ - | КОГДА &ПолноправныйОтветственный = ЛОЖЬ - | И ГруппыДоступа.Ответственный <> &Ответственный + | КОГДА ГруппыДоступа.ПометкаУдаления | ТОГДА ЛОЖЬ | КОГДА ГруппыДоступа.Профиль.ПометкаУдаления | ТОГДА ЛОЖЬ + | КОГДА ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | ТОГДА &ПолноправныйОтветственный + | И ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.Пользователи) + | КОГДА &ПолноправныйОтветственный = ЛОЖЬ + | И ГруппыДоступа.Ответственный <> &Ответственный + | ТОГДА ЛОЖЬ | ИНАЧЕ ВЫБОР | КОГДА ГруппыДоступа.Пользователь = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА @@ -167,7 +168,7 @@ Элементы.ГруппыДоступа.Развернуть(Элементы.ГруппыДоступа.ТекущаяСтрока); КонецЕсли; Иначе - Закрыть(ТекущиеДанные.Ссылка); + ОповеститьОВыборе(ТекущиеДанные.Ссылка); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Form.form index e046daf92..d7f42bb1f 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Form.form @@ -193,7 +193,7 @@ <excludedCommands>Retry</excludedCommands> <excludedCommands>SaveValues</excludedCommands> <excludedCommands>Yes</excludedCommands> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/Catalogs/СтраныМира/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..ff6c39986 --- /dev/null +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Form.form @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Table"> + <name>Список</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список</segments> + </dataPath> + <defaultItem>true</defaultItem> + <titleLocation>None</titleLocation> + <excludedCommands>Create</excludedCommands> + <items xsi:type="form:FormField"> + <name>Наименование</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Description</segments> + </dataPath> + <defaultItem>true</defaultItem> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>16</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>5</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> + <id>3</id> + <horizontalAlign>Left</horizontalAlign> + </autoCommandBar> + <searchStringAddition> + <name>СписокСтрокаПоиска</name> + <id>7</id> + <extendedTooltip> + <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> + <id>9</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокСтрокаПоискаКонтекстноеМеню</name> + <id>8</id> + <autoFill>true</autoFill> + </contextMenu> + <source>Список</source> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchStringAddition> + <viewStatusAddition> + <name>СписокСостояниеПросмотра</name> + <id>10</id> + <extendedTooltip> + <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <id>12</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокСостояниеПросмотраКонтекстноеМеню</name> + <id>11</id> + <autoFill>true</autoFill> + </contextMenu> + <type>ViewStatusAddition</type> + <source>Список</source> + <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </viewStatusAddition> + <searchControlAddition> + <name>СписокУправлениеПоиском</name> + <id>13</id> + <extendedTooltip> + <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> + <id>15</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокУправлениеПоискомКонтекстноеМеню</name> + <id>14</id> + <autoFill>true</autoFill> + </contextMenu> + <type>SearchControlAddition</type> + <source>Список</source> + <extInfo xsi:type="form:SearchControlAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchControlAddition> + <extendedTooltip> + <name>СписокРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <representation>Tree</representation> + <changeRowSet>true</changeRowSet> + <changeRowOrder>true</changeRowOrder> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <autoMaxRowsCount>true</autoMaxRowsCount> + <choiceMode>true</choiceMode> + <selectionMode>MultiRow</selectionMode> + <headerHeight>1</headerHeight> + <footerHeight>1</footerHeight> + <horizontalScrollBar>AutoUse</horizontalScrollBar> + <verticalScrollBar>AutoUse</verticalScrollBar> + <horizontalLines>true</horizontalLines> + <verticalLines>true</verticalLines> + <horizontalLinesBWA>false</horizontalLinesBWA> + <verticalLinesBWA>false</verticalLinesBWA> + <useAlternationRowColorBWA>false</useAlternationRowColorBWA> + <searchOnInput>Auto</searchOnInput> + <initialListView>Auto</initialListView> + <initialTreeView>ExpandTopLevel</initialTreeView> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + <enableStartDrag>true</enableStartDrag> + <enableDrag>true</enableDrag> + <rowPictureDataPath xsi:type="form:DataPath"> + <segments>Список.DefaultPicture</segments> + </rowPictureDataPath> + <searchStringLocation>None</searchStringLocation> + <viewStatusLocation>None</viewStatusLocation> + <searchControlLocation>None</searchControlLocation> + <autoMaxCardHeight>true</autoMaxCardHeight> + <extInfo xsi:type="form:DynamicListTableExtInfo"> + <autoRefreshPeriod>60</autoRefreshPeriod> + <period> + <startDate>0001-01-01T00:00:00</startDate> + <endDate>0001-01-01T00:00:00</endDate> + </period> + <choiceFoldersAndItems>Folders</choiceFoldersAndItems> + <topLevelParent xsi:type="core:UndefinedValue"/> + <showRoot>true</showRoot> + <allowRootChoice>true</allowRootChoice> + <allowGettingCurrentRowURL>true</allowGettingCurrentRowURL> + </extInfo> + </items> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <excludedCommands>Create</excludedCommands> + <windowOpeningMode>LockOwner</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Список</name> + <id>1</id> + <valueType> + <types>DynamicList</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + <extInfo xsi:type="form:DynamicListExtInfo"> + <mainTable>Catalog.ГруппыДоступа</mainTable> + <dynamicDataRead>true</dynamicDataRead> + <autoFillAvailableFields>true</autoFillAvailableFields> + <autoSaveUserSettings>true</autoSaveUserSettings> + <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> + </extInfo> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> + <extInfo xsi:type="form:DynamicListFormExtInfo"/> +</form:Form> diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl new file mode 100644 index 000000000..5c5df988e --- /dev/null +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -0,0 +1,18 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Отбор только групп. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ЭтоГруппа", Истина, , , Истина); + + // Отбор не помеченных на удаление. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form index bf2dc6469..7463d7201 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Form.form @@ -11,6 +11,10 @@ <dataPath xsi:type="form:DataPath"> <segments>Объект.Description</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Наименование группы (папки)</value> + </toolTip> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> <id>5</id> @@ -44,6 +48,10 @@ <items xsi:type="form:FormField"> <name>Родитель</name> <id>3</id> + <title> + <key>ru</key> + <value>Вышестоящая группа (папка)</value> + true true @@ -52,6 +60,10 @@ Объект.Parent + + ru + Вышестоящая группа (папка), объединяющая группы (папки) для удобства поиска + РодительРасширеннаяПодсказка 7 diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 360d5fa46..91027f589 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,21 +1,6 @@ - - Ссылка - NotInList - - - -1 - - Inaccessible - - - false - ПометкаУдаления - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index ee2fa0af7..c879f4d3a 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -655,12 +655,6 @@ Справочник.ГруппыДоступа КАК ГруппыДоступа ГДЕ ВЫБОР - КОГДА &РежимВыбора - И &РежимВыбораТолькоГрупп - ТОГДА ГруппыДоступа.ЭтоГруппа - ИНАЧЕ ИСТИНА - КОНЕЦ - И ВЫБОР КОГДА &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.ПустаяСсылка) ТОГДА ИСТИНА ИНАЧЕ ГруппыДоступа.Профиль = &Профиль diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html index c9bc9cfe6..f17e84d61 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ - +

Назначение групп доступа см. здесь.

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

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

diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index e71948900..e74b2c4fd 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -8,6 +8,10 @@ Возврат; КонецЕсли; + Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; + КонецЕсли; + Элементы.Список.РежимВыбора = Параметры.РежимВыбора; РодительПерсональныхГруппДоступа = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина); @@ -27,8 +31,7 @@ Элементы.Список.Отображение = ОтображениеТаблицы.Список; Автозаголовок = Ложь; - Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( - НСтр("ru = 'Группы доступа: %1 (%2)'"), Параметры.Профиль); + Заголовок = НСтр("ru = 'Группы доступа'"); Элементы.ФормаСоздатьГруппу.Видимость = Ложь; Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; @@ -48,20 +51,14 @@ СписокНедоступныхГрупп = Новый СписокЗначений; Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - СписокНедоступныхГрупп.Добавить(Справочники.ГруппыДоступа.Администраторы); + // Скрытие группы доступа Администраторы. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", Справочники.ГруппыДоступа.Администраторы, + ВидСравненияКомпоновкиДанных.НеРавно, , Истина); КонецЕсли; - Список.Отбор.Элементы[0].ПравоеЗначение = СписокНедоступныхГрупп; РежимВыбора = Параметры.РежимВыбора; - Список.Параметры.УстановитьЗначениеПараметра( - "РежимВыбора", - Параметры.РежимВыбора); - - Список.Параметры.УстановитьЗначениеПараметра( - "РежимВыбораТолькоГрупп", - Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); - Список.Параметры.УстановитьЗначениеПараметра( "ОшибкаОбъектНеНайден", НСтр("ru = '<Объект не найден>'")); @@ -71,17 +68,12 @@ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; // Отбор не помеченных на удаление. - Список.Отбор.Элементы[1].Использование = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; - Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда - - Элементы.Список.НачальноеОтображениеДерева = - НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; - - Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; - КонецЕсли; АвтоЗаголовок = Ложь; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index b7b4ae111..38f03db32 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -2630,6 +2630,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html index 739960f0d..552c348b6 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

Назначение групп доступа см. здесь.

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

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

diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 2635467f0..343dfe763 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -79,14 +79,14 @@ Элементы.ВидыДоступаИзменить.Доступность = НЕ ТолькоПросмотр; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Объект.Ссылка <> Справочники.ГруппыДоступа.Администраторы Тогда + И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда ДействияСПользователемСервиса = Неопределено; УправлениеДоступомСлужебный.ПриПолученииДействийСПользователемСервиса(ДействияСПользователемСервиса); Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда ВызватьИсключение - НСтр("ru = 'Не достаточно прав доступа для изменения состава администраторов'"); + НСтр("ru = 'Не достаточно прав доступа для изменения состава администраторов.'"); КонецЕсли; КонецЕсли; @@ -146,6 +146,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АутентификацияВСервисе") + И ВыбранноеЗначение <> Неопределено Тогда + + ПарольПользователяСервиса = ВыбранноеЗначение; + Записать(); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) @@ -160,8 +172,17 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено Тогда - СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ); + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено + И Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + + ПарольЕщёНеВведен = Ложь; + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); + + Если ПарольЕщёНеВведен Тогда + Отказ = Истина; + Возврат; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -197,7 +218,8 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); + ТекущийОбъект.ДополнительныеСвойства.Вставить( + "ПарольПользователяСервиса", ПарольПользователяСервиса); КонецЕсли; КонецПроцедуры @@ -393,30 +415,13 @@ Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - Пользователи.НайтиНеоднозначныхПользователейИБ(); + ОписаниеОшибки = ""; + УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( + ПользователиГруппы.ПолучитьЭлементы(), ОписаниеОшибки); - // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. - УстановитьПривилегированныйРежим(Истина); - НайденПользовательИБ = Ложь; - - Для каждого ОписаниеПользователя ИЗ ПользователиГруппы.ПолучитьЭлементы() Цикл - - Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - - НайденПользовательИБ = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если НЕ НайденПользовательИБ Тогда - + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, - "ПользователиГруппы", - НСтр("ru = 'В группе доступа Администраторы - |должен быть хотя бы один пользователь, - |которому разрешен доступ к информационной базе.'")); + "ПользователиГруппы", ОписаниеОшибки); КонецЕсли; КонецЕсли; @@ -1969,4 +1974,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html index 263330e40..330891784 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index 87138bc12..9dfa24c0d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -178,4 +178,15 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +Процедура ЗаполнитьПрофильГруппыДоступаАдминистраторы() Экспорт + + Объект = Администраторы.ПолучитьОбъект(); + Объект.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + +КонецПроцедуры + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo index ca28658b9..0d20ec5a3 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo +++ b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo @@ -68,9 +68,13 @@ Use Parent + + ru + Группа (папка) + ru - Папка, объединяющая группы доступа для удобства поиска + Группа (папка), объединяющая группы доступа для удобства поиска true @@ -134,7 +138,7 @@ Catalog.ГруппыДоступа.Form.ФормаГруппы Catalog.ГруппыДоступа.Form.ФормаСписка Catalog.ГруппыДоступа.Form.ФормаСписка - Catalog.ГруппыДоступа.Form.ФормаСписка + Catalog.ГруппыДоступа.Form.ФормаВыбораГруппы Профиль @@ -239,6 +243,25 @@ Use Use + + ОсновнаяГруппаДоступаПоставляемогоПрофиля + + ru + Основная группа доступа поставляемого профиля + + + Boolean + + + ru + Определяет основную группу доступа поставляемого профиля без видов доступа для программного управления составом пользователей. + + + + + Use + Use + @@ -436,6 +459,15 @@ PersonalComputer MobileDevice + + ФормаВыбораГруппы + + ru + Форма выбора группы + + PersonalComputer + MobileDevice + ОбновлениеДанныхОграниченияДоступа diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index d1c2189c7..91027f589 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,30 +1,10 @@ - - false - ПометкаУдаления - Equal - false - - - false - Ссылка - NotInList - Справочник.ГруппыПользователей.ВсеПользователи - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb - - Предопределенный - Desc - - - Наименование - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form index 82d4e268a..e3073d887 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Form.form @@ -243,6 +243,7 @@ OnCreateAtServer ПриСозданииНаСервере
+ 65 DontBlock true true diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index 74146249c..8ceb386b3 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -8,14 +8,24 @@ Возврат; КонецЕсли; + НастроитьПорядокГруппыВсеПользователи(Список); + Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.РежимВыбора = Истина; + // Отбор не помеченных на удаление. - Список.Отбор.Элементы[0].Использование = Истина; - Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя"); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + // Исключение выбора группы Все внешние пользователи в качестве родителя. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", Справочники.ГруппыПользователей.ВсеПользователи, + ВидСравненияКомпоновкиДанных.НеРавно, , Параметры.Свойство("ВыборРодителя")); Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. @@ -28,3 +38,35 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура НастроитьПорядокГруппыВсеПользователи(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Предопределенный"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index eed3716c5..f8a5a9c94 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

См. также

diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html index 96d68075e..5dedb0817 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form index a87cf04e8..38d473845 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form @@ -772,7 +772,7 @@ OnCreateAtServer ПриСозданииНаСервере
- DontBlock + LockOwner true true Vertical diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index 40edb8fe1..96c638e9a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -3,15 +3,13 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Быстрый доступ к команде ""%1""'"), - Параметры.ПредставлениеКоманды - ); + Параметры.ПредставлениеКоманды); Для Каждого ПользовательСтрока Из Параметры.ПользователиСБыстрымДоступом Цикл НоваяСтрока = ПользователиКороткогоСписка.Добавить(); @@ -122,13 +120,13 @@ &НаКлиенте Процедура ОК(Команда) - Результат = Новый СписокЗначений; + РезультатВыбора = Новый СписокЗначений; Для Каждого ЭлементКоллекции Из ПользователиКороткогоСписка Цикл - Результат.Добавить(ЭлементКоллекции.Пользователь); + РезультатВыбора.Добавить(ЭлементКоллекции.Пользователь); КонецЦикла; - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form index 9cb31a8e5..92e045557 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form @@ -318,7 +318,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl index 974dd0727..934e95a3d 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl @@ -3,8 +3,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -48,15 +47,15 @@ &НаКлиенте Процедура ОК(Команда) - Результат = Новый СписокЗначений; + РезультатВыбора = Новый СписокЗначений; Для Каждого РазделЭлемент Из Разделы Цикл Если РазделЭлемент.Используется Тогда - Результат.Добавить(РазделЭлемент.Раздел); + РезультатВыбора.Добавить(РазделЭлемент.Раздел); КонецЕсли; КонецЦикла; - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index f4fcf23de..bd76767bd 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -748,7 +748,7 @@ КОГДА &ПубликацияОтбор = НЕОПРЕДЕЛЕНО ТОГДА ИСТИНА КОГДА &ПубликацияОтбор = 1 - ТОГДА Таблица.Публикация В (&ВсеПубликацииКромеНеиспользуюшихся) + ТОГДА Таблица.Публикация В (&ВсеПубликацииКромеНеиспользующихся) ИНАЧЕ Таблица.Публикация = &ПубликацияОтбор КОНЕЦ И ВЫБОР diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index a8cf0c6f8..cd98b5d8a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -28,19 +28,18 @@ ДоступныеВидыПубликации = ДополнительныеОтчетыИОбработкиПовтИсп.ДоступныеВидыПубликации(); - ВсеПубликацииКромеНеиспользуюшихся = Новый Массив; - ВсеПубликацииКромеНеиспользуюшихся.Добавить(ВидИспользуется); + ВсеПубликацииКромеНеиспользующихся = Новый Массив; + ВсеПубликацииКромеНеиспользующихся.Добавить(ВидИспользуется); Если ДоступныеВидыПубликации.Найти(ВидРежимОтладки) <> Неопределено Тогда - ВсеПубликацииКромеНеиспользуюшихся.Добавить(ВидРежимОтладки); + ВсеПубликацииКромеНеиспользующихся.Добавить(ВидРежимОтладки); КонецЕсли; - Если ВсеПубликацииКромеНеиспользуюшихся.Количество() > 1 Тогда + Если ВсеПубликацииКромеНеиспользующихся.Количество() > 1 Тогда ПредставлениеМассива = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 или %2'"), - Строка(ВсеПубликацииКромеНеиспользуюшихся[0]), - Строка(ВсеПубликацииКромеНеиспользуюшихся[1]) - ); + Строка(ВсеПубликацииКромеНеиспользующихся[0]), + Строка(ВсеПубликацииКромеНеиспользующихся[1])); СписокВыбора.Добавить(1, ПредставлениеМассива); @@ -67,7 +66,7 @@ Список.Параметры.УстановитьЗначениеПараметра("ПубликацияОтбор", ПубликацияОтбор); Список.Параметры.УстановитьЗначениеПараметра("ВидОтбор", ВидОтбор); Список.Параметры.УстановитьЗначениеПараметра("ВидыДопОтчетов", ВидыДопОтчетов); - Список.Параметры.УстановитьЗначениеПараметра("ВсеПубликацииКромеНеиспользуюшихся", ВсеПубликацииКромеНеиспользуюшихся); + Список.Параметры.УстановитьЗначениеПараметра("ВсеПубликацииКромеНеиспользующихся", ВсеПубликацииКромеНеиспользующихся); Элементы.КнопкиДобавления.Видимость = ДополнительныеОтчетыИОбработки.ПравоДобавления(); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 1a5995b94..77e385f39 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -2553,6 +2553,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 38e485a56..07af07be4 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 9b52d09e9..303adc9e0 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем КлиентскийКэш; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -47,8 +50,7 @@ АдресРазрешений = ПоместитьВоВременноеХранилище( РеквизитФормыВЗначение("Объект").Разрешения.Выгрузить(), - ЭтаФорма.УникальныйИдентификатор - ); + ЭтаФорма.УникальныйИдентификатор); УстановитьВидимостьДоступность(); @@ -57,6 +59,8 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + КлиентскийКэш = Новый Структура; + Если ЭтоНовый Тогда Если НЕ ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(Истина) Тогда @@ -67,6 +71,53 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Объект.Разделы.Очистить(); + Для Каждого ЭлементСписка Из ВыбранноеЗначение Цикл + НоваяСтрока = Объект.Разделы.Добавить(); + НоваяСтрока.Раздел = ЭлементСписка.Значение; + КонецЦикла; + + Модифицированность = Истина; + УстановитьВидимостьДоступность(); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.БыстрыйДоступКДополнительнымОтчетамИОбработкам") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + ЭлементКоманда = Объект.Команды.НайтиПоИдентификатору(КлиентскийКэш.ИдентификаторСтрокиКоманды); + Если ЭлементКоманда = Неопределено Тогда + Возврат; + КонецЕсли; + + Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + БыстрыйДоступ.Удалить(СтрокаТаблицы); + КонецЦикла; + + Для Каждого ЭлементСписка Из ВыбранноеЗначение Цикл + СтрокаТаблицы = БыстрыйДоступ.Добавить(); + СтрокаТаблицы.ИдентификаторКоманды = ЭлементКоманда.Идентификатор; + СтрокаТаблицы.Пользователь = ЭлементСписка.Значение; + КонецЦикла; + + ЭлементКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей(ВыбранноеЗначение.Количество()); + Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -85,8 +136,7 @@ АдресДанныхОбработки = ПоместитьВоВременноеХранилище( ТекущийОбъект.ХранилищеОбработки.Получить(), - УникальныйИдентификатор - ); + УникальныйИдентификатор); КонецЕсли; @@ -123,13 +173,15 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("БыстрыйДоступ", БыстрыйДоступ.Выгрузить()); ТекущийОбъект.Разрешения.Загрузить( - ПолучитьИзВременногоХранилища(АдресРазрешений) - ); + ПолучитьИзВременногоХранилища(АдресРазрешений)); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ОшибкаПодключения") Тогда + Сообщить(ТекущийОбъект.ДополнительныеСвойства.ОшибкаПодключения); + КонецЕсли; ЭтоНовый = Ложь; УстановитьВидимостьДоступность(); КонецПроцедуры @@ -143,8 +195,7 @@ ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария( Объект.Комментарий, Объект.Комментарий, - Модифицированность - ); + Модифицированность); КонецПроцедуры &НаКлиенте @@ -174,8 +225,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пометить ""%1"" на удаление?'"), - Вариант.Наименование - ); + Вариант.Наименование); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Если Ответ <> КодВозвратаДиалога.Да Тогда @@ -311,7 +361,12 @@ МассивВариантов.Добавить(Вариант.Ссылка); КонецЕсли; КонецЦикла; - ДополнительныеОтчетыИОбработкиКлиент.ПриОткрытииДиалогаРазмещенияВариантовДополнительныхОтчетовВРазделах(МассивВариантов); + + // Открывает диалог размещения нескольких вариантов отчетов в разделах командного интерфейса. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетовКлиент"); + МодульВариантыОтчетовКлиент.ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -325,20 +380,11 @@ Разделы.Добавить(СтрокаТаблицы.Раздел); КонецЦикла; - СписокРазделов = ОткрытьФормуМодально( - "Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", - Новый Структура("Разделы,ВидОбработки", Разделы, Объект.Вид) - ); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Разделы", Разделы); + ПараметрыФормы.Вставить("ВидОбработки", Объект.Вид); - Если ТипЗнч(СписокРазделов) = Тип("СписокЗначений") Тогда - Объект.Разделы.Очистить(); - Для Каждого ЭлементСписка Из СписокРазделов Цикл - НоваяСтрока = Объект.Разделы.Добавить(); - НоваяСтрока.Раздел = ЭлементСписка.Значение; - КонецЦикла; - Модифицированность = Истина; - УстановитьВидимостьДоступность(); - КонецЕсли; + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", ПараметрыФормы, ЭтаФорма); Иначе // Выбор объектов метаданных ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных(); @@ -420,8 +466,7 @@ ПоказатьОповещениеПользователя( НСтр("ru = 'Файл обработки успешно загружен'"), ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка)), - ПараметрыРегистрации.ИмяФайла - ); + ПараметрыРегистрации.ИмяФайла); Возврат Истина; КонецЕсли; @@ -462,12 +507,11 @@ | |Доступные действия: |1. ""Продолжить"" - продолжить загрузку, отключив Публикацию текущего отчета (обработки). - |2. ""Отключить конфликтующие"" - продолжить загрузку, отключив Публикацию отчетов (обработок), конфликтующих с загружамой по имени. - |3. ""Показать конфликтующие"" - отменить загрузку и показать список отчетов (обработок), конфликтующих с загружамой по имени. + |2. ""Отключить конфликтующие"" - продолжить загрузку, отключив Публикацию отчетов (обработок), конфликтующих с загружаемой по имени. + |3. ""Показать конфликтующие"" - отменить загрузку и показать список отчетов (обработок), конфликтующих с загружаемой по имени. |4. ""Отмена"" - отменить загрузку.'"), РезультатРегистрации.ИмяОбъекта, - ПредставлениеЗанявших - ); + ПредставлениеЗанявших); КнопкиВопроса = Новый СписокЗначений; КнопкиВопроса.Добавить(1, НСтр("ru = 'Продолжить'")); @@ -501,7 +545,7 @@ ИначеЕсли Ответ = 3 Тогда - // Показать конфлиткующие (отмена далее) + // Показать конфликтующие (отмена далее) Если КоличествоКонфликтующих = 1 И ( ЭтоНовый @@ -518,8 +562,7 @@ ПараметрыСписка.Отбор = Новый Структура("ИмяОбъекта, ЭтоГруппа", РезультатРегистрации.ИмяОбъекта, Ложь); ПараметрыСписка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дополнительные отчеты и обработки с именем объекта ""%1""'"), - РезультатРегистрации.ИмяОбъекта - ); + РезультатРегистрации.ИмяОбъекта); ПараметрыСписка.Отображение = "Список"; ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка", ПараметрыСписка, , Истина); @@ -543,9 +586,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"), - Вариант.Наименование - ) - ); + Вариант.Наименование)); Иначе ОткрытьЗначение(Вариант.Ссылка); КонецЕсли; @@ -566,9 +607,7 @@ НСтр("ru = 'Команда с вариантом запуска ""%1"" |не может использоваться в регламентных заданиях.'"), "%1", - Строка(ЭлементКоманда.ВариантЗапуска) - ) - ); + Строка(ЭлементКоманда.ВариантЗапуска))); Если ИзмененФлажок тогда ЭлементКоманда.РегламентноеЗаданиеИспользование = НЕ ЭлементКоманда.РегламентноеЗаданиеИспользование; КонецЕсли; @@ -625,27 +664,13 @@ ПользователиСБыстрымДоступом.Добавить(СтрокаТаблицы.Пользователь); КонецЦикла; - ПараметрыФормы = Новый Структура("ПользователиСБыстрымДоступом, ПредставлениеКоманды", ПользователиСБыстрымДоступом, ЭлементКоманда.Представление); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПользователиСБыстрымДоступом", ПользователиСБыстрымДоступом); + ПараметрыФормы.Вставить("ПредставлениеКоманды", ЭлементКоманда.Представление); - СписокПользователей = ОткрытьФормуМодально("Справочник.ДополнительныеОтчетыИОбработки.Форма.БыстрыйДоступКДополнительнымОтчетамИОбработкам", ПараметрыФормы); + КлиентскийКэш.Вставить("ИдентификаторСтрокиКоманды", ЭлементКоманда.ПолучитьИдентификатор()); + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.БыстрыйДоступКДополнительнымОтчетамИОбработкам", ПараметрыФормы, ЭтаФорма); - Если ТипЗнч(СписокПользователей) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Для Каждого СтрокаТаблицы Из Найденные Цикл - БыстрыйДоступ.Удалить(СтрокаТаблицы); - КонецЦикла; - - Для Каждого ЭлементСписка Из СписокПользователей Цикл - СтрокаТаблицы = БыстрыйДоступ.Добавить(); - СтрокаТаблицы.ИдентификаторКоманды = ЭлементКоманда.Идентификатор; - СтрокаТаблицы.Пользователь = ЭлементСписка.Значение; - КонецЦикла; - - ЭлементКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей(СписокПользователей.Количество()); - - Модифицированность = Истина; КонецПроцедуры &НаКлиенте @@ -708,8 +733,7 @@ БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( БыстрыйДоступПредставление, - Формат(КоличествоПользователей, "ЧГ=0") - ); + Формат(КоличествоПользователей, "ЧГ=0")); Возврат БыстрыйДоступПредставление; КонецФункции @@ -822,8 +846,7 @@ Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыПоказать; Элементы.СтраницаВарианты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Варианты отчета (%1)'"), - Формат(КоличествоВариантов, "ЧГ=") - ); + Формат(КоличествоВариантов, "ЧГ=")); КонецЕсли; Иначе @@ -842,8 +865,7 @@ Элементы.СтраницаКоманды.Видимость = Истина; Элементы.СтраницаКоманды.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Команды (%1)'"), - Формат(КоличествоКоманд, "ЧГ=") - ); + Формат(КоличествоКоманд, "ЧГ=")); КонецЕсли; @@ -856,8 +878,7 @@ Элементы.СтраницаРазрешения.Видимость = Истина; Элементы.СтраницаРазрешения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Разрешения (%1)'"), - Формат(КоличествоРазрешений, "ЧГ=") - ); + Формат(КоличествоРазрешений, "ЧГ=")); СформироватьСписокРазрешений(); КонецЕсли; @@ -957,8 +978,7 @@ Процедура СформироватьСписокРазрешений() ПредставлениеРазрешений = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьПредставлениеРазрешений( - ПолучитьТаблицуРазрешений() - ); + ПолучитьТаблицуРазрешений()); КонецПроцедуры @@ -974,8 +994,7 @@ Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор)); ЭлементКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей( - Найденные.Количество() - ); + Найденные.Количество()); КонецЕсли; ЭлементКоманда.РегламентноеЗаданиеИспользование = Ложь; @@ -1020,8 +1039,7 @@ Иначе ЭлементКоманда.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не применимо для команд с вариантом запуска ""%1""'"), - Строка(ЭлементКоманда.ВариантЗапуска) - ); + Строка(ЭлементКоманда.ВариантЗапуска)); КонецЕсли; КонецЦикла; @@ -1031,7 +1049,14 @@ Процедура ВариантыДополнительногоОтчетаЗаполнить() ВариантыДополнительногоОтчета.Очистить(); - ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Объект.Ссылка); + Попытка + ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Объект.Ссылка); + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось получить список вариантов отчета из-за ошибки, возникшей при подключении этого отчета:'"); + Сообщить(ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтатусСообщения.Важное); + Возврат; + КонецПопытки; + ОтчетМетаданные = ВнешнийОбъект.Метаданные(); СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных; Если СхемаКДМетаданные <> Неопределено Тогда @@ -1089,3 +1114,4 @@ Возврат ПолучитьИзВременногоХранилища(АдресРазрешений); КонецФункции + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index 1c06da084..d3d1462a3 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,2 +1,2 @@ - +

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

\ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index d1d37a504..02ffd6162 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -17,8 +17,7 @@ , , "Объект.ИспользоватьДляФормыОбъекта", - Отказ - ); + Отказ); КонецЕсли; КонецЕсли; @@ -72,8 +71,7 @@ Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) ), , - "Объект.Публикация" - ); + "Объект.Публикация"); КонецЕсли; КонецЕсли; @@ -96,8 +94,7 @@ Если НЕ ЭтоНовый() И Вид <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид") Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"),,,, - Отказ - ); + Отказ); Возврат; КонецЕсли; @@ -229,8 +226,7 @@ // Создать и зарегистрировать Команда.РегламентноеЗаданиеGUID = ДополнительныеОтчетыИОбработкиРегламентныеЗадания.ПолучитьИдентификаторЗадания( - Задание - ); + Задание); Иначе // Действие не требуется @@ -294,8 +290,7 @@ Использование, Лев(ПредставлениеЗадания(Команда), 120), ПараметрыЗадания, - Расписание - ); + Расписание); КонецЦикла; @@ -346,8 +341,7 @@ + " / " + НСтр("ru = 'Команда'") + ": " - + СокрЛП(Команда.Представление) - ); + + СокрЛП(Команда.Представление)); КонецФункции Функция РасписаниеЗадано(Расписание) @@ -400,18 +394,24 @@ Процедура ПриЗаписиГлобальногоОтчета(Отказ) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + Попытка + Если ЭтоНовый() Тогда + ВнешнийОбъект = ВнешниеОтчеты.Создать(ИмяОбъекта); + Иначе + ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Ссылка); + КонецЕсли; + Исключение + ТекстОшибки = НСтр("ru = 'Ошибка подключения:'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ДополнительныеОтчетыИОбработки.ЗаписатьОшибку(Ссылка, ТекстОшибки); + ДополнительныеСвойства.Вставить("ОшибкаПодключения", ТекстОшибки); + Возврат; + КонецПопытки; - Если ЭтоНовый() Тогда - ВнешнийОбъект = ВнешниеОтчеты.Создать(ИмяОбъекта); - Иначе - ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Ссылка); - КонецЕсли; - - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); - Модуль.ОбработкаВариантовДополнительногоОтчета(ЭтотОбъект, Отказ, ВнешнийОбъект); + МодульВариантыОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ОбработкаВариантовДополнительногоОтчета(ЭтотОбъект, Отказ, ВнешнийОбъект); КонецЕсли; КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl index ae40b19a2..7f4c75d18 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl @@ -9,10 +9,17 @@ Возврат; КонецЕсли; + Если Параметры.Свойство("Отбор") И Параметры.Отбор.Свойство("Владелец") Тогда + ЭлементОтбора = Параметры.Отбор.Владелец; + Параметры.Отбор.Удалить("Владелец"); + Иначе + ЭлементОтбора = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Владелец", - Пользователи.АвторизованныйПользователь(), + ЭлементОтбора, ВидСравненияКомпоновкиДанных.Равно); КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl index 3b0b9181c..f1ef89c38 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl @@ -7,6 +7,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 089b27984..91027f589 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -5,18 +5,6 @@ dfcece9d-5077-440b-b6b3-45a5cb4538eb - - Владелец - Asc - - - ЭтоПапка - Desc - - - Ссылка - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index 9da2df531..b06eb2c8c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -9,20 +9,14 @@ Возврат; КонецЕсли; - Если Параметры.Отбор.Свойство("_Владелец", Свойство) - И ЗначениеЗаполнено(Свойство) Тогда - - Параметры.Отбор.Удалить("_Владелец"); - Параметры.Отбор.Вставить("Владелец", Свойство); - - ИначеЕсли Параметры.Отбор.Свойство("Владелец") - И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда - + Если Параметры.Отбор.Свойство("Владелец") Тогда Свойство = Параметры.Отбор.Владелец; + Параметры.Отбор.Удалить("Владелец"); КонецЕсли; Если НЕ ЗначениеЗаполнено(Свойство) Тогда Элементы.Свойство.Видимость = Истина; + НастроитьПорядокЗначенийПоСвойствам(Список); КонецЕсли; Если Параметры.РежимВыбора Тогда @@ -99,6 +93,41 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура НастроитьПорядокЗначенийПоСвойствам(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Владелец"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры + &НаСервере Процедура УстановитьЗаголовок() @@ -169,8 +198,7 @@ Элементы.Владелец.Видимость = Ложь; Элементы.Список.Шапка = Ложь; Иначе - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора( - Список.Отбор, "Владелец"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Владелец"); Элементы.Список.Отображение = ОтображениеТаблицы.Список; Элементы.Список.ИзменятьСоставСтрок = Ложь; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html index 76c7e54ec..a3647efcb 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

 

\ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 089b27984..91027f589 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -5,18 +5,6 @@ dfcece9d-5077-440b-b6b3-45a5cb4538eb - - Владелец - Asc - - - ЭтоПапка - Desc - - - Ссылка - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl index be46960ec..fa395025d 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl @@ -9,20 +9,14 @@ Возврат; КонецЕсли; - Если Параметры.Отбор.Свойство("_Владелец", Свойство) - И ЗначениеЗаполнено(Свойство) Тогда - - Параметры.Отбор.Удалить("_Владелец"); - Параметры.Отбор.Вставить("Владелец", Свойство); - - ИначеЕсли Параметры.Отбор.Свойство("Владелец") - И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда - + Если Параметры.Отбор.Свойство("Владелец") Тогда Свойство = Параметры.Отбор.Владелец; + Параметры.Отбор.Удалить("Владелец"); КонецЕсли; Если НЕ ЗначениеЗаполнено(Свойство) Тогда Элементы.Свойство.Видимость = Истина; + НастроитьПорядокЗначенийПоСвойствам(Список); КонецЕсли; Если Параметры.РежимВыбора Тогда @@ -75,6 +69,35 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура НастроитьПорядокЗначенийПоСвойствам(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Владелец"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры + &НаСервере Процедура УстановитьЗаголовок() @@ -138,8 +161,7 @@ Элементы.Владелец.Видимость = Ложь; Элементы.Список.Шапка = Ложь; Иначе - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора( - Список.Отбор, "Владелец"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Владелец"); Элементы.Список.Отображение = ОтображениеТаблицы.Список; Элементы.Список.ИзменятьСоставСтрок = Ложь; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html index fbbb66077..cf394ed4b 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

 

\ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 48fc28884..91027f589 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -5,49 +5,10 @@ dfcece9d-5077-440b-b6b3-45a5cb4538eb - - ПометкаУдаления - Desc - - - ПорядокКоллекции - Asc - - - Родитель - Asc - - - Синоним - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - Синоним - - - ПолноеИмя - - - - - ПометкаБудущегоУдаления - Equal - true - - - - - ЦветТекста - web:DarkGray - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form index 366767fd7..d1e775c89 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -31,7 +31,7 @@ true СинонимРасширеннаяПодсказка - 26 + 25 Label true true @@ -65,7 +65,7 @@ ПолноеИмяРасширеннаяПодсказка - 28 + 27 Label true true @@ -100,10 +100,10 @@
СписокСтрокаПоиска - 17 + 16 СписокСтрокаПоискаРасширеннаяПодсказка - 19 + 18 Label true true @@ -113,7 +113,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 18 + 17 true Список @@ -123,10 +123,10 @@ СписокСостояниеПросмотра - 20 + 19 СписокСостояниеПросмотраРасширеннаяПодсказка - 22 + 21 Label true true @@ -136,7 +136,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 21 + 20 true ViewStatusAddition @@ -147,10 +147,10 @@ СписокУправлениеПоиском - 23 + 22 СписокУправлениеПоискомРасширеннаяПодсказка - 25 + 24 Label true true @@ -160,7 +160,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 24 + 23 true SearchControlAddition @@ -171,7 +171,7 @@ СписокРасширеннаяПодсказка - 16 + 15 Label true true @@ -224,32 +224,6 @@ ФормаКоманднаяПанель -1 - - ОбновитьДанныеСправочника - 10 - true - true - - true - - - ОбновитьДанныеСправочникаРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - Form.Command.ОбновитьДанныеСправочника - Normal - Auto - true - true - UserCmds - Auto - Left true @@ -292,6 +266,9 @@ Список.Parent + + Список.ПометкаБудущегоУдаления +
true
ВЫБРАТЬ @@ -341,28 +318,6 @@ true - - ОбновитьДанныеСправочника - - <key>ru</key> - <value>Обновить данные справочника</value> - - 1 - - ru - Обновить данные справочника по метаданным конфигурации - - - true - - - - ОбновитьДанныеСправочника - - - Auto - Auto - ВыбиратьГруппыОбъектовМетаданных diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl index 9333273cf..6741dfa0d 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -8,23 +8,17 @@ Возврат; КонецЕсли; - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - Элементы.ОбновитьДанныеСправочника.Видимость = Ложь; - КонецЕсли; - Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.РежимВыбора = Истина; - Элементы.ОбновитьДанныеСправочника.ТолькоВоВсехДействиях = Истина; Параметры.Отбор.Вставить("ПометкаУдаления", Ложь); Параметры.Отбор.Вставить("ПометкаБудущегоУдаления", Ложь); КонецЕсли; Параметры.Свойство("ВыбиратьГруппыОбъектовМетаданных", ВыбиратьГруппыОбъектовМетаданных); - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Элементы.ОбновитьДанныеСправочника.Видимость = Ложь; - КонецЕсли; + УпорядочитьИОформитьСписок(); КонецПроцедуры @@ -64,48 +58,65 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОбновитьДанныеСправочника(Команда) - - ЕстьИзменения = Ложь; - ЕстьУдаленные = Ложь; - - ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные); - - Если ЕстьИзменения Тогда - Текст = НСтр("ru = 'Обновление выполнено успешно.'"); - Иначе - Текст = НСтр("ru = 'Обновление не требуется.'"); - КонецЕсли; - - Если ЕстьУдаленные Тогда - Текст = Текст - + Символы.ПС - + Символы.ПС - + НСтр("ru = 'Найдены удаленные объекты метаданных - |(см. элементы, начинающиеся с символа ""?"").'"); - КонецЕсли; - - Предупреждение(Текст); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере -Процедура ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные) +Процедура УпорядочитьИОформитьСписок() - УстановитьПривилегированныйРежим(Истина); + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; - Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ЕстьИзменения, ЕстьУдаленные); + Порядок.Элементы.Очистить(); - Элементы.Список.Обновить(); + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ПорядокКоллекции"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Родитель"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Синоним"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + // Оформление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаБудущегоУдаления"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Синоним"); + ЭлементОформляемогоПоля.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ПолноеИмя"); + ЭлементОформляемогоПоля.Использование = Истина; КонецПроцедуры - - - diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form index f080bdcb7..2efa57208 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form @@ -606,7 +606,14 @@ Auto - + + + InformationRegister.НазначениеДополнительныхОбработок.StandardCommand.OpenByValue.ОбъектНазначения + FormNavigationPanelGoTo + 0 + + + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 9f5546b14..673201365 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -28,6 +28,8 @@ // Процедура ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ() Экспорт + ПроверкаИспользования(); + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда Возврат; КонецЕсли; @@ -84,6 +86,8 @@ // Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь, ТолькоПроверка = Ложь, ЕстьКритичныеИзменения = Ложь, ТребуетсяОбновитьКэш = Ложь) Экспорт + ПроверкаИспользования(); + УстановитьПривилегированныйРежим(Истина); Если НЕ ТолькоПроверка Тогда @@ -121,6 +125,7 @@ Запрос.Текст = "ВЫБРАТЬ | Идентификаторы.Ссылка, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных, | Идентификаторы.Родитель, | Идентификаторы.ПометкаУдаления, | Идентификаторы.Предопределенный КАК Предопределенный, @@ -135,6 +140,9 @@ | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "Идентификаторы.ИмяПредопределенныхДанных"); + КонецЕсли; Выгрузка = Запрос.Выполнить().Выгрузить(); Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); @@ -200,6 +208,11 @@ КонецЕсли; Если Свойства.Предопределенный Тогда + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенногоИдентификатора = Свойства.ИмяПредопределенныхДанных; + Иначе + ИмяПредопределенногоИдентификатора = ПолучитьИмяПредопределенного(Свойства.Ссылка); + КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В справочнике ""Идентификаторы объектов метаданных"" |для предопределенного элемента @@ -207,8 +220,8 @@ |и представлением ""%2"" |не найдено типа объектов метаданных. | - |Следует удалить предопределенный элемент.'"), - ПолучитьИмяПредопределенного(Свойства.Ссылка), + |Для разработчика: следует удалить предопределенный элемент.'"), + ИмяПредопределенногоИдентификатора, Строка(Свойства.Ссылка)); КонецЕсли; @@ -384,15 +397,25 @@ ВызватьИсключение; КонецПопытки; + Если НЕ ТолькоПроверка Тогда + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ")) > 0 Тогда + ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ(); + КонецЕсли; + КонецЕсли; + Если СнятьМонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); КонецЕсли; + КонецПроцедуры // Только для внутреннего использования. Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт + ПроверкаИспользования(); + Запись = Новый ЗаписьXML; Запись.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); Запись.ЗаписатьОбъявлениеXML(); @@ -441,6 +464,8 @@ Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт + ПроверкаИспользования(); + // Перед загрузкой в пустую базу требутся обновление справочника. Запрос = Новый Запрос; Запрос.Текст = @@ -463,17 +488,17 @@ Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ Чтение.Имя <> "Data" Тогда - ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'")); + ВызватьИсключение НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'"); КонецЕсли; Если НЕ Чтение.Прочитать() Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + ВызватьИсключение НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'"); КонецЕсли; Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл Данные = СериализаторXDTO.ПрочитатьXML(Чтение); - + КлючОбъектаМетаданных = Данные.КлючОбъектаМетаданных.Получить(); ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); @@ -494,7 +519,6 @@ СоответствиеСсылок.Вставить(Идентификатор.УникальныйИдентификатор(), ЗагружаемыйИдентификатор); КонецЕсли; - КонецЦикла; СтрокаФрагмента = СловарьЗамен.Добавить(); @@ -503,6 +527,16 @@ КонецПроцедуры +// Только для внутреннего использования. +Процедура ПроверкаИспользования() Экспорт + + Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + ВызватьИсключение + НСтр("ru = 'Справочник ""Идентификаторы объектов метаданных"" не используется.'"); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -658,6 +692,8 @@ // Только для внутреннего использования. Процедура ОбработкаДублейПодчиненногоУзлаПриЗагрузкеНового(Объект) Экспорт + ПроверкаИспользования(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // В модели сервиса не поддерживается. Возврат; @@ -955,7 +991,7 @@ НСтр("ru = 'Не найден идентификатор типа объектов метаданных |""%1"". | - |Следует добавить предопределенный элемент в + |Для разработчика: следует добавить предопределенный элемент в |Справочник ""Идентификаторы объектов метаданных"".'"), Строка.Имя); КонецПопытки; @@ -1781,7 +1817,8 @@ КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'"), + НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl index 9af71394a..2901136fa 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -8,6 +8,8 @@ // Процедура ПередЗаписью(Отказ) + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + // Отключение механизма регистрации объектов. ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); @@ -75,6 +77,8 @@ // Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление. Процедура ПередУдалением(Отказ) + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl index 7b4fd0151..850db08e9 100644 --- a/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/РасписаниеРаботы/Module.bsl @@ -1,4 +1,3 @@ - /////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -38,7 +37,7 @@ Возврат; КонецЕсли; - Закрыть(Новый Структура("РасписаниеРаботы", РасписаниеДня)); + ОповеститьОВыборе(Новый Структура("РасписаниеРаботы", РасписаниеДня)); КонецПроцедуры @@ -47,7 +46,7 @@ БылиНажатыКнопкиЗакрытия = Истина; - Закрыть(); + ОповеститьОВыборе(Неопределено); КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 40ad973d5..2f37747cc 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,10 +1,6 @@ - - ВладелецГрафика - NotFilled - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl index 90838c3dd..38a706a61 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -14,4 +14,8 @@ Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", ТекущаяДатаСеанса()); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ВладелецГрафика", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index d29836994..31b794cd1 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -2594,6 +2594,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 34d4c87e5..400862e4e 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем КонтекстВыбора; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -67,6 +70,48 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Календари.Форма.РасписаниеРаботы") Тогда + + Если ВыбранноеЗначение = Неопределено Или ТолькоПросмотр Тогда + Возврат; + КонецЕсли; + + // Удаляем ранее заполненное расписания для этого дня + СтрокиДня = Новый Массив; + Для Каждого СтрокаРасписания Из Объект.РасписаниеРаботы Цикл + Если СтрокаРасписания.НомерДня = КонтекстВыбора.НомерДня Тогда + СтрокиДня.Добавить(СтрокаРасписания.ПолучитьИдентификатор()); + КонецЕсли; + КонецЦикла; + Для Каждого ИдентификаторСтроки Из СтрокиДня Цикл + Объект.РасписаниеРаботы.Удалить(Объект.РасписаниеРаботы.НайтиПоИдентификатору(ИдентификаторСтроки)); + КонецЦикла; + + // заполняем расписание работы на день + Для Каждого ОписаниеИнтервала Из ВыбранноеЗначение.РасписаниеРаботы Цикл + НоваяСтрока = Объект.РасписаниеРаботы.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ОписаниеИнтервала); + НоваяСтрока.НомерДня = КонтекстВыбора.НомерДня; + КонецЦикла; + + УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтаФорма, Ложь); + УстановитьСнятьМодифицированностьШаблона(ЭтаФорма, Истина); + + Если КонтекстВыбора.Источник = "ШаблонЗаполненияВыбор" Тогда + + СтрокаШаблона = Объект.ШаблонЗаполнения.НайтиПоИдентификатору(КонтекстВыбора.ИдентификаторСтрокиШаблона); + СтрокаШаблона.ДеньВключенВГрафик = ВыбранноеЗначение.РасписаниеРаботы.Количество() > 0; // расписание заполнено + СтрокаШаблона.ПредставлениеРасписания = ПредставлениеРасписанияДня(ЭтаФорма, КонтекстВыбора.НомерДня); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Перем НомерГода; @@ -230,17 +275,18 @@ СтандартнаяОбработка = Ложь; СтрокаШаблона = Объект.ШаблонЗаполнения.НайтиПоИдентификатору(ВыбраннаяСтрока); - НомерДня = СтрокаШаблона.НомерСтроки; - РасписаниеЗаполнено = Неопределено; - РедактироватьРасписаниеДня(НомерДня, СтрокаШаблона.ПредставлениеРасписания, РасписаниеЗаполнено); + КонтекстВыбора = Новый Структура; + КонтекстВыбора.Вставить("Источник", "ШаблонЗаполненияВыбор"); + КонтекстВыбора.Вставить("НомерДня", СтрокаШаблона.НомерСтроки); + КонтекстВыбора.Вставить("ПредставлениеРасписания", СтрокаШаблона.ПредставлениеРасписания); + КонтекстВыбора.Вставить("ИдентификаторСтрокиШаблона", ВыбраннаяСтрока); - Если РасписаниеЗаполнено <> Неопределено Тогда - // если расписание заполнено - день включен в график - СтрокаШаблона.ДеньВключенВГрафик = РасписаниеЗаполнено; - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РасписаниеРаботы", РасписаниеРаботы(КонтекстВыбора.НомерДня)); + ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр); - СтрокаШаблона.ПредставлениеРасписания = ПредставлениеРасписанияДня(ЭтаФорма, НомерДня); + ОткрытьФорму("Справочник.Календари.Форма.РасписаниеРаботы", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -252,52 +298,21 @@ КонецПроцедуры -&НаКлиенте -Процедура РедактироватьРасписаниеДня(НомерДня, ПредставлениеРасписания, РасписаниеЗаполнено = Неопределено) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РасписаниеРаботы", РасписаниеРаботы(НомерДня)); - ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр); - - РезультатРедактирования = ОткрытьФормуМодально("Справочник.Календари.Форма.РасписаниеРаботы", ПараметрыФормы, ЭтаФорма); - - Если РезультатРедактирования = Неопределено Или ТолькоПросмотр Тогда - Возврат; - КонецЕсли; - - // Удаляем ранее заполненное расписания для этого дня - СтрокиДня = Новый Массив; - Для Каждого СтрокаРасписания Из Объект.РасписаниеРаботы Цикл - Если СтрокаРасписания.НомерДня = НомерДня Тогда - СтрокиДня.Добавить(СтрокаРасписания.ПолучитьИдентификатор()); - КонецЕсли; - КонецЦикла; - Для Каждого ИдентификаторСтроки Из СтрокиДня Цикл - Объект.РасписаниеРаботы.Удалить(Объект.РасписаниеРаботы.НайтиПоИдентификатору(ИдентификаторСтроки)); - КонецЦикла; - - // заполняем расписание работы на день - Для Каждого ОписаниеИнтервала Из РезультатРедактирования.РасписаниеРаботы Цикл - НоваяСтрока = Объект.РасписаниеРаботы.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ОписаниеИнтервала); - НоваяСтрока.НомерДня = НомерДня; - КонецЦикла; - - // если расписание заполнено - день включен в график - РасписаниеЗаполнено = РезультатРедактирования.РасписаниеРаботы.Количество() > 0; - ПредставлениеРасписания = ПредставлениеРасписанияДня(ЭтаФорма, НомерДня); - - УстановитьСнятьПризнакСоответствияРезультатовШаблону(ЭтаФорма, Ложь); - УстановитьСнятьМодифицированностьШаблона(ЭтаФорма, Истина); - -КонецПроцедуры - &НаКлиенте Процедура РасписаниеПредпраздничногоДняНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - РедактироватьРасписаниеДня(0, РасписаниеПредпраздничногоДня); + КонтекстВыбора = Новый Структура; + КонтекстВыбора.Вставить("Источник", "РасписаниеПредпраздничногоДняНажатие"); + КонтекстВыбора.Вставить("НомерДня", 0); + КонтекстВыбора.Вставить("ПредставлениеРасписания", РасписаниеПредпраздничногоДня); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РасписаниеРаботы", РасписаниеРаботы(КонтекстВыбора.НомерДня)); + ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр); + + ОткрытьФорму("Справочник.Календари.Форма.РасписаниеРаботы", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -350,9 +365,9 @@ Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл Если ДниГрафика.Получить(СтрокаОформленияПериода.Дата) = Неопределено Тогда - ЦветТекстаДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет"); + ЦветТекстаДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняПроизводственногоКалендаряНеУказанЦвет"); Иначе - ЦветТекстаДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняРабочийЦвет"); + ЦветТекстаДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняПроизводственногоКалендаряРабочийЦвет"); КонецЕсли; СтрокаОформленияПериода.ЦветТекста = ЦветТекстаДня; // Ручное редактирование diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 21a3df0fc..d5862f659 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -113,7 +113,7 @@ СтрокаНабораДни.Календарь = ГрафикРаботы; СтрокаНабораДни.Год = Год; СтрокаНабораДни.ДатаГрафика = ДатаДня; - СтрокиНабораДни.Вставить(ДатаДня, СтрокиНабораДни); + СтрокиНабораДни.Вставить(ДатаДня, СтрокаНабораДни); КонецЕсли; // Если день включен в график, то заполним его интервалы @@ -128,6 +128,18 @@ ДатаДня = ДатаДня + 86400; КонецЦикла; + // Заполняем вторичные данные для оптимизации расчетов по календарям + ДатаОбхода = НачалоГода; + КоличествоДнейВГрафикеСНачалаГода = 0; + Пока ДатаОбхода <= КонецГода Цикл + СтрокаНабораДни = СтрокиНабораДни[ДатаОбхода]; + Если СтрокаНабораДни <> Неопределено Тогда + КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода + 1; + СтрокаНабораДни.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода; + КонецЕсли; + ДатаОбхода = ДатаОбхода + 86400; + КонецЦикла; + НаборДни.Записать(); КонецЦикла; diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form index 9f4148bc7..dec5f251f 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form @@ -22,9 +22,13 @@ ВариантЗагрузки Top + + OnChange + ВариантЗагрузкиПриИзменении + ВариантЗагрузкиРасширеннаяПодсказка - 26 + 28 Label true true @@ -44,15 +48,6 @@ true 1 - - - ru - с диска "Информационно-технологическое сопровождение" - - - ИТС - - ru @@ -62,9 +57,64 @@ РБК + + + ru + с диска "Информационно-технологическое сопровождение" + + + ИТС + + Vertical + + ПутьКДискуИТС + 20 + true + true + + true + + + ПутьКДискуИТС + + + ПутьКДискуИТСРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ПутьКДискуИТСКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПутьКДискуИТСНачалоВыбора + + true + true + true + true + true + true + true + Normal + + true true @@ -80,7 +130,7 @@ СтраницаВыборИсточникаРасширеннаяПодсказка - 25 + 27 Label true true @@ -113,7 +163,7 @@ ПредупреждениеОЗагрузкаССайтаРБКРасширеннаяПодсказка - 29 + 33 Label true true @@ -148,7 +198,7 @@ ЗагрузкаССайтаРБКРасширеннаяПодсказка - 28 + 32 Label true true @@ -179,7 +229,7 @@ КартинкаВыполняетсяЗагрузкаРасширеннаяПодсказка - 31 + 35 Label true true @@ -216,7 +266,7 @@ НадписьВыполняетсяЗагрузкаРасширеннаяПодсказка - 32 + 36 Label true true @@ -252,7 +302,7 @@ ВыполняетсяЗагрузкаРасширеннаяПодсказка - 30 + 34 Label true true @@ -282,7 +332,7 @@ ПоясняющийТекстРасширеннаяПодсказка - 34 + 38 Label true true @@ -324,7 +374,7 @@ СтраницаРезультатРасширеннаяПодсказка - 33 + 37 Label true true @@ -353,7 +403,7 @@ СтраницыФормыРасширеннаяПодсказка - 24 + 26 Label true true @@ -381,7 +431,7 @@ ФормаКнопкаНазадРасширеннаяПодсказка - 20 + 22 Label true true @@ -407,7 +457,7 @@ ФормаКнопкаДалееРасширеннаяПодсказка - 21 + 23 Label true true @@ -433,7 +483,7 @@ ФормаКнопкаОтменаРасширеннаяПодсказка - 22 + 24 Label true true @@ -459,7 +509,7 @@ ФормаКнопкаСправкаРасширеннаяПодсказка - 23 + 25 Label true true @@ -481,12 +531,17 @@ OnOpen ПриОткрытии + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере - 45 + 55 LockOwner + Use true true Vertical @@ -513,6 +568,9 @@ true + + ВариантЗагрузки + АдресХранилища @@ -566,6 +624,27 @@ true + + ПутьКДискуИТС + + <key>ru</key> + <value>Путь к диску ИТС</value> + + 5 + + String + + + + true + + + true + + + ПутьКДискуИТС + + Далее diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl index 1f86bb093..4c0edc79a 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -19,9 +19,24 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + АвтоматическоеСохранениеДанныхВНастройках = АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать; + Элементы.ВариантЗагрузки.Доступность = Ложь; + Элементы.ПутьКДискуИТС.Доступность = Ложь; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК; + Иначе + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; + КонецЕсли; + ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ); ВариантЗагрузки = "РБК"; + УстановитьИзмененияВИнтерфейсе(); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры &НаКлиенте @@ -31,16 +46,41 @@ Отказ = Истина; Возврат; КонецЕсли; - - #Если ВебКлиент Тогда - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК; - #Иначе - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; - #КонецЕсли - +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ВариантЗагрузкиПриИзменении(Элемент) УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры +&НаКлиенте +Процедура ПутьКДискуИТСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОчиститьСообщения(); + + ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбораКаталога.Заголовок = НСтр("ru = 'Укажите путь к диску ИТС'"); + ДиалогВыбораКаталога.Каталог = ПутьКДискуИТС; + + Если НЕ ДиалогВыбораКаталога.Выбрать() Тогда + Возврат; + КонецЕсли; + + ПутьКДискуИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДиалогВыбораКаталога.Каталог); + + ФайлДанных = Новый Файл(ПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); + Если НЕ ФайлДанных.Существует() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru ='В указанном каталоге не обнаружены данные классификатора. Необходимо указать путь к диску 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"), + , + "ПутьКДискуИТС"); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -50,9 +90,19 @@ Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда Закрыть(); Иначе + ОчиститьСообщения(); + + Если ВариантЗагрузки = "ИТС" И НЕ ЗначениеЗаполнено(ПутьКДискуИТС) И ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + // Под Linux - перебор букв дисков невозможен. + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'При работе в ОС Linux необходимо явно указать путь к диску'"), + , + "ПутьКДискуИТС"); + Возврат; + КонецЕсли; Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; УстановитьИзмененияВИнтерфейсе(); - ПодключитьОбработчикОжидания("ВыполнитьЗагрузкуКлассификатора", 0.1, Истина); + ПодключитьОбработчикОжидания("ЗагрузитьКлассификатор", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -84,21 +134,250 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Загружает в классификатор банков данные с диска ИТС. -// -// Параметры -// ПараметрыЗагрузкиФайловИТС - Соответствие: -// ИмяДискаИТС - Строка - имя диска ИТС -// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС, -// помещенный во временное хранилище -// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных -// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - тест сообщения о результатах загрузки -// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ЗагрузитьКлассификатор() + // Загружает классификатор банков с диска ИТС или с сайта РБК. + + ПараметрыЗагрузкиКлассификатора = Новый Соответствие; + // (Число) Количество новых записей классификатора: + ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); + // (Число) Количество обновленных записей классификатора: + ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); + // (Строка) Тест сообщения о результатах загрузки: + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); + // (Булево) Флаг успешного завершения загрузки данных классификатора: + ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); + + Если ВариантЗагрузки = "ИТС" Тогда + ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено, АдресХранилища", Истина, АдресХранилища); + ИначеЕсли ВариантЗагрузки = "РБК" Тогда + Результат = ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиКлассификатора); + КонецЕсли; + + АдресХранилища = Результат.АдресХранилища; + Если НЕ Результат.ЗаданиеВыполнено Тогда + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Иначе + ЗагрузитьРезультат(); + КонецЕсли; + КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРезультат() + //Отображает результат попытки загрузки классификатора банков РФ в журнале регистрации + //и в форме загрузки + + Если ВариантЗагрузки = "ИТС" Тогда + Источник = НСтр("ru ='Диск ИТС'"); + Иначе + Источник = НСтр("ru ='Сайт РБК'"); + КонецЕсли; + + ПараметрыЗагрузкиКлассификатора = ПолучитьИзВременногоХранилища(АдресХранилища); + + ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник); + + Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, + ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + РаботаСБанкамиКлиент.ОповеститьКлассификаторУспешноОбновлен(); + Иначе + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, + "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + КонецЕсли; + Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; + УстановитьИзмененияВИнтерфейсе(); + + Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда + ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + //Унифицированная процедура проверки выполнения фонового задания + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьРезультат(); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора) + // Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС + + ПараметрыЗагрузкиФайловИТС = Новый Соответствие; + // (Строка) Путь к диску ИТС: + ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", ""); + // (Строка) Адрес во временном хранилище, по которому размещен файл данных классификатора: + ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ""); + // (Строка) Адрес во временном хранилище, по которому размещен файл обработки подготовки данных: + ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", ""); + // (Строка) Текст ошибки: + ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + // Другие параметры - см. описание переменной ПараметрыЗагрузкиФайловРБК в ЗагрузитьКлассификатор(): + ПараметрыЗагрузкиФайловИТС.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); + ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); + + ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС); + + Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); + Возврат; + КонецЕсли; + + ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС); + + Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); + Возврат; + КонецЕсли; + + ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС); + + ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловИТС["Загружено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловИТС["Обновлено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); + ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС) + // Получает данные классификатора БИК РФ с диска ИТС + // + // Параметры + // ПараметрыЗагрузкиФайловИТС - см. описание одноименной переменной в ПолучитьДанныеБИКРФДискИТС(). + + ФайлДанных = Неопределено; + ФайлНайден = Ложь; + + Результат = Новый Структура; + Если ЗначениеЗаполнено(ПутьКДискуИТС) Тогда + // Путь к диску указан явно. + ПутьКДискуИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКДискуИТС); + ФайлДанных = Новый Файл(ПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); + Если ФайлДанных.Существует() Тогда + ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", ПутьКДискуИТС); + ФайлНайден = Истина; + Иначе + ДанныеИТС = ""; + КонецЕсли; + Иначе + // Под Linux - проверка расположена ранее в Далее(). + // Под Windows - перебор букв дисков с D по Z. + Для Индекс = 68 По 90 Цикл + НайденныйПутьКДискуИТС = Символ(Индекс) + ":\"; + ФайлДанных = Новый Файл(НайденныйПутьКДискуИТС + "Database\Garant\MorphDB\Morph.dlc"); + Если ФайлДанных.Существует() Тогда + ПараметрыЗагрузкиФайловИТС.Вставить("ПутьКДискуИТС", НайденныйПутьКДискуИТС); + ФайлНайден = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ФайлНайден Тогда + ДанныеИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлДанных.ПолноеИмя)); + ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ДанныеИТСАдресДвоичныхДанных); + ФайлДанных = Неопределено; + Иначе + ТекстСообщения = НСтр("ru ='На диске 1С:ИТС не обнаружены данные классификатора БИК РФ. + |Для установки требуется диск 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"); + ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); + КонецЕсли; + + ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС) + // Получает обработку сортировки классификатора БИК РФ с диска ИТС + // + // Параметры + // ПараметрыЗагрузкиФайловИТС - см. описание одноименной переменной в ПолучитьДанныеБИКРФДискИТС(). + + ФайлОбработки = Новый Файл(ПараметрыЗагрузкиФайловИТС["ПутьКДискуИТС"] + "1CITS\EXE\EXTDB\BIKr5v82_MA.epf"); + + Если ФайлОбработки.Существует() Тогда + АдресДвоичныхДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлОбработки.ПолноеИмя)); + ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", АдресДвоичныхДанных); + Иначе + ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", НСтр("ru ='На диске ИТС не обнаружен файл обработки подготовки данных классификатора БИК РФ.'")); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + +&НаСервере +Процедура УстановитьИзмененияВИнтерфейсе() + // В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя + + Элементы.ПутьКДискуИТС.Доступность = (ВариантЗагрузки = "ИТС"); + + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника + Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК Тогда + Элементы.ФормаКнопкаНазад.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее >>'"); + Элементы.ФормаКнопкаОтмена.Доступность = Истина; + Элементы.ФормаКнопкаДалее.Доступность = Истина; + ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда + Элементы.ФормаКнопкаНазад.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Ложь; + Элементы.ФормаКнопкаОтмена.Доступность = Истина; + Иначе + Элементы.ФормаКнопкаНазад.Доступность = Истина; + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); + Элементы.ФормаКнопкаОтмена.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗавершитьФоновоеЗадание(ИдентификаторЗадания) + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если ФоновоеЗадание <> Неопределено Тогда + ФоновоеЗадание.Отменить(); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС) + // Загружает в классификатор банков данные с диска ИТС. + // + // Параметры + // ПараметрыЗагрузкиФайловИТС - см. описание переменной ПараметрыЗагрузкиКлассификатора в ПолучитьДанныеБИКРФДискИТС(). Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ВызватьИсключение ТекстЗагрузкаЗапрещена(); @@ -108,21 +387,12 @@ КонецПроцедуры -// Загружает в классификатор банков данные с диска ИТС. -// -// Параметры -// ПараметрыЗагрузкиФайловРБК - Соответствие: -// ИмяДискаИТС - Строка - имя диска ИТС -// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС, -// помещенный во временное хранилище -// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных -// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - тест сообщения о результатах загрузки -// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора &НаСервере Функция ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиФайловРБК) + // Загружает в классификатор банков данные с диска ИТС. + // + // Параметры + // ПараметрыЗагрузкиФайловРБК - см. описание одноименной переменной в ЗагрузитьКлассификатор(). Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ВызватьИсключение ТекстЗагрузкаЗапрещена(); @@ -146,257 +416,10 @@ КонецФункции -// Загружает классификатор банков с диска ИТС или с сайта РБК. -// -&НаКлиенте -Процедура ЗагрузитьКлассификатор() - - ПараметрыЗагрузкиКлассификатора = Новый Соответствие; - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); - ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); - - Если ВариантЗагрузки = "ИТС" Тогда - ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - Результат = Новый Структура("ЗаданиеВыполнено,АдресХранилища", Истина, АдресХранилища); - ИначеЕсли ВариантЗагрузки = "РБК" Тогда - Результат = ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиКлассификатора); - КонецЕсли; - - АдресХранилища = Результат.АдресХранилища; - Если НЕ Результат.ЗаданиеВыполнено Тогда - ИдентификаторЗадания = Результат.ИдентификаторЗадания; - - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); - Иначе - ЗагрузитьРезультат(); - КонецЕсли; - КонецПроцедуры - -//Отображает результат попытки загрузки классификатора банков РФ в журнале регистрации -//и в форме загрузки -&НаКлиенте -Процедура ЗагрузитьРезультат() - - Если ВариантЗагрузки = "ИТС" Тогда - Источник = НСтр("ru ='Диск ИТС'"); - Иначе - Источник = НСтр("ru ='Сайт РБК'"); - КонецЕсли; - - ПараметрыЗагрузкиКлассификатора = ПолучитьИзВременногоХранилища(АдресХранилища); - - ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник); - - Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, - ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); - РаботаСБанкамиКлиент.ОповеститьКлассификаторУспешноОбновлен(); - Иначе - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, - "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); - КонецЕсли; - Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; - - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; - УстановитьИзмененияВИнтерфейсе(); - - Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда - ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ")); - КонецЕсли; - -КонецПроцедуры - -//Унифицированная процедура проверки выполнения фонового задания -&НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() - - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ЗагрузитьРезультат(); - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); - -КонецФункции - -// Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС -// -// Параметры -// ПараметрыЗагрузкиКлассификатора - Соответствие: -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - тест сообщения о результатах загрузки -// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора -&НаКлиенте -Процедура ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора) - - ПараметрыЗагрузкиФайловИТС = Новый Соответствие; - ПараметрыЗагрузкиФайловИТС.Вставить("ИмяДискаИТС", ""); - ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ""); - ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", ""); - ПараметрыЗагрузкиФайловИТС.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); - ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); - - ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - Возврат; - КонецЕсли; - - ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - Возврат; - КонецЕсли; - - ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС); - - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловИТС["Загружено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловИТС["Обновлено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); - -КонецПроцедуры - -// Получает обработку сортировки классификатора БИК РФ с диска ИТС -// -// Параметры -// ПараметрыЗагрузкиФайловИТС - Соответствие: -// ИмяДискаИТС - Символ - имя диска ИТС -// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС, -// помещенный во временное хранилище -// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных -// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище -// ТекстСообщения - Строка - текст сообщения об ошибке -// -&НаКлиенте -Процедура ПолучитьСортировщикДискИТС(ПараметрыЗагрузкиФайловИТС) - - ТекстСообщения = ""; - ПодготовкаИТСАдресДвоичныхДанных = ""; - - Результат = Новый Структура; - - ПодготовкаИТС = Новый Файл(ПараметрыЗагрузкиФайловИТС["ИмяДискаИТС"] + ":\1CITS\EXE\EXTDB\BIKr5v82_MA.epf"); - - Если ПодготовкаИТС.Существует() Тогда - ПодготовкаИТСДвоичныеДанные = Новый ДвоичныеДанные(ПодготовкаИТС.ПолноеИмя); - ПодготовкаИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(ПодготовкаИТСДвоичныеДанные); - Иначе - ТекстСообщения = НСтр("ru ='На диске ИТС не обнаружен файл обработки подготовки данных классификатора БИК РФ.'"); - КонецЕсли; - - ПараметрыЗагрузкиФайловИТС.Вставить("ПодготовкаИТСАдресДвоичныхДанных", ПодготовкаИТСАдресДвоичныхДанных); - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); - -КонецПроцедуры - -// Получает данные классификатора БИК РФ с диска ИТС -// -// Параметры -// ПараметрыЗагрузкиФайловИТС - Соответствие: -// ИмяДискаИТС - Символ - имя диска ИТС -// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС, -// помещенный во временное хранилище -// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных классификатора БИК РФ -// с диска ИТС, помещенный во временное хранилище -// ТекстСообщения - Строка - текст сообщения об ошибке -// -&НаКлиенте -Процедура ПолучитьДанныеБИКДискИТС(ПараметрыЗагрузкиФайловИТС) - - ТекстСообщения = ""; - ИмяДиска = ""; - ДанныеИТС = ""; - ФайлНайден = Ложь; - ДанныеИТСАдресДвоичныхДанных = ""; - - Результат = Новый Структура; - - Для Индекс = 68 По 90 Цикл - // с D по Z - ДанныеИТС = Новый Файл(Символ(Индекс) + ":\Database\Garant\MorphDB\Morph.dlc"); - Если ДанныеИТС.Существует() Тогда - ФайлНайден = Истина; - Прервать; - Иначе - ДанныеИТС = ""; - КонецЕсли; - КонецЦикла; - - Если ФайлНайден Тогда - ИмяДискаИТС = Символ(Индекс); - ДанныеИТСДвоичныеДанные = Новый ДвоичныеДанные(ДанныеИТС.ПолноеИмя); - ДанныеИТСАдресДвоичныхДанных = ПоместитьВоВременноеХранилище(ДанныеИТСДвоичныеДанные); - Иначе - ТекстСообщения = - НСтр("ru ='На диске 1С:ИТС не обнаружены данные классификатора БИК РФ. - |Для установки требуется диск 1С:ИТС, на котором содержится база ""Гарант. Налоги, бухучет, предпринимательство.""'"); - КонецЕсли; - - ПараметрыЗагрузкиФайловИТС.Вставить("ИмяДискаИТС", ИмяДискаИТС); - ПараметрыЗагрузкиФайловИТС.Вставить("ДанныеИТСАдресДвоичныхДанных", ДанныеИТСАдресДвоичныхДанных); - ПараметрыЗагрузкиФайловИТС.Вставить("ТекстСообщения", ТекстСообщения); - -КонецПроцедуры - -// В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя -// -&НаСервере -Процедура УстановитьИзмененияВИнтерфейсе() - - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника - Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК Тогда - Элементы.ФормаКнопкаНазад.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее >>'"); - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Элементы.ФормаКнопкаДалее.Доступность = Истина; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда - Элементы.ФормаКнопкаНазад.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Ложь; - Элементы.ФормаКнопкаОтмена.Доступность = Истина; - Иначе - Элементы.ФормаКнопкаНазад.Доступность = Истина; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); - Элементы.ФормаКнопкаОтмена.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Доступность = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьЗагрузкуКлассификатора() - ЗагрузитьКлассификатор(); -КонецПроцедуры - -&НаСервере -Процедура ЗавершитьФоновоеЗадание(ИдентификаторЗадания) - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Если ФоновоеЗадание <> Неопределено Тогда - ФоновоеЗадание.Отменить(); - КонецЕсли; -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Сервер &НаСервере Функция ТекстЗагрузкаЗапрещена() Возврат НСтр("ru = 'Загрузка классификатора банков в разделенном режиме запрещена.'"); -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl index 8d222508e..e2feb1539 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl @@ -28,7 +28,7 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) - ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); + ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора", , ЭтаФорма); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl index b8d431291..f7e4eb419 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl @@ -27,5 +27,5 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) ПараметрыФормы = Новый Структура("ОткрытиеИзСписка"); - ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора", ПараметрыФормы); + ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl index 67b33ae95..feb65270f 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl @@ -5,6 +5,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + Элементы.СтраницыДеятельностьПрекращена.Видимость = Объект.ДеятельностьПрекращена Или Пользователи.ЭтоПолноправныйПользователь(); Элементы.СтраницыДеятельностьПрекращена.ТекущаяСтраница = ?(Пользователи.ЭтоПолноправныйПользователь(), Элементы.СтраницаФлажокДеятельностьПрекращена, Элементы.СтраницаНадписьДеятельностьПрекращена); @@ -20,8 +24,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРабота"); - Модуль.ОбъектПриЧтенииНаСервере(ТекущийОбъект, ЭтаФорма.ТолькоПросмотр); + МодульАвтономнаяРабота = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРабота"); + МодульАвтономнаяРабота.ОбъектПриЧтенииНаСервере(ТекущийОбъект, ЭтаФорма.ТолькоПросмотр); КонецЕсли; diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html index 6f281789b..aed2083a7 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o=""><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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o=""><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 9.00.8112.16470"></meta></head><body> <p style="MARGIN-LEFT: 0px">В классификаторе банков РФ хранятся сведения о банках: БИК, корреспондентский счет, данные о местонахождении, телефоны для связи с сотрудниками, почтовый адрес банка. Эти сведения используются при заполнении реквизитов банковских счетов и в других объектах программы. </p> <p style="MARGIN-LEFT: 0px">По команде <strong>Загрузить классификатор</strong> можно обновить сведения о банках с сайта РБК или из поставляемого на диске 1С:ИТС "<b>Общероссийского классификатора банков" (ОКБ)</b>.</p> <p style="MARGIN-LEFT: 0px">Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания <strong>Загрузка классификатора банков РФ с сайта РБК</strong>.</p> diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl index f9dca09d5..331dee0cc 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -3,16 +3,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Список.Отбор.Элементы.Очистить(); - ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); - ЭлементОтбора.ПравоеЗначение = Параметры.Отбор; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, + "Ссылка", + Параметры.Отбор, + ВидСравненияКомпоновкиДанных.НеВСписке + ); КонецПроцедуры @@ -32,6 +32,6 @@ РезультатВыбора.ЦелевоеВремя = ТД.ЦелевоеВремя; КонецЕсли; - ЭтаФорма.Закрыть(РезультатВыбора); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index e3105582d..c135eb38a 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Ссылка</left> - <comparisonType>NotEqual</comparisonType> - <right xsi:type="dcscor:DesignTimeValue">Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form index 728fb6359..bd3b9f732 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form @@ -293,6 +293,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..5de196e8e --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", Справочники.КлючевыеОперации.ОбщаяПроизводительностьСистемы, + ВидСравненияКомпоновкиДанных.НеРавно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form index f119162d6..d5555eb58 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form @@ -325,7 +325,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl index 68a412acb..57d80af68 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl @@ -132,7 +132,7 @@ ВыбранныеНаборы = Новый СписокЗначений; ЗаполнитьВыбранныеНаборы(ВыбранныеНаборы, ДеревоНаборов.ПолучитьЭлементы()); - Закрыть(ВыбранныеНаборы); + ОповеститьОВыборе(ВыбранныеНаборы); КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form index e8ff64207..f42d8285f 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаВыбора/Form.form @@ -164,7 +164,6 @@ <autoMaxRowsCount>true</autoMaxRowsCount> <choiceMode>true</choiceMode> <selectionMode>MultiRow</selectionMode> - <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> @@ -199,6 +198,7 @@ <id>-1</id> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <width>50</width> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form index adb6c31a7..b0816630d 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Form.form @@ -165,7 +165,6 @@ <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> - <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> @@ -204,6 +203,7 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <width>50</width> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index 848d3e2b7..b163c6a98 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Администратор системы может настроить наборы дополнительных свойств для определенных объектов системы. Способ хранения дополнительного свойства в информационной базе и место размещения на форме объекта зависит от типа свойства: дополнительный реквизит или сведение.</p> <p>Предопределенные наборы и группы наборов соответствуют объектам конфигурации, в которых можно использовать дополнительные реквизиты и сведения. Добавление новых наборов и групп наборов невозможно.</p> <p>В форме набора с помощью команды Подбор можно добавить объекту новый дополнительный реквизит или сведение.<br></p> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo index cac531f54..789a3bb32 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo @@ -161,6 +161,13 @@ <value></value> </code> </items> + <items id="e528d7dc-346b-4deb-92ec-b6cefa78c66f"> + <name>Документ_СообщениеSMS</name> + <description>Доп. свойства документа" Сообщение SMS"</description> + <code xsi:type="core:StringValue"> + <value></value> + </code> + </items> <items id="4b1f6bdf-16e9-480e-8012-6474f53e56ac"> <name>Справочник_ПапкиФайлов</name> <description>Доп. свойства справочника "Папки файлов"</description> diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form index 8471c8154..799b15436 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Form.form @@ -234,7 +234,20 @@ <savedData>true</savedData> </attributes> <commandInterface> - <navigationPanel/> + <navigationPanel> + <cmiFragmentRecord> + <command>0</command> + <group>FormNavigationPanelGoTo</group> + <index>0</index> + <userVisible/> + </cmiFragmentRecord> + <cmiFragmentRecord> + <command>0</command> + <group>FormNavigationPanelGoTo</group> + <index>1</index> + <userVisible/> + </cmiFragmentRecord> + </navigationPanel> <commandBar/> </commandInterface> <extInfo xsi:type="form:CatalogFormExtInfo"> diff --git a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..796d0394f --- /dev/null +++ b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,856 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаСтраницы</name> + <id>32</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОсновное</name> + <id>33</id> + <items xsi:type="form:FormField"> + <name>Идентификатор</name> + <id>29</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Идентификатор</segments> + </dataPath> + <extendedTooltip> + <name>ИдентификаторРасширеннаяПодсказка</name> + <id>42</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИдентификаторКонтекстноеМеню</name> + <id>30</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ПредставлениеРасписания</name> + <id>38</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПредставлениеРасписания</segments> + </dataPath> + <extendedTooltip> + <name>ПредставлениеРасписанияРасширеннаяПодсказка</name> + <id>44</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПредставлениеРасписанияКонтекстноеМеню</name> + <id>39</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>StartChoice</event> + <name>ПредставлениеРасписанияНачалоВыбора</name> + </handlers> + <handlers> + <event>Clearing</event> + <name>ПредставлениеРасписанияОчистка</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <choiceButton>true</choiceButton> + <clearButton>true</clearButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ИмяМетода</name> + <id>17</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ИмяМетода</segments> + </dataPath> + <extendedTooltip> + <name>ИмяМетодаРасширеннаяПодсказка</name> + <id>46</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИмяМетодаКонтекстноеМеню</name> + <id>18</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Ключ</name> + <id>23</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Ключ</segments> + </dataPath> + <extendedTooltip> + <name>КлючРасширеннаяПодсказка</name> + <id>48</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КлючКонтекстноеМеню</name> + <id>24</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Использование</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Использование</segments> + </dataPath> + <extendedTooltip> + <name>ИспользованиеРасширеннаяПодсказка</name> + <id>50</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИспользованиеКонтекстноеМеню</name> + <id>4</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormField"> + <name>ЭксклюзивноеВыполнение</name> + <id>11</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.ЭксклюзивноеВыполнение</segments> + </dataPath> + <extendedTooltip> + <name>ЭксклюзивноеВыполнениеРасширеннаяПодсказка</name> + <id>52</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ЭксклюзивноеВыполнениеКонтекстноеМеню</name> + <id>12</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <warningOnEditRepresentation>Show</warningOnEditRepresentation> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Основное</value> + + + ГруппаОсновноеРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаСостояниеВыполнения + 34 + + СостояниеЗадания + 7 + true + true + + true + + + Объект.СостояниеЗадания + + + СостояниеЗаданияРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + СостояниеЗаданияКонтекстноеМеню + 8 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗапланированныйМоментЗапуска + 5 + true + true + + true + + + Объект.ЗапланированныйМоментЗапуска + + + ЗапланированныйМоментЗапускаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ЗапланированныйМоментЗапускаКонтекстноеМеню + 6 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерПопытки + 15 + true + true + + true + + + Объект.НомерПопытки + + + НомерПопыткиРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + НомерПопыткиКонтекстноеМеню + 16 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КоличествоПовторовПриАварийномЗавершении + 27 + true + true + + true + + + Объект.КоличествоПовторовПриАварийномЗавершении + + + КоличествоПовторовПриАварийномЗавершенииРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + КоличествоПовторовПриАварийномЗавершенииКонтекстноеМеню + 28 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИнтервалПовтораПриАварийномЗавершении + 25 + true + true + + true + + + Объект.ИнтервалПовтораПриАварийномЗавершении + + + ИнтервалПовтораПриАварийномЗавершенииРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ИнтервалПовтораПриАварийномЗавершенииКонтекстноеМеню + 26 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаНачалаПоследнегоЗапуска + 19 + true + true + + true + + + Объект.ДатаНачалаПоследнегоЗапуска + + + ДатаНачалаПоследнегоЗапускаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ДатаНачалаПоследнегоЗапускаКонтекстноеМеню + 20 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаЗавершенияПоследнегоЗапуска + 21 + true + true + + true + + + Объект.ДатаЗавершенияПоследнегоЗапуска + + + ДатаЗавершенияПоследнегоЗапускаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ДатаЗавершенияПоследнегоЗапускаКонтекстноеМеню + 22 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсполняющееФоновоеЗадание + 9 + true + true + + true + + + Объект.ИсполняющееФоновоеЗадание + + + ИсполняющееФоновоеЗаданиеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ИсполняющееФоновоеЗаданиеКонтекстноеМеню + 10 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Состояние выполнения</value> + + + ГруппаСостояниеВыполненияРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаПараметры + 35 + + ПараметрыМетода + 36 + true + true + + true + + + ПараметрыМетода + + None + + ПараметрыМетодаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ПараметрыМетодаКонтекстноеМеню + 37 + true + + InputField + Show + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы</value> + + + ГруппаСтраницыРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ОчередьЗаданий + + + true + + + true + +
true
+ true +
+ + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 2 + + String + + 36 + + + + true + + + true + + + + Расписание + + <key>ru</key> + <value>Расписание</value> + + 3 + + + true + + + true + + + + ПараметрыМетода + + <key>ru</key> + <value>Параметры метода</value> + + 4 + + String + + + + true + + + true + + true + + + ПредставлениеРасписания + + <key>ru</key> + <value>Расписание</value> + + 5 + + String + + + + true + + + true + + true + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + + diff --git a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..b33f31c55 --- /dev/null +++ b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,97 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + УстановитьПредставлениеРасписания(ЭтаФорма); + ПараметрыМетода = ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Массив); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Идентификатор = Объект.Ссылка.УникальныйИдентификатор(); + + Расписание = ТекущийОбъект.Расписание.Получить(); + УстановитьПредставлениеРасписания(ЭтаФорма); + + ПараметрыМетода = ОбщегоНазначения.ЗначениеВСтрокуXML(ТекущийОбъект.Параметры.Получить()); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ТекущийОбъект.Расписание = Новый ХранилищеЗначения(Расписание); + ТекущийОбъект.Параметры = Новый ХранилищеЗначения(ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыМетода)); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Идентификатор = Объект.Ссылка.УникальныйИдентификатор(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеРасписанияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЗаблокироватьДанныеФормыДляРедактирования(); + + Если Расписание = Неопределено Тогда + РедактируемоеРасписание = Новый РасписаниеРегламентногоЗадания; + Иначе + РедактируемоеРасписание = Расписание; + КонецЕсли; + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РедактируемоеРасписание); + Если НЕ Диалог.ОткрытьМодально() Тогда + Возврат; + КонецЕсли; + + Расписание = Диалог.Расписание; + Модифицированность = Истина; + УстановитьПредставлениеРасписания(ЭтаФорма); + + ПоказатьОповещениеПользователя(НСтр("ru = 'Перепланирование'"), , НСтр("ru = 'Новое расписание будет учтено при + |следующем выполнении задания'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеРасписанияОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЗаблокироватьДанныеФормыДляРедактирования(); + + Расписание = Неопределено; + Модифицированность = Истина; + УстановитьПредставлениеРасписания(ЭтаФорма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьПредставлениеРасписания(Знач Форма) + + Расписание = Форма.Расписание; + + Если Расписание <> Неопределено Тогда + Форма.ПредставлениеРасписания = Строка(Расписание); + Иначе + Форма.ПредставлениеРасписания = НСтр("ru = '<Не задано>'"); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ОчередьЗаданий/ОчередьЗаданий.mdo b/SSL/src/Catalogs/ОчередьЗаданий/ОчередьЗаданий.mdo index af24f85c5..17aa0c026 100644 --- a/SSL/src/Catalogs/ОчередьЗаданий/ОчередьЗаданий.mdo +++ b/SSL/src/Catalogs/ОчередьЗаданий/ОчередьЗаданий.mdo @@ -102,6 +102,7 @@ Variable InDialog BothWays + Catalog.ОчередьЗаданий.Form.ФормаЭлемента Использование @@ -388,4 +389,13 @@ Use Use + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..0705f6945 --- /dev/null +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,940 @@ + + + + ОбластьДанныхВспомогательныеДанные + 1 + true + true + + true + + + Объект.ОбластьДанныхВспомогательныеДанные + + + ОбластьДанныхВспомогательныеДанныеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ОбластьДанныхВспомогательныеДанныеКонтекстноеМеню + 2 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаСтраницы + 32 + + ГруппаОсновное + 33 + + Идентификатор + 29 + true + true + + true + + + Идентификатор + + + ИдентификаторРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ИдентификаторКонтекстноеМеню + 30 + true + + LabelField + Show + Enter + true + Left + true + + true + true + + + + Шаблон + 13 + true + true + + true + + + Объект.Шаблон + + + ШаблонРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ШаблонКонтекстноеМеню + 14 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПредставлениеРасписания + 38 + true + true + + true + + + ПредставлениеРасписания + + + ПредставлениеРасписанияРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПредставлениеРасписанияКонтекстноеМеню + 39 + true + + InputField + Show + Enter + true + Left + true + + + StartChoice + ПредставлениеРасписанияНачалоВыбора + + + Clearing + ПредставлениеРасписанияОчистка + + true + true + true + true + true + true + true + Normal + + + + ИмяМетода + 17 + true + true + + true + + + Объект.ИмяМетода + + + ИмяМетодаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ИмяМетодаКонтекстноеМеню + 18 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Ключ + 23 + true + true + + true + + + Объект.Ключ + + + КлючРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + КлючКонтекстноеМеню + 24 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Использование + 3 + true + true + + true + + + Объект.Использование + + + ИспользованиеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 4 + true + + CheckBoxField + Show + Auto + true + Left + true + + + + ЭксклюзивноеВыполнение + 11 + true + true + + true + + + Объект.ЭксклюзивноеВыполнение + + + ЭксклюзивноеВыполнениеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ЭксклюзивноеВыполнениеКонтекстноеМеню + 12 + true + + CheckBoxField + Show + Auto + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ГруппаОсновноеРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаСостояниеВыполнения + 34 + + СостояниеЗадания + 7 + true + true + + true + + + Объект.СостояниеЗадания + + + СостояниеЗаданияРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + СостояниеЗаданияКонтекстноеМеню + 8 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗапланированныйМоментЗапуска + 5 + true + true + + true + + + Объект.ЗапланированныйМоментЗапуска + + + ЗапланированныйМоментЗапускаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ЗапланированныйМоментЗапускаКонтекстноеМеню + 6 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерПопытки + 15 + true + true + + true + + + Объект.НомерПопытки + + + НомерПопыткиРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + НомерПопыткиКонтекстноеМеню + 16 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КоличествоПовторовПриАварийномЗавершении + 27 + true + true + + true + + + Объект.КоличествоПовторовПриАварийномЗавершении + + + КоличествоПовторовПриАварийномЗавершенииРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + КоличествоПовторовПриАварийномЗавершенииКонтекстноеМеню + 28 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИнтервалПовтораПриАварийномЗавершении + 25 + true + true + + true + + + Объект.ИнтервалПовтораПриАварийномЗавершении + + + ИнтервалПовтораПриАварийномЗавершенииРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ИнтервалПовтораПриАварийномЗавершенииКонтекстноеМеню + 26 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаНачалаПоследнегоЗапуска + 19 + true + true + + true + + + Объект.ДатаНачалаПоследнегоЗапуска + + + ДатаНачалаПоследнегоЗапускаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ДатаНачалаПоследнегоЗапускаКонтекстноеМеню + 20 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаЗавершенияПоследнегоЗапуска + 21 + true + true + + true + + + Объект.ДатаЗавершенияПоследнегоЗапуска + + + ДатаЗавершенияПоследнегоЗапускаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ДатаЗавершенияПоследнегоЗапускаКонтекстноеМеню + 22 + true + + InputField + Show + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсполняющееФоновоеЗадание + 9 + true + true + + true + + + Объект.ИсполняющееФоновоеЗадание + + + ИсполняющееФоновоеЗаданиеРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ИсполняющееФоновоеЗаданиеКонтекстноеМеню + 10 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Состояние выполнения</value> + + + ГруппаСостояниеВыполненияРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаПараметры + 35 + + ПараметрыМетода + 36 + true + true + + true + + + ПараметрыМетода + + None + + ПараметрыМетодаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ПараметрыМетодаКонтекстноеМеню + 37 + true + + InputField + Show + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы</value> + + + ГруппаСтраницыРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ОчередьЗаданийОбластейДанных + + + true + + + true + +
true
+ true +
+ + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 2 + + String + + 36 + + + + true + + + true + + + + Расписание + + <key>ru</key> + <value>Расписание</value> + + 3 + + + true + + + true + + + + ПараметрыМетода + + <key>ru</key> + <value>Параметры метода</value> + + 4 + + String + + + + true + + + true + + true + + + ПредставлениеРасписания + + <key>ru</key> + <value>Расписание</value> + + 5 + + String + + + + true + + + true + + true + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..3bad1083e --- /dev/null +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,104 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + УстановитьПредставлениеРасписания(ЭтаФорма); + ПараметрыМетода = ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Массив); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Идентификатор = Объект.Ссылка.УникальныйИдентификатор(); + + Расписание = ТекущийОбъект.Расписание.Получить(); + УстановитьПредставлениеРасписания(ЭтаФорма); + + ПараметрыМетода = ОбщегоНазначения.ЗначениеВСтрокуXML(ТекущийОбъект.Параметры.Получить()); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ТекущийОбъект.Расписание = Новый ХранилищеЗначения(Расписание); + ТекущийОбъект.Параметры = Новый ХранилищеЗначения(ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыМетода)); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Идентификатор = Объект.Ссылка.УникальныйИдентификатор(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеРасписанияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЗаблокироватьДанныеФормыДляРедактирования(); + + Если ЗначениеЗаполнено(Объект.Шаблон) Тогда + Предупреждение(НСтр("ru = 'Для заданий на основе шаблонов, расписание задается в шаблоне.'")); + Возврат; + КонецЕсли; + + Если Расписание = Неопределено Тогда + РедактируемоеРасписание = Новый РасписаниеРегламентногоЗадания; + Иначе + РедактируемоеРасписание = Расписание; + КонецЕсли; + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РедактируемоеРасписание); + Если НЕ Диалог.ОткрытьМодально() Тогда + Возврат; + КонецЕсли; + + Расписание = Диалог.Расписание; + Модифицированность = Истина; + УстановитьПредставлениеРасписания(ЭтаФорма); + + ПоказатьОповещениеПользователя(НСтр("ru = 'Перепланирование'"), , НСтр("ru = 'Новое расписание будет учтено при + |следующем выполнении задания'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеРасписанияОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЗаблокироватьДанныеФормыДляРедактирования(); + + Расписание = Неопределено; + Модифицированность = Истина; + УстановитьПредставлениеРасписания(ЭтаФорма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьПредставлениеРасписания(Знач Форма) + + Расписание = Форма.Расписание; + + Если Расписание <> Неопределено Тогда + Форма.ПредставлениеРасписания = Строка(Расписание); + ИначеЕсли ЗначениеЗаполнено(Форма.Объект.Шаблон) Тогда + Форма.ПредставлениеРасписания = НСтр("ru = '<Задается в шаблоне>'"); + Иначе + Форма.ПредставлениеРасписания = НСтр("ru = '<Не задано>'"); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/ОчередьЗаданийОбластейДанных.mdo b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/ОчередьЗаданийОбластейДанных.mdo index e3a3c1ebd..0141583c8 100644 --- a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/ОчередьЗаданийОбластейДанных.mdo +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/ОчередьЗаданийОбластейДанных.mdo @@ -102,6 +102,7 @@ Variable InDialog BothWays + Catalog.ОчередьЗаданийОбластейДанных.Form.ФормаЭлемента Catalog.ОчередьЗаданийОбластейДанных.Form.ФормаСписка Использование @@ -214,6 +215,7 @@ + Index Use Use @@ -417,4 +419,13 @@ PersonalComputer MobileDevice + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html index fcb8eff7d..c86efc0b9 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html @@ -1,4 +1,4 @@ - +

Все файлы хранятся в структуре папок, которую удобно вести, например:

  • в соответствии с организационной структурой Вашего предприятия; 
  • по типам файлов (например, "Договора", "Приказы", "Служебные записки");  diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index ed9972d0b..91027f589 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,13 +1,6 @@ - - false - Владелец - Equal - Справочник.УчетныеЗаписиЭлектроннойПочты.ПустаяСсылка - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl index 26d35442a..421fa17ba 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl @@ -23,4 +23,8 @@ КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Владелец", Справочники.УчетныеЗаписиЭлектроннойПочты.ПустаяСсылка(), + ВидСравненияКомпоновкиДанных.Равно, , Ложь); + КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html index 89bcd3ef5..74c5ad56c 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html @@ -1,4 +1,4 @@ - +

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

    • Найти "некорректных" пользователей ИБ и синхронизировать списки пользователей ИБ и пользователей между собой:
      • если пользователь ИБ был добавлен с помощью конфигуратора (или каким-либо нештатным программным способом), предлагается удалить такого пользователя ИБ; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form index dccffc6e8..eca1399bc 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Form.form @@ -683,7 +683,7 @@ Yes 54 20 - DontBlock + LockOwner true true true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html index b2c95e5e0..c98fe893d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html @@ -1,4 +1,4 @@ - +

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

        В списке "Домены" отображаются имена доменов, видимых с данного компьютера.

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

        diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl index 85bab017d..019835372 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl @@ -100,7 +100,7 @@ ИмяДомена = Элементы.ТаблицаДоменов.ТекущиеДанные.ИмяДомена; ИмяПользователя = Элементы.ТаблицаПользователейДомена.ТекущиеДанные.ИмяПользователя; - СтрокаПользователяWindows = "\\" + ИмяДомена + "\" + ИмяПользователя; - Закрыть(СтрокаПользователяWindows); + РезультатВыбора = "\\" + ИмяДомена + "\" + ИмяПользователя; + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ГруппыПользователей/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ГруппыПользователей/ExtInfo/ListSettings.dcss index 31e6269dc..91027f589 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ГруппыПользователей/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ГруппыПользователей/ExtInfo/ListSettings.dcss @@ -5,14 +5,6 @@ dfcece9d-5077-440b-b6b3-45a5cb4538eb - - Предопределенный - Desc - - - Наименование - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss index 62a95e605..91027f589 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,50 +1,14 @@ - - Служебный - Equal - false - - - Недействителен - Equal - false - - - false - ПометкаУдаления - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb - - Наименование - Asc - Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - Недействителен - Equal - true - - - - - ЦветТекста - style:ТекстЗапрещеннойЯчейкиЦвет - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index 9ec6595e6..ee80be8a8 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -1454,7 +1454,7 @@ BeforeLoadDataFromSettingsAtServer - ПриЗагрузкеДанныхИзНастроекНаСервере + ПередЗагрузкеДанныхИзНастроекНаСервере Create 80 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index bbebbebed..2e2a887c0 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -23,6 +23,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; // Начальное значение настройки до загрузки данных из настроек. ВыбиратьИерархически = Истина; @@ -31,11 +35,10 @@ ЗаполнитьПараметрыДинамическихСписков(); Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; КонецЕсли; - ОбновитьОтборНедействительныхПользователей(ЭтаФорма); - // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда @@ -53,6 +56,10 @@ КонецЕсли; + // Скрытие служебных пользователей. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Служебный", Ложь, , , Истина); + // Скрытие переданного пользователя из формы выбора пользователей. Если ТипЗнч(Параметры.СкрываемыеПользователи) = Тип("СписокЗначений") Тогда @@ -65,6 +72,10 @@ КонецЕсли; + ОформитьИСкрытьНедействительныхПользователей(); + + НастроитьПорядокГруппыВсеПользователи(ГруппыПользователей); + ХранимыеПараметры.Вставить("РасширенныйПодбор", Параметры.РасширенныйПодбор); Элементы.ВыбранныеПользователиИГруппы.Видимость = ХранимыеПараметры.РасширенныйПодбор; ХранимыеПараметры.Вставить( @@ -81,7 +92,9 @@ КонецЕсли; // Отбор не помеченных на удаление. - ПользователиСписок.Отбор.Элементы[0].Использование = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); Элементы.ПользователиСписок.РежимВыбора = Истина; Элементы.ГруппыПользователей.РежимВыбора = ХранимыеПараметры.ВыборГруппПользователей; @@ -136,7 +149,7 @@ КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) +Процедура ПередЗагрузкеДанныхИзНастроекНаСервере(Настройки) Если ТипЗнч(Настройки["ВыбиратьИерархически"]) = Тип("Булево") Тогда ВыбиратьИерархически = Настройки["ВыбиратьИерархически"]; @@ -204,7 +217,7 @@ ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИзаполнитьСписокВыбранных(Значение); + ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); КонецЕсли; @@ -289,7 +302,7 @@ ИначеЕсли Не ГруппаПомеченаНаУдаление Тогда ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в группу ""%3""?'"); Иначе - ТекстВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); + ШаблонВопроса = НСтр("ru = '%1 пользователей (%2) в эту группу?'"); КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонВопроса, ДействиеСПользователем, КоличествоПользователей, @@ -318,7 +331,7 @@ Предупреждение(СообщениеПользователю.Сообщение); КонецЕсли; - Оповестить("Запись_ГруппыПользователей"); + Оповестить("Запись_ГруппыВнешнихПользователей"); КонецПроцедуры @@ -341,7 +354,7 @@ ОповеститьОВыборе(Значение); Иначе - ПолучитьКартинкиИзаполнитьСписокВыбранных(Значение); + ПолучитьКартинкиИЗаполнитьСписокВыбранных(Значение); КонецЕсли; @@ -396,7 +409,12 @@ &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) - ОбновитьОтборНедействительныхПользователей(ЭтаФорма, Истина); + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Недействителен", Ложь, , , + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка); КонецПроцедуры @@ -474,6 +492,61 @@ КонецПроцедуры +&НаСервере +Процедура ОформитьИСкрытьНедействительныхПользователей() + + // Оформление. + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.НедоступныеДанныеЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПользователиСписок.Недействителен"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("ПользователиСписок"); + ЭлементОформляемогоПоля.Использование = Истина; + + // Скрытие. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + ПользователиСписок, "Недействителен", Ложь, , , Истина); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьПорядокГруппыВсеПользователи(Список) + + Перем Порядок; + + // Порядок. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Предопределенный"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + +КонецПроцедуры + &НаСервере Процедура УдалитьИзСпискаВыбранных(УдалитьВсех = Ложь) @@ -493,7 +566,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПолучитьКартинкиИзаполнитьСписокВыбранных(МассивВыбранныхЭлементов) +Процедура ПолучитьКартинкиИЗаполнитьСписокВыбранных(МассивВыбранныхЭлементов) ВыбранныеЭлементыИКартинки = Новый Массив; Для Каждого ВыбранныйЭлемент Из МассивВыбранныхЭлементов Цикл @@ -529,7 +602,7 @@ ВыбранныеПользователиИГруппы.Загрузить(ПараметрыРасширеннойФормыПодбора.ВыбранныеПользователи); Пользователи.ЗаполнитьНомераКартинокПользователей(ВыбранныеПользователиИГруппы, "Пользователь", "НомерКартинки"); ХранимыеПараметры.Вставить("ЗаголовокФормыПодбора", ПараметрыРасширеннойФормыПодбора.ЗаголовокФормыПодбора); - // Установка параметров раширенной формы подбора. + // Установка параметров расширенной формы подбора. Элементы.ЗавершитьИЗакрыть.Видимость = Истина; Элементы.ГруппаВыбратьПользователя.Видимость = Истина; // Включение видимости списка выбранных пользователей. @@ -607,34 +680,6 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьОтборНедействительныхПользователей(Форма, ИзменитьОтбор = Ложь) - - Элементы = Форма.Элементы; - - Если ИзменитьОтбор Тогда - - Элементы.ПоказыватьНедействительныхПользователей.Пометка = - НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; - - ИначеЕсли Форма.Параметры.Отбор.Свойство("Недействителен") Тогда - - Элементы.ПоказыватьНедействительныхПользователей.Пометка = - Форма.Параметры.Отбор.Недействителен; - - КонецЕсли; - - Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Форма.ПользователиСписок, "Недействителен", Ложь, , , Ложь); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Форма.ПользователиСписок, "Недействителен", Ложь, , , Истина); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПриИзмененииИспользованияГруппПользователей() diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index 02ce7d114..8f9785b21 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -1634,6 +1634,10 @@ -1 Left + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -2280,6 +2284,23 @@ true + + ЗапросПароляПередЗаписью + + <key>ru</key> + <value>Запрос пароля перед записью</value> + + 30 + + Boolean + + + true + + + true + + ПоказатьТолькоВыбранныеРоли diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index a4b9879f3..5e961c52b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для редактирования сведений о пользователе необходимы права администрирования. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.</p> <p><strong>Полное имя </strong>пользователя выводится во всех списках и отчетах. Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей.</p> <p>Для того чтобы пользователь мог работать в программе, ему нужно установить флажок <strong>Доступ к информационной базе разрешен</strong> и задать необходимые свойства: имя, пароль и другие параметры авторизации. Имя для входа в программу может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович").</p> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 2727af496..3d1d8eae1 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -155,6 +154,29 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АутентификацияВСервисе") Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ПарольПользователяСервиса = ВыбранноеЗначение; + Если ЗапросПароляПередЗаписью Тогда + Записать(); + Иначе + Подключаемый_EMailНачалоВыбора(); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Пользователи.Форма.ФормаВыбораПользователяОС") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда + ПользовательИнфБазыПользовательОС = ВыбранноеЗначение; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПередЗаписью(Отказ) @@ -196,9 +218,16 @@ Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено И ТребуетсяСинхронизацияССервисом Тогда - СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( - ПарольПользователяСервиса, Отказ); + ЗапросПароляПередЗаписью = Истина; + ПарольЕщёНеВведен = Ложь; + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); + + Если ПарольЕщёНеВведен Тогда + Отказ = Истина; + Возврат; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -253,8 +282,12 @@ ТребуетсяСинхронизацияССервисом = Ложь; - ПараметрыЗаписи.Вставить( - ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + + ПараметрыЗаписи.Вставить( + ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); + КонецЕсли; ПрочитатьПользователяИБ(); @@ -397,11 +430,7 @@ Процедура ПользовательИнфБазыПользовательОСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) #Если НЕ ВебКлиент Тогда - Результат = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаВыбораПользователяОС"); - - Если ТипЗнч(Результат) = Тип("Строка") Тогда - ПользовательИнфБазыПользовательОС = Результат; - КонецЕсли; + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаВыбораПользователяОС", , ЭтаФорма); #КонецЕсли КонецПроцедуры @@ -433,6 +462,8 @@ КонецПроцедуры +// СтандартныеПодсистемы.КонтактнаяИнформация + &НаКлиенте Процедура Подключаемый_EMailПриИзменении(Элемент) @@ -467,30 +498,32 @@ &НаКлиенте Процедура Подключаемый_EMailНачалоВыбора() - Отказ = Ложь; + ЗапросПароляПередЗаписью = Ложь; + ПарольЕщёНеВведен = Ложь; СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( - ПарольПользователяСервиса, Отказ); + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); - Если Отказ Тогда + Если ПарольЕщёНеВведен Тогда Возврат; КонецЕсли; ТаблицаКИ = ЭтаФорма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - СтрокаEMail = ТаблицаКИ.НайтиСтроки(Новый Структура("Вид", - ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailПользователя")))[0]; + + Отбор = Новый Структура("Вид", + ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailПользователя")); + + СтрокаEMail = ТаблицаКИ.НайтиСтроки(Отбор)[0]; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); - ПараметрыФормы.Вставить("СтараяПочта", ЭтаФорма[СтрокаEMail.ИмяРеквизита]); + ПараметрыФормы.Вставить("СтараяПочта", ЭтаФорма[СтрокаEMail.ИмяРеквизита]); ПараметрыФормы.Вставить("Пользователь", Объект.Ссылка); ОткрытьФорму("Справочник.Пользователи.Форма.СменаПочты", ПараметрыФормы, ЭтаФорма); КонецПроцедуры -// СтандартныеПодсистемы.КонтактнаяИнформация - &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) @@ -624,7 +657,7 @@ // переназначению, созданию отделов, подразделений и рабочих групп). ДействияВФорме.Роли = ""; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; + ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда @@ -910,7 +943,7 @@ ВыводитьСписокРолей = ЗначениеЗаполнено(ДействияВФорме.Роли); Элементы.ОтображениеРолей.Видимость = ВыводитьСписокРолей; Элементы.СвойстваАутентификации1СПредприятия.Отображение = - ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.Отступ); + ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыОтступ()); Элементы.Наименование.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование"; diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index 6b90eed2c..ad6a195e6 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке ведется учет пользователей, которые работают с программой. </p> <p>В случае большого количества пользователей список может быть сгруппирован. Например, группы пользователей можно использовать для ведения структуры подразделений компании. Для того чтобы увидеть всех пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать пользователей дочерних групп</strong> в нижней части списка. Для добавления новых групп пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа пользователей можно открыть форму группы и воспользоваться командой <strong>Подобрать</strong>. Один и тот же пользователь может одновременно входить в разные группы пользователей.</p> <p>Для ведения списка пользователей требуются права администрирования. Остальным пользователям доступен только просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык программы и контактная информация.</p> diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index ce76cb8f7..33f562110 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -17,25 +17,6 @@ Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - Если ВидФормы = "ФормаВыбора" Тогда - - ПараметрИзменен = Ложь; - - Если Не Параметры.Свойство("Отбор") Тогда - Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь)); - ПараметрИзменен = Истина; - ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда - Параметры.Отбор.Вставить("Недействителен", Ложь); - ПараметрИзменен = Истина; - КонецЕсли; - - Если ПараметрИзменен Тогда - СтандартнаяОбработка = Ложь; - ВыбраннаяФорма = "ФормаСписка"; - КонецЕсли; - - КонецЕсли; - ПользователиСлужебный.ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 9fdb9ac99..a4928011b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -37,27 +37,23 @@ ОчиститьСообщения(); - СтруктураПараметры = Новый Структура; - МассивЭлементовОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(Список.Отбор,"Владелец"); - Если МассивЭлементовОтбора.Количество() > 0 И МассивЭлементовОтбора[0].Использование И - ЗначениеЗаполнено(МассивЭлементовОтбора[0].ПравоеЗначение) Тогда - - СтруктураПараметры.Вставить("УчетнаяЗапись",МассивЭлементовОтбора[0].ПравоеЗначение); - + ПараметрыФормы = Новый Структура; + + МассивЭлементовОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список), "Владелец"); + Если МассивЭлементовОтбора.Количество() > 0 И МассивЭлементовОтбора[0].Использование + И ЗначениеЗаполнено(МассивЭлементовОтбора[0].ПравоеЗначение) Тогда + ПараметрыФормы.Вставить("УчетнаяЗапись",МассивЭлементовОтбора[0].ПравоеЗначение); Иначе - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); Возврат; - КонецЕсли; - Результат = ОткрытьФормуМодально("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил",СтруктураПараметры, ЭтаФорма); + ОткрытьФорму("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил", ПараметрыФормы, ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы настройка порядка элементнов для подчиненного справочника +// Команды подсистемы настройка порядка элементов для подчиненного справочника // &НаКлиенте diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 7524463fb..33babbf65 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -11,6 +11,10 @@ <dataPath xsi:type="form:DataPath"> <segments>Объект.Description</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>НаименованиеПриИзменении</name> + </handlers> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> <id>15</id> @@ -32,10 +36,6 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> - <handlers> - <event>StartListChoice</event> - <name>НаименованиеНачалоВыбораИзСписка</name> - </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> @@ -136,6 +136,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>OnChange</event> + <name>КомпоновщикНастроекНастройкиОтборПриИзменении</name> + </handlers> <searchStringAddition> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоиска</name> <id>21</id> @@ -258,6 +262,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>OnOpen</event> + <name>ПриОткрытии</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index d5c43f125..98c96ad21 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -49,19 +49,28 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + СформироватьСписокВыбораНаименования(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте -Процедура НаименованиеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) +Процедура КомпоновщикНастроекНастройкиОтборПриИзменении(Элемент) - Элементы.Наименование.СписокВыбора.Очистить(); - Элементы.Наименование.СписокВыбора.Добавить(Объект.Наименование); - ПредставлениеОтбора = Строка(КомпоновщикНастроек.Настройки.Отбор); - Если СтрДлина(ПредставлениеОтбора) > 150 Тогда - ПредставлениеОтбора = Лев(ПредставлениеОтбора,147) + "..."; - КонецЕсли; - Элементы.Наименование.СписокВыбора.Добавить(ПредставлениеОтбора); + СформироватьСписокВыбораНаименования(); + +КонецПроцедуры + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + + СформироватьСписокВыбораНаименования(); КонецПроцедуры @@ -84,4 +93,23 @@ КонецПроцедуры +&НаКлиенте +Процедура СформироватьСписокВыбораНаименования() + + Элементы.Наименование.СписокВыбора.Очистить(); + Если Не ПустаяСтрока(Объект.Наименование) Тогда + Элементы.Наименование.СписокВыбора.Добавить(Объект.Наименование); + КонецЕсли; + ПредставлениеОтбора = Строка(КомпоновщикНастроек.Настройки.Отбор); + Если СтрДлина(ПредставлениеОтбора) > 150 Тогда + ПредставлениеОтбора = Лев(ПредставлениеОтбора,147) + "..."; + КонецЕсли; + Если ПредставлениеОтбора <> Объект.Наименование Тогда + Элементы.Наименование.СписокВыбора.Добавить(ПредставлениеОтбора); + КонецЕсли; + +КонецПроцедуры + + + diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index c68c97d27..a164fbf10 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -632,6 +632,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -930,7 +934,7 @@ <commandInterface> <navigationPanel> <cmiFragmentRecord> - <command>InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardCommand.OpenByValue.ЭлементОбщихДанных</command> + <command>0</command> <userVisible/> </cmiFragmentRecord> </navigationPanel> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html index 52c48e9f0..ced90fa3e 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Виды дней производственного календаря выделены разными цветами: </p> <ul><li>черным – рабочий день, </li><li><font color="#8b0000">темно-красным</font> – суббота, diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index 20a727653..53ec85b69 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -25,6 +25,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборДаты") Тогда + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + ВыделенныеДаты = Элементы.Календарь.ВыделенныеДаты; + Если ВыделенныеДаты.Количество() = 0 Или Год(ВыделенныеДаты[0]) <> НомерТекущегоГода Тогда + Возврат; + КонецЕсли; + ДатаПереноса = ВыделенныеДаты[0]; + ПеренестиВидДня(ДатаПереноса, ВыбранноеЗначение); + Элементы.Календарь.Обновить(); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -69,7 +85,7 @@ Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл ЦветОформленияДня = ЦветаВидовДней.Получить(ВидыДней.Получить(СтрокаОформленияПериода.Дата)); Если ЦветОформленияДня = Неопределено Тогда - ЦветОформленияДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет"); + ЦветОформленияДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняПроизводственногоКалендаряНеУказанЦвет"); КонецЕсли; СтрокаОформленияПериода.ЦветТекста = ЦветОформленияДня; КонецЦикла; @@ -116,12 +132,7 @@ Формат(ДатаПереноса, "ДФ='д ММММ'"), ВидДня)); - ДатаНазначения = ОткрытьФормуМодально("ОбщаяФорма.ВыборДаты", ПараметрыВыбораДаты); - - Если ДатаНазначения <> Неопределено Тогда - ПеренестиВидДня(ДатаПереноса, ДатаНазначения); - Элементы.Календарь.Обновить(); - КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ВыборДаты", ПараметрыВыбораДаты, ЭтаФорма); КонецПроцедуры @@ -142,8 +153,8 @@ ПараметрыКоманды.Вставить("НомерГода", НомерТекущегоГода); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатьюКлиент"); - Модуль.ВыполнитьКомандуПечати("Справочник.ПроизводственныеКалендари", "ПроизводственныйКалендарь", + МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатьюКлиент"); + МодульУправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Справочник.ПроизводственныеКалендари", "ПроизводственныйКалендарь", ПараметрыКоманды, ЭтаФорма); КонецЕсли; @@ -391,4 +402,3 @@ Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); КонецПроцедуры - diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 71cf43809..d1ac1bf77 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -367,11 +367,11 @@ ЦветаОформления = Новый Соответствие; - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, ЦветаСтиля.ВидДняРабочийЦвет); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, ЦветаСтиля.ВидДняСубботаЦвет); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, ЦветаСтиля.ВидДняВоскресеньеЦвет); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, ЦветаСтиля.ВидДняПредпраздничныйЦвет); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, ЦветаСтиля.ВидДняПраздникЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, ЦветаСтиля.ВидДняПроизводственногоКалендаряРабочийЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, ЦветаСтиля.ВидДняПроизводственногоКалендаряСубботаЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, ЦветаСтиля.ВидДняПроизводственногоКалендаряВоскресеньеЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, ЦветаСтиля.ВидДняПроизводственногоКалендаряПредпраздничныйЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, ЦветаСтиля.ВидДняПроизводственногоКалендаряПраздникЦвет); Возврат ЦветаОформления; @@ -540,8 +540,8 @@ Процедура Печать(ПараметрыКоманды, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатью"); - Модуль.ВывестиТабличныйДокументВКоллекцию( + МодульУправлениеПечатью = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "ПроизводственныйКалендарь", НСтр("ru = 'Производственный календарь'"), Справочники.ПроизводственныеКалендари.ПечатнаяФормаПроизводственногоКалендаря(ПараметрыКоманды), diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> +</Settings> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form new file mode 100644 index 000000000..cc1954031 --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Form.form @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Table"> + <name>Список</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список</segments> + </dataPath> + <defaultItem>true</defaultItem> + <titleLocation>None</titleLocation> + <excludedCommands>Create</excludedCommands> + <items xsi:type="form:FormField"> + <name>Наименование</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список.Description</segments> + </dataPath> + <defaultItem>true</defaultItem> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>16</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>5</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> + <id>3</id> + <horizontalAlign>Left</horizontalAlign> + </autoCommandBar> + <searchStringAddition> + <name>СписокСтрокаПоиска</name> + <id>7</id> + <extendedTooltip> + <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> + <id>9</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокСтрокаПоискаКонтекстноеМеню</name> + <id>8</id> + <autoFill>true</autoFill> + </contextMenu> + <source>Список</source> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchStringAddition> + <viewStatusAddition> + <name>СписокСостояниеПросмотра</name> + <id>10</id> + <extendedTooltip> + <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> + <id>12</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокСостояниеПросмотраКонтекстноеМеню</name> + <id>11</id> + <autoFill>true</autoFill> + </contextMenu> + <type>ViewStatusAddition</type> + <source>Список</source> + <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </viewStatusAddition> + <searchControlAddition> + <name>СписокУправлениеПоиском</name> + <id>13</id> + <extendedTooltip> + <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> + <id>15</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокУправлениеПоискомКонтекстноеМеню</name> + <id>14</id> + <autoFill>true</autoFill> + </contextMenu> + <type>SearchControlAddition</type> + <source>Список</source> + <extInfo xsi:type="form:SearchControlAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchControlAddition> + <extendedTooltip> + <name>СписокРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СписокКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <representation>Tree</representation> + <changeRowSet>true</changeRowSet> + <changeRowOrder>true</changeRowOrder> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <autoMaxRowsCount>true</autoMaxRowsCount> + <choiceMode>true</choiceMode> + <selectionMode>MultiRow</selectionMode> + <headerHeight>1</headerHeight> + <footerHeight>1</footerHeight> + <horizontalScrollBar>AutoUse</horizontalScrollBar> + <verticalScrollBar>AutoUse</verticalScrollBar> + <horizontalLines>true</horizontalLines> + <verticalLines>true</verticalLines> + <horizontalLinesBWA>false</horizontalLinesBWA> + <verticalLinesBWA>false</verticalLinesBWA> + <useAlternationRowColorBWA>false</useAlternationRowColorBWA> + <searchOnInput>Auto</searchOnInput> + <initialListView>Auto</initialListView> + <initialTreeView>ExpandTopLevel</initialTreeView> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + <enableStartDrag>true</enableStartDrag> + <enableDrag>true</enableDrag> + <rowPictureDataPath xsi:type="form:DataPath"> + <segments>Список.DefaultPicture</segments> + </rowPictureDataPath> + <searchStringLocation>None</searchStringLocation> + <viewStatusLocation>None</viewStatusLocation> + <searchControlLocation>None</searchControlLocation> + <autoMaxCardHeight>true</autoMaxCardHeight> + <extInfo xsi:type="form:DynamicListTableExtInfo"> + <autoRefreshPeriod>60</autoRefreshPeriod> + <period> + <startDate>0001-01-01T00:00:00</startDate> + <endDate>0001-01-01T00:00:00</endDate> + </period> + <choiceFoldersAndItems>Folders</choiceFoldersAndItems> + <topLevelParent xsi:type="core:UndefinedValue"/> + <showRoot>true</showRoot> + <allowRootChoice>true</allowRootChoice> + <allowGettingCurrentRowURL>true</allowGettingCurrentRowURL> + </extInfo> + </items> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <excludedCommands>Create</excludedCommands> + <windowOpeningMode>LockOwner</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Список</name> + <id>1</id> + <valueType> + <types>DynamicList</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + <extInfo xsi:type="form:DynamicListExtInfo"> + <mainTable>Catalog.ПрофилиГруппДоступа</mainTable> + <dynamicDataRead>true</dynamicDataRead> + <autoFillAvailableFields>true</autoFillAvailableFields> + <autoSaveUserSettings>true</autoSaveUserSettings> + <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> + </extInfo> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> + <extInfo xsi:type="form:DynamicListFormExtInfo"/> +</form:Form> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl new file mode 100644 index 000000000..5c5df988e --- /dev/null +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Module.bsl @@ -0,0 +1,18 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Отбор только групп. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ЭтоГруппа", Истина, , , Истина); + + // Отбор не помеченных на удаление. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form index 70416fdb9..808b4a8e3 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Form.form @@ -11,6 +11,10 @@ <dataPath xsi:type="form:DataPath"> <segments>Объект.Description</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Наименование группы (папки)</value> + </toolTip> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> <id>5</id> @@ -44,6 +48,10 @@ <items xsi:type="form:FormField"> <name>Родитель</name> <id>3</id> + <title> + <key>ru</key> + <value>Вышестоящая группа (папка)</value> + true true @@ -52,6 +60,10 @@ Объект.Parent + + ru + Вышестоящая группа (папка), объединяющая группы (папки) для удобства поиска + РодительРасширеннаяПодсказка 7 diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 360d5fa46..91027f589 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,21 +1,6 @@ - - Ссылка - NotInList - - - -1 - - Inaccessible - - - false - ПометкаУдаления - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index c6e0b434d..d72f30b6a 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -240,13 +240,7 @@ Профили.ПоставляемыйПрофильИзменен, Профили.Комментарий ИЗ - Справочник.ПрофилиГруппДоступа КАК Профили -ГДЕ - ВЫБОР - КОГДА &РежимВыбораТолькоГрупп - ТОГДА Профили.ЭтоГруппа - ИНАЧЕ ИСТИНА - КОНЕЦ + Справочник.ПрофилиГруппДоступа КАК Профили Catalog.ПрофилиГруппДоступа true true diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html index e30bea14d..2e4d2bd01 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ - +

        Назначение профилей групп доступа см. здесь.

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

         

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index 56784d990..8135c8f89 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -8,31 +8,26 @@ Возврат; КонецЕсли; - Список.Параметры.УстановитьЗначениеПараметра( - "РежимВыбораТолькоГрупп", - Параметры.РежимВыбора - И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); - - СписокНедоступныхПрофилей = Новый СписокЗначений; + Если Параметры.РежимВыбора Тогда + КлючНазначенияИспользования = "ВыборПодбор"; + КонецЕсли; Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - СписокНедоступныхПрофилей.Добавить(Справочники.ПрофилиГруппДоступа.Администратор); + // Скрытие профиля Администратор. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка", Справочники.ПрофилиГруппДоступа.Администратор, + ВидСравненияКомпоновкиДанных.НеРавно, , Истина); // Отбор не помеченных на удаление. - Список.Отбор.Элементы[1].Использование = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, , , Истина, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; - Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда - - Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; - Элементы.Список.НачальноеОтображениеДерева = - НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; - КонецЕсли; - АвтоЗаголовок = Ложь; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. @@ -45,6 +40,4 @@ КонецЕсли; КонецЕсли; - Список.Отбор.Элементы[0].ПравоеЗначение = СписокНедоступныхПрофилей; - КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 5ddfb1fac..5ccec3a8b 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -77,7 +77,9 @@ // Определение возможности редактирования элементов формы (перезапись доступна). БезРедактированияПоставляемыхЗначений = - ТолькоПросмотр ИЛИ Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект.Ссылка); + ТолькоПросмотр + ИЛИ НЕ Объект.Ссылка.Пустая() + И Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект); Элементы.Наименование.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений; @@ -153,7 +155,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - // Заполнение ролей объектаиз коллекции. + // Заполнение ролей объекта из коллекции. ТекущийОбъект.Роли.Очистить(); Для каждого Строка Из КоллекцияРолей Цикл ТекущийОбъект.Роли.Добавить().Роль = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html index 9d092f7ff..6b1e4c46f 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        а) задать общий список ролей для некоторой группы пользователей системы. Например, для менеджеров может быть определен профиль "Менеджер" с ролями:

        diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index 13fecc6b4..929e17d2c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -221,7 +221,8 @@ Запрос = Новый Запрос( "ВЫБРАТЬ | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен, - | ПрофилиГруппДоступа.Ссылка + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных, + | ПрофилиГруппДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа"); ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); @@ -229,10 +230,10 @@ Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл СвойстваПрофиля = ОписаниеПрофиля.Значение; - Профиль = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку( - Новый УникальныйИдентификатор(СвойстваПрофиля.Идентификатор)); + СтрокаТекущегоПрофиля = ТекущиеПрофили.Найти( + Новый УникальныйИдентификатор(СвойстваПрофиля.Идентификатор), + "ИдентификаторПоставляемыхДанных"); - СтрокаТекущегоПрофиля = ТекущиеПрофили.Найти(Профиль, "Ссылка"); ПрофильОбновлен = Ложь; Если СтрокаТекущегоПрофиля = Неопределено Тогда @@ -240,12 +241,15 @@ Если ОбновитьПрофильГруппДоступа(СвойстваПрофиля) Тогда ЕстьИзменения = Истина; КонецЕсли; + Профиль = ПоставляемыйПрофильПоИдентификатору(СвойстваПрофиля.Идентификатор); - ИначеЕсли НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен - ИЛИ ПараметрыОбновления.ОбновлятьИзмененныеПрофили Тогда - - // Обновление поставляемого профиля. - ПрофильОбновлен = ОбновитьПрофильГруппДоступа(СвойстваПрофиля, Истина); + Иначе + Профиль = СтрокаТекущегоПрофиля.Ссылка; + Если НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен + ИЛИ ПараметрыОбновления.ОбновлятьИзмененныеПрофили Тогда + // Обновление поставляемого профиля. + ПрофильОбновлен = ОбновитьПрофильГруппДоступа(СвойстваПрофиля, Истина); + КонецЕсли; КонецЕсли; Если ПараметрыОбновления.ОбновлятьГруппыДоступа Тогда @@ -281,6 +285,89 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Возвращает строку уникального идентификатора +// поставляемого и предопределенного профиля Администратор. +// +Функция ИдентификаторПрофиляАдминистратор() Экспорт + + Возврат "6c4b0307-43a4-4141-9c35-3dd7e9586d41"; + +КонецФункции + +// Возвращает ссылку на поставляемый профиль по идентификатору. +// +// Параметры: +// Идентификатор - Строка - имя или уникальный идентификатор поставляемого профиля. +// +Функция ПоставляемыйПрофильПоИдентификатору(Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( + ).ПоставляемыеПрофилиГруппДоступа; + + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить(Идентификатор); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторПоставляемыхДанных", + Новый УникальныйИдентификатор(СвойстваПрофиля.Идентификатор)); + + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ИдентификаторПоставляемыхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Возвращает строку уникального идентификатора +// данных поставляемого профиля. +// +Функция ИдентификаторПоставляемогоПрофиля(Профиль) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Профиль); + + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Ссылка = &Ссылка + | И ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных <> &ПустойУникальныйИдентификатор"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( + ).ПоставляемыеПрофилиГруппДоступа; + + СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить( + Строка(Выборка.ИдентификаторПоставляемыхДанных)); + + Возврат Строка(Выборка.ИдентификаторПоставляемыхДанных); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + // Проверяет изменен ли поставляемый профиль по сравнению с описанием из процедуры // УправлениеДоступомПереопределяемый.ЗаполнитьПоставляемыеПрофилиГруппДоступа(). // @@ -302,7 +389,7 @@ СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить( - Строка(Профиль.Ссылка.УникальныйИдентификатор())); + Строка(Профиль.ИдентификаторПоставляемыхДанных)); Если СвойстваПрофиля = Неопределено Тогда Возврат Ложь; @@ -369,9 +456,11 @@ // Функция ЕстьНачальноеЗаполнениеПрофиля(Знач Профиль) Экспорт + ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Профиль, "ИдентификаторПоставляемыхДанных")); + СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить( - Строка(Профиль.УникальныйИдентификатор())); + ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Возврат СвойстваПрофиля <> Неопределено; @@ -381,14 +470,17 @@ // Не поставляемый профиль не может иметь запрета изменения. // // Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа. +// Профиль - СправочникОбъект.ПрофилиГруппДоступа, +// ДанныеФормыСтруктура созданные по объекту. // // Возвращаемое значение: // Булево. // Функция ЗапретИзмененияПрофиля(Знач Профиль) Экспорт - Если Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда + Если Профиль.ИдентификаторПоставляемыхДанных = + Новый УникальныйИдентификатор(ИдентификаторПрофиляАдминистратор()) Тогда + // Изменение профиля Администратор всегда запрещено. Возврат Истина; КонецЕсли; @@ -396,7 +488,7 @@ ).ПоставляемыеПрофилиГруппДоступа; СвойстваПрофиля = ПоставляемыеПрофили.ОписанияПрофилей.Получить( - Строка(Профиль.УникальныйИдентификатор())); + Строка(Профиль.ИдентификаторПоставляемыхДанных)); Возврат СвойстваПрофиля <> Неопределено И ПоставляемыеПрофили.ПараметрыОбновления.ЗапретитьИзменениеПрофилей; @@ -413,9 +505,11 @@ // Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт + ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Профиль, "ИдентификаторПоставляемыхДанных")); + СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить( - Строка(Профиль.УникальныйИдентификатор())); + ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Текст = ""; Если СвойстваПрофиля <> Неопределено Тогда @@ -440,9 +534,11 @@ // Процедура ЗаполнитьПоставляемыйПрофиль(Знач Профиль, Знач ОбновитьГруппыДоступа) Экспорт + ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Профиль, "ИдентификаторПоставляемыхДанных")); + СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( - ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить( - Строка(Профиль.УникальныйИдентификатор())); + ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемыхДанных); Если СвойстваПрофиля <> Неопределено Тогда @@ -455,6 +551,48 @@ КонецПроцедуры +// Обработчики обновления информационной базы. + +// Заполняет идентификаторы поставляемых данных по совпадению с идентификатором ссылки. +Процедура ЗаполнитьИдентификаторыПоставляемыхДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПоставляемыеПрофили = УправлениеДоступомСлужебныйПовтИсп.Параметры( + ).ПоставляемыеПрофилиГруппДоступа; + + СсылкиПоставляемыхПрофилей = Новый Массив; + + Для каждого ОписаниеПрофиля Из ПоставляемыеПрофили.ОписанияПрофилей Цикл + СсылкиПоставляемыхПрофилей.Добавить( + Справочники.ПрофилиГруппДоступа.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОписаниеПрофиля.Значение.Идентификатор))); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Запрос.УстановитьПараметр("СсылкиПоставляемыхПрофилей", СсылкиПоставляемыхПрофилей); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ПустойУникальныйИдентификатор + | И ПрофилиГруппДоступа.Ссылка В (&СсылкиПоставляемыхПрофилей)"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ПрофильОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПрофильОбъект.ИдентификаторПоставляемыхДанных = Выборка.Ссылка.УникальныйИдентификатор(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрофильОбъект); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -498,10 +636,9 @@ // Описание для заполнения предопределенного профиля "Администратор". ОписаниеПрофиляАдминистратор = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); - ОписаниеПрофиляАдминистратор.Идентификатор = - Строка(Справочники.ПрофилиГруппДоступа.Администратор.УникальныйИдентификатор()); - - ОписаниеПрофиляАдминистратор.Наименование = "Администратор"; + ОписаниеПрофиляАдминистратор.Имя = "Администратор"; + ОписаниеПрофиляАдминистратор.Идентификатор = ИдентификаторПрофиляАдминистратор(); + ОписаниеПрофиляАдминистратор.Наименование = НСтр("ru = 'Администратор'"); ОписаниеПрофиляАдминистратор.Роли.Добавить("ПолныеПрава"); ОписаниеПрофиляАдминистратор.Описание = @@ -530,7 +667,20 @@ Роль); КонецЕсли; КонецЦикла; + Если СвойстваПрофилей.Получить(ОписаниеПрофиля.Идентификатор) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Профиль с идентификатором ""%1"" уже существует.'"), + ОписаниеПрофиля.Идентификатор); + КонецЕсли; СвойстваПрофилей.Вставить(ОписаниеПрофиля.Идентификатор, ОписаниеПрофиля); + Если ЗначениеЗаполнено(ОписаниеПрофиля.Имя) Тогда + Если СвойстваПрофилей.Получить(ОписаниеПрофиля.Имя) <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Профиль с именем ""%1"" уже существует.'"), + ОписаниеПрофиля.Имя); + КонецЕсли; + СвойстваПрофилей.Вставить(ОписаниеПрофиля.Имя, ОписаниеПрофиля); + КонецЕсли; // Преобразование СпискаЗначений к Соответствию для фиксации. ВидыДоступа = Новый Соответствие; Для каждого ЭлементСписка Из ОписаниеПрофиля.ВидыДоступа Цикл @@ -558,31 +708,58 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ПрофилиГруппДоступа.Ссылка КАК Ссылка + | ПрофилиГруппДоступа.Ссылка КАК Ссылка, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных |ИЗ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа |ГДЕ - | ПрофилиГруппДоступа.Предопределенный = ИСТИНА - | - |УПОРЯДОЧИТЬ ПО - | ПрофилиГруппДоступа.Ссылка"; + | ПрофилиГруппДоступа.Предопределенный = ИСТИНА"; + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "ПрофилиГруппДоступа.ИмяПредопределенныхДанных"); + КонецЕсли; + + ИменаПредопределенныхДанных = Новый СписокЗначений; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, 0); Попытка - Выгрузка = Запрос.Выполнить().Выгрузить(); + Выборка = Запрос.Выполнить().Выбрать(); Исключение ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); ВызватьИсключение; КонецПопытки; + + Пока Выборка.Следующий() Цикл + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенныхДанных = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяПредопределенныхДанных = ПолучитьИмяПредопределенного(Выборка.Ссылка); + КонецЕсли; + Если ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда + ИменаПредопределенныхДанных.Добавить(ИмяПредопределенныхДанных); + КонецЕсли; + КонецЦикла; + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); Иначе - Выгрузка = Запрос.Выполнить().Выгрузить(); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенныхДанных = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяПредопределенныхДанных = ПолучитьИмяПредопределенного(Выборка.Ссылка); + КонецЕсли; + Если ЗначениеЗаполнено(ИмяПредопределенныхДанных) Тогда + ИменаПредопределенныхДанных.Добавить(ИмяПредопределенныхДанных); + КонецЕсли; + КонецЦикла; КонецЕсли; - Возврат Новый ФиксированныйМассив(Выгрузка.ВыгрузитьКолонку("Ссылка")); + ИменаПредопределенныхДанных.СортироватьПоЗначению(); + Возврат Новый ФиксированныйМассив(ИменаПредопределенныхДанных.ВыгрузитьЗначения()); КонецФункции @@ -616,25 +793,49 @@ ПрофильИзменен = Ложь; - УникальныйИдентификаторПрофиля = Новый УникальныйИдентификатор(СвойстваПрофиля.Идентификатор); - ПрофильСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | ПрофилиГруппДоступа.Ссылка = &Ссылка"); - Запрос.УстановитьПараметр("Ссылка", ПрофильСсылка); - - Если Запрос.Выполнить().Пустой() Тогда + ПрофильСсылка = ПоставляемыйПрофильПоИдентификатору(СвойстваПрофиля.Идентификатор); + Если ПрофильСсылка = Неопределено Тогда + + Если ЗначениеЗаполнено(СвойстваПрофиля.Имя) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Предопределенный = ИСТИНА"; + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "ПрофилиГруппДоступа.ИмяПредопределенныхДанных"); + КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенного = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяПредопределенного = ПолучитьИмяПредопределенного(Выборка.Ссылка); + КонецЕсли; + Если ВРег(СвойстваПрофиля.Имя) = ВРег(ИмяПредопределенного) Тогда + ПрофильСсылка = Выборка.Ссылка; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ПрофильСсылка = Неопределено Тогда + // Поставляемый профиль не найден, нужно создать новый. + ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); + Иначе + // Поставляемый профиль не связан с предопределенным элементом. + ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); + КонецЕсли; + + ПрофильОбъект.ИдентификаторПоставляемыхДанных = + Новый УникальныйИдентификатор(СвойстваПрофиля.Идентификатор); - // Поставляемый профиль не найден, нужно создать новый. - ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); ПрофильИзменен = Истина; - ПрофильОбъект.УстановитьСсылкуНового( - Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля)); Иначе ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); ПрофильИзменен = ПоставляемыйПрофильИзменен(ПрофильОбъект); @@ -697,8 +898,7 @@ НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователей( Перечисления.ТипыПользователей.ПользовательОбластиДанных); - ИначеЕсли ОписаниеПрофиля.Идентификатор - = Строка(Справочники.ПрофилиГруппДоступа.Администратор.УникальныйИдентификатор()) Тогда + ИначеЕсли ОписаниеПрофиля.Идентификатор = ИдентификаторПрофиляАдминистратор() Тогда ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; @@ -720,4 +920,4 @@ КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 2ba80e3b6..5bc73afba 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -105,6 +105,57 @@ Возврат; КонецЕсли; + // Проверка однозначности поставляемых данных. + Если ИдентификаторПоставляемыхДанных <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторПоставляемыхДанных", ИдентификаторПоставляемыхДанных); + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка, + | ПрофилиГруппДоступа.Наименование КАК Наименование + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ИдентификаторПоставляемыхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Количество() > 1 Тогда + + КраткоеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи профиля ""%1"". + |Поставляемый профиль уже существует:'"), + Наименование); + + ПодробноеПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи профиля ""%1"". + |Идентификатор поставляемых данных ""%2"" уже используется в профиле:'"), + Наименование, + Строка(ИдентификаторПоставляемыхДанных)); + + Пока Выборка.Следующий() Цикл + Если Выборка.Ссылка <> Ссылка Тогда + + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки + + Символы.ПС + """" + Выборка.Наименование + """."; + + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки + + Символы.ПС + """" + Выборка.Наименование + """ (" + + Строка(Выборка.Ссылка.УникальныйИдентификатор())+ ")." + КонецЕсли; + КонецЦикла; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Управление доступом.Нарушение однозначности поставляемого профиля'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки); + + ВызватьИсключение КраткоеПредставлениеОшибки; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + ОбъектыМетаданных = ОбновитьРолиПользователейПриИзмененииРолейПрофиля(); // При установке пометки удаления нужно установить пометку удаления у групп доступа профиля. @@ -167,6 +218,12 @@ КонецПроцедуры +Процедура ПриКопировании(ОбъектКопирования) + + ИдентификаторПоставляемыхДанных = Неопределено; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -249,4 +306,4 @@ КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 2f750828e..a4bdd080d 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -68,9 +68,13 @@ Use Parent + + ru + Группа (папка) + ru - Папка, объединяющая профили групп доступа для удобства поиска + Группа (папка), объединяющая профили для удобства поиска true @@ -134,7 +138,26 @@ Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы Catalog.ПрофилиГруппДоступа.Form.ФормаСписка Catalog.ПрофилиГруппДоступа.Form.ФормаСписка - Catalog.ПрофилиГруппДоступа.Form.ФормаСписка + Catalog.ПрофилиГруппДоступа.Form.ФормаВыбораГруппы + + ИдентификаторПоставляемыхДанных + + ru + Идентификатор поставляемых данных + + + UUID + + + ru + Для профилей, поставляемых в составе конфигурации, содержит идентификатор по которому можно найти описание поставляемого профиля. + + + + + Index + Use + ПоставляемыйПрофильИзменен @@ -404,6 +427,15 @@ PersonalComputer MobileDevice + + ФормаВыбораГруппы + + ru + Форма выбора группы + + PersonalComputer + MobileDevice + ГруппыДоступа diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl index 045723e86..16e68867d 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -34,8 +34,7 @@ ПараметрыВызоваСервера = Новый Структура("МассивРассылок, ПредварительныеНастройки", МассивРассылок, - ПредварительныеНастройки - ); + ПредварительныеНастройки); Результат = ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, ЭтаФорма.УникальныйИдентификатор); @@ -44,8 +43,7 @@ ИначеЕсли Результат.Статус = "Исключение" Тогда Предупреждение( НСтр("ru = 'Рассылки не выполнены из-за ошибки, - |Подробности см. в журнале регистрации.'") - ); + |Подробности см. в журнале регистрации.'")); ИначеЕсли Результат.Статус = "Выполняется" Тогда ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, Результат.Детали.ИдентификаторЗадания); @@ -82,8 +80,7 @@ УникальныйИдентификатор, "РассылкаОтчетов.ВыполнитьРассылкиВФоновомЗадании", ПараметрыВызоваСервера, - НСтр("ru = 'Рассылки отчетов: Выполнение рассылок в фоне'") - ); + НСтр("ru = 'Рассылки отчетов: Выполнение рассылок в фоне'")); КонецЕсли; Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html index a39eb9c2d..767d7ec7a 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html @@ -1,4 +1,4 @@ - +

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

        Реквизиты:

        diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss index 784796455..91027f589 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ - - ЭтоГруппа - Equal - true - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form index b9f2838c1..8156a99ef 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form @@ -249,6 +249,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + Create 50 10 diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html index b8018e91a..61df13164 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html @@ -1,2 +1,2 @@ - +

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

        \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl new file mode 100644 index 000000000..c3ed9c385 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Module.bsl @@ -0,0 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ЭтоГруппа", Истина, + ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html index 78f8185d5..818588245 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html @@ -1 +1 @@ -Позволяет задать Наименование и Группу для группы рассылок отчетов. \ No newline at end of file +Позволяет задать Наименование и Группу для группы рассылок отчетов. \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index d93c4f1c2..91027f589 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,28 +1,6 @@ - - false - ВыполнятьПоРасписанию - Equal - false - - - false - ПериодичностьРасписания - Equal - - - false - Подготовлена - Equal - false - - - false - Автор - Equal - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index 5129ce5d0..16e788412 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -8,6 +8,27 @@ Возврат; КонецЕсли; + // Установка отборов динамического списка. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ВыполнятьПоРасписанию", Ложь, + ВидСравненияКомпоновкиДанных.Равно, , Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПериодичностьРасписания", , + ВидСравненияКомпоновкиДанных.Равно, , Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Подготовлена", Ложь, + ВидСравненияКомпоновкиДанных.Равно, , Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Автор", , + ВидСравненияКомпоновкиДанных.Равно, , Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + ЗаполнитьПараметрСписка("РежимВыбора"); ЗаполнитьПараметрСписка("ВыборГруппИЭлементов"); ЗаполнитьПараметрСписка("МножественныйВыбор"); diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index 1c97030ce..9b32c9b9f 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

        Реквизиты:

        diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index 2a53e08e9..cfc476b8d 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -78,15 +78,13 @@ НСтр("ru = 'Ошибка заполнения автора рассылки |Автор (%1): %2'"), Строка(ТипЗнч(ТекущийПользователь)), - Строка(ТекущийПользователь) - ); + Строка(ТекущийПользователь)); ЗаписьЖурналаРегистрации( - "Рассылка отчетов. Открытие формы элемента", + НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.РассылкиОтчетов, , - Текст - ); + Текст); Возврат; КонецЕсли; @@ -323,8 +321,7 @@ Отказ = Истина; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для отчета ''%1'' заполнены не все настройки, обязательные для заполнения. Необходимо заполнить все обязательные настройки или снять флажок ''Подготовлена''.'"), - Строка(СтрокаОтчеты.Отчет) - ); + Строка(СтрокаОтчеты.Отчет)); Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); КонецЕсли; @@ -344,8 +341,7 @@ Отказ = Истина; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для отчета ''%1'' задан отбор по получателям рассылки. Необходимо отключить отбор по получателям или изменить вид рассылки на ''Свой отчет для каждого получателя''.'"), - Строка(СтрокаОтчеты.Отчет) - ); + Строка(СтрокаОтчеты.Отчет)); Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); КонецЕсли; @@ -435,7 +431,7 @@ &НаКлиенте Процедура МесяцыПриИзменении(Элемент) Если Элемент <> Неопределено Тогда - Расписание.Месяцы = ИзменитьИРазадресоватьМассив(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.Месяцы[Элемент.Имя], Расписание.Месяцы); + Расписание.Месяцы = ИзменитьСоставМассива(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.Месяцы[Элемент.Имя], Расписание.Месяцы); КонецЕсли; ВидимостьДоступностьКорректность(ЭтаФорма, "Месяцы"); КонецПроцедуры @@ -443,7 +439,7 @@ &НаКлиенте Процедура ДниНеделиПриИзменении(Элемент) Если Элемент <> Неопределено Тогда - Расписание.ДниНедели = ИзменитьИРазадресоватьМассив(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.ДниНедели[Элемент.Имя], Расписание.ДниНедели); + Расписание.ДниНедели = ИзменитьСоставМассива(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.ДниНедели[Элемент.Имя], Расписание.ДниНедели); КонецЕсли; ВидимостьДоступностьКорректность(ЭтаФорма, "ДниНедели"); КонецПроцедуры @@ -642,9 +638,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав на изменение файлов папки %1'"), - "'"+ Строка(ВыбранноеЗначение) +"'" - ) - ); + "'"+ Строка(ВыбранноеЗначение) +"'")); КонецЕсли; КонецПроцедуры @@ -723,8 +717,7 @@ Объект.Отчеты, "Отчет", Новый Структура("Форматы, ОтправлятьЕслиПустой", ПредставлениеФорматовПоУмолчанию(), Истина), - Истина - ); + Истина); // Инициализация добавленных строк отчетов и заполнение структуры выбора ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора); @@ -748,8 +741,7 @@ |Не добавлено из-за ошибок: %3'"), Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), - Формат(СтруктураВыбора.СОшибками.Количество, "ЧН=0; ЧГ=") - ); + Формат(СтруктураВыбора.СОшибками.Количество, "ЧН=0; ЧГ=")); Иначе Разделитель = ", "; ПредставлениеОтчетовУспешно = СтрЗаменить(Разделитель + СтруктураВыбора.Успешно.ПредставлениеОтчетов , Разделитель, Символы.ПС + " - "); @@ -761,8 +753,7 @@ |Следующие отчеты не удалось добавить из-за ошибок: |%2'"), ПредставлениеОтчетовУспешно, - ПредставлениеОтчетовСОшибками - ); + ПредставлениеОтчетовСОшибками); КонецЕсли; ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда @@ -882,8 +873,7 @@ НомерСуществующейСтроки = ?(Найденные[0] = СтрокаПолучатели, Найденные[1].НомерСтроки, Найденные[0].НомерСтроки); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дублирование получателя %1. Ввод дубликата отменен.'"), - "'"+ Строка(СтрокаПолучатели.Получатель) +"'" - ); + "'"+ Строка(СтрокаПолучатели.Получатель) +"'"); Поле = "Объект.Получатели["+ Формат(НомерСуществующейСтроки, "ЧН=0; ЧГ=") +"]"; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение, , Поле); @@ -939,7 +929,6 @@ Отбор = Новый Структура; Отбор.Вставить("ТипОтчета", ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внутренний")); - Отбор.Вставить("ПометкаУдаления", Ложь); ПараметрыФормыВыбора = Новый Структура; ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -1115,8 +1104,7 @@ Если НЕ Объект.Персонализирована Тогда СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Использование получателя в тексте шаблона возможно только для вида рассылки ""%1""'"), - Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление - ); + Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеТекст, , "ВидРассылки"); Возврат; КонецЕсли; @@ -1165,9 +1153,7 @@ ЗначениеПредмета = СокрЛП( ?(Объект.ПисьмоВФорматеHTML, ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(), - Объект.ТекстПисьма - ) - ); + Объект.ТекстПисьма)); КонецЕсли; Ответ = 1; @@ -1179,8 +1165,7 @@ ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 уже соответствует шаблону по умолчанию.'"), - ?(ОчищаетсяТема, НСтр("ru = 'Тема письма'"), НСтр("ru = 'Текст письма'")) - ); + ?(ОчищаетсяТема, НСтр("ru = 'Тема письма'"), НСтр("ru = 'Текст письма'"))); Предупреждение(ТекстПредупреждения); Возврат; @@ -1191,13 +1176,11 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Заменить %1 на шаблон по умолчанию?'"), - Предмет - ); + Предмет); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Добавить в %1 шаблон по умолчанию'"), - Предмет - ); + Предмет); Кнопки = Новый СписокЗначений; Кнопки.Добавить(1, НСтр("ru = 'Заменить'")); @@ -1253,8 +1236,7 @@ Кэш.ЗаголовокСистемы, ОбщегоНазначенияКлиент.ДатаСеанса(), СписокОтчетов, - "" - ); + ""); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, Настройки)); @@ -1318,8 +1300,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Перед выбором почтового адреса необходимо выбрать получателей'"), , - "ТипПолучателейРассылки" - ); + "ТипПолучателейРассылки"); СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры @@ -1496,7 +1477,7 @@ Функция ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки, Интерактивно = Истина) // Параметры журнала ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'")); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", Объект.Ссылка); ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); @@ -1507,8 +1488,7 @@ ПараметрыЖурнала, ПараметрыОтчета, Объект.Персонализирована, - ЭтаФорма.УникальныйИдентификатор - ); + ЭтаФорма.УникальныйИдентификатор); ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); ПараметрыОтчета.Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); @@ -1520,17 +1500,15 @@ Возврат ПараметрыОтчета; КонецЕсли; - // Проверка результата инциализации + // Проверка результата инициализации Если НЕ СтрокаОтчеты.Инициализирован Тогда ПараметрыОтчета.Ошибки = ( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Отчет %1 был удален из-за ошибки инициализации'"), - "'"+ Строка(СтрокаОтчеты.Представление) +"'" - ) + "'"+ Строка(СтрокаОтчеты.Представление) +"'") + ":" + Символы.ПС - + ПараметрыОтчета.Ошибки - ); + + ПараметрыОтчета.Ошибки); // Удаление строки. Объект.Отчеты.Удалить(СтрокаОтчеты); @@ -1754,7 +1732,7 @@ УстановитьПривилегированныйРежим(Истина); ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'")); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", Рассылка); ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); @@ -1924,8 +1902,7 @@ Шаблоны = Новый ФиксированнаяСтруктура("Тема, Текст, ИмяАрхива", РассылкаОтчетовКлиентСервер.ШаблонТемы(), РассылкаОтчетовКлиентСервер.ШаблонТекста(), - РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива() - ); + РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива()); // Кэш = Новый Структура; @@ -1980,7 +1957,7 @@ &НаСервереБезКонтекста Функция СформироватьОтчетНаСервере(Знач ПараметрыОтчета, Получатель, ТребуемыеРеквизиты) ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Формирование отчета'")); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Формирование отчета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); ПараметрыЖурнала.Вставить("Данные", ТребуемыеРеквизиты.Ссылка); ПараметрыЖурнала.Вставить("Метаданные", ПараметрыЖурнала.Данные.Метаданные()); ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); @@ -1988,8 +1965,7 @@ ОтчетИнициализирован = РассылкаОтчетов.ИнициализироватьОтчет( ПараметрыЖурнала, ПараметрыОтчета, - ТребуемыеРеквизиты.Персонализирована - ); + ТребуемыеРеквизиты.Персонализирована); Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок, ТабДок"); @@ -2010,8 +1986,7 @@ Исключение РассылкаОтчетов.ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Ошибка формирования отчета %1:'"), ИнформацияОбОшибке(), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'" - ); + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); КонецПопытки; КонецЕсли; @@ -2019,8 +1994,7 @@ Результат.Оповестить = Ложь; Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось сформировать отчет %1.'"), - ?(ПараметрыОтчета.Представление = "", "", "'"+ ПараметрыОтчета.Представление +"'") - ); + ?(ПараметрыОтчета.Представление = "", "", "'"+ ПараметрыОтчета.Представление +"'")); КонецЕсли; Результат.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок); @@ -2063,8 +2037,7 @@ ИспользуетсяГруппаЛичныхРассылок = (Объект.Родитель = ЭтаФорма.Кэш.ГруппаЛичныхРассылок); Если Объект.Личная <> ИспользуетсяГруппаЛичныхРассылок Тогда УстановитьМодифицированностьФормы(ЭтаФорма, "Родитель", , - НСтр("ru = 'Группа установлена в соответствии с видом рассылки'") - ); + НСтр("ru = 'Группа установлена в соответствии с видом рассылки'")); Объект.Родитель = ?(Объект.Личная, ЭтаФорма.Кэш.ГруппаЛичныхРассылок, Неопределено); КонецЕсли; @@ -2114,8 +2087,7 @@ Если КоличествоОтчетов > 0 Тогда Элементы.СтраницаОтчеты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Отчеты (%1)'"), - Формат(КоличествоОтчетов, "ЧН=0; ЧГ=") - ); + Формат(КоличествоОтчетов, "ЧН=0; ЧГ=")); Иначе Элементы.СтраницаОтчеты.Заголовок = НСтр("ru = 'Отчеты'") ; КонецЕсли; @@ -2164,8 +2136,7 @@ Элементы.СтраницаДоставка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Доставка (%1)'"), - СпособыДоставки - ); + СпособыДоставки); КонецЕсли; Если Изменения = "" ИЛИ Изменения = "ПисьмоВФорматеHTML" Тогда @@ -2300,11 +2271,11 @@ СтрокаПолучатель = Объект.Получатели.Получить(ИндексПолучателя); - ИнексВМассиве = ПолучательИлиНаборПолучателей.Найти(СтрокаПолучатель.Получатель); - Если ИнексВМассиве = Неопределено Тогда + ИндексВМассиве = ПолучательИлиНаборПолучателей.Найти(СтрокаПолучатель.Получатель); + Если ИндексВМассиве = Неопределено Тогда Объект.Получатели.Удалить(СтрокаПолучатель); Иначе - ПолучательИлиНаборПолучателей.Удалить(ИнексВМассиве); + ПолучательИлиНаборПолучателей.Удалить(ИндексВМассиве); КонецЕсли; КонецЦикла; @@ -2315,8 +2286,7 @@ ПолучательИлиНаборПолучателей, Объект.Получатели, "Получатель", - Новый Структура("Исключен", Ложь) - ); + Новый Структура("Исключен", Ложь)); Если МассивНовыхСтрок.Количество() > 0 Тогда Если МассивНовыхСтрок.Количество() = 1 Тогда @@ -2331,8 +2301,7 @@ КонецЦикла; РассылкаОтчетовКлиент.ПоказатьРезультат( - Новый Структура("Оповестить, Заголовок, Текст", Истина, ЗаголовокОповещения, ТекстОповещения) - ); + Новый Структура("Оповестить, Заголовок, Текст", Истина, ЗаголовокОповещения, ТекстОповещения)); КонецЕсли; КонецПроцедуры @@ -2453,8 +2422,7 @@ Иначе ЗаголовокФормыВыбора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выберите форматы для отчета %1'"), - "'"+ Строка(СсылкаНаОтчет) +"'" - ); + "'"+ Строка(СсылкаНаОтчет) +"'"); КонецЕсли; ДублирующийСписокФорматов = СписокФорматов.Скопировать(); @@ -2507,7 +2475,7 @@ &НаКлиенте Процедура ДобавитьШаблон(ТекстовыйШаблон = Неопределено, ИсключитьТемуПисьма = Ложь) - // Проверяем и устаналиваем фокус в нужный элемент + // Проверяем и устанавливаем фокус в нужный элемент Если ИсключитьТемуПисьма ИЛИ НЕ (ТекущийЭлемент = Элементы.ТемаПисьма ИЛИ ТекущийЭлемент = Элементы.ИмяАрхива) Тогда Если Объект.ПисьмоВФорматеHTML Тогда Если ТекущийЭлемент <> Элементы.ТекстПисьмаФорматированныйДокумент Тогда @@ -2540,7 +2508,7 @@ КонецПроцедуры &НаКлиенте -Функция ИзменитьИРазадресоватьМассив(Добавить, Элемент, Знач Массив) +Функция ИзменитьСоставМассива(Добавить, Элемент, Знач Массив) Индекс = Массив.Найти(Элемент); Если Добавить И Индекс = Неопределено Тогда ВГраницаПлюс1 = ?(Массив.Количество() >= Элемент, Элемент, Массив.Количество()); @@ -2586,8 +2554,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Поле ""Получатели"" не заполнено'"), , - "ТипПолучателейРассылки" - ); + "ТипПолучателейРассылки"); СтандартнаяОбработка = Ложь; Возврат; КонецЕсли; @@ -2817,8 +2784,7 @@ ПараметрыДоставки.Вставить("СкрытыеКопии", Объект.СкрытыеКопии); ПараметрыДоставки.Вставить("ШаблонТемы", НСтр("ru = 'Тестовое сообщение 1С:Предприятие'")); ПараметрыДоставки.Вставить("ШаблонТекста", НСтр("ru = 'Это сообщение отправлено системой рассылок 1С:Предприятие.'") - + Символы.ПС + Кэш.ЗаголовокСистемы - ); + + Символы.ПС + Кэш.ЗаголовокСистемы); РезультатВыбора = РассылкаОтчетовКлиент.ВыбратьПолучателя(Объект, Ложь, Истина); // Получатель и E-Mail Если РезультатВыбора = Неопределено Тогда diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index b0b4e0000..0ebc73f7c 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        Реквизиты:

        diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index f9acdb3da..563325174 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -247,8 +247,7 @@ Функция ПредставлениеЗаданияПоРассылке(НаименованиеРассылки) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Рассылка отчетов: %1'"), - СокрЛП(НаименованиеРассылки) - ); + СокрЛП(НаименованиеРассылки)); КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index 6df972f7c..0d4fa1e85 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -687,6 +687,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index ce35a08b6..0892b9cc0 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -18,6 +17,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборУзловПлановОбмена") Тогда + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + Объект.УзелОбмена = ВыбранноеЗначение; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) @@ -49,7 +57,6 @@ &НаКлиенте Процедура УзелОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; ПланыОбменаДляВыбора = Новый Массив; @@ -63,14 +70,7 @@ ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); - ВыбранноеЗначение = ОткрытьФормуМодально("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ЭтаФорма); - - Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда - - Объект.УзелОбмена = ВыбранноеЗначение; - - КонецЕсли; - + ОткрытьФорму("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -129,6 +129,3 @@ КонецЕсли; КонецПроцедуры - - - diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index b9bf84262..ccb43d07b 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..c3cc0d311 --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Form.form @@ -0,0 +1,30 @@ + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + + + + diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..9fb5734b2 --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,14 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПрисоединенныеФайлы.ВызватьИсключениеОткрытияФормы(ЭтаФорма); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..15a72967d --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,66 @@ + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Ключ + + <key>ru</key> + <value>Ключ</value> + + 1 + + AnyRef + + + true + + + true + + + + ПерейтиКФормеФайла1 + + <key>ru</key> + <value>Перейти к форме файла1</value> + + 1 + + ru + Перейти к форме файла1 + + + true + + + + ПерейтиКФормеФайла + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..7f746dab0 --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,22 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ПрисоединенныеФайлы.ПриСозданииНаСервереПрисоединенныйФайл(ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ПерейтиКФормеФайла(Команда) + + ПрисоединенныеФайлыКлиент.ПерейтиКФормеПрисоединенногоФайла(ЭтаФорма); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ObjectModule.bsl similarity index 100% rename from SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl rename to SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ObjectModule.bsl diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo new file mode 100644 index 000000000..6b3812ce3 --- /dev/null +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo @@ -0,0 +1,774 @@ + + + + + + + + + + СообщениеSMSПрисоединенныеФайлы + + ru + Присоединенные файлы (Сообщение SMS) + + Catalog.СообщениеSMSПрисоединенныеФайлы.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 + + ru + Имя файла + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + Use + + ru + Присоединенный файл (Сообщение SMS) + + 2 + true + 150 + String + Variable + AsDescription + InDialog + BothWays + Catalog.СообщениеSMSПрисоединенныеФайлы.Form.ФормаЭлемента + Catalog.СообщениеSMSПрисоединенныеФайлы.Form.ФормаСписка + Catalog.СообщениеSMSПрисоединенныеФайлы.Form.ФормаСписка + + Автор + + ru + Автор + + Автор - пользователь, добавивший файл + + CatalogRef.Пользователи + + + ru + Пользователь, добавивший файл + + + + ShowError + DontUse + Use + + Catalog.Пользователи.EmptyRef + + Index + Use + Use + + + ВладелецФайла + + ru + Владелец файла + + + DocumentRef.СообщениеSMS + + + ru + Объект-владелец файла + + + + + Index + Use + + + ДатаМодификацииУниверсальная + + ru + Дата модификации универсальная + + + Date + + + + ru + Универсальная дата модификации файла + + + + + Use + Use + + + ДатаСоздания + + ru + Дата создания + + Дата добавления файла в базу + + Date + + + + ru + Дата создания файла + + + + ShowError + + 0001-01-01T00:00:00 + + Use + Use + + + Зашифрован + + ru + Зашифрован + + + Boolean + + + ru + Признак того, что файл зашифрован + + + + + Index + Use + + + Изменил + + ru + Изменил + + Автор - пользователь, добавивший файл + + CatalogRef.Пользователи + + + ru + Пользователь, отредактировавший файл последним + + + + DontUse + Use + + Catalog.Пользователи.EmptyRef + + Use + Use + + + ИндексКартинки + + ru + Индекс картинки + + Индекс иконки, соответствующей расширению файла, для показа в списке + + Number + + 10 + + + + ru + Индекс картинки файла (служебное поле) + + + + + 0 + + Use + + + Описание + + ru + Описание + + Описание файла + + String + + + + ru + Краткое описание файла + + true + + + + Use + Use + + + ПодписанЭЦП + + ru + Подписан ЭЦП + + + Boolean + + + ru + Признак того, что файл подписан с помощью ЭЦП + + + + + Use + + + ПутьКФайлу + + ru + Путь к файлу + + Дополнительный путь к файлу на диске (в случае если ТипХраненияФайла - на диске) + + String + + + + ru + Путь к файлу в томе (служебное поле) + + + + + Use + Use + + + Размер + + ru + Размер + + Размер файла + + Number + + 10 + + + + ru + Размер файла в байтах + + + + + 0 + + Index + Use + + + Расширение + + ru + Расширение + + + String + + 10 + + + + ru + Расширение файла + + + + + Use + + + Редактирует + + ru + Редактирует + + + CatalogRef.Пользователи + + + ru + Пользователь, редактирующий файл в данный момент + + + + DontUse + Use + + Catalog.Пользователи.EmptyRef + + Use + Use + + + СтатусИзвлеченияТекста + + ru + Статус извлечения текста + + + EnumRef.СтатусыИзвлеченияТекстаФайлов + + + ru + Статус извлечения текста из файла (служебное поле) + + + + + Enum.СтатусыИзвлеченияТекстаФайлов.EmptyRef + + Index + Use + Use + + + ТекстХранилище + + ru + Текст + + Текст, извлеченный из файла - для полнотекстового поиска + + ValueStorage + + + ru + Текст, извлеченный из файла (служебное поле) + + + + + Use + Use + + + ТипХраненияФайла + + ru + Тип хранения файла + + Где хранятся файлы - в базе как ХранилищеЗначения или в каталоге на диске + + EnumRef.ТипыХраненияФайлов + + + ru + Тип хранения файла (в томе или непосредственно в системе) + + + + + Index + Use + + + Том + + ru + Том + + Ссылка на том (в случае если ТипХраненияФайла - на диске) + + CatalogRef.ТомаХраненияФайлов + + + ru + Том для хранения файла + + + + + Index + Use + + + ФайлХранилище + + ru + Файл хранилище + + Служебное поле для обмена файлами в РИБ + + ValueStorage + + + ru + Временное хранилище файла (служебное поле) + + + + + Use + + + + + + + ЭлектронныеЦифровыеПодписи + + ru + Электронные цифровые подписи + + + ru + Хранение электронных цифровых подписей файла + + + Use + LineNumber + + Use + + + + + ДатаПодписи + + ru + Дата подписи + + + Date + + + + ru + Дата установки подписи + + + + Use + + + ИмяФайлаПодписи + + ru + Имя файла подписи + + + String + + 260 + + + + ru + Имя файла подписи (служебное поле) + + + + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Комментарий к подписи + + + + Use + Use + + + КомуВыданСертификат + + ru + Кому выдан сертификат + + + String + + + + ru + Кому выдан сертификат (имя, отдел и др. информация) + + + + Use + + + Отпечаток + + ru + Отпечаток + + Отпечаток сертификата + + String + + 255 + + + + ru + Отпечаток сертификата (служебное поле) + + + + Use + + + Подпись + + ru + Подпись + + + ValueStorage + + + ru + Двоичные данные подписи (служебное поле) + + + + Use + + + УстановившийПодпись + + ru + Установивший подпись + + + CatalogRef.Пользователи + + + ru + Пользователь, установивший подпись + + + + Use + Index + + + Сертификат + + ru + Сертификат + + Двоичные данные сертификата + + ValueStorage + + + ru + Двоичные данные сертификата (служебное поле) + + + + Use + Use + + + + + + + + СертификатыШифрования + + ru + Сертификаты шифрования + + + ru + Хранение сертификатов шифрования + + + Use + LineNumber + + Use + + + + + Отпечаток + + ru + Отпечаток + + + String + + 255 + + + + ru + Отпечаток сертификата (служебное поле) + + + + Use + + + Представление + + ru + Представление + + + String + + + + ru + Кому выдан сертификат (имя, отдел и др. информация) + + + + Use + Use + + + Сертификат + + ru + Сертификат + + Двоичные данные сертификата + + ValueStorage + + + ru + Двоичные данные сертификата (служебное поле) + + + + Use + Use + + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index a8566cdce..a56d27f5a 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -57,23 +57,4 @@ Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 - - - - Получатель - Items - None - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - false - Отправитель - Items - None - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - -
        diff --git a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl index a7eace9d7..c85885d25 100644 --- a/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияОбластейДанных/Forms/ФормаСписка/Module.bsl @@ -8,8 +8,26 @@ Возврат; КонецЕсли; - ВариантГруппировки = "ПоПолучателю"; + // Начальная настройка группировки. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ГруппировкаДанных = Список.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ГруппировкаДанных.ИдентификаторПользовательскойНастройки = "ОсновнаяГруппировка"; + ГруппировкаДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ПоляГруппировки = ГруппировкаДанных.ПоляГруппировки; + Иначе + ПоляГруппировки = Список.Группировка; + КонецЕсли; + ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("Получатель"); + ЭлементГруппировкиДанных.Использование = Истина; + + ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("Отправитель"); + ЭлементГруппировкиДанных.Использование = Ложь; + + // Условная настройка группировки. + ВариантГруппировки = "ПоПолучателю"; УстановитьГруппировкуСписка(); КонецПроцедуры @@ -86,10 +104,22 @@ &НаСервере Процедура УстановитьГруппировкуСписка() + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + + ГруппировкаПолучатель = Список.КомпоновщикНастроек.Настройки.Структура[0].ПоляГруппировки.Элементы[0]; + ГруппировкаОтправитель = Список.КомпоновщикНастроек.Настройки.Структура[0].ПоляГруппировки.Элементы[1]; + + Иначе + + ГруппировкаПолучатель = Список.Группировка.Элементы[0]; + ГруппировкаОтправитель = Список.Группировка.Элементы[1]; + + КонецЕсли; + Если ВариантГруппировки = "БезГруппировки" Тогда - Список.Группировка.Элементы[0].Использование = Ложь; - Список.Группировка.Элементы[1].Использование = Ложь; + ГруппировкаПолучатель.Использование = Ложь; + ГруппировкаОтправитель.Использование = Ложь; Элементы.Отправитель.Видимость = Истина; Элементы.Получатель.Видимость = Истина; @@ -98,8 +128,8 @@ Использование = (ВариантГруппировки = "ПоПолучателю"); - Список.Группировка.Элементы[0].Использование = Использование; - Список.Группировка.Элементы[1].Использование = Не Использование; + ГруппировкаПолучатель.Использование = Использование; + ГруппировкаОтправитель.Использование = Не Использование; Элементы.Отправитель.Видимость = Использование; Элементы.Получатель.Видимость = Не Использование; diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index a8566cdce..a56d27f5a 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -57,23 +57,4 @@ Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 - - - - Получатель - Items - None - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - false - Отправитель - Items - None - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - -
        diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl index fb04bbe1e..20b384b65 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl @@ -8,8 +8,26 @@ Возврат; КонецЕсли; - ВариантГруппировки = "ПоПолучателю"; + // Начальная настройка группировки. + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ГруппировкаДанных = Список.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ГруппировкаДанных.ИдентификаторПользовательскойНастройки = "ОсновнаяГруппировка"; + ГруппировкаДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ПоляГруппировки = ГруппировкаДанных.ПоляГруппировки; + Иначе + ПоляГруппировки = Список.Группировка; + КонецЕсли; + ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("Получатель"); + ЭлементГруппировкиДанных.Использование = Истина; + + ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("Отправитель"); + ЭлементГруппировкиДанных.Использование = Ложь; + + // Условная настройка группировки. + ВариантГруппировки = "ПоПолучателю"; УстановитьГруппировкуСписка(); КонецПроцедуры @@ -91,10 +109,22 @@ &НаСервере Процедура УстановитьГруппировкуСписка() + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + + ГруппировкаПолучатель = Список.КомпоновщикНастроек.Настройки.Структура[0].ПоляГруппировки.Элементы[0]; + ГруппировкаОтправитель = Список.КомпоновщикНастроек.Настройки.Структура[0].ПоляГруппировки.Элементы[1]; + + Иначе + + ГруппировкаПолучатель = Список.Группировка.Элементы[0]; + ГруппировкаОтправитель = Список.Группировка.Элементы[1]; + + КонецЕсли; + Если ВариантГруппировки = "БезГруппировки" Тогда - Список.Группировка.Элементы[0].Использование = Ложь; - Список.Группировка.Элементы[1].Использование = Ложь; + ГруппировкаПолучатель.Использование = Ложь; + ГруппировкаОтправитель.Использование = Ложь; Элементы.Отправитель.Видимость = Истина; Элементы.Получатель.Видимость = Истина; @@ -103,8 +133,8 @@ Использование = (ВариантГруппировки = "ПоПолучателю"); - Список.Группировка.Элементы[0].Использование = Использование; - Список.Группировка.Элементы[1].Использование = Не Использование; + ГруппировкаПолучатель.Использование = Использование; + ГруппировкаОтправитель.Использование = Не Использование; Элементы.Отправитель.Видимость = Использование; Элементы.Получатель.Видимость = Не Использование; diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form new file mode 100644 index 000000000..7fb7fe126 --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Form.form @@ -0,0 +1,987 @@ + + + + <key>ru</key> + <value>Классификатор стран мира (ОКСМ)</value> + + + Классификатор + 17 + true + true + + true + + + Классификатор + + None + Add + Copy + Delete + EndEdit + MoveDown + MoveUp + + КлассификаторНаименование + 22 + true + true + + true + + + Классификатор.Наименование + + + КлассификаторНаименованиеРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + КлассификаторНаименованиеКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + КлассификаторКод + 20 + true + true + + true + + + Классификатор.Код + + + КлассификаторКодРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + КлассификаторКодКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + КлассификаторКодАльфа2 + 26 + true + true + + true + + + Классификатор.КодАльфа2 + + + КлассификаторКодАльфа2РасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + КлассификаторКодАльфа2КонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + КлассификаторКолАльфа3 + 28 + true + true + + true + + + Классификатор.КодАльфа3 + + + КлассификаторКолАльфа3РасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + КлассификаторКолАльфа3КонтекстноеМеню + 29 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + КлассификаторНаименованиеПолное + 24 + true + true + + true + + + Классификатор.НаименованиеПолное + + + КлассификаторНаименованиеПолноеРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + КлассификаторНаименованиеПолноеКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + Top + + КлассификаторКоманднаяПанель + 19 + + КлассификаторГруппаПоиск + 34 + + КлассификаторНайти + 32 + true + true + + true + + + КлассификаторНайтиРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторОтменитьПоиск + 33 + true + true + + true + + + КлассификаторОтменитьПоискРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Классификатор группа поиск</value> + + + ru + Классификатор группа поиск + + + КлассификаторГруппаПоискРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + + + КлассификаторСортироватьСписокПоВозрастанию + 30 + true + true + + true + + + КлассификаторСортироватьСписокПоВозрастаниюРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.SortListAsc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КлассификаторСортироватьСписокПоУбыванию + 31 + true + true + + true + + + КлассификаторСортироватьСписокПоУбываниюРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.SortListDesc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + КлассификаторИзменитьФорму + 47 + true + true + + true + + + КлассификаторИзменитьФормуРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторСправка + 43 + true + true + + true + + + КлассификаторСправкаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + ValueChoice + КлассификаторВыборЗначения + + + Selection + КлассификаторВыбор + + + BeforeAddRow + КлассификаторПередНачаломДобавления + + + BeforeDeleteRow + КлассификаторПередУдалением + + + BeforeRowChange + КлассификаторПередНачаломИзменения + + + КлассификаторСтрокаПоиска + 64 + + КлассификаторСтрокаПоискаРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + КлассификаторСтрокаПоискаКонтекстноеМеню + 65 + true + + Классификатор + + true + + + + КлассификаторСостояниеПросмотра + 67 + + КлассификаторСостояниеПросмотраРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + КлассификаторСостояниеПросмотраКонтекстноеМеню + 68 + true + + ViewStatusAddition + Классификатор + + true + + + + КлассификаторУправлениеПоиском + 70 + + КлассификаторУправлениеПоискомРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + КлассификаторУправлениеПоискомКонтекстноеМеню + 71 + true + + SearchControlAddition + Классификатор + + true + + + + КлассификаторРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + КлассификаторКонтекстноеМеню + 18 + + КлассификаторКонтекстноеМенюИзменить + 35 + true + true + + true + + + КлассификаторКонтекстноеМенюИзменитьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюНайти + 36 + true + true + + true + + + КлассификаторКонтекстноеМенюНайтиРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюОтменитьПоиск + 37 + true + true + + true + + + КлассификаторКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюСортироватьСписокПоВозрастанию + 38 + true + true + + true + + + КлассификаторКонтекстноеМенюСортироватьСписокПоВозрастаниюРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.SortListAsc + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюСортироватьСписокПоУбыванию + 39 + true + true + + true + + + КлассификаторКонтекстноеМенюСортироватьСписокПоУбываниюРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.SortListDesc + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюВывестиСписок + 40 + true + true + + true + + + КлассификаторКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюКопироватьВБуферОбмена + 41 + true + true + + true + + + КлассификаторКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + КлассификаторКонтекстноеМенюВыделитьВсе + 42 + true + true + + true + + + КлассификаторКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Item.Классификатор.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + true + true + true + true + + Классификатор.ИндексПиктограммы + + + CommonPicture.ПиктограммыЭлементов + + None + None + None + true + +
        + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 100 + 32 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Классификатор + + <key>ru</key> + <value>Классификатор</value> + + 2 + + ValueTable + + + true + + + true + + + Классификатор.ИндексПиктограммы + + + Код + + <key>ru</key> + <value>Код</value> + + 1 + + String + + 3 + + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 2 + + String + + 60 + + + + true + + + true + + + + НаименованиеПолное + + <key>ru</key> + <value>Наименование полное</value> + + 3 + + String + + + + true + + + true + + + + КодАльфа2 + + <key>ru</key> + <value>Код альфа 2</value> + + 4 + + String + + 2 + + + + true + + + true + + + + КодАльфа3 + + <key>ru</key> + <value>Код альфа 3</value> + + 5 + + String + + 3 + + + + true + + + true + + + + ИндексПиктограммы + + <key>ru</key> + <value>Индекс пиктограммы</value> + + 7 + + Number + + 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> + + 1 + + Boolean + + + true + + + true + + + + ТекущаяСтрока + + CatalogRef.СтраныМира + + + + + + +
        diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html new file mode 100644 index 000000000..c991bdaf8 --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html @@ -0,0 +1,26 @@ + +

        Общероссийский классификатор стран мира (ОКСМ)

        +

        Общероссийский классификатор стран мира (ОКСМ) ходит в состав Единой системы классификации и кодирования технико-экономической и социальной информации (ЕСКК) в Российской Федерации.

        +

        ОКСМ гармонизирован с Международным стандартом ИСО 3166-97 «Коды для представления наименований стран», разработанным Международной организацией по стандартизации (ИСО), и Межгосударственным классификатором стран мира MK (ИСО 3166) 004-97.

        +

        ОКСМ предназначен для идентификации стран мира и используется в процессе обмена информацией при решении различных задач.

        +

        В отличие от стандартов ISO 3166 и ГОСТ 7.67, в ОКСМ, согласно приказу [1] Ростехрегулирования, с 1 января 2009 года входят республики Абхазия и Южная Осетия, которые признаны Россией [2].

        +

        Структурно классификатор состоит из трёх блоков:

        +
        • цифровой идентификации, +
        • наименований, +
        • буквенной идентификации.

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

        +

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

        +

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

        +

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

        +

        Примечания:

        +
        1. Изменение 8/2008 ОКСМ. Принято и введено в действие Приказом Федерального агентства по техническому регулированию и метрологии от 03.12.2008 N 352-ст. Дата введения — 01.01.2009 ↩ +
        2. Указ Президента Российской Федерации от 26.08.2008 № 1260 «О признании Республики Абхазия» ↩ +
          \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl new file mode 100644 index 000000000..b2e30c2a8 --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Module.bsl @@ -0,0 +1,163 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("РежимОткрытияОкна") Тогда + РежимОткрытияОкна = Параметры.РежимОткрытияОкна + КонецЕсли; + + Параметры.Свойство("РежимВыбора", РежимВыбора); + Элементы.Классификатор.РежимВыбора = РежимВыбора; + + // Служебные реквизиты + ПоляКлассификатора = "Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"; + + Мета = Метаданные.Справочники.СтраныМира; + ПредставлениеОбъектаКлассификатора = Мета.РасширенноеПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда + ПредставлениеОбъектаКлассификатора = Мета.ПредставлениеОбъекта; + КонецЕсли; + Если ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда + ПредставлениеОбъектаКлассификатора = Мета.Представление(); + КонецЕсли; + Если Не ПустаяСтрока(ПредставлениеОбъектаКлассификатора) Тогда + ПредставлениеОбъектаКлассификатора = " (" + ПредставлениеОбъектаКлассификатора + ")"; + КонецЕсли; + + ДанныеКлассификатора = СостояниеКлассификатора(); + Классификатор.Загрузить(ДанныеКлассификатора); + + Фильтр = Классификатор.НайтиСтроки(Новый Структура("Код", Параметры.ТекущаяСтрока.Код)); + Если Фильтр.Количество()>0 Тогда + Элементы.Классификатор.ТекущаяСтрока = Фильтр[0].ПолучитьИдентификатор(); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Классификатор +// + +&НаКлиенте +Процедура КлассификаторВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Если Не РежимВыбора Тогда + ОткрытьФормуЭлементаКлассификатора(Элемент.ТекущиеДанные); + Возврат; + КонецЕсли; + + Если ТипЗнч(ВыбраннаяСтрока)=Тип("Массив") Тогда + ИдентификаторСтрокиВыбора = ВыбраннаяСтрока[0]; + Иначе + ИдентификаторСтрокиВыбора = ВыбраннаяСтрока; + КонецЕсли; + + ОповеститьОВыбореЭлементаКлассификатора(ИдентификаторСтрокиВыбора); +КонецПроцедуры + +&НаКлиенте +Процедура КлассификаторВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + ОповеститьОВыбореЭлементаКлассификатора(Значение); +КонецПроцедуры + +&НаКлиенте +Процедура КлассификаторПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура КлассификаторПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура КлассификаторПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; + ОткрытьФормуЭлементаКлассификатора(Элементы.Классификатор.ТекущиеДанные); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура ОткрытьФормуЭлементаКлассификатора(ДанныеЗаполнения, ЭтоНовый=Ложь) + Если ДанныеЗаполнения=Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Основание", Новый Структура(ПоляКлассификатора)); + ЗаполнитьЗначенияСвойств(ПараметрыФормы.Основание, ДанныеЗаполнения); + Если ЭтоНовый Тогда + ПараметрыФормы.Основание.Вставить("Код", "--"); + Иначе + ПараметрыФормы.Вставить("ТолькоПросмотр", Истина); + КонецЕсли; + Форма = ОткрытьФорму("Справочник.СтраныМира.ФормаОбъекта", ПараметрыФормы, Элементы.Классификатор); + Если Не ЭтоНовый И Форма.АвтоЗаголовок Тогда + Форма.АвтоЗаголовок = Ложь; + Форма.Заголовок = ДанныеЗаполнения.Наименование + ПредставлениеОбъектаКлассификатора; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОповеститьОВыбореЭлементаКлассификатора(ИдентификаторСтрокиВыбора) + ВсеДанныеСтроки = Классификатор.НайтиПоИдентификатору(ИдентификаторСтрокиВыбора); + Если ВсеДанныеСтроки<>Неопределено Тогда + ДанныеСтроки = Новый Структура(ПоляКлассификатора); + ЗаполнитьЗначенияСвойств(ДанныеСтроки, ВсеДанныеСтроки); + + ДанныеВыбора = ДанныеВыбораЭлементаКлассификатора(ДанныеСтроки); + Если ДанныеВыбора.ЭтоНовый Тогда + ОповеститьОСозданииЭлементов(ДанныеВыбора.Ссылка); + КонецЕсли; + + ОповеститьОВыборе(ДанныеВыбора.Ссылка); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДанныеВыбораЭлементаКлассификатора(Знач ДанныеСтраны) + // Ищем только по коду, так как в классификаторе все коды заданы + Ссылка = Справочники.СтраныМира.НайтиПоКоду(ДанныеСтраны.Код); + ЭтоНовый = Не ЗначениеЗаполнено(Ссылка); + Если ЭтоНовый Тогда + Страна = Справочники.СтраныМира.СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств(Страна, ДанныеСтраны); + Страна.Записать(); + Ссылка = Страна.Ссылка; + КонецЕсли; + + Возврат Новый Структура("Ссылка, ЭтоНовый, Код", Ссылка, ЭтоНовый, ДанныеСтраны.Код); +КонецФункции + +&НаСервереБезКонтекста +Функция СостояниеКлассификатора() + Данные = Справочники.СтраныМира.ТаблицаКлассификатора(); + + Данные.Колонки.Добавить("ИндексПиктограммы", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0))); + Данные.ЗаполнитьЗначения(8, "ИндексПиктограммы"); + + Запрос = Новый Запрос("ВЫБРАТЬ Код Из Справочник.СтраныМира ГДЕ Предопределенный"); + Для Каждого СтрокаПредопределенного Из Запрос.Выполнить().Выгрузить() Цикл + СтрокаДанных = Данные.Найти(СтрокаПредопределенного.Код, "Код"); + Если СтрокаДанных<>Неопределено Тогда + СтрокаДанных.ИндексПиктограммы = 5; + КонецЕсли; + КонецЦикла; + + Возврат Данные; +КонецФункции + +&НаКлиенте +Процедура ОповеститьОСозданииЭлементов(Ссылка) + ОповеститьОЗаписиНового(Ссылка); + Оповестить("Справочник.СтраныМира.Изменение", Ссылка, Этаформа); +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form index 65da96a88..cf24dbd5b 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Form.form @@ -11,7 +11,6 @@ Список - true None Наименование @@ -27,7 +26,7 @@ true НаименованиеРасширеннаяПодсказка - 24 + 37 Label true true @@ -63,7 +62,7 @@ КодРасширеннаяПодсказка - 26 + 39 Label true true @@ -99,7 +98,7 @@ КодАльфа2РасширеннаяПодсказка - 28 + 41 Label true true @@ -135,7 +134,7 @@ КодАльфа3РасширеннаяПодсказка - 30 + 43 Label true true @@ -175,7 +174,7 @@ НаименованиеПолноеРасширеннаяПодсказка - 32 + 45 Label true true @@ -198,18 +197,190 @@ true - None + Top СписокКоманднаяПанель 3 + + СписокВыбрать + 16 + true + true + + true + + + СписокВыбратьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Choose + Normal + Auto + true + true + UserCmds + Auto + + + СписокКоманды + 15 + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + ru + Список команды + + + СписокКомандыРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + Item.Список + + + + СписокКлассификатор + 17 + true + true + + true + + + СписокКлассификаторРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ОткрытьКлассификатор + Normal + Auto + true + true + UserCmds + Auto + + + СписокВыбратьИзКлассификатора + 18 + true + true + + true + + + СписокВыбратьИзКлассификатораРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.Command.ВыбратьИзКлассификатора + Normal + Auto + true + true + UserCmds + Auto + + + СписокИзменитьФорму + 19 + true + true + + true + + + СписокИзменитьФормуРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + СписокСправка + 20 + true + true + + true + + + СписокСправкаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left + + BeforeAddRow + СписокПередНачаломДобавления + + + ChoiceProcessing + СписокОбработкаВыбора + + + NewWriteProcessing + СписокОбработкаЗаписиНового + СписокСтрокаПоиска - 15 + 28 СписокСтрокаПоискаРасширеннаяПодсказка - 17 + 30 Label true true @@ -219,7 +390,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 16 + 29 true Список @@ -229,10 +400,10 @@ СписокСостояниеПросмотра - 18 + 31 СписокСостояниеПросмотраРасширеннаяПодсказка - 20 + 33 Label true true @@ -242,7 +413,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 19 + 32 true ViewStatusAddition @@ -253,10 +424,10 @@ СписокУправлениеПоиском - 21 + 34 СписокУправлениеПоискомРасширеннаяПодсказка - 23 + 36 Label true true @@ -266,7 +437,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 22 + 35 true SearchControlAddition @@ -277,7 +448,7 @@ СписокРасширеннаяПодсказка - 14 + 27 Label true true @@ -327,12 +498,27 @@ true + None + false ФормаКоманднаяПанель -1 Left true + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + 110 DontBlock true true @@ -365,6 +551,132 @@ true
          + + ОткрытьФормуКлассификатора + + <key>ru</key> + <value>Открыть форму классификатора</value> + + 2 + + Boolean + + + true + + + true + + + + РежимВыбора + + <key>ru</key> + <value>Режим выбора</value> + + 3 + + Boolean + + + true + + + true + + + + ИдентификаторЭлементаОтбораСсылки + + <key>ru</key> + <value>Идентификатор элемента отбора ссылки</value> + + 4 + + + true + + + true + + + + ЭтоПлатформа83 + + <key>ru</key> + <value>Это платформа 8.3</value> + + 5 + + Boolean + + + true + + + true + + + + ОткрытьКлассификатор + + <key>ru</key> + <value>Классификатор стран (ОКСМ)</value> + + 2 + + ru + Открыть классификатор + + + true + + + + ОткрытьКлассификатор + + + Auto + Auto + + + ВыбратьИзКлассификатора + + <key>ru</key> + <value>Выбрать из классификатора</value> + + 1 + + ru + Выбрать из классификатора + + + true + + + StdPicture.ChooseValue + + + + ВыбратьИзКлассификатора + + + TextPicture + Auto + Auto + + + ТолькоДанныеКлассификатора + + Boolean + + true + + + РазрешитьДанныеКлассификатора + + true + diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..0e3a297d7 --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,205 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Инициализируем внутренние флаги + ЭтоПлатформа83 = ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83(); + + МожноДобавлятьВСправочник = Справочники.СтраныМира.ЕстьПравоДобавления(); + + Если Параметры.РазрешитьДанныеКлассификатора=Неопределено Тогда + РазрешитьДанныеКлассификатора = Истина; + Иначе + ТипБулево = Новый ОписаниеТипов("Булево"); + РазрешитьДанныеКлассификатора = ТипБулево.ПривестиЗначение(Параметры.РазрешитьДанныеКлассификатора); + КонецЕсли; + + ТолькоДанныеКлассификатора = Параметры.ТолькоДанныеКлассификатора; + + Параметры.Свойство("РежимВыбора", РежимВыбора); + + // Разрешаем элементы + Элементы.Список.РежимВыбора = РежимВыбора; + Элементы.СписокВыбрать.Видимость = РежимВыбора; + Элементы.СписокВыбрать.КнопкаПоУмолчанию = РежимВыбора; + + Элементы.СписокВыбратьИзКлассификатора.Видимость = (РежимВыбора И Не ТолькоДанныеКлассификатора); + Элементы.СписокКлассификатор.Видимость = Не Элементы.СписокВыбратьИзКлассификатора.Видимость; + + // По флагам определяем режим + Если РежимВыбора Тогда + Если РазрешитьДанныеКлассификатора Тогда + Если ТолькоДанныеКлассификатора Тогда + Если МожноДобавлятьВСправочник Тогда + // Выбор только стран классификатора + ОткрытьФормуКлассификатора = Истина + + Иначе + // Показываем только пересечение справочника и классификатора + УстановитьОтборПересеченияСКлассификатором(); + // Кнопки классификатора скрываем + Элементы.СписокВыбратьИзКлассификатора.Видимость = Ложь; + Элементы.СписокКлассификатор.Видимость = Ложь; + КонецЕсли; + + Иначе + Если МожноДобавлятьВСправочник Тогда + // Показываем справочник и кнопку выбора из классификатора (установки по умолчанию) + Иначе + // Кнопки классификатора скрываем + Элементы.СписокВыбратьИзКлассификатора.Видимость = Ложь; + Элементы.СписокКлассификатор.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + + Иначе + // Показываем только элементы справочника + Элементы.СписокКлассификатор.Видимость = Ложь; + // Кнопки классификатора скрываем + Элементы.СписокВыбратьИзКлассификатора.Видимость = Ложь; + Элементы.СписокКлассификатор.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОткрытьФормуКлассификатора Тогда + // Выбор только стран классификатора, открываем его форму для выбора + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимВыбора", Истина); + ПараметрыОткрытия.Вставить("ЗакрыватьПриВыборе", ЗакрыватьПриВыборе); + ПараметрыОткрытия.Вставить("ТекущаяСтрока", Элементы.Список.ТекущаяСтрока); + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкна); + ПараметрыОткрытия.Вставить("ТекущаяСтрока", Элементы.Список.ТекущаяСтрока); + + ОткрытьФорму("Справочник.СтраныМира.Форма.Классификатор", ПараметрыОткрытия, ВладелецФормы); + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия="Справочник.СтраныМира.Изменение" Тогда + ОбновитьОтображениеСпискаСтран(); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список +// + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + ТекстВопроса = НСтр("ru='Есть возможность подобрать страну мира из классификатора. + |Подобрать?'"); + Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + Если Результат = КодВозвратаДиалога.Да Тогда + Отказ = Истина; + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимВыбора", Истина); + ОткрытьФорму("Справочник.СтраныМира.Форма.Классификатор", ПараметрыОткрытия, Элементы.Список); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СписокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если РежимВыбора Тогда + // Выбор из классификатора + ОповеститьОВыборе(ВыбранноеЗначение); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СписокОбработкаЗаписиНового(НовыйОбъект, Источник, СтандартнаяОбработка) + ОбновитьОтображениеСпискаСтран(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +&НаКлиенте +Процедура ОткрытьКлассификатор(Команда) + // Открываем на просмотр + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТекущаяСтрока", Элементы.Список.ТекущаяСтрока); + ОткрытьФорму("Справочник.СтраныМира.Форма.Классификатор", ПараметрыОткрытия, Элементы.Список); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьИзКлассификатора(Команда) + // Открываем для выбора + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("РежимВыбора", Истина); + ПараметрыОткрытия.Вставить("ЗакрыватьПриВыборе", ЗакрыватьПриВыборе); + ПараметрыОткрытия.Вставить("ТекущаяСтрока", Элементы.Список.ТекущаяСтрока); + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкна); + ПараметрыОткрытия.Вставить("ТекущаяСтрока", Элементы.Список.ТекущаяСтрока); + ОткрытьФорму("Справочник.СтраныМира.Форма.Классификатор", ПараметрыОткрытия, Элементы.Список); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура ОбновитьОтображениеСпискаСтран() + + Если ИдентификаторЭлементаОтбораСсылки<>Неопределено Тогда + // Был наложен дополнительный отбор, который надо обновить + УстановитьОтборПересеченияСКлассификатором(); + КонецЕсли; + + Элементы.Список.Обновить(); +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборПересеченияСКлассификатором() + ОтборСписка = ?(ЭтоПлатформа83, Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор, Список.Отбор); + + Если ИдентификаторЭлементаОтбораСсылки=Неопределено Тогда + ЭлементОтбора = ОтборСписка.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + ЭлементОтбора.Использование = Истина; + + ИдентификаторЭлементаОтбораСсылки = ОтборСписка.ПолучитьИдентификаторПоОбъекту(ЭлементОтбора); + Иначе + ЭлементОтбора = ОтборСписка.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлементаОтбораСсылки); + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | Код, Наименование + |ПОМЕСТИТЬ + | Классификатор + |ИЗ + | &Классификатор КАК Классификатор + |ИНДЕКСИРОВАТЬ ПО + | Код, Наименование + |;//////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Ссылка + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ВНУТРЕННЕЕ СОЕДИНЕНИЕ + | Классификатор КАК Классификатор + |ПО + | СтраныМира.Код = Классификатор.Код + | И СтраныМира.Наименование = Классификатор.Наименование + |"); + Запрос.УстановитьПараметр("Классификатор", Справочники.СтраныМира.ТаблицаКлассификатора()); + ЭлементОтбора.ПравоеЗначение = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); +КонецПроцедуры diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form index d0a72a674..9d797cf8d 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Form.form @@ -3,6 +3,46 @@ Группа 11 + + Наименование + 3 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + Наименование_КонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + Код 1 @@ -16,7 +56,7 @@ КодРасширеннаяПодсказка - 13 + 16 Label true true @@ -43,6 +83,77 @@ Normal + true + true + + true + + + ГруппаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + НаименованиеПолное + 5 + + <key>ru</key> + <value>Полное наименование</value> + + true + true + + true + + + Объект.НаименованиеПолное + + + НаименованиеПолноеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеПолное_КонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ГруппаАльфаКодов + 12 КодАльфа2 7 @@ -56,7 +167,7 @@ КодАльфа2РасширеннаяПодсказка - 15 + 21 Label true true @@ -98,7 +209,7 @@ КодАльфа3РасширеннаяПодсказка - 17 + 23 Label true true @@ -132,9 +243,17 @@ true + + <key>ru</key> + <value>Группа альфа кодов</value> + + + ru + Группа альфа кодов + - ГруппаРасширеннаяПодсказка - 12 + ГруппаАльфаКодовРасширеннаяПодсказка + 20 Label true true @@ -151,96 +270,16 @@ Auto - - Наименование - 3 - true - true - - true - - - Объект.Description - - - НаименованиеРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - - Наименование_КонтекстноеМеню - 4 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - НаименованиеПолное - 5 - - <key>ru</key> - <value>Полное</value> - - true - true - - true - - - Объект.НаименованиеПолное - - - НаименованиеПолноеРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - НаименованиеПолное_КонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - Форма_КоманднаяПанель -1 Left true + + OnCreateAtServer + ПриСозданииНаСервере + LockOwner true true @@ -273,8 +312,8 @@ - OnReadAtServer - ПриЧтенииНаСервере + AfterWrite + ПослеЗаписи diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl index e6de0dec0..86d03c580 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СтраныМира/Forms/ФормаЭлемента/Module.bsl @@ -1,15 +1,20 @@ - -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// &НаСервере -Процедура ПриЧтенииНаСервере(ТекущийОбъект) - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРабота"); - Если Модуль<>Неопределено Тогда - Модуль.ОбъектПриЧтенииНаСервере(ТекущийОбъект, ЭтаФорма.ТолькоПросмотр); - КонецЕсли; +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; КонецЕсли; + Если Объект.Предопределенный Тогда + ТолькоПросмотр = Истина; + КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Справочник.СтраныМира.Изменение", Объект.Ссылка, Этаформа); +КонецПроцедуры + diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index ea1500de4..f981dd002 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -1,10 +1,16 @@ - -

          Общероссийский классификатор стран мира (ОКСМ) входит в состав Единой системы классификации и кодирования технико-экономической и социальной информации (ЕСКК) в Российской Федерации. ОКСМ предназначен для идентификации стран мира и используется в процессе обмена информацией при решении различных задач.

          -

          Структурно классификатор состоит из трёх блоков:

          -
          • цифровой идентификации, -
          • наименований, -
          • буквенной идентификации.


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

          -

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

          -

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

          -

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

          -

          Трёхзначные буквенные коды применяются в особых случаях, определяемых компетентными организациями.
          Цифровой код имеет преимущество перед буквенным кодом, заключающееся в том, что на него не влияют изменения в наименованиях стран мира, которые могут повлечь за собой изменения кодов альфа-2 и альфа-3.

          \ No newline at end of file + +

          Справочник стран мира

          +

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

          +

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

          +

          Поле "Код" содержит трёхзначный цифровой код страны мира, позволяющий однозначно идентифицировать страну согласно ОКСМ. Для стран, таможенных союзов и прочих данных, не относящихся к классификатору стран (например Евросоюз), в это поле рекомендуется вводить "--"

          +

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

          +

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

          \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl new file mode 100644 index 000000000..8b1fb4a41 --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -0,0 +1,481 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ +// + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + Если Не СтандартнаяОбработка Тогда + // Обрабатывается в другом месте + Возврат; + + ИначеЕсли Не Параметры.Свойство("РазрешитьДанныеКлассификатора") Тогда + // Поведение по умолчанию, подбор только справочника + Возврат; + + ИначеЕсли Истина<>Параметры.РазрешитьДанныеКлассификатора Тогда + // Подбор классификатора отключен, поведение по умолчанию + Возврат; + + ИначеЕсли Не ЕстьПравоДобавления() Тогда + // Нет прав на добавление страны мира, поведение по умолчанию + Возврат; + + КонецЕсли; + + // Будем имитировать поведение платформы - поиск по всем доступным полям поиска с формированием подобного списка + + // Подразумеваем, что поля справочника и классификатора совпадают, за исключением отсутствующего в классификаторе поля "Ссылка" + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + ПрефиксПараметраОтбора = "ПараметрыОтбора"; + + // Общий отбор по параметрам + ШаблонОтбора = "ИСТИНА"; + Для Каждого КлючЗначение Из Параметры.Отбор Цикл + ЗначениеПоля = КлючЗначение.Значение; + ИмяПоля = КлючЗначение.Ключ; + ИмяПараметра = ПрефиксПараметраОтбора + ИмяПоля; + + Если ТипЗнч(ЗначениеПоля)=Тип("Массив") Тогда + ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " В (&" + ИмяПараметра + ")"; + Иначе + ШаблонОтбора = ШаблонОтбора + " И %1." + ИмяПоля + " = &" + ИмяПараметра; + КонецЕсли; + + Запрос.УстановитьПараметр(ИмяПараметра, КлючЗначение.Значение); + КонецЦикла; + + // Дополнительные отборы + Если Параметры.Свойство("ВыборГруппИЭлементов") Тогда + Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда + ШаблонОтбора = ШаблонОтбора + " И %1.ЭтоГруппа"; + + ИначеЕсли Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы Тогда + ШаблонОтбора = ШаблонОтбора + " И (НЕ %1.ЭтоГруппа)"; + + КонецЕсли; + КонецЕсли; + + // Источники данных + Если (Параметры.Свойство("ТолькоДанныеКлассификатора") И Параметры.ТолькоДанныеКлассификатора) Тогда + // Запрос только по классификатору + ШаблонЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 50 + | NULL КАК Ссылка, + | Классификатор.Код КАК Код, + | Классификатор.Наименование КАК Наименование, + | ЛОЖЬ КАК ПометкаУдаления, + | %2 КАК Представление + |ИЗ + | Классификатор КАК Классификатор + |ГДЕ + | Классификатор.%1 ПОДОБНО &СтрокаПоиска + | И ( + | " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + " + | ) + |УПОРЯДОЧИТЬ ПО + | Классификатор.%1 + |"; + Иначе + // Запрос и по справочнику и по классификатору + ШаблонЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 50 + | СтраныМира.Ссылка КАК Ссылка, + | ЕСТЬNULL(СтраныМира.Код, Классификатор.Код) КАК Код, + | ЕСТЬNULL(СтраныМира.Наименование, Классификатор.Наименование) КАК Наименование, + | ЕСТЬNULL(СтраныМира.ПометкаУдаления, ЛОЖЬ) КАК ПометкаУдаления, + | + | ВЫБОР КОГДА СтраныМира.Ссылка ЕСТЬ NULL ТОГДА + | %2 + | ИНАЧЕ + | %3 + | КОНЕЦ КАК Представление + | + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ПОЛНОЕ СОЕДИНЕНИЕ + | Классификатор + |ПО + | Классификатор.Код = СтраныМира.Код + | И Классификатор.Наименование = СтраныМира.Наименование + |ГДЕ + | (СтраныМира.%1 ПОДОБНО &СтрокаПоиска ИЛИ Классификатор.%1 ПОДОБНО &СтрокаПоиска) + | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "Классификатор") + ") + | И (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОтбора, "СтраныМира") + ") + | + |УПОРЯДОЧИТЬ ПО + | ЕСТЬNULL(СтраныМира.%1, Классификатор.%1) + |"; + КонецЕсли; + + ИменаПолей = ПоляПоиска(); + + // Код + Наименование - ключевые поля соответствия справочника классифкатору. Их обрабатываем всегда + ИменаПолейСтрокой = "," + СтрЗаменить(ИменаПолей.ИменаПолейСтрокой, " ", ""); + ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Код", ""); + ИменаПолейСтрокой = СтрЗаменить(ИменаПолейСтрокой, ",Наименование", ""); + + Запрос.Текст = " + |ВЫБРАТЬ + | Код, Наименование " + ИменаПолейСтрокой + " + |ПОМЕСТИТЬ + | Классификатор + |ИЗ + | &Классификатор КАК Классификатор + |ИНДЕКСИРОВАТЬ ПО + | Код, Наименование + | " + ИменаПолейСтрокой + " + |"; + Запрос.УстановитьПараметр("Классификатор", ТаблицаКлассификатора()); + Запрос.Выполнить(); + Запрос.УстановитьПараметр("СтрокаПоиска", ЭкранироватьСимволыПодобия(Параметры.СтрокаПоиска) + "%"); + + Для Каждого ДанныеПоля Из ИменаПолей.СписокПолей Цикл + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, + ДанныеПоля.Имя, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "Классификатор"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДанныеПоля.ШаблонПредставления, "СтраныМира"), + ); + + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + ДанныеВыбора = Новый СписокЗначений; + СтандартнаяОбработка = Ложь; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда + // Данные справочника + ЭлементВыбора = Выборка.Ссылка; + Иначе + // Данные классификатора + РезультатВыбора = Новый Структура("Код, Наименование", + Выборка.Код, Выборка.Наименование + ); + + ЭлементВыбора = Новый Структура("Значение, ПометкаУдаления, Предупреждение", + РезультатВыбора, Выборка.ПометкаУдаления, Неопределено, + ); + КонецЕсли; + + ДанныеВыбора.Добавить(ЭлементВыбора, Выборка.Представление); + КонецЦикла; + + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Определяет данные страны по справочнику стран или классификатору ОКСМ +// +// Параметры: +// КодСтраны - строка или число с кодом ОКСМ страны. Если не указано, то поиск по коду не производится +// Наименование - наименование страны. Если не указано, то поиск по наименованию не производится +// +// Возвращаемое значение: +// Структура с полями "Ссылка", "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3", +// Если страна не найдена в справочнике, но найдена в классфикаторе, то поле "Ссылка" не заполнено +// +// Если страна не найдена ни в адресе, ни в классификаторе, то возвращается значение Неопределено +// +Функция ДанныеСтраныМира(Знач КодСтраны=Неопределено, Знач Наименование=Неопределено) Экспорт + Если КодСтраны=Неопределено И Наименование=Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + НормализованыйКод = КодСтраныМира(КодСтраны); + Если КодСтраны=Неопределено Тогда + УсловиеПоиска = "ИСТИНА"; + ФильтрКлассификатора = Новый Структура; + Иначе + УсловиеПоиска = "Код=" + ЗакавычитьСтроку(НормализованыйКод); + ФильтрКлассификатора = Новый Структура("Код", НормализованыйКод); + КонецЕсли; + + Если Наименование<>Неопределено Тогда + УсловиеПоиска = УсловиеПоиска + " И Наименование=" + ЗакавычитьСтроку(Наименование); + ФильтрКлассификатора.Вставить("Наименование", Наименование); + КонецЕсли; + + Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 + |ИЗ + | Справочник.СтраныМира + |ГДЕ + | " + УсловиеПоиска + " + |УПОРЯДОЧИТЬ ПО + | Наименование + |"); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Иначе + ДанныеКлассификатора = ТаблицаКлассификатора(); + СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора); + Если СтрокиДанных.Количество()=0 Тогда + Результат = Неопределено + Иначе + ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]); + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Определяет данные страны по классификатору ОКСМ +// +// Параметры: +// КодСтраны - строка кода страны или числовой код +// +// Возвращаемое значение: +// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" +// - в случае отсуствия страны в классфикаторе - Неопределено +// +Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт + + ДанныеКлассификатора = ТаблицаКлассификатора(); + СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(КодСтраны), "Код"); + Если СтрокаДанных=Неопределено Тогда + Результат = Неопределено; + Иначе + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Определяет данные страны по классификатору ОКСМ +// +// Параметры: +// Наименование - строка наименования страны +// +// Возвращаемое значение: +// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" +// - в случае отсуствия страны в классфикаторе - Неопределено +// +Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт + ДанныеКлассификатора = ТаблицаКлассификатора(); + СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование"); + Если СтрокаДанных=Неопределено Тогда + Результат = Неопределено; + Иначе + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Обновляет справочник стран мира по данным макета - классификатора +// Идентификация существующих элементов в справочнике выполняется по полю Код. +// +// Параметры: +// Добавлять - необязательный флаг. Если Истина, то добавляются страны, которые есть в классфикаторе, +// но отсутствуют в справочнике стран мира. +// +Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять=Ложь) Экспорт + ВсеОшибки = ""; + + Фильтр = Новый Структура("Код"); + + // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных + Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл + Фильтр.Код = СтрокаКлассификатора.Код; + Выборка = Справочники.СтраныМира.Выбрать(,,Фильтр); + СтранаНайдена = Выборка.Следующий(); + Если Не СтранаНайдена И Добавлять Тогда + // Добавление страны + Страна = Справочники.СтраныМира.СоздатьЭлемент(); + ИначеЕсли СтранаНайдена И ( + Выборка.Наименование<>СтрокаКлассификатора.Наименование + Или Выборка.КодАльфа2<>СтрокаКлассификатора.КодАльфа2 + Или Выборка.КодАльфа3<>СтрокаКлассификатора.КодАльфа3 + Или Выборка.НаименованиеПолное<>СтрокаКлассификатора.НаименованиеПолное + ) Тогда + // Изменение страны + Страна = Выборка.ПолучитьОбъект(); + Иначе + Продолжить; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Если Не Страна.ЭтоНовый() Тогда + ЗаблокироватьДанныеДляРедактирования(Страна.Ссылка); + КонецЕсли; + ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); + Страна.ДополнительныеСвойства.Вставить("НеПроверятьУникальность"); + Страна.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + Инфо = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), + Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); + ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; + ОтменитьТранзакцию(); + КонецПопытки; + + КонецЦикла; + + Если Не ПустаяСтрока(ВсеОшибки) Тогда + ВызватьИсключение СокрЛП(ВсеОшибки); + КонецЕсли; +КонецПроцедуры + +// Возвращает таблицу значений с данными ОКСМ +// +// Колонки: +// Код - Строка(3, Переменная), +// Наименование - Строка(60, Переменная), +// НаименованиеПолное - Строка(100, Переменная), +// КодАльфа2 - Строка(2, Переменная), +// КодАльфа3 - Строка(3, Переменная) +// Индексы: +// Код, +// Наименование +// +Функция ТаблицаКлассификатора() Экспорт + Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); + + Возврат СериализаторXDTO.ПрочитатьXML(Чтение); +КонецФункции + +// Возвращает поля поиска в порядке предпочтения для справочника стран мира +// +// Результат - массив структур с полями: +// - Имя - имя реквизита поиска +// - ШаблонПредставления - шаблон для формирования значения представления по именам реквизитов, +// например: "%1.Наменование (%1.Код)". Здесь "Наименование" и "Код" - имена реквизитов, +// "%1" - заполнитель для передачи псевдонима таблицы +// +Функция ПоляПоиска() Экспорт + Результат = Новый Массив; + СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; + ГраницаПолей = СписокПолей.Количество() - 1; + ВсеИменаСтрокой = ""; + + ПредставлениеРазделителя = ", "; + РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; + + Для Индекс=0 По ГраницаПолей Цикл + ИмяПоля = СписокПолей[Индекс].Имя; + ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; + + ШаблонПредставления = "%1." + ИмяПоля; + + ОстальныеПоля = ""; + Для Позиция=0 По ГраницаПолей Цикл + Если Позиция<>Индекс Тогда + ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; + КонецЕсли; + КонецЦикла; + Если Не ПустаяСтрока(ОстальныеПоля) Тогда + ШаблонПредставления = ШаблонПредставления + + " + "" ("" + " + + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) + + " + "")"""; + КонецЕсли; + + Результат.Добавить( + Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления) + ); + КонецЦикла; + + Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); +КонецФункции + +// Создает или возвращает существующую ссылку по данным классификатора +// +// Параметры: +// Отбор - объект с полем Код для поиска страны в классфикаторе +// Данные - необязательная структура для заполнения оставшихся полей создаваемого объекта. +// +// Возвращаемое значение - ссылка на созданый элемент +// +Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные=Неопределено) Экспорт + + // Убеждаемся, что страна есть в классификаторе + ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); + Если ДанныеПоиска=Неопределено Тогда + ВызватьИсключение НСтр("ru='Некорректный код страны мира для поиска в классификаторе'"); + КонецЕсли; + + // Проверяем на существование в справочнике по данным классификатора + ДанныеПоиска = ДанныеСтраныМира(ДанныеПоиска.Код, ДанныеПоиска.Наименование); + Результат = ДанныеПоиска.Ссылка; + Если Не ЗначениеЗаполнено(Результат) Тогда + ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеПоиска); + Если ДополнительныеДанные<>Неопределено Тогда + ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДополнительныеДанные); + КонецЕсли; + ОбъектСтраны.Записать(); + Результат = ОбъектСтраны.Ссылка; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг возможности добавления и изменения элементов +// +Функция ЕстьПравоДобавления() Экспорт + Возврат ПравоДоступа("Добавление", Справочники.СтраныМира.ПустаяСсылка().Метаданные()); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +// Приводит код страны к единому виду - строка длиной три символа +// +Функция КодСтраныМира(Знач КодСтраны) + + Если ТипЗнч(КодСтраны)=Тип("Число") Тогда + Возврат Формат(КодСтраны, "ЧЦ=3; ЧН=; ЧВН=; ЧГ="); + КонецЕсли; + + Возврат Прав("000" + КодСтраны, 3); +КонецФункции + +// Возвращает строку в кавычках +// +Функция ЗакавычитьСтроку(Знач Строка) + Возврат """" + СтрЗаменить(Строка, """", """""") + """"; +КонецФункции + +// Экранирует символы для использования в функции запроса ПОДОБНО +// +Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") + Результат = Текст; + СимволыПодобия = "%_[]^" + СпецСимвол; + + Для Позиция=1 По СтрДлина(СимволыПодобия) Цикл + ТекущийСимвол = Сред(СимволыПодобия, Позиция, 1); + Результат = СтрЗаменить(Результат, ТекущийСимвол, СпецСимвол + ТекущийСимвол); + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецЕсли diff --git a/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl new file mode 100644 index 000000000..083780aaa --- /dev/null +++ b/SSL/src/Catalogs/СтраныМира/ObjectModule.bsl @@ -0,0 +1,86 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Контролирует уникальность элемента в базе +// Возвращает структуру - описание элемента, существующего в базе +// +Функция СуществующийЭлемент() Экспорт + Результат = Неопределено; + + // Нецифровые коды пропускаем + ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3, 0, ДопустимыйЗнак.Неотрицательный)); + Если Код="0" Или Код="00" Или Код="000" Тогда + КодПоиска = "000"; + Иначе + КодПоиска = Формат(ТипЧисло.ПривестиЗначение(Код), "ЧЦ=3; ЧДЦ=2; ЧН=; ЧВН="); + Если КодПоиска="000" Тогда + Возврат Результат; // Не число + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Код КАК Код, + | Наименование КАК Наименование, + | НаименованиеПолное КАК НаименованиеПолное, + | КодАльфа2 КАК КодАльфа2, + | КодАльфа3 КАК КодАльфа3, + | Ссылка КАК Ссылка + |ИЗ + | Справочник.СтраныМира + |ГДЕ + | Код=&Код + | И Ссылка<>&Ссылка + |"); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Код", КодПоиска); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Если Выборка.Следующий() Тогда + Результат = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='С кодом %1 уже существует страна %2. Измените код или используйте уже существующие данные.'"), + Код, Выборка.Наименование)); + + Для Каждого Поле Из РезультатЗапроса.Колонки Цикл + Результат.Вставить(Поле.Имя, Выборка[Поле.Имя]); + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ +// + +Процедура ПередЗаписью(Отказ) + Если ОбменДанными.Загрузка Или ЭтотОбъект.ДополнительныеСвойства.Свойство("НеПроверятьУникальность") Тогда + Возврат; + КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Существующий = СуществующийЭлемент(); + Если Существующий<>Неопределено Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Существующий.ОписаниеОшибки,, "Объект.Наименование"); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + Если ДанныеЗаполнения<>Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения); + КонецЕсли; +КонецПроцедуры + +#КонецЕсли diff --git a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt index 499f3ad31..3180d7663 100644 --- a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt +++ b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt @@ -54,6 +54,20 @@ + + + Неактуальный + + xs:boolean + + + + + Код + + + Наименование + АБХАЗИЯ diff --git a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo index 2efbde24a..571b32385 100644 --- a/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo +++ b/SSL/src/Catalogs/СтраныМира/СтраныМира.mdo @@ -59,6 +59,7 @@ Use Owner + true ShowError Use @@ -68,6 +69,7 @@ Use Parent + true Use @@ -103,8 +105,11 @@ ru Числовой код страны по ОКСМ - - Use + true + + -- + + ShowError @@ -127,7 +132,6 @@ 60 String Variable - true AsDescription @@ -142,7 +146,7 @@ BothWays Catalog.СтраныМира.Form.ФормаЭлемента Catalog.СтраныМира.Form.ФормаСписка - Catalog.СтраныМира.Form.ФормаВыбора + Catalog.СтраныМира.Form.ФормаСписка НаименованиеПолное @@ -227,12 +231,17 @@ PersonalComputer MobileDevice - - ФормаВыбора + + Классификатор ru - Форма выбора + Классификатор + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index 05bfcb306..a07c2f101 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -18,7 +18,7 @@ 23 <key>ru</key> - <value>Загрузка</value> + <value>Выполняется получение данных</value> true true @@ -35,7 +35,7 @@ ФлагИспользованияЗагрузкиРасширеннаяПодсказка - 60 + 62 Label true true @@ -63,7 +63,7 @@ 21 <key>ru</key> - <value>Выгрузка</value> + <value>Выполняется отправка данных</value> true true @@ -80,7 +80,7 @@ ФлагИспользованияВыгрузкиРасширеннаяПодсказка - 62 + 64 Label true true @@ -106,10 +106,6 @@ Наименование 4 - - <key>ru</key> - <value>Сценарий обмена данными</value> - true true @@ -120,7 +116,7 @@ НаименованиеРасширеннаяПодсказка - 64 + 66 Label true true @@ -155,10 +151,10 @@
          СписокСтрокаПоиска - 51 + 53 СписокСтрокаПоискаРасширеннаяПодсказка - 53 + 55 Label true true @@ -168,7 +164,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 52 + 54 true Список @@ -178,10 +174,10 @@ СписокСостояниеПросмотра - 54 + 56 СписокСостояниеПросмотраРасширеннаяПодсказка - 56 + 58 Label true true @@ -191,7 +187,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 55 + 57 true ViewStatusAddition @@ -202,10 +198,10 @@ СписокУправлениеПоиском - 57 + 59 СписокУправлениеПоискомРасширеннаяПодсказка - 59 + 61 Label true true @@ -215,7 +211,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 58 + 60 true SearchControlAddition @@ -226,7 +222,7 @@ СписокРасширеннаяПодсказка - 50 + 52 Label true true @@ -250,7 +246,7 @@ СписокКонтекстноеМенюВключитьОтключитьЗагрузкуРасширеннаяПодсказка - 44 + 46 Label true true @@ -276,7 +272,7 @@ ФормаВключитьОтключитьВыгрузкуРасширеннаяПодсказка - 45 + 47 Label true true @@ -307,7 +303,7 @@ ГруппаКнопокВключенияЗагрузкиВыгрузкиДанныхРасширеннаяПодсказка - 43 + 45 Label true true @@ -330,7 +326,7 @@ СписокКонтекстноеМенюВключитьОтключитьРегламентноеЗаданиеРасширеннаяПодсказка - 47 + 49 Label true true @@ -356,7 +352,7 @@ СписокКонтекстноеМенюОткрытьСценарийОбменаДаннымиРасширеннаяПодсказка - 48 + 50 Label true true @@ -387,7 +383,7 @@ СписокКонтекстноеМенюГруппаКнопокРасширеннаяПодсказка - 46 + 48 Label true true @@ -407,7 +403,7 @@ СписокКонтекстноеМенюВыполнитьСценарийРасширеннаяПодсказка - 49 + 51 Label true true @@ -431,6 +427,7 @@ true true MultiRow + Row
          true
          1 1 @@ -438,7 +435,7 @@ AutoUse true true - false + false Auto Auto ExpandTopLevel @@ -463,6 +460,51 @@ true + + Комментарий + 34 + true + true + + true + + + Items.Список.CurrentData.Комментарий + + + КомментарийРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 35 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + + Style.ПоясняющийТекст + + Normal + + ФормаКоманднаяПанель -1 @@ -483,7 +525,7 @@ ФормаВключитьОтключитьЗагрузкуВыгрузкуРасширеннаяПодсказка - 35 + 37 Label true true @@ -513,7 +555,7 @@ ФормаВключитьОтключитьЗагрузкуРасширеннаяПодсказка - 36 + 38 Label true true @@ -543,7 +585,7 @@ ФормаВключитьОтключитьВыгрузку1РасширеннаяПодсказка - 37 + 39 Label true true @@ -574,7 +616,7 @@ ВключитьОтключитьВыгрузкуЗагрузкуРасширеннаяПодсказка - 34 + 36 Label true true @@ -598,7 +640,7 @@ СоздатьРасширеннаяПодсказка - 38 + 40 Label true true @@ -624,7 +666,7 @@ ИзменитьСценарийОбменаДаннымиРасширеннаяПодсказка - 39 + 41 Label true true @@ -653,7 +695,7 @@ ФормаВключитьОтключитьРегламентноеЗаданиеРасширеннаяПодсказка - 41 + 43 Label true true @@ -684,7 +726,7 @@ ГруппаКнопокРасширеннаяПодсказка - 40 + 42 Label true true @@ -704,7 +746,7 @@ ФормаВыполнитьСценарийРасширеннаяПодсказка - 42 + 44 Label true true @@ -779,45 +821,48 @@ СценарииОбменовДанными.Ссылка, СценарииОбменовДанными.ИспользоватьРегламентноеЗадание, СценарииОбменовДанными.Наименование, - ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользования, Ложь) КАК ФлагИспользования, - ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользованияЗагрузки, Ложь) КАК ФлагИспользованияЗагрузки, - ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользованияВыгрузки, Ложь) КАК ФлагИспользованияВыгрузки -ИЗ + ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользования, ЛОЖЬ) КАК ФлагИспользования, + ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользованияЗагрузки, ЛОЖЬ) КАК ФлагИспользованияЗагрузки, + ЕСТЬNULL(ВложенныйЗапрос.ФлагИспользованияВыгрузки, ЛОЖЬ) КАК ФлагИспользованияВыгрузки, + СценарииОбменовДанными.Комментарий +ИЗ Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными -ЛЕВОЕ СОЕДИНЕНИЕ - (ВЫБРАТЬ - СценарииОбменовДаннымиНастройкиОбмена.Ссылка, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование, - МАКСИМУМ(ВЫБОР КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - ТОГДА Истина - ИНАЧЕ Ложь - КОНЕЦ) КАК ФлагИспользования, - МАКСИМУМ(ВЫБОР КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - ТОГДА Истина - ИНАЧЕ Ложь - КОНЕЦ) КАК ФлагИспользованияЗагрузки, - МАКСИМУМ(ВЫБОР КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - ТОГДА Истина - ИНАЧЕ Ложь - КОНЕЦ) КАК ФлагИспользованияВыгрузки - ИЗ - Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - ГДЕ - НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления - СГРУППИРОВАТЬ ПО - СценарииОбменовДаннымиНастройкиОбмена.Ссылка, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание, - СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование - ) КАК ВложенныйЗапрос -ПО ВложенныйЗапрос.Ссылка = СценарииОбменовДанными.Ссылка + ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + СценарииОбменовДаннымиНастройкиОбмена.Ссылка КАК Ссылка, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование КАК Наименование, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользования, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользованияЗагрузки, + МАКСИМУМ(ВЫБОР + КОГДА СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + И СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ) КАК ФлагИспользованияВыгрузки + ИЗ + Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + ГДЕ + НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления + + СГРУППИРОВАТЬ ПО + СценарииОбменовДаннымиНастройкиОбмена.Ссылка, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ИспользоватьРегламентноеЗадание, + СценарииОбменовДаннымиНастройкиОбмена.Ссылка.Наименование) КАК ВложенныйЗапрос + ПО (ВложенныйЗапрос.Ссылка = СценарииОбменовДанными.Ссылка) ГДЕ НЕ СценарииОбменовДанными.ПометкаУдаления -УПОРЯДОЧИТЬ ПО - СценарииОбменовДанными.Наименование + Catalog.СценарииОбменовДанными + true true true true @@ -904,12 +949,12 @@ ВключитьОтключитьВыгрузку <key>ru</key> - <value>Включить/отключить выгрузку</value> + <value>Включить/отключить отправку данных</value> 5 ru - Включить/отключить выгрузку данных по выбранному сценарию + Включить/отключить отправку данных в другую базу true @@ -926,12 +971,12 @@ ВключитьОтключитьЗагрузку <key>ru</key> - <value>Включить/отключить загрузку</value> + <value>Включить/отключить получение данных</value> 6 ru - Включить/отключить загрузку данных по выбранному сценарию + Включить/отключить получение данных из другой базы true @@ -948,12 +993,12 @@ ВключитьОтключитьЗагрузкуВыгрузку <key>ru</key> - <value>Включить отключить загрузку выгрузку</value> + <value>Включить или отключить получение и отправку данных</value> 4 ru - Включить или отключить загрузку и выгрузку данных + Включить или отключить получение и отправку данных true diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 3c843250a..4292de159 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -11,7 +11,7 @@ Список.Параметры.Элементы[0].Значение = Параметры.УзелИнформационнойБазы; Список.Параметры.Элементы[0].Использование = Истина; - Заголовок = НСтр("ru = 'Настройка сценариев обменов данными для: [УзелИнформационнойБазы]'"); + Заголовок = НСтр("ru = 'Сценарии синхронизации данных для: [УзелИнформационнойБазы]'"); Заголовок = СтрЗаменить(Заголовок, "[УзелИнформационнойБазы]", Строка(Параметры.УзелИнформационнойБазы)); КонецПроцедуры @@ -63,7 +63,7 @@ ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", Параметры.УзелИнформационнойБазы); - ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -79,7 +79,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.Ссылка); - ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index d4822ecd7..264db8732 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -113,7 +113,7 @@ 24 <key>ru</key> - <value>Использовать расписание</value> + <value>Автоматически по расписанию:</value> true true @@ -205,7 +205,6 @@ UsualGroup - Vertical Auto true true @@ -479,6 +478,10 @@ НастройкиОбменаКоличествоЭлементовВТранзакции 118 + + <key>ru</key> + <value>Элементов в транзакции</value> + true true @@ -669,6 +672,7 @@ true true + 100 true true true @@ -761,8 +765,14 @@ Left true + + StartChoice + КомментарийНачалоВыбора + true + 2 true + true true true true diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 1c13f7511..cbaedf0cd 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -99,6 +99,14 @@ КонецПроцедуры +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, + Объект.Комментарий, Модифицированность); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиОбмена @@ -228,15 +236,14 @@ Процедура ВыполнитьОбменДаннымиНаКлиенте() Если НомерОбрабатываемойСтроки > КоличествоСтрок Тогда // выход из рекурсии - ВыводитьПрогрессор = (КоличествоСтрок > 1); - Состояние(НСтр("ru = 'Данные синхронизированы.'"), ?(ВыводитьПрогрессор, 100, Неопределено)); + ВыводитьСостояние = (КоличествоСтрок > 1); + Состояние(НСтр("ru = 'Данные синхронизированы.'"), ?(ВыводитьСостояние, 100, Неопределено)); Возврат; // выходим КонецЕсли; ТекущиеДанные = Объект.НастройкиОбмена[НомерОбрабатываемойСтроки - 1]; - // значение прогрессора - ВыводитьПрогрессор = (КоличествоСтрок > 1); + ВыводитьСостояние = (КоличествоСтрок > 1); СтрокаСообщения = НСтр("ru = 'Выполняется %1 для %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, @@ -244,7 +251,7 @@ Строка(ТекущиеДанные.УзелИнформационнойБазы)); // Прогресс = Окр(100 * (НомерОбрабатываемойСтроки -1) / ?(КоличествоСтрок = 0, 1, КоличествоСтрок)); - Состояние(СтрокаСообщения, ?(ВыводитьПрогрессор, Прогресс, Неопределено)); + Состояние(СтрокаСообщения, ?(ВыводитьСостояние, Прогресс, Неопределено)); // запускаем выполнение обмена по строке настройки ВыполнитьОбменДаннымиПоСтрокеНастройки(НомерОбрабатываемойСтроки); @@ -333,3 +340,4 @@ Возврат ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); КонецФункции + diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index a8cc50669..e4550c25e 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -9,8 +9,7 @@ Наименование = НСтр("ru = 'Автоматическая синхронизация данных с %1'"); Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Наименование, - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Наименование") - ); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Наименование")); ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); @@ -439,4 +438,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl index e66b80c3b..50c98e969 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl @@ -42,6 +42,16 @@ КонецПроцедуры +Процедура ПередУдалением(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УдалитьРегламентноеЗадание(Отказ); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -73,8 +83,4 @@ КонецПроцедуры - - - - -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo index 8b16864ec..34a01afc0 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo +++ b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo @@ -155,6 +155,7 @@ ru Краткое описание сценария. + true diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html index 60ef406a5..eb01d9315 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -1,3 +1,3 @@ - +

          Если сервер 1С:Предприятия 8.2 работает под Linux, то путь к тому
           хранения файлов можно указать только локальный, например /home/path.
           Чтобы использовать UNC путь, нужно сделать на него ссылку.  Для этого
           под правами администратора сделайте следующее:
           
           mkdir folder
            --- вместо folder напишите имя каталога. например в каталоге /home
           делаем mkdir shared - создаст каталог shared с полным путем  /home/shared.
           
           
           mount -t cifs //server/share folder -o //domain/user, password=pwd
             - где //server/share - UNC путь к другому компьютеру , folder - путь
           каталога на Linux компьютере, например \home\shared, //domain/user - имя
           домена/пользователя, если нужно, pwd - пароль пользователя (если
           нужно).
           Если имя и пароль не нужны, команда выглядит так:
           mount -t cifs //server/share folder

          После этого в пути к тому указываем folder, например /home/shared

          \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index ec26a105b..4e522c7e0 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

          Для каждого тома необходимо указать его наименование, порядок заполнения и UNC-путь к каталогу тома для сервера под управлением Microsoft Windows и/или путь к каталогу для сервера под управлением Linux.

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

          diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html b/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html deleted file mode 100644 index c501f7940..000000000 --- a/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html +++ /dev/null @@ -1,8 +0,0 @@ - -

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

          -

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

          -

          Новую валюту можно добавить в справочник:

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

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

          \ No newline at end of file diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl deleted file mode 100644 index dc862d04c..000000000 --- a/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl +++ /dev/null @@ -1,5 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - - - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo b/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo deleted file mode 100644 index 0239c199d..000000000 --- a/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - УдалитьКлассификаторВалют - - ru - (Не используется) Классификатор валют - - true - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code - DontUse - - Use - PredefinedDataName - - Use - - - - - Use - Predefined - - Use - - - - - Use - Ref - - Use - - - - - Use - DeletionMark - - Use - - - - - Use - IsFolder - - Use - - - - - Use - Owner - true - - ShowError - Use - - - - - Use - Parent - true - - Use - - - - - Use - Description - - ru - Код символьный - - - ru - Символьный код валюты по общероссийскому классификатору валют - - - ShowError - Use - - - - - Use - Code - - ru - Код числовой - - - ru - Числовой код валюты по общероссийскому классификатору валют - - - - - ShowError - Use - - - - DontUse - - - ru - - - Managed - Use - - ru - Валюта - - 2 - true - 3 - 10 - String - Variable - true - AsDescription - InDialog - true - BothWays - - НаименованиеПолное - - ru - Наименование валюты - - - String - - 50 - - - - ru - Полное наименование валюты - - - - ShowError - - Use - Use - - - ПараметрыПрописиНаРусском - - ru - Параметры прописи на русском - - - String - - 200 - - - - ru - Параметры прописи валюты на русском языке - - - - - Use - Use - - diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html index 8108ee6d5..8afe9c9cd 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

          • Общие
            • POP3 аутентификация - настройка аутентификации на сервере POP3 (сервер входящих сообщений)
          • Сервер исходящей почты - настройка аутентификации на сервере SMTP diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl index a26623b18..e2e2a2028 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl @@ -230,7 +230,7 @@ КонецФункции -// Процедура устанавливает видимость парметров аутентификации +// Процедура устанавливает видимость параметров аутентификации // для выбора способа аутентификации "ЗаданыПараметры". // &НаКлиенте diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 3aa73bea2..55c08899c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -855,6 +855,10 @@ + + AfterWrite + ПослеЗаписи + BeforeWriteAtServer ПередЗаписьюНаСервере diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index 44bd8cbef..fb618689d 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

            Сведения о пользователе:

          • имя - имя владельца учетной записи, например Иван Сергеевич
          • почтовый адрес - адрес электронной почты учетной записи в формате пользователь@почтовыйсервер
          • Сведения о сервере:

            diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index f02cdbabb..990500c99 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -37,11 +37,10 @@ КонецПроцедуры -// Обрабатывает оповещение, от формы настройки дополнительных свойств учетной записи, -// содержащее некоторые настройки учетной записи. -// &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + // Обрабатывает оповещение, от формы настройки дополнительных свойств учетной записи, + // содержащее некоторые настройки учетной записи. Если ИмяСобытия = "УстановкаДополнительныхПараметровУчетнойЗаписи" И Источник = Объект.Ссылка Тогда Объект.ВремяОжидания = Параметр.ДлительностьОжиданияСервера; @@ -68,6 +67,11 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_УчетныеЗаписиЭлектроннойПочты", ПараметрыЗаписи, Объект.Ссылка); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -91,9 +95,3 @@ ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ДополнительныеСвойстваУчетнойЗаписи", ПараметрыВызова); КонецПроцедуры - - - - - - diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 8e01bd308..22a24ee52 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            См. также:

            diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl index c274c1860..f1a7d956c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl @@ -3,12 +3,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ТекстВопроса = Параметры.ТекстВопроса; + Параметры.Свойство("ТекстВопроса", ТекстВопроса); КонецПроцедуры @@ -17,20 +16,20 @@ &НаКлиенте Процедура Вернуться(Команда) - Закрыть("Вернуться"); + ОповеститьОВыборе("Вернуться"); КонецПроцедуры &НаКлиенте Процедура НеСохранять(Команда) - Закрыть("НеСохранять"); + ОповеститьОВыборе("НеСохранять"); КонецПроцедуры &НаКлиенте Процедура СохранитьИЗакончитьРедактирование(Команда) - Закрыть("СохранитьИЗакончитьРедактирование"); + ОповеститьОВыборе("СохранитьИЗакончитьРедактирование"); КонецПроцедуры &НаКлиенте Процедура СохранитьИзменения(Команда) - Закрыть("СохранитьИзменения"); + ОповеститьОВыборе("СохранитьИзменения"); КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html index 182ab75c5..49dcf675f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html @@ -1 +1 @@ -Предельно допустимый размера файлов можно увеличить в настройках системы.  \ No newline at end of file +Предельно допустимый размера файлов можно увеличить в настройках системы.  \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form index 38dfebd49..60f6c5b25 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form @@ -255,7 +255,7 @@ ПриСозданииНаСервере
            25 - DontBlock + LockOwner true true true diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html index 0428f68db..fcf1dd331 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html @@ -1,4 +1,4 @@ - +

            + 1 + + + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузки + 12 + true + true + + true + + + СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойЗагрузки + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиКонтекстноеМеню + 13 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - СписокСостоянияУзлов.РезультатПоследнейЗагрузкиДанных - - None + + <key>ru</key> + <value>Группа состояния загрузки</value> + + + ru + Группа состояния загрузки + - СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхРасширеннаяПодсказка - 86 + ГруппаСостоянияЗагрузкиРасширеннаяПодсказка + 93 Label true true @@ -163,34 +254,16 @@ Left - - СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхКонтекстноеМеню - 9 - true - - PictureField - Auto - true - Left - true - - true - true - true - true - - CommonPicture.СостояниеОбменаДанными - - - - 1 - + ColumnGroup + + InCell + auto + true СписокСостоянияУзловДатаПоследнейЗагрузки 14 - true true true @@ -200,7 +273,7 @@ СписокСостоянияУзловДатаПоследнейЗагрузкиРасширеннаяПодсказка - 88 + 98 Label true true @@ -233,17 +306,10 @@ true - - <key>ru</key> - <value>Группа состояния загрузки</value> - - - ru - Группа состояния загрузки - + true - ГруппаСостоянияЗагрузкиРасширеннаяПодсказка - 85 + ГруппаЗагрузкиРасширеннаяПодсказка + 92 Label true true @@ -253,69 +319,120 @@ ColumnGroup - InCell + Vertical auto true - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузки - 12 - true - - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойЗагрузки - - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка - 90 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиКонтекстноеМеню - 13 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - ГруппаСостоянияВыгрузки - 19 - - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанных - 6 + ГруппаВыгрузки + 51 + + ГруппаСостоянияВыгрузки + 19 + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанных + 6 + true + true + + true + + + СписокСостоянияУзлов.РезультатПоследнейВыгрузкиДанных + + None + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхКонтекстноеМеню + 7 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СостояниеОбменаДанными + + + + 1 + + + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузки + 4 + true + true + + true + + + СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойВыгрузки + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true - - СписокСостоянияУзлов.РезультатПоследнейВыгрузкиДанных - - None + + <key>ru</key> + <value>Группа состояния выгрузки</value> + + + ru + Группа состояния выгрузки + - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка - 93 + ГруппаСостоянияВыгрузкиРасширеннаяПодсказка + 101 Label true true @@ -323,34 +440,16 @@ Left - - СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхКонтекстноеМеню - 7 - true - - PictureField - Auto - true - Left - true - - true - true - true - true - - CommonPicture.СостояниеОбменаДанными - - - - 1 - + ColumnGroup + + InCell + auto + true СписокСостоянияУзловДатаПоследнейВыгрузки 16 - true true true @@ -360,7 +459,7 @@ СписокСостоянияУзловДатаПоследнейВыгрузкиРасширеннаяПодсказка - 95 + 106 Label true true @@ -393,17 +492,10 @@ true - - <key>ru</key> - <value>Группа состояния выгрузки</value> - - - ru - Группа состояния выгрузки - + true - ГруппаСостоянияВыгрузкиРасширеннаяПодсказка - 92 + ГруппаВыгрузкиРасширеннаяПодсказка + 100 Label true true @@ -413,133 +505,14 @@ ColumnGroup - InCell + Vertical auto true - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузки - 4 - true - - true - - - СписокСостоянияУзлов.ПредставлениеДатыПоследнейУспешнойВыгрузки - - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка - 97 - Label - true - true - - Left - - - - СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиКонтекстноеМеню - 5 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - СписокСостоянияУзловКоманднаяПанель 3 - - СписокСостоянияУзловПодключитьКонечнуюТочку - 22 - true - true - - true - - - СписокСостоянияУзловПодключитьКонечнуюТочкуРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - Form.Command.ПодключитьКонечнуюТочку - Normal - Auto - true - true - UserCmds - Auto - - - СписокСостоянияУзловНастроитьПодписки - 47 - true - true - - true - - - СписокСостоянияУзловНастроитьПодпискиРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - Form.Command.НастроитьПодписки - Normal - Auto - true - true - UserCmds - Auto - - - СписокСостоянияУзловИзменитьКонечнуюТочку - 31 - true - true - - true - - - СписокСостоянияУзловИзменитьКонечнуюТочкуРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - Form.Command.ИзменитьКонечнуюТочку - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - СписокСостоянияУзловОтправитьИПолучитьСообщенияСейчас 30 @@ -553,7 +526,7 @@ СписокСостоянияУзловОтправитьИПолучитьСообщенияРасширеннаяПодсказка - 59 + 62 Label true true @@ -580,182 +553,7 @@ СписокСостоянияУзловОтправитьИПолучитьСообщенияСейчасРасширеннаяПодсказка - 58 - Label - true - true - - Left - - - - - - СписокСостоянияУзловГруппа1 - 27 - - СписокСостоянияУзловНайти - 23 - true - true - - true - - - СписокСостоянияУзловНайтиРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловОтменитьПоиск - 24 - true - true - - true - - - СписокСостоянияУзловОтменитьПоискРасширеннаяПодсказка - 62 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловВывестиСписок - 25 - true - true - - true - - - СписокСостоянияУзловВывестиСписокРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловКопироватьВБуферОбмена - 26 - true - true - - true - - - СписокСостоянияУзловКопироватьВБуферОбменаРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - СписокСостоянияУзловГруппа1РасширеннаяПодсказка - 60 - Label - true - true - - Left - - - - - - СписокСостоянияУзловГруппа2 - 28 - - СписокСостоянияУзловОбновитьМонитор - 20 - true - true - - true - - - СписокСостоянияУзловОбновитьМониторРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - Form.Command.ОбновитьМонитор - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - СписокСостоянияУзловГруппа2РасширеннаяПодсказка - 65 + 61 Label true true @@ -778,7 +576,7 @@ СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемыРасширеннаяПодсказка - 68 + 64 Label true true @@ -804,7 +602,7 @@ СписокСостоянияУзловНастроитьРасписаниеОтправкиИПолученияСообщенийСистемыРасширеннаяПодсказка - 69 + 65 Label true true @@ -831,7 +629,7 @@ СписокСостоянияУзловРасписаниеОтправкиИПолученияРасширеннаяПодсказка - 67 + 63 Label true true @@ -848,6 +646,287 @@ Normal + + СписокСостоянияУзловПодключитьКонечнуюТочку + 22 + true + true + + true + + + СписокСостоянияУзловПодключитьКонечнуюТочкуРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ПодключитьКонечнуюТочку + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловИзменитьКонечнуюТочку + 31 + true + true + + true + + + СписокСостоянияУзловИзменитьКонечнуюТочкуРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.ИзменитьКонечнуюТочку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловГруппа2 + 28 + + СписокСостоянияУзловОбновитьМонитор + 20 + true + true + + true + + + СписокСостоянияУзловОбновитьМониторРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.ОбновитьМонитор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа2РасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + + + СписокСостоянияУзловНастроитьПодписки + 47 + true + true + + true + + + СписокСостоянияУзловНастроитьПодпискиРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.Command.НастроитьПодписки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловГруппа1 + 27 + + СписокСостоянияУзловНайти + 23 + true + true + + true + + + СписокСостоянияУзловНайтиРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловОтменитьПоиск + 24 + true + true + + true + + + СписокСостоянияУзловОтменитьПоискРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловВывестиСписок + 25 + true + true + + true + + + СписокСостоянияУзловВывестиСписокРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловКопироватьВБуферОбмена + 26 + true + true + + true + + + СписокСостоянияУзловКопироватьВБуферОбменаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа1РасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + + + СписокСостоянияУзловПодробно + 53 + true + true + + true + + + СписокСостоянияУзловПодробноРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + Form.Command.Подробно + Normal + Auto + true + true + UserCmds + Auto + Left @@ -856,10 +935,10 @@ СписокСостоянияУзловСтрокаПоиска - 71 + 78 СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка - 73 + 80 Label true true @@ -869,7 +948,7 @@ СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню - 72 + 79 true СписокСостоянияУзлов @@ -879,10 +958,10 @@ СписокСостоянияУзловСостояниеПросмотра - 74 + 81 СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка - 76 + 83 Label true true @@ -892,7 +971,7 @@ СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню - 75 + 82 true ViewStatusAddition @@ -903,10 +982,10 @@ СписокСостоянияУзловУправлениеПоиском - 77 + 84 СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка - 79 + 86 Label true true @@ -916,7 +995,7 @@ СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню - 78 + 85 true SearchControlAddition @@ -927,7 +1006,7 @@ СписокСостоянияУзловРасширеннаяПодсказка - 70 + 77 Label true true @@ -948,7 +1027,7 @@ СписокСостоянияУзловКонтекстноеМенюИзменитьКонечнуюТочкуРасширеннаяПодсказка - 48 + 54 Label true true @@ -977,7 +1056,7 @@ СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 50 + 56 Label true true @@ -1003,7 +1082,7 @@ СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 51 + 57 Label true true @@ -1026,7 +1105,7 @@ СписокСостоянияУзловКонтекстноеМенюГруппа2РасширеннаяПодсказка - 49 + 55 Label true true @@ -1049,7 +1128,7 @@ СписокСостоянияУзловКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 53 + 59 Label true true @@ -1075,7 +1154,7 @@ СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 54 + 60 Label true true @@ -1098,7 +1177,7 @@ СписокСостоянияУзловКонтекстноеМенюГруппа1РасширеннаяПодсказка - 52 + 58 Label true true @@ -1626,6 +1705,28 @@ Auto Auto + + Подробно + + <key>ru</key> + <value>Подробно</value> + + 10 + + ru + Показать подробную информацию + + + true + + + + Подробно + + + Auto + Auto + diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl index 684a802e8..e2ad7de8f 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -12,8 +12,7 @@ И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Настройка подсистемы в разделенном режиме не поддерживается.'"),,,, Отказ - ); + НСтр("ru = 'Настройка подсистемы в разделенном режиме не поддерживается.'"),,,, Отказ); Возврат; КонецЕсли; @@ -142,6 +141,13 @@ КонецПроцедуры +&НаКлиенте +Процедура Подробно(Команда) + + ПодробноНаСервере(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -166,8 +172,7 @@ УстановитьПривилегированныйРежим(Истина); Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( - Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы - ); + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); КонецФункции @@ -259,3 +264,12 @@ КонецПроцедуры +&НаСервере +Процедура ПодробноНаСервере() + + Элементы.СписокСостоянияУзловПодробно.Пометка = Не Элементы.СписокСостоянияУзловПодробно.Пометка; + + Элементы.СписокСостоянияУзловДатаПоследнейЗагрузки.Видимость = Элементы.СписокСостоянияУзловПодробно.Пометка; + Элементы.СписокСостоянияУзловДатаПоследнейВыгрузки.Видимость = Элементы.СписокСостоянияУзловПодробно.Пометка; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form index bda1f8ed6..d0e7dc2b9 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form +++ b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Form.form @@ -507,6 +507,10 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -515,7 +519,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html index bc25cc5b0..f28e52b36 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl index ce726d8a8..130e2341a 100644 --- a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Module.bsl @@ -26,6 +26,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Файлы.Форма.СписокФайловВЛокальномКэшеФайлов") Тогда + + РабочийКаталогПользователяВФорме = РабочийКаталогПользователя; + ОбновитьПараметры(); + РабочийКаталогПользователя = РабочийКаталогПользователяВФорме; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -59,10 +72,7 @@ &НаКлиенте Процедура СписокФайловВыполнить() - ОткрытьФормуМодально("Справочник.Файлы.Форма.СписокФайловВЛокальномКэшеФайлов"); - РабочийКаталогПользователяВФорме = РабочийКаталогПользователя; - ОбновитьПараметры(); - РабочийКаталогПользователя = РабочийКаталогПользователяВФорме; + ОткрытьФорму("Справочник.Файлы.Форма.СписокФайловВЛокальномКэшеФайлов", , ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -227,4 +237,3 @@ ОбновитьПараметрыНаКлиенте(); КонецПроцедуры - diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html index 166735e9e..66f55af97 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Описание услуги «Корпоративные SMS-сервисы» (Билайн)
            Описание услуги «МТС Коммуникатор» (МТС)

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

            diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo deleted file mode 100644 index b52314b13..000000000 --- a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - НастройкиРезервногоКопированияПриложений - - ru - Настройки резервного копирования приложений - - PersonalComputer - MobileDevice - true - diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html b/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html index 0933fa082..bff33620e 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

            В форме выполняется настройка параметров для использования средств криптографии: электронной цифровой подписи (ЭЦП) и шифрования.
            Для работы с криптографией вам потребуется установить стороннюю программу - криптопровайдер.

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

            diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl index d39c8f415..ec3c5d57d 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl @@ -61,8 +61,7 @@ НСтр("ru = 'Не удалось подключить провайдера ЭЦП. |Укажите Провайдера и его Тип согласно инструкции фирмы-производителя криптопровайдера.'"), , - "ТипПровайдераЭЦП" - ); + "ТипПровайдераЭЦП"); КонецЕсли; ИсключаемыеРеквизиты = Новый Массив; @@ -195,7 +194,12 @@ ДобавитьМенеджераКриптографииВСписок("", "", 75); Если Элементы.ПровайдерЭЦП.СписокВыбора.Количество() = 0 Тогда - Элементы.ПровайдерЭЦП.КнопкаСпискаВыбора = Ложь; + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяКнопки = "КнопкаВыпадающегоСписка"; + Иначе + ИмяКнопки = "КнопкаСпискаВыбора"; + КонецЕсли; + Элементы.ПровайдерЭЦП[ИмяКнопки] = Ложь; Элементы.ПровайдерЭЦП.КнопкаОчистки = Ложь; КонецЕсли; @@ -300,8 +304,7 @@ ПредставлениеОшибки ), , - "ТипПровайдераЭЦП" - ); + "ТипПровайдераЭЦП"); КонецЕсли; КонецПопытки; @@ -326,8 +329,7 @@ ИмяМодуляКриптографии, ПутьМодуляКриптографии, ТипМодуляКриптографии, - Ложь - ); + Ложь); КонецПроцедуры diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form deleted file mode 100644 index b314b07e8..000000000 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form +++ /dev/null @@ -1,478 +0,0 @@ - - - - ГруппаПредупреждение - 15 - - КартинкаПредупреждение - 16 - - <key>ru</key> - <value>Картинка предупреждение</value> - - true - true - - true - - - КартинкаПредупреждениеРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - КартинкаПредупреждениеКонтекстноеМеню - 17 - true - - 5 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - - - ГруппаТекст - 18 - - ГруппаВерсия - 21 - - Версия - 19 - - <key>ru</key> - <value>Для работы с программой требуется версия платформы 1С:Предприятие не менее: -Используемая сейчас версия: %1</value> - - true - true - - true - - - ВерсияРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ВерсияКонтекстноеМеню - 20 - true - - Label - true - 2 - true - false - false - - Left - Top - - - - РекомендуемаяВерсияПлатформы - 22 - - <key>ru</key> - <value>номер версии</value> - - true - true - - true - - - РекомендуемаяВерсияПлатформыРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - - РекомендуемаяВерсияПлатформыКонтекстноеМеню - 23 - true - - Label - true - true - true - false - - System.DefaultGUIFont - true - false - false - false - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Группа версия</value> - - - ГруппаВерсияРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ТекстСообщения - 13 - - <key>ru</key> - <value>Текст сообщения</value> - - true - true - - true - - - ТекстСообщенияРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - ТекстСообщенияКонтекстноеМеню - 14 - true - - Label - true - 6 - true - true - true - - Left - Top - - - - ТекстСсылки - 11 - - <key>ru</key> - <value>Загрузить последнюю версию платформы 1С:Предприятие из Интернета</value> - - true - true - - true - - - ru - http://users.v8.1c.ru/project.jsp?id=Platform82 - - - ТекстСсылкиРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - ТекстСсылкиКонтекстноеМеню - 12 - true - - Label - true - true - - - Click - ТекстСсылкиНажатие - - true - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа текст</value> - - - ГруппаТекстРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа предупреждение</value> - - - ГруппаПредупреждениеРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаЗавершитьРаботу - 9 - true - true - - true - - - ФормаЗавершитьРаботуРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - Form.Command.ЗавершитьРаботу - Auto - true - true - true - UserCmds - Auto - - - ФормаНет - 8 - true - true - - true - - - ФормаНетРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - Form.Command.Продолжить - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - 75 - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Ссылка - - <key>ru</key> - <value>Ссылка</value> - - 2 - - String - - - - true - - - true - - - - ТекстСообщения - - <key>ru</key> - <value>Текст сообщения</value> - - 3 - - String - - - - true - - - true - - - - Продолжить - - <key>ru</key> - <value>Продолжить</value> - - 2 - - ru - Продолжить работу - - - true - - - - ПродолжитьРаботу - - - Auto - Auto - - - ЗавершитьРаботу - - <key>ru</key> - <value>Завершить работу</value> - - 3 - - ru - Завершить работу - - - true - - - - ЗавершитьРаботу - - - Auto - Auto - - - ТекстСообщения - - String - - - - - ЗавершитьРаботу - - Boolean - - true - - - РекомендуемаяВерсияПлатформы - - String - - - - - - - - diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl deleted file mode 100644 index 78cf958af..000000000 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ /dev/null @@ -1,49 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; - Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Параметры.РекомендуемаяВерсияПлатформы; - СистемнаяИнформация = Новый СистемнаяИнформация; - Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Элементы.Версия.Заголовок, СистемнаяИнформация.ВерсияПриложения); - Если Параметры.ЗавершитьРаботу Тогда - Элементы.ФормаНет.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура ТекстСсылкиНажатие(Элемент) - СтандартнаяОбработка = Ложь; - ЗапуститьПриложение(Элементы.ТекстСсылки.Подсказка); -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ПродолжитьРаботу(Команда) - - Закрыть(КодВозвратаДиалога.Отмена); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершитьРаботу(Команда) - - Закрыть(КодВозвратаДиалога.ОК); - -КонецПроцедуры - diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo deleted file mode 100644 index eed8592d1..000000000 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - НерекомендуемаяВерсияПлатформы - - ru - Нерекомендуемая версия платформы - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/ОбменыДанными/Form.form b/SSL/src/CommonForms/ОбменыДанными/Form.form index e4090373d..4b6bb61cd 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Form.form +++ b/SSL/src/CommonForms/ОбменыДанными/Form.form @@ -23,7 +23,7 @@ Декорация2РасширеннаяПодсказка - 363 + 381 Label true true @@ -49,22 +49,139 @@ Группа10 200 - - Декорация1 - 158 - - <key>ru</key> - <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то нажмите на кнопку "Настроить синхронизацию данных". + <items xsi:type="form:FormGroup"> + <name>ИнформационнаяНадпись</name> + <id>368</id> + <items xsi:type="form:FormGroup"> + <name>ЕстьПраваНаСинхронизацию</name> + <id>369</id> + <items xsi:type="form:Decoration"> + <name>ИнформацияОСинхронизацииЕстьПрава</name> + <id>158</id> + <title> + <key>ru</key> + <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то нажмите на кнопку "Настроить синхронизацию данных". Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> - + + true + true + + true + + + ИнформацияОСинхронизацииЕстьПраваРасширеннаяПодсказка + 385 + Label + true + true + + Left + + + + ИнформацияОСинхронизацииЕстьПраваКонтекстноеМеню + 159 + true + + Label + 75 + true + 3 + true + + Left + + + true + true + + true + + + ЕстьПраваНаСинхронизациюРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НетПравНаСинхронизацию + 370 + + ИнформацияОСинхронизацииНетПрав + 371 + + <key>ru</key> + <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то обратитесь к администратору информационной базы. +Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> + + true + true + + true + + + ИнформацияОСинхронизацииНетПравРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + + ИнформацияОСинхронизацииНетПравКонтекстноеМеню + 372 + true + + Label + 75 + true + 3 + true + + Left + + + true + true + + true + + + НетПравНаСинхронизациюРасширеннаяПодсказка + 386 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true true - Декорация1РасширеннаяПодсказка - 365 + ИнформационнаяНадписьРасширеннаяПодсказка + 383 Label true true @@ -72,18 +189,9 @@ Left - - Декорация1КонтекстноеМеню - 159 - true - - Label - 75 - true - 3 - true - - Left + Pages + + Auto @@ -96,7 +204,7 @@ НастроитьСинхронизациюДанныхНеНастроенаРасширеннаяПодсказка - 366 + 388 Label true true @@ -123,7 +231,7 @@ Декорация3РасширеннаяПодсказка - 367 + 389 Label true true @@ -168,7 +276,7 @@ ПрефиксСинхронизацияНеНастроенаРасширеннаяПодсказка - 368 + 390 Label true true @@ -204,7 +312,7 @@ Группа10РасширеннаяПодсказка - 364 + 382 Label true true @@ -229,7 +337,7 @@ Группа1РасширеннаяПодсказка - 362 + 380 Label true true @@ -252,17 +360,9 @@ true - - <key>ru</key> - <value>Синхронизация не настроена</value> - - - ru - Синхронизация не настроена - СинхронизацияНеНастроенаРасширеннаяПодсказка - 361 + 379 Label true true @@ -302,7 +402,7 @@ КартинкаПредупреждение1РасширеннаяПодсказка - 374 + 396 Label true true @@ -345,7 +445,7 @@ НадписьОбменДаннымиПриостановленЕстьПравоОбновления1РасширеннаяПодсказка - 377 + 399 Label true true @@ -376,7 +476,7 @@ УстановитьОбновление1РасширеннаяПодсказка - 378 + 400 Label true true @@ -408,7 +508,7 @@ ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления1РасширеннаяПодсказка - 376 + 398 Label true true @@ -440,7 +540,7 @@ НадписьОбменДаннымиПриостановленНетПраваОбновления1РасширеннаяПодсказка - 380 + 402 Label true true @@ -478,7 +578,7 @@ ИнформацияОбменДаннымиПриостановленНетПраваОбновления1РасширеннаяПодсказка - 379 + 401 Label true true @@ -507,7 +607,7 @@ ПравоОбновленияСтраницыРасширеннаяПодсказка - 375 + 397 Label true true @@ -533,9 +633,11 @@ ru Информационная панель требуется обновление + 45 + false ИнформационнаяПанельТребуетсяОбновление1РасширеннаяПодсказка - 373 + 395 Label true true @@ -572,7 +674,7 @@ ДекорацияСтатусЗагрузкиРасширеннаяПодсказка - 383 + 405 Label true true @@ -605,7 +707,7 @@ ДекорацияСтатусПустойРасширеннаяПодсказка - 384 + 406 Label true true @@ -641,7 +743,7 @@ ДекорацияСтатусВыгрузкиРасширеннаяПодсказка - 385 + 407 Label true true @@ -671,7 +773,7 @@ Группа12РасширеннаяПодсказка - 382 + 404 Label true true @@ -706,7 +808,7 @@ ДекорацияУспешнаяЗагрузкаРасширеннаяПодсказка - 387 + 409 Label true true @@ -740,7 +842,7 @@ ДекорацияУспешнаяВыгрузкаРасширеннаяПодсказка - 388 + 410 Label true true @@ -767,7 +869,7 @@ Группа16РасширеннаяПодсказка - 386 + 408 Label true true @@ -786,14 +888,14 @@ - Группа2 - 345 - + ГруппаПолноправныйПользователь + 277 + ДатаУспешнойЗагрузки - 266 + 283 <key>ru</key> - <value><ДатаПолучения></value> + <value><Дата получения></value> true true @@ -802,109 +904,7 @@ ДатаУспешнойЗагрузкиРасширеннаяПодсказка - 390 - Label - true - true - - Left - - - - ДатаУспешнойЗагрузкиКонтекстноеМеню - 267 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - - ДатаУспешнойВыгрузки - 264 - - <key>ru</key> - <value><ДатаОтправки></value> - - true - true - - true - - - ДатаУспешнойВыгрузкиРасширеннаяПодсказка - 391 - Label - true - true - - Left - - - - ДатаУспешнойВыгрузкиКонтекстноеМеню - 265 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - Группа2РасширеннаяПодсказка - 389 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Группа15 - 277 - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 283 - - <key>ru</key> - <value>Подробно...</value> - - true - true - - true - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 393 + 412 Label true true @@ -922,11 +922,11 @@ Auto - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + ДатаУспешнойВыгрузки 282 <key>ru</key> - <value>Подробно...</value> + <value><Дата отправки></value> true true @@ -934,8 +934,8 @@ true - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 394 + ДатаУспешнойВыгрузкиРасширеннаяПодсказка + 413 Label true true @@ -957,9 +957,111 @@ true + + <key>ru</key> + <value>Группа полноправный пользователь</value> + + + ru + Группа полноправный пользователь + - Группа15РасширеннаяПодсказка - 392 + ГруппаПолноправныйПользовательРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНеполноправныйПользователь + 373 + + НадписьДатаПолучения + 374 + true + true + + true + + + НадписьДатаПолученияРасширеннаяПодсказка + 415 + Label + true + true + + Left + + + + НадписьДатаПолученияКонтекстноеМеню + 375 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + НадписьДатаОтправки + 376 + true + true + + true + + + НадписьДатаОтправкиРасширеннаяПодсказка + 416 + Label + true + true + + Left + + + + НадписьДатаОтправкиКонтекстноеМеню + 377 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + ГруппаНеполноправныйПользовательРасширеннаяПодсказка + 414 Label true true @@ -984,7 +1086,7 @@ Группа5РасширеннаяПодсказка - 381 + 403 Label true true @@ -1014,7 +1116,7 @@ ВыполнитьОбменДанными2РасширеннаяПодсказка - 396 + 418 Label true true @@ -1041,7 +1143,7 @@ ВыполнитьОбменДаннымиИнтерактивно2РасширеннаяПодсказка - 397 + 419 Label true true @@ -1069,7 +1171,7 @@ ОткрытьРезультатыОднаСинхронизацияРасширеннаяПодсказка - 398 + 420 Label true true @@ -1078,15 +1180,12 @@ Hyperlink - Form.Command.ОткрытьРезультатыОднаСинхронизация + Form.Command.ОткрытьРезультатыСинхронизацииДанных Normal Auto true true UserCmds - - CommonPicture.Предупреждение - Auto true @@ -1096,7 +1195,7 @@ Группа4РасширеннаяПодсказка - 395 + 417 Label true true @@ -1118,11 +1217,10 @@ true - 48 - false + 45 Группа3РасширеннаяПодсказка - 372 + 394 Label true true @@ -1142,7 +1240,7 @@ - Группа7 + ГруппаНастройкиСинхронизации 260 Группа18 @@ -1161,7 +1259,7 @@ Декорация5РасширеннаяПодсказка - 401 + 423 Label true true @@ -1196,7 +1294,7 @@ ИзменитьУзелИнформационнойБазыРасширеннаяПодсказка - 402 + 424 Label true true @@ -1213,6 +1311,34 @@ UserCmds Auto + + СоставОтправляемыхДанных + 363 + true + true + + true + + + СоставОтправляемыхДанныхРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + UsualButton + Form.Command.СоставОтправляемыхДанных + Normal + Picture + 3 + true + true + UserCmds + Auto + true true @@ -1220,7 +1346,7 @@ Группа18РасширеннаяПодсказка - 400 + 422 Label true true @@ -1251,7 +1377,7 @@ None ОписаниеПравилСинхронизацииДанныхРасширеннаяПодсказка - 403 + 426 Label true true @@ -1289,8 +1415,8 @@ true - Группа7РасширеннаяПодсказка - 399 + ГруппаНастройкиСинхронизацииРасширеннаяПодсказка + 421 Label true true @@ -1310,7 +1436,7 @@ - Группа6 + ГруппаСценарииСинхронизации 257 Группа19 @@ -1329,7 +1455,7 @@ РасписаниеСинхронизацииДанныхДекорацияРасширеннаяПодсказка - 407 + 430 Label true true @@ -1364,7 +1490,7 @@ НастроитьСценарииОбменаДаннымиРасширеннаяПодсказка - 408 + 431 Label true true @@ -1392,7 +1518,7 @@ Группа19РасширеннаяПодсказка - 406 + 429 Label true true @@ -1423,7 +1549,7 @@ None РасписаниеСинхронизацииДанныхРасширеннаяПодсказка - 409 + 432 Label true true @@ -1460,8 +1586,8 @@ true - Группа6РасширеннаяПодсказка - 405 + ГруппаСценарииСинхронизацииРасширеннаяПодсказка + 428 Label true true @@ -1490,7 +1616,7 @@ ИнформацияПоОбменуРасширеннаяПодсказка - 411 + 434 Label true true @@ -1530,7 +1656,7 @@ ПрефиксОднаСинхронизацияРасширеннаяПодсказка - 412 + 435 Label true true @@ -1559,6 +1685,33 @@ Normal + + УдалитьНастройкуСинхронизации + 365 + true + true + + true + + + УдалитьНастройкуСинхронизацииРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + UsualButton + Form.Command.УдалитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1572,12 +1725,12 @@ ru Синхронизация - 48 + 45 false false СинхронизацияРасширеннаяПодсказка - 371 + 393 Label true true @@ -1606,7 +1759,7 @@ Декорация4РасширеннаяПодсказка - 414 + 438 Label true true @@ -1627,7 +1780,7 @@ - Группа20 + ГруппаНастройкаСинхронизации 303 НастроитьСинхронизациюДанныхОдна @@ -1639,7 +1792,7 @@ НастроитьСинхронизациюДанныхОднаРасширеннаяПодсказка - 416 + 440 Label true true @@ -1670,7 +1823,7 @@ Декорация10РасширеннаяПодсказка - 417 + 441 Label true true @@ -1696,8 +1849,8 @@ true - Группа20РасширеннаяПодсказка - 415 + ГруппаНастройкаСинхронизацииРасширеннаяПодсказка + 439 Label true true @@ -1720,18 +1873,10 @@ true - - <key>ru</key> - <value>Одна синхронизация</value> - - - ru - Одна синхронизация - false ОднаСинхронизацияРасширеннаяПодсказка - 370 + 392 Label true true @@ -1765,7 +1910,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка - 420 + 444 Label true true @@ -1806,7 +1951,7 @@ НадписьОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка - 422 + 446 Label true true @@ -1841,7 +1986,7 @@ ИнформацияОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка - 421 + 445 Label true true @@ -1876,7 +2021,7 @@ НадписьОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка - 424 + 448 Label true true @@ -1907,7 +2052,7 @@ УстановитьОбновлениеРасширеннаяПодсказка - 425 + 449 Label true true @@ -1939,7 +2084,7 @@ ИнформацияОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка - 423 + 447 Label true true @@ -1972,7 +2117,7 @@ ИнформационнаяПанельТребуетсяОбновлениеРасширеннаяПодсказка - 419 + 443 Label true true @@ -1993,20 +2138,16 @@ ГруппаРезультатовСинхронизацииДанных 348 - ОбщаяКомандаОткрытьПроблемыСинхронизацииДанных - 349 - - <key>ru</key> - <value>Проблемы: <Количество></value> - + ОткрытьРезультатыСинхронизацииДанных + 367 true true true - ОбщаяКомандаОткрытьПроблемыСинхронизацииДанныхРасширеннаяПодсказка - 427 + ОткрытьРезультатыСинхронизацииДанныхРасширеннаяПодсказка + 451 Label true true @@ -2015,7 +2156,7 @@ Hyperlink - CommonCommand.ОткрытьРезультатыОбменаДанными + Form.Command.ОткрытьРезультатыСинхронизацииДанных Normal Auto true @@ -2026,60 +2167,6 @@ Auto - - ОткрытьКоллизии - 357 - true - true - - true - - - ОткрытьКоллизииРасширеннаяПодсказка - 428 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьКоллизии - Normal - Auto - true - true - UserCmds - Auto - - - ОткрытьНепринятые - 358 - true - true - - true - - - ОткрытьНепринятыеРасширеннаяПодсказка - 429 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьНепринятые - Normal - Auto - true - true - UserCmds - Auto - true true @@ -2095,7 +2182,7 @@ ГруппаРезультатовСинхронизацииДанныхРасширеннаяПодсказка - 426 + 450 Label true true @@ -2136,7 +2223,7 @@ ПодменюПрочееРасширеннаяПодсказка - 432 + 454 Label true true @@ -2164,7 +2251,7 @@ ПодменюРИБРасширеннаяПодсказка - 433 + 455 Label true true @@ -2189,7 +2276,7 @@ ПодменюСоздатьРасширеннаяПодсказка - 431 + 453 Label true true @@ -2217,7 +2304,7 @@ false ВыполнитьОбменДаннымиРасширеннаяПодсказка - 434 + 456 Label true true @@ -2244,7 +2331,7 @@ ВыполнитьОбменДаннымиИнтерактивноРасширеннаяПодсказка - 435 + 457 Label true true @@ -2260,51 +2347,25 @@ UserCmds Auto - - СписокСостоянияУзловИзменитьУзелИнформационнойБазы - 53 - true - true - - true - - true - Role.НастройкаСинхронизацииДанных - - - false - - СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка - 436 - Label - true - true - - Left - - - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - Picture - true - true - UserCmds - Auto - - СписокСостоянияУзловГруппа2 - 340 + СписокСостоянияУзловГруппа3 + 361 - СписокСостоянияУзловНайти - 341 + СписокСостоянияУзловИзменитьУзелИнформационнойБазы + 53 true true true + + true + Role.НастройкаСинхронизацииДанных + + false - СписокСостоянияУзловНайтиРасширеннаяПодсказка - 438 + СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка + 459 Label true true @@ -2312,7 +2373,33 @@ Left - Form.Item.СписокСостоянияУзлов.StandardCommand.Find + Form.Command.ИзменитьУзелИнформационнойБазы + Normal + Picture + true + true + UserCmds + Auto + + + СписокСостоянияУзловСоставОтправляемыхДанных + 360 + true + true + + true + + + СписокСостоянияУзловСоставОтправляемыхДанныхРасширеннаяПодсказка + 460 + Label + true + true + + Left + + + Form.Command.СоставОтправляемыхДанных Normal Auto true @@ -2321,67 +2408,14 @@ Auto InAdditionalSubmenu - - СписокСостоянияУзловОтменитьПоиск - 342 - true - true - - true - - - СписокСостоянияУзловОтменитьПоискРасширеннаяПодсказка - 439 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловСкрыватьУспешные - 320 - true - true - - true - - - СписокСостоянияУзловСкрыватьУспешныеРасширеннаяПодсказка - 440 - Label - true - true - - Left - - - Form.Command.СкрытьУспешные - Normal - Auto - true - true - UserCmds - Auto - true true true - СписокСостоянияУзловГруппа2РасширеннаяПодсказка - 437 + СписокСостоянияУзловГруппа3РасширеннаяПодсказка + 458 Label true true @@ -2404,7 +2438,7 @@ СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 442 + 462 Label true true @@ -2431,7 +2465,7 @@ СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 443 + 463 Label true true @@ -2448,33 +2482,6 @@ Auto InAdditionalSubmenu - - НастроитьРасписаниеВыполненияОбмена - 102 - true - true - - true - - - НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка - 444 - Label - true - true - - Left - - - Form.Command.НастроитьСценарииОбменаДанными - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -2490,7 +2497,108 @@ НастройкаРасширеннаяПодсказка - 441 + 461 + Label + true + true + + Left + + + + + + НастроитьРасписаниеВыполненияОбмена + 102 + true + true + + true + + + НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка + 464 + Label + true + true + + Left + + + Form.Command.НастроитьСценарииОбменаДанными + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловГруппа2 + 340 + + СписокСостоянияУзловНайти + 341 + true + true + + true + + + СписокСостоянияУзловНайтиРасширеннаяПодсказка + 466 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловОтменитьПоиск + 342 + true + true + + true + + + СписокСостоянияУзловОтменитьПоискРасширеннаяПодсказка + 467 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа2РасширеннаяПодсказка + 465 Label true true @@ -2514,7 +2622,7 @@ false ОбновитьМониторРасширеннаяПодсказка - 446 + 469 Label true true @@ -2531,6 +2639,32 @@ Auto InAdditionalSubmenu + + СписокСостоянияУзловСкрыватьУспешные + 320 + true + true + + true + + + СписокСостоянияУзловСкрыватьУспешныеРасширеннаяПодсказка + 470 + Label + true + true + + Left + + + Form.Command.СкрытьУспешные + Normal + Auto + true + true + UserCmds + Auto + ФормаВывестиСписок 115 @@ -2541,7 +2675,7 @@ ФормаВывестиСписокРасширеннаяПодсказка - 447 + 471 Label true true @@ -2567,7 +2701,7 @@ ФормаИзменитьФормуРасширеннаяПодсказка - 448 + 472 Label true true @@ -2593,7 +2727,7 @@ СписокСостоянияУзловИнформацияПоОбменуРасширеннаяПодсказка - 449 + 473 Label true true @@ -2617,7 +2751,54 @@ СписокСостоянияУзловГруппа1РасширеннаяПодсказка - 445 + 468 + Label + true + true + + Left + + + + + + СписокСостоянияУзловГруппа4 + 366 + + СписокСостоянияУзловУдалитьНастройкуСинхронизации + 364 + true + true + + true + + + СписокСостоянияУзловУдалитьНастройкуСинхронизацииРасширеннаяПодсказка + 475 + Label + true + true + + Left + + + Form.Command.УдалитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа4РасширеннаяПодсказка + 474 Label true true @@ -2637,7 +2818,7 @@ ФормаСправкаРасширеннаяПодсказка - 450 + 476 Label true true @@ -2668,7 +2849,7 @@ КоманднаяПанельРасширеннаяПодсказка - 430 + 452 Label true true @@ -2722,7 +2903,7 @@ СписокСостоянияУзловРасписаниеНастроеноРасширеннаяПодсказка - 471 + 498 Label true true @@ -2770,7 +2951,7 @@ СписокСостоянияУзловИмяПланаОбменаРасширеннаяПодсказка - 473 + 500 Label true true @@ -2811,7 +2992,7 @@ СписокСостоянияУзловУзелИнформационнойБазыРасширеннаяПодсказка - 475 + 502 Label true true @@ -2854,7 +3035,7 @@ СписокСостоянияУзловПрефиксИнформационнойБазыРасширеннаяПодсказка - 477 + 504 Label true true @@ -2906,7 +3087,7 @@ СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка - 481 + 508 Label true true @@ -2954,7 +3135,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка - 483 + 510 Label true true @@ -3005,7 +3186,7 @@ СписокСостоянияУзловГруппаУспешнойВыгрузкиРасширеннаяПодсказка - 480 + 507 Label true true @@ -3031,7 +3212,7 @@ СписокСостоянияУзловДатаПоследнейВыгрузкиРасширеннаяПодсказка - 485 + 512 Label true true @@ -3075,7 +3256,7 @@ ГруппаВыгрузкиРасширеннаяПодсказка - 479 + 506 Label true true @@ -3114,7 +3295,7 @@ СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхРасширеннаяПодсказка - 489 + 516 Label true true @@ -3162,7 +3343,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка - 491 + 518 Label true true @@ -3213,7 +3394,7 @@ СписокСостоянияУзловГруппаУспешнойЗагрузкиРасширеннаяПодсказка - 488 + 515 Label true true @@ -3239,7 +3420,7 @@ СписокСостоянияУзловДатаПоследнейЗагрузкиРасширеннаяПодсказка - 493 + 520 Label true true @@ -3283,7 +3464,7 @@ ГруппаЗагрузкиРасширеннаяПодсказка - 487 + 514 Label true true @@ -3315,10 +3496,10 @@ СписокСостоянияУзловСтрокаПоиска - 462 + 489 СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка - 464 + 491 Label true true @@ -3328,7 +3509,7 @@ СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню - 463 + 490 true СписокСостоянияУзлов @@ -3338,10 +3519,10 @@ СписокСостоянияУзловСостояниеПросмотра - 465 + 492 СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка - 467 + 494 Label true true @@ -3351,7 +3532,7 @@ СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню - 466 + 493 true ViewStatusAddition @@ -3362,10 +3543,10 @@ СписокСостоянияУзловУправлениеПоиском - 468 + 495 СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка - 470 + 497 Label true true @@ -3375,7 +3556,7 @@ СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню - 469 + 496 true SearchControlAddition @@ -3386,7 +3567,7 @@ СписокСостоянияУзловРасширеннаяПодсказка - 461 + 488 Label true true @@ -3411,7 +3592,7 @@ false ВыполнитьОбменДанными1РасширеннаяПодсказка - 452 + 478 Label true true @@ -3437,7 +3618,7 @@ ВыполнитьОбменДаннымиИнтерактивно1РасширеннаяПодсказка - 453 + 479 Label true true @@ -3468,7 +3649,7 @@ ГруппаКнопокВыполненияОбменаДаннымиРасширеннаяПодсказка - 451 + 477 Label true true @@ -3488,7 +3669,7 @@ СписокСостоянияУзловКонтекстноеМенюИзменитьУзелИнформационнойБазыРасширеннаяПодсказка - 454 + 480 Label true true @@ -3504,6 +3685,32 @@ UserCmds Auto + + СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанных + 362 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюСоставОтправляемыхДанныхРасширеннаяПодсказка + 481 + Label + true + true + + Left + + + Form.Command.СоставОтправляемыхДанных + Normal + Auto + true + true + UserCmds + Auto + КонтекстноеМенюСписокСостоянияДиагностика 86 @@ -3518,7 +3725,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 456 + 483 Label true true @@ -3545,7 +3752,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 457 + 484 Label true true @@ -3572,7 +3779,7 @@ КонтекстноеМенюСписокСостоянияДиагностикаРасширеннаяПодсказка - 455 + 482 Label true true @@ -3595,7 +3802,7 @@ НастроитьРасписаниеВыполненияОбмена1РасширеннаяПодсказка - 459 + 486 Label true true @@ -3626,7 +3833,7 @@ ГруппаКнопокНастройкиРасписанияРасширеннаяПодсказка - 458 + 485 Label true true @@ -3646,7 +3853,7 @@ СписокСостоянияУзловКонтекстноеМенюИнформацияПоОбменуРасширеннаяПодсказка - 460 + 487 Label true true @@ -3717,7 +3924,7 @@ ПрефиксИБРасширеннаяПодсказка - 504 + 531 Label true true @@ -3756,7 +3963,7 @@ Декорация6РасширеннаяПодсказка - 506 + 533 Label true true @@ -3792,7 +3999,7 @@ ГруппаПрефиксаРасширеннаяПодсказка - 503 + 530 Label true true @@ -3816,7 +4023,7 @@ НесколькоСинхронизацийРасширеннаяПодсказка - 418 + 442 Label true true @@ -3845,7 +4052,7 @@ СинхронизацияДанныхРасширеннаяПодсказка - 360 + 378 Label true true @@ -4304,6 +4511,23 @@ true + + ЕстьПравоНаПросмотрЖурналаРегистрации + + <key>ru</key> + <value>Есть право на просмотр журнала регистрации</value> + + 10 + + Boolean + + + true + + + true + + ОбновитьМонитор @@ -4334,7 +4558,7 @@ <name>ВыполнитьОбменДанными</name> <title> <key>ru</key> - <value>Синхронизировать сейчас</value> + <value>Синхронизировать</value> 3 @@ -4620,56 +4844,16 @@ Auto - ОткрытьКоллизии + ОткрытьРезультатыСинхронизацииДанных <key>ru</key> - <value>Последний конфликт <Дата></value> - - 14 - - ru - Открыть конфликты - - - true - - - - ОткрытьКоллизии - - - Auto - Auto - - - ОткрытьНепринятые - - <key>ru</key> - <value>Последний запрет загрузки <Дата></value> - - 15 - - ru - Открыть непринятые данные - - - true - - - - ОткрытьНепринятые - - - Auto - Auto - - - ОткрытьРезультатыОднаСинхронизация - - <key>ru</key> - <value>Проблемы: <Количество></value> + <value>Предупреждений нет</value> 16 + + ru + Открыть предупреждения при синхронизации данных + true @@ -4681,6 +4865,63 @@ Auto Auto + + СоставОтправляемыхДанных + + <key>ru</key> + <value>Состав отправляемых данных</value> + + 17 + + ru + Состав отправляемых данных + + + + true + Role.АдминистраторСистемы + + + + StdPicture.InputFieldOpen + + + + СоставОтправляемыхДанных + + + Auto + Auto + + + УдалитьНастройкуСинхронизации + + <key>ru</key> + <value>Удалить настройку синхронизации</value> + + 18 + + ru + Удалить настройку синхронизации данных + + + + true + Role.АдминистраторСистемы + + + + StdPicture.Delete + + + + УдалитьНастройкуСинхронизации + + + TextPicture + Auto + Auto + diff --git a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html b/SSL/src/CommonForms/ОбменыДанными/Help/ru.html index a9356913f..14506ba9d 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html +++ b/SSL/src/CommonForms/ОбменыДанными/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            @@ -18,4 +18,13 @@
            Нажать на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

            См. также

            \ No newline at end of file +

            Действия при восстановлении информационной базы из резервной копии

            +

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

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

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ОбменыДанными/Module.bsl b/SSL/src/CommonForms/ОбменыДанными/Module.bsl index 3929b04c6..0506d445a 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Module.bsl +++ b/SSL/src/CommonForms/ОбменыДанными/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -7,6 +8,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); Если СписокПлановОбмена.Количество() = 0 Тогда @@ -15,14 +20,42 @@ Возврат; КонецЕсли; + ЕстьПравоНаПросмотрЖурналаРегистрации = Пользователи.РолиДоступны("ПросмотрЖурналаРегистрации"); + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда ДобавитьКомандыСозданияНовогоОбмена(); + Иначе + Элементы.НастроитьСинхронизациюДанныхНеНастроена.Видимость = Ложь; + Элементы.ГруппаНастройкаСинхронизации.Видимость = Ложь; + Элементы.ИнформационнаяНадпись.ТекущаяСтраница = Элементы.НетПравНаСинхронизацию; + Элементы.ГруппаСценарииСинхронизации.Видимость = Ложь; + Элементы.ГруппаНастройкиСинхронизации.Видимость = Ложь; КонецЕсли; ОбновитьСписокСостоянияУзлов(); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если КоличествоСинхронизаций = 1 Тогда + + Если ЕстьПравоНаПросмотрЖурналаРегистрации Тогда + + Элементы.ДатаУспешнойЗагрузки.Видимость = Истина; + Элементы.ДатаУспешнойВыгрузки.Видимость = Истина; + Элементы.НадписьДатаПолучения.Видимость = Ложь; + Элементы.НадписьДатаОтправки.Видимость = Ложь; + + Иначе + + Элементы.ДатаУспешнойЗагрузки.Видимость = Ложь; + Элементы.ДатаУспешнойВыгрузки.Видимость = Ложь; + Элементы.НадписьДатаПолучения.Видимость = Истина; + Элементы.НадписьДатаОтправки.Видимость = Истина; + + КонецЕсли; + + КонецЕсли; + + Если Не РольДоступнаДобавлениеИзменениеОбменовДанными Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Элементы.ПрефиксСинхронизацияНеНастроена.Видимость = Ложь; Элементы.ПрефиксОднаСинхронизация.Видимость = Ложь; @@ -66,11 +99,11 @@ &НаКлиенте Процедура НастроитьСинхронизациюДанных(Элемент) - ВыбранняСинхронизация = ВыбратьИзМеню(НастраиваемыеСинхронизации, Элемент); + ВыбраннаяСинхронизация = ВыбратьИзМеню(НастраиваемыеСинхронизации, Элемент); - Если ВыбранняСинхронизация <> Неопределено Тогда + Если ВыбраннаяСинхронизация <> Неопределено Тогда - ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(ВыбранняСинхронизация.Значение); + ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(ВыбраннаяСинхронизация.Значение); КонецЕсли; @@ -82,7 +115,13 @@ &НаКлиенте Процедура СписокСостоянияУзловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(Элементы.СписокСостоянияУзлов.ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); + Ответ = Вопрос(НСтр("ru = 'Выполнить синхронизацию данных?'"), РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(Элементы.СписокСостоянияУзлов.ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); + + КонецЕсли; КонецПроцедуры @@ -268,7 +307,7 @@ КонецЕсли; - ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -306,25 +345,59 @@ &НаКлиенте Процедура ОткрытьРезультатыОднаСинхронизация(Команда) - ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКоллизии(Команда) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОткрываемаяСтраница", "СтраницаКоллизии"); + ПараметрыФормы.Вставить("УзлыОбмена", МассивИспользуемыхУзлов(СписокСостоянияУзлов)); ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыФормы); КонецПроцедуры &НаКлиенте -Процедура ОткрытьНепринятые(Команда) +Процедура СоставОтправляемыхДанных(Команда) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОткрываемаяСтраница", "СтраницаНепринятыеПоДатеЗапрета"); - ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыФормы); + Если КоличествоСинхронизаций = 1 Тогда + + УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; + + Иначе + + ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + + Возврат; + + КонецЕсли; + + УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; + + КонецЕсли; + + ОбменДаннымиКлиент.ОткрытьСоставОтправляемыхДанных(УзелОбмена); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьНастройкуСинхронизации(Команда) + + Если КоличествоСинхронизаций = 1 Тогда + + УзелОбмена = СписокСостоянияУзлов[0].УзелИнформационнойБазы; + + Иначе + + ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + + Возврат; + + КонецЕсли; + + УзелОбмена = ТекущиеДанные.УзелИнформационнойБазы; + + КонецЕсли; + + ОбменДаннымиКлиент.УдалитьНастройкуСинхронизации(УзелОбмена); КонецПроцедуры @@ -380,6 +453,7 @@ Если КоличествоСинхронизаций = 0 Тогда ПанельСинхронизации.ТекущаяСтраница = ПанельСинхронизации.ПодчиненныеЭлементы.СинхронизацияНеНастроена; + Заголовок = НСтр("ru = 'Синхронизация данных'"); ИначеЕсли КоличествоСинхронизаций = 1 Тогда @@ -406,7 +480,7 @@ Элементы.НадписьОбменДаннымиПриостановленЕстьПравоОбновления, Элементы.НадписьОбменДаннымиПриостановленНетПраваОбновления); - НадписьОбменДаннымиПриостановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьОбменДаннымиПриостановлен.Заголовок, ПланыОбмена.ГлавныйУзел()); + НадписьОбменДаннымиПриостановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьОбменДаннымиПриостановлен.Заголовок, ОбменДаннымиСервер.ГлавныйУзел()); КонецЕсли; @@ -417,66 +491,37 @@ Если КоличествоСинхронизаций <> 0 Тогда - ПустаяДата = Дата(1,1,1); - - КоличествоПроблем = РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(); - ЕстьПроблемы = КоличествоПроблем > 0; - - Если ЕстьПроблемы Тогда - НадписьПроблемы = НСтр("ru = 'Проблемы: %Количество%'"); - НадписьПроблемы = СтрЗаменить(НадписьПроблемы, "%Количество%", КоличествоПроблем); - КартинкаПроблемы = БиблиотекаКартинок.Предупреждение; - Иначе - НадписьПроблемы = НСтр("ru = 'Проблем нет'"); - КартинкаПроблемы = Новый Картинка; - КонецЕсли; - - НадписьКоллизии = ""; - Элементы.ОткрытьКоллизии.Видимость = Ложь; - НадписьНепринятые = ""; - Элементы.ОткрытьНепринятые.Видимость = Ложь; - ИспользуетсяВерсионирование = Ложь; - ОбменДаннымиСервер.ПриОпределенииИспользованияВерсионирования(ИспользуетсяВерсионирование); - - Если ИспользуетсяВерсионирование Тогда - - ДатаПоследнейКоллизии = ПустаяДата; - ОбменДаннымиСервер.ПриОбновленииЗаголовковКомандМонитораОбменаДанными(ДатаПоследнейКоллизии, Истина); - Если ЗначениеЗаполнено(ДатаПоследнейКоллизии) Тогда - НадписьКоллизии = НСтр("ru = 'Последний конфликт %Дата%'"); - НадписьКоллизии = СтрЗаменить(НадписьКоллизии, "%Дата%", Формат(ДатаПоследнейКоллизии, "ДЛФ=DD")); - Элементы.ОткрытьКоллизии.Заголовок = НадписьКоллизии; - Элементы.ОткрытьКоллизии.Видимость = Истина; - КонецЕсли; - - ДатаПоследнегоЗапретаЗагрузки = ПустаяДата; - ОбменДаннымиСервер.ПриОбновленииЗаголовковКомандМонитораОбменаДанными(ДатаПоследнегоЗапретаЗагрузки, Ложь); - Если ЗначениеЗаполнено(ДатаПоследнегоЗапретаЗагрузки) Тогда - НадписьНепринятые = НСтр("ru = 'Последний запрет загрузки %Дата%'"); - НадписьНепринятые = СтрЗаменить(НадписьНепринятые, "%Дата%", Формат(ДатаПоследнегоЗапретаЗагрузки, "ДЛФ=DD")); - Элементы.ОткрытьНепринятые.Заголовок = НадписьНепринятые; - Элементы.ОткрытьНепринятые.Видимость = Истина; - КонецЕсли; - - КонецЕсли; + СтруктураЗаголовка = ОбменДаннымиСервер.СтруктураЗаголовкаГиперссылкиМонитораПроблем(МассивИспользуемыхУзлов(СписокСостоянияУзлов)); Если КоличествоСинхронизаций = 1 Тогда - Элементы.ОткрытьРезультатыОднаСинхронизация.Заголовок = НадписьПроблемы; - Элементы.ОткрытьРезультатыОднаСинхронизация.Картинка = КартинкаПроблемы; - Команды.ОткрытьРезультатыОднаСинхронизация.Подсказка = СокрЛП(НадписьПроблемы + Символы.ПС + НадписьКоллизии + Символы.ПС + НадписьНепринятые); + Элемент = Элементы.ОткрытьРезультатыОднаСинхронизация; ИначеЕсли КоличествоСинхронизаций > 1 Тогда - Элементы.ОбщаяКомандаОткрытьПроблемыСинхронизацииДанных.Заголовок = НадписьПроблемы; - Элементы.ОбщаяКомандаОткрытьПроблемыСинхронизацииДанных.Картинка = КартинкаПроблемы; + Элемент = Элементы.ОткрытьРезультатыСинхронизацииДанных; КонецЕсли; + ЗаполнитьЗначенияСвойств(Элемент, СтруктураЗаголовка); + КонецЕсли; КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Функция МассивИспользуемыхУзлов(СписокСостоянияУзлов) + + УзлыОбмена = Новый Массив; + + Для Каждого СтрокаУзла Из СписокСостоянияУзлов Цикл + УзлыОбмена.Добавить(СтрокаУзла.УзелИнформационнойБазы); + КонецЦикла; + + Возврат УзлыОбмена; + +КонецФункции + &НаСервере Процедура УстановитьЭлементыОднойСинхронизации() @@ -484,16 +529,25 @@ Если НастроеннаяСинхронизация.УзелИнформационнойБазы = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Работа монитора синхронизации данных в неразделенном режиме не поддерживается'"); + ВызватьИсключение НСтр("ru = 'Работа монитора синхронизации данных в неразделенном сеансе не поддерживается'"); КонецЕсли; ЗаголовокФормы = НСтр("ru = 'Синхронизация данных с ""%Программа%""'"); ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%Программа%", НастроеннаяСинхронизация.УзелИнформационнойБазы.Наименование); Заголовок = ЗаголовокФормы; - - Элементы.ДатаУспешнойЗагрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки; - Элементы.ДатаУспешнойВыгрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки; + + Если ЕстьПравоНаПросмотрЖурналаРегистрации Тогда + + Элементы.ДатаУспешнойЗагрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки; + Элементы.ДатаУспешнойВыгрузки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки; + + Иначе + + Элементы.НадписьДатаПолучения.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки; + Элементы.НадписьДатаОтправки.Заголовок = НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки; + + КонецЕсли; ПустаяДата = Дата(1, 1, 1); @@ -502,8 +556,7 @@ Или НастроеннаяСинхронизация.РезультатПоследнейВыгрузкиДанных <> 0 Тогда ПодсказкаВыгрузки = НСтр("ru = 'Данные отправлены: %ДатаОтправки% - |Последняя попытка: %ДатаПопытки%'" - ); + |Последняя попытка: %ДатаПопытки%'"); ПодсказкаВыгрузки = СтрЗаменить(ПодсказкаВыгрузки, "%ДатаОтправки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойВыгрузки); ПодсказкаВыгрузки = СтрЗаменить(ПодсказкаВыгрузки, "%ДатаПопытки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейВыгрузки); @@ -518,8 +571,7 @@ Или НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных <> 0 Тогда ПодсказкаЗагрузки = НСтр("ru = 'Данные получены: %ДатаПолучения% - |Последняя попытка: %ДатаПопытки%'" - ); + |Последняя попытка: %ДатаПопытки%'"); ПодсказкаЗагрузки = СтрЗаменить(ПодсказкаЗагрузки, "%ДатаПолучения%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейУспешнойЗагрузки); ПодсказкаЗагрузки = СтрЗаменить(ПодсказкаЗагрузки, "%ДатаПопытки%", НастроеннаяСинхронизация.ПредставлениеДатыПоследнейЗагрузки); @@ -529,6 +581,7 @@ КонецЕсли; + Элементы.ДекорацияСтатусПустой.Видимость = Истина; Если НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных =2 Тогда НастроеннаяСинхронизация.РезультатПоследнейЗагрузкиДанных = ?(ОбменДаннымиСервер.ОбменДаннымиВыполненСПредупреждениями(НастроеннаяСинхронизация.УзелИнформационнойБазы), 2, 0); КонецЕсли; @@ -545,10 +598,7 @@ КонецЕсли; Элементы.ДекорацияУспешнаяЗагрузка.Подсказка = Элементы.ДекорацияСтатусЗагрузки.Подсказка; - Элементы.ДатаУспешнойЗагрузки.Подсказка = Элементы.ДекорацияСтатусЗагрузки.Подсказка; - Элементы.ДекорацияУспешнаяВыгрузка.Подсказка = Элементы.ДекорацияСтатусВыгрузки.Подсказка; - Элементы.ДатаУспешнойВыгрузки.Подсказка = Элементы.ДекорацияСтатусВыгрузки.Подсказка; Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(НастроеннаяСинхронизация.УзелИнформационнойБазы) Тогда @@ -571,8 +621,6 @@ КонецЕсли; - - КонецПроцедуры &НаСервере @@ -672,7 +720,7 @@ КонецЕсли; - // если спозициронировать строку не удалось, то устанавливаем текущей первую строку + // если спозиционировать строку не удалось, то устанавливаем текущей первую строку Если Элементы[ИмяТаблицы].ТекущаяСтрока = Неопределено И ЭтаФорма[ИмяТаблицы].Количество() <> 0 Тогда @@ -690,6 +738,8 @@ Элементы.ИнформационнаяПанельТребуетсяОбновление1.Видимость = ТребуетсяОбновление; Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ТребуетсяОбновление; + Элементы.ВыполнитьОбменДанными2.Видимость = Не ТребуетсяОбновление; + КонецПроцедуры &НаСервере @@ -749,7 +799,9 @@ Выборка.Следующий(); РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(Выборка.РегламентноеЗаданиеGUID); - РасписаниеРегламентногоЗадания = РегламентноеЗаданиеОбъект.Расписание; + Если РегламентноеЗаданиеОбъект <> Неопределено Тогда + РасписаниеРегламентногоЗадания = РегламентноеЗаданиеОбъект.Расписание; + КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form index 5a19a3960..ef1fe8e52 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form @@ -1,9 +1,111 @@ - + <key>ru</key> <value>Что нового в конфигурации</value> + + ОтложенноеОбновление + 24 + + ОтложенноеОбновлениеДанных + 25 + + <key>ru</key> + <value>Выполняются дополнительные процедуры обработки данных</value> + + true + true + + true + + + ОтложенноеОбновлениеДанныхРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОтложенноеОбновлениеДанных + Normal + Auto + true + true + UserCmds + + CommonPicture.Предупреждение + + Auto + + + ОтложенноеОбновлениеДанныхПояснение + 26 + + <key>ru</key> + <value>Работа в программе временно ограничена, так как еще не завершен переход на новую версию.</value> + + true + true + + true + + + ОтложенноеОбновлениеДанныхПояснениеРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ОтложенноеОбновлениеДанныхПояснениеКонтекстноеМеню + 27 + true + + Label + true + true + + Right + + + true + true + + true + + + <key>ru</key> + <value>Отложенное обновление</value> + + true + + ОтложенноеОбновлениеРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + КоманднаяПанельСписка 13 @@ -21,7 +123,7 @@ НайтиРасширеннаяПодсказка - 25 + 32 Label true true @@ -48,7 +150,7 @@ ИзменитьФормуРасширеннаяПодсказка - 26 + 33 Label true true @@ -78,7 +180,7 @@ СохранитьРасширеннаяПодсказка - 27 + 34 Label true true @@ -104,7 +206,7 @@ РазвернутьВсеГруппыРасширеннаяПодсказка - 28 + 35 Label true true @@ -131,7 +233,7 @@ ПечатьРасширеннаяПодсказка - 29 + 36 Label true true @@ -158,7 +260,7 @@ false СправкаРасширеннаяПодсказка - 30 + 37 Label true true @@ -189,7 +291,7 @@ КоманднаяПанельСпискаРасширеннаяПодсказка - 24 + 31 Label true true @@ -221,7 +323,7 @@ None ОписаниеОбновленийРасширеннаяПодсказка - 31 + 38 Label true true @@ -276,7 +378,7 @@ АдресФормыВПрограммеРасширеннаяПодсказка - 34 + 41 Label true true @@ -318,7 +420,7 @@ ТехническаяИнформацияОРезультатахОбновленияРасширеннаяПодсказка - 36 + 43 Label true true @@ -359,7 +461,7 @@ false ЗакрытьРасширеннаяПодсказка - 38 + 45 Label true true @@ -390,7 +492,7 @@ 5 КоманднаяПанельФормыРасширеннаяПодсказка - 37 + 44 Label true true @@ -419,7 +521,7 @@ false ГруппаТехническаяИнформацияИЗакрытьРасширеннаяПодсказка - 35 + 42 Label true true @@ -453,7 +555,7 @@ true ГруппаРасширеннаяПодсказка - 33 + 40 Label true true @@ -549,6 +651,24 @@ true + + ОтложенноеОбновлениеДанных + + <key>ru</key> + <value>Выполняются дополнительные процедуры обработки данных</value> + + 1 + + true + + + + ОтложенноеОбновлениеДанных + + + Auto + Auto + ВремяНачалаОбновления diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html index fbd3ea9fc..d8fbfa5ac 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html @@ -1,3 +1,3 @@ - +

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

            Описание обновлений можно просмотреть позднее, пройдя в панель Информация на рабочем столе.

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl index abe79c031..e6b364709 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl @@ -17,17 +17,17 @@ КонецЕсли; Разделы = ОбновлениеИнформационнойБазы.НеотображавшиесяРазделыОписанияИзменений(); + ПоследняяВерсия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "ПоследняяВерсияОтображенияИзмененийСистемы", , , ИмяПользователя()); Если Разделы.Количество() = 0 Тогда - Если Параметры.ПоказыватьТолькоИзменения Тогда - ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); + ДокументОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); + Если ДокументОписаниеОбновлений <> Неопределено + И (ПоследняяВерсия = Неопределено + Или Не Параметры.ПоказыватьТолькоИзменения) Тогда + ДокументОписаниеОбновлений = ПолучитьОбщийМакет(ДокументОписаниеОбновлений); Иначе - ДокументОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); - Если ДокументОписаниеОбновлений <> Неопределено Тогда - ДокументОписаниеОбновлений = ПолучитьОбщийМакет(ДокументОписаниеОбновлений); - Иначе - ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); - КонецЕсли; + ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); КонецЕсли; Иначе ДокументОписаниеОбновлений = ОбновлениеИнформационнойБазы.ДокументОписаниеОбновлений(Разделы); @@ -53,9 +53,35 @@ ОписаниеОбновлений.Очистить(); ОписаниеОбновлений.Вывести(ДокументОписаниеОбновлений); + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении <> Неопределено Тогда + ВремяНачалаОбновления = СведенияОбОбновлении.ВремяНачалаОбновления; + ВремяОкончанияОбновления = СведенияОбОбновлении.ВремяОкончанияОбновления; + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + Или СведенияОбОбновлении = Неопределено + Или СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Неопределено + Или СведенияОбОбновлении.ДеревоОбработчиков <> Неопределено + И СведенияОбОбновлении.ДеревоОбработчиков.Строки.Количество() = 0 Тогда + Элементы.ОтложенноеОбновление.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЗаголовокСообщения = НСтр("ru = 'Необходимо выполнить дополнительные процедуры обработки данных'"); + Элементы.ОтложенноеОбновлениеДанных.Заголовок = ЗаголовокСообщения; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ОтложенноеОбновлениеДанных.Заголовок = + НСтр("ru = 'Не выполнены дополнительные процедуры обработки данных'"); + Элементы.ОтложенноеОбновлениеДанныхПояснение.Заголовок = + НСтр("ru = 'Работа в программе временно ограничена, так как еще не завершен переход на новую версию, обратитесь к администратору.'"); + КонецЕсли; + Если Не ЗначениеЗаполнено(ВремяНачалаОбновления) И Не ЗначениеЗаполнено(ВремяОкончанияОбновления) Тогда Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Ложь; - Иначе + ИначеЕсли Пользователи.ЭтоПолноправныйПользователь() И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Элементы.АдресФормыВПрограмме.ВысотаЗаголовка = 2; Элементы.ТехническаяИнформацияОРезультатахОбновления.Видимость = Истина; КонецЕсли; @@ -95,6 +121,14 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОтложенноеОбновлениеДанных(Команда) + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -104,3 +138,4 @@ ОбновлениеИнформационнойБазы.УстановитьФлагОтображенияОписанийПоТекущуюВерсию(); КонецПроцедуры + diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl index 430cd327c..50ef504ac 100644 --- a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl @@ -75,8 +75,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста); ДлительнаяОперация = Ложь; ПерейтиНазад(); @@ -358,8 +357,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -435,8 +433,7 @@ Исключение Отказ = Истина; ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста - ); + СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста); КонецПопытки; Иначе @@ -445,8 +442,7 @@ УникальныйИдентификатор, "АвтономнаяРаботаСлужебный.УдалитьАвтономноеРабочееМесто", Новый Структура("АвтономноеРабочееМесто", АвтономноеРабочееМесто), - НСтр("ru = 'Удаление автономного рабочего места'") - ); + НСтр("ru = 'Удаление автономного рабочего места'")); Если Не Результат.ЗаданиеВыполнено Тогда diff --git a/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo b/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo deleted file mode 100644 index 12f0ab905..000000000 --- a/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ОтображениеНовостей - - ru - Отображение новостей - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Form.form b/SSL/src/CommonForms/ОтправкаСообщения/Form.form index d3b84d2e2..07d6a551a 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Form.form +++ b/SSL/src/CommonForms/ОтправкаСообщения/Form.form @@ -697,7 +697,6 @@ true true - true true true true @@ -800,6 +799,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html index 54fba7396..e0707fc0c 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            В поле Адрес ответа можно задать e-mail адрес, на который получатели письма будут отправлять ответ. Это поле нужно заполнять в том случае, если входящая корреспонденция системной учетной записи не просматривается (например, если учетная запись предназначена только для отправки).

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

            diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index dc4139201..7348e40a5 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -31,14 +31,14 @@ // Использовать // // *формат правильного e-mail адреса: -// Z = ([Имя Пользователя] [<]пользователь@почтовыйсервер[>][;]), Строка = Z[Z].. +// Z = ([Имя Пользователя] [<]Пользователь@ПочтовыйСервер[>][;]), Строка = Z[Z].. // // ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ // // Неопределено // -// Булево: истина - сообщение успешно отправлено -// ложь - сообщение не было отправлено +// Булево: Истина - сообщение успешно отправлено +// Ложь - сообщение не было отправлено // //------------------------------------------------------------------------------ // СПЕЦИФИКАЦИЯ ФУНКЦИОНИРОВАНИЯ ФОРМЫ @@ -58,6 +58,9 @@ // //------------------------------------------------------------------------------ +&НаКлиенте +Перем ПриведенныйПочтовыйАдрес; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -146,8 +149,14 @@ Элементы.УчетнаяЗапись.СписокВыбора.СортироватьПоПредставлению(); УчетнаяЗапись = НаборУчетныхЗаписей[0].Значение; - // для переданного списка учетных запсией выбираем их из списка выбора - Элементы.УчетнаяЗапись.КнопкаСпискаВыбора = Истина; + // для переданного списка учетных записей выбираем их из списка выбора + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяКнопки = "КнопкаВыпадающегоСписка"; + Иначе + ИмяКнопки = "КнопкаСпискаВыбора"; + КонецЕсли; + Элементы.УчетнаяЗапись[ИмяКнопки] = Истина; + УчетнаяЗаписьУказана = Истина; Если Элементы.УчетнаяЗапись.СписокВыбора.Количество() <= 1 Тогда @@ -181,14 +190,19 @@ // Получаем список адресов, которые пользователь использовал ранее СписокАдресовОтвета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "РедактированиеНовогоПисьма", - "СписокАдресовОтвета" - ); + "СписокАдресовОтвета"); Если СписокАдресовОтвета <> Неопределено И СписокАдресовОтвета.Количество() > 0 Тогда Для Каждого ЭлементаАдресОтвета Из СписокАдресовОтвета Цикл Элементы.АдресОтвета.СписокВыбора.Добавить(ЭлементаАдресОтвета.Значение, ЭлементаАдресОтвета.Представление); КонецЦикла; - Элементы.АдресОтвета.КнопкаСпискаВыбора = Истина; + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяКнопки = "КнопкаВыпадающегоСписка"; + Иначе + ИмяКнопки = "КнопкаСпискаВыбора"; + КонецЕсли; + Элементы.АдресОтвета[ИмяКнопки] = Истина; КонецЕсли; Если ЗначениеЗаполнено(АдресОтвета) Тогда @@ -215,6 +229,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи") Тогда + + ПродолжитьОтправкуПисьмаСПаролем(ВыбранноеЗначение); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -222,15 +247,14 @@ Процедура УчетнаяЗаписьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если УчетнаяЗаписьУказана Тогда - // если учетная записьбыла передана в качестве параметра + // если учетная запись была передана в качестве параметра // не позволяем выбрать другую СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры -// Подставляет адрес ответа, если флаг автоматической подставновки ответа -// установлен. +// Подставляет адрес ответа, если флаг автоматической подстановки ответа установлен. // &НаКлиенте Процедура УчетнаяЗаписьОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -382,7 +406,7 @@ Если ЗначениеЗаполнено(АдресОтвета) Тогда Попытка - ПриведенныйАдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресОтвета); + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресОтвета); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю( КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , @@ -391,37 +415,15 @@ КонецПопытки; КонецЕсли; - Пароль = Неопределено; - Если ((ТипЗнч(ПарольЗадан) = Тип("Булево") И Не ПарольЗадан) - Или (ТипЗнч(ПарольЗадан) = Тип("ФиксированныйМассив") И ПарольЗадан.Найти(УчетнаяЗапись) = Неопределено)) Тогда - ПараметрУчетнаяЗапись = Новый Структура("УчетнаяЗапись", УчетнаяЗапись); - Пароль = ОткрытьФормуМодально("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", - ПараметрУчетнаяЗапись); - Если ТипЗнч(Пароль) <> Тип("Строка") Тогда - Возврат; - КонецЕсли; + Или (ТипЗнч(ПарольЗадан) = Тип("ФиксированныйМассив") И ПарольЗадан.Найти(УчетнаяЗапись) = Неопределено)) Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УчетнаяЗапись", УчетнаяЗапись); + ОткрытьФорму("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", ПараметрыФормы, ЭтаФорма); + Иначе + ПродолжитьОтправкуПисьмаСПаролем(); КонецЕсли; - ПараметрыПисьма = СформироватьПараметрыПисьма(ПриведенныйПочтовыйАдрес, Пароль); - - Если ПараметрыПисьма = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка формирования параметров почтового сообщения'")); - Возврат; - КонецЕсли; - - Попытка - ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат; - КонецПопытки; - - СохранитьАдресОтвета(АдресОтвета); - Предупреждение(НСтр("ru = 'Сообщение успешно отправлено'")); - - Закрыть(); - КонецПроцедуры &НаКлиенте @@ -573,8 +575,7 @@ // это возможно - формирует параметры отправки // &НаКлиенте -Функция СформироватьПараметрыПисьма(знач ПриведенныйПочтовыйАдрес, - знач Пароль = Неопределено) +Функция СформироватьПараметрыПисьма(Знач Пароль = Неопределено) ПараметрыПисьма = Новый Структура; @@ -633,8 +634,7 @@ // Получаем список адресов, которые пользователь использовал ранее СписокАдресовОтвета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "РедактированиеНовогоПисьма", - "СписокАдресовОтвета" - ); + "СписокАдресовОтвета"); Если СписокАдресовОтвета = Неопределено Тогда СписокАдресовОтвета = Новый СписокЗначений(); @@ -655,8 +655,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "РедактированиеНовогоПисьма", "СписокАдресовОтвета", - СписокАдресовОтвета - ); + СписокАдресовОтвета); КонецФункции @@ -703,3 +702,27 @@ Возврат ПочтовыйАдрес; КонецФункции + +&НаКлиенте +Процедура ПродолжитьОтправкуПисьмаСПаролем(Пароль = Неопределено) + + ПараметрыПисьма = СформироватьПараметрыПисьма(Пароль); + + Если ПараметрыПисьма = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка формирования параметров почтового сообщения'")); + Возврат; + КонецЕсли; + + Попытка + ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + СохранитьАдресОтвета(АдресОтвета); + Предупреждение(НСтр("ru = 'Сообщение успешно отправлено'")); + + Закрыть(); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo deleted file mode 100644 index 6d624aa6f..000000000 --- a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - ОтправкаСообщенияВТехподдержку - - ru - Отправка сообщения в техподдержку - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html index 1622dfd1f..f2fd5bae4 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -1,4 +1,4 @@ - +

            Выводит варианты отчетов, размещенные в разделе или группах раздела.

            Для открытия необходимо кликнуть левой кнопкой мыши на варианте отчета.

            Команды в режиме просмотра:

            diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 88044524a..1dc35e53e 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -18,8 +18,7 @@ Иначе Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Отчеты раздела ""%1""'"), - РазделМетаданные.Представление() - ); + РазделМетаданные.Представление()); КонецЕсли; ЭтаФорма.КлючНазначенияИспользования = "Раздел_" + Строка(РазделСсылка.УникальныйИдентификатор()); @@ -138,9 +137,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не заполнено имя отчета для варианта ""%1"".'"), - Вариант.Наименование - ) - ); + Вариант.Наименование)); Иначе @@ -627,8 +624,7 @@ Процедура СохранитьПользовательскиеНастройки() ИзмененныеНастройки = ДобавленныеВарианты.Выгрузить( Новый Структура("ИзмененПользователем", Истина), - "Ссылка, Подсистема, Видимость, БыстрыйДоступ" - ); + "Ссылка, Подсистема, Видимость, БыстрыйДоступ"); ИзмененныеНастройки.Колонки.Ссылка.Имя = "Вариант"; ИзмененныеНастройки.Колонки.Подсистема.Имя = "РазделИлиГруппа"; РегистрыСведений.НастройкиВариантовОтчетов.СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки); @@ -855,8 +851,7 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ | ЕСТЬNULL(втНастройки.Видимость, ЕСТЬNULL(НастройкиВариантовОтчетов.Видимость, втВсеВарианты.ВидимостьПоУмолчанию))", - "" - ); + ""); КонецЕсли; ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); @@ -869,8 +864,7 @@ ШаблонГруппыВарианта = Новый Структура( "Вид, РастягиватьПоГоризонтали, |Отображение, Группировка, - |ОтображатьЗаголовок" - ); + |ОтображатьЗаголовок"); ШаблонГруппыВарианта.Вид = ВидГруппыФормы.ОбычнаяГруппа; ШаблонГруппыВарианта.РастягиватьПоГоризонтали = Истина; ШаблонГруппыВарианта.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -879,8 +873,7 @@ ШаблонКартинкиБыстрогоДоступа = Новый Структура( "Вид, Ширина, Высота, Картинка, - |РастягиватьПоГоризонтали, РастягиватьПоВертикали" - ); + |РастягиватьПоГоризонтали, РастягиватьПоВертикали"); ШаблонКартинкиБыстрогоДоступа.Вид = ВидДекорацииФормы.Картинка; ШаблонКартинкиБыстрогоДоступа.Ширина = 2; ШаблонКартинкиБыстрогоДоступа.Высота = 1; @@ -890,8 +883,7 @@ ШаблонКартинкиОтступа = Новый Структура( "Вид, Ширина, Высота, - |РастягиватьПоГоризонтали, РастягиватьПоВертикали" - ); + |РастягиватьПоГоризонтали, РастягиватьПоВертикали"); ШаблонКартинкиОтступа.Вид = ВидДекорацииФормы.Картинка; ШаблонКартинкиОтступа.Ширина = 1; ШаблонКартинкиОтступа.Высота = 1; @@ -901,8 +893,7 @@ // Шаблоны заполнения создаваемых элементов управления ШаблонНадписиВарианта = Новый Структура( "Вид, Гиперссылка, Высота, ЦветТекста, - |РастягиватьПоГоризонтали, РастягиватьПоВертикали" - ); + |РастягиватьПоГоризонтали, РастягиватьПоВертикали"); ШаблонНадписиВарианта.Вид = ВидДекорацииФормы.Надпись; ШаблонНадписиВарианта.Гиперссылка = Истина; ШаблонНадписиВарианта.РастягиватьПоГоризонтали = Истина; @@ -1007,7 +998,7 @@ ДеревоРаспределения.Колонки.Добавить("КоличествоПустыхСтрок", Новый ОписаниеТипов("Число")); ДеревоРаспределения.Колонки.Добавить("ВсегоВложенныхВариантов", Новый ОписаниеТипов("Число")); ДеревоРаспределения.Колонки.Добавить("ВсегоВложенныхПодсистем", Новый ОписаниеТипов("Число")); - ДеревоРаспределения.Колонки.Добавить("ВсегоВложеныхПустыхСтрок", Новый ОписаниеТипов("Число")); + ДеревоРаспределения.Колонки.Добавить("ВсегоВложенныхПустыхСтрок", Новый ОписаниеТипов("Число")); ДеревоРаспределения.Колонки.Добавить("УровеньВложенности", Новый ОписаниеТипов("Число")); МаксимальныйУровеньВложенности = 0; @@ -1039,7 +1030,7 @@ Если ЕстьВарианты Тогда СтрокаРодителя.ВсегоВложенныхВариантов = СтрокаРодителя.ВсегоВложенныхВариантов + СтрокаДерева.КоличествоВариантов; СтрокаРодителя.ВсегоВложенныхПодсистем = СтрокаРодителя.ВсегоВложенныхПодсистем + 1; - СтрокаРодителя.ВсегоВложеныхПустыхСтрок = СтрокаРодителя.ВсегоВложеныхПустыхСтрок + 1; + СтрокаРодителя.ВсегоВложенныхПустыхСтрок = СтрокаРодителя.ВсегоВложенныхПустыхСтрок + 1; КонецЕсли; СтрокаРодителя = СтрокаРодителя.Родитель; СтрокаДерева.УровеньВложенности = СтрокаДерева.УровеньВложенности + 1; @@ -1055,7 +1046,7 @@ ДеревоРаспределения.Колонки.Добавить("ГруппаФормы"); ДеревоРаспределения.Колонки.Добавить("НачатВывод", Новый ОписаниеТипов("Булево")); КорневаяСтрока = ДеревоРаспределения.Строки[0]; - КоличествоСтрок = КорневаяСтрока.ВсегоВложенныхВариантов + КорневаяСтрока.ВсегоВложенныхПодсистем + Макс(КорневаяСтрока.ВсегоВложеныхПустыхСтрок - 2, 0); + КоличествоСтрок = КорневаяСтрока.ВсегоВложенныхВариантов + КорневаяСтрока.ВсегоВложенныхПодсистем + Макс(КорневаяСтрока.ВсегоВложенныхПустыхСтрок - 2, 0); // Переменные для поддержки динамики групп 3 уровня КоличествоКолонок = ГруппаУровня2.ПодчиненныеЭлементы.Количество(); @@ -1232,7 +1223,7 @@ Для Каждого Вариант Из СтрокаДерева.Варианты Цикл // СтрокаДерева.Варианты - это результат поиска по таблице значений. // Код рассчитан на то, что сортировка результата поиска не отличается от сортировки строк. - // Если это не так, то исходную таблицу неоходимо скопировать + // Если это не так, то исходную таблицу необходимо скопировать // с фильтром по подсистеме и отсортировать по наименованию. Если НачалоСПродолжением И ВариантовВыведено = КоличествоВТекущуюКолонку Тогда diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form index 68b1d1445..667b6068d 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form @@ -26,7 +26,7 @@ НеразделенныйАдминистраторИБРасширеннаяПодсказка - 42 + 46 Label true true @@ -55,6 +55,51 @@ Normal
            + + ПарольНеразделенногоАдминистратораИБ + 36 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораИБ + + + ПарольНеразделенногоАдминистратораИБРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПарольНеразделенногоАдминистратораИБКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true @@ -70,7 +115,7 @@ РазделениеДанныхРасширеннаяПодсказка - 41 + 45 Label true true @@ -81,7 +126,6 @@ Page Vertical - auto
            @@ -108,7 +152,7 @@ АдминистраторИБРасширеннаяПодсказка - 45 + 51 Label true true @@ -127,10 +171,59 @@ Left true - 22 true true - false + true + false + true + true + true + Normal + + + + ПарольАдминистратораИБ + 27 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольАдминистратораИБ + + + ru + Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов + + + ПарольАдминистратораИБРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ПарольАдминистратораИБКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + true true true true @@ -148,7 +241,7 @@ НетРазделенияДанныхРасширеннаяПодсказка - 44 + 50 Label true true @@ -169,7 +262,7 @@ РежимРаботыРасширеннаяПодсказка - 40 + 44 Label true true @@ -182,57 +275,6 @@ Auto - - ПарольАдминистратораИБ - 27 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ПарольАдминистратораИБ - - - ru - Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов - - - ПарольАдминистратораИБРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - ПарольАдминистратораИБКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - true true @@ -240,11 +282,11 @@ <key>ru</key> - <value>Укажите администратора информационной базы:</value> + <value>Администратор информационной базы:</value> ГруппаАдминистрированиеРасширеннаяПодсказка - 39 + 43 Label true true @@ -256,7 +298,6 @@ Vertical Auto - NormalSeparation true true auto @@ -264,61 +305,28 @@ Auto
            - - КластерТребуетАвторизации - 7 - true - true - - true - - - КластерТребуетАвторизации - - Right - - OnChange - КластерТребуетАвторизацииПриИзменении - - - КластерТребуетАвторизацииРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - КластерТребуетАвторизацииКонтекстноеМеню - 8 - true - - CheckBoxField - Enter - true - Left - true - - - ГруппаАвторизацияКластера - 9 + ГруппаКластерТребуетАвторизации + 39 - ИмяАдминистратораКластера - 10 + КластерТребуетАвторизации + 7 true true true - ИмяАдминистратораКластера + КластерТребуетАвторизации + Right + + OnChange + КластерТребуетАвторизацииПриИзменении + - ИмяАдминистратораКластераРасширеннаяПодсказка - 52 + КластерТребуетАвторизацииРасширеннаяПодсказка + 56 Label true true @@ -327,40 +335,117 @@ - ИмяАдминистратораКластераКонтекстноеМеню - 11 + КластерТребуетАвторизацииКонтекстноеМеню + 8 true - InputField + CheckBoxField Enter true Left true - - 15 - true - true - false - true - true - true - Normal - + - - ПарольАдминистратораКластера - 12 + + ГруппаАвторизацияКластера + 9 + + ИмяАдминистратораКластера + 10 + true + true + + true + + + ИмяАдминистратораКластера + + + ИмяАдминистратораКластераРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ИмяАдминистратораКластераКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + ПарольАдминистратораКластера + 12 + true + true + + true + + + ПарольАдминистратораКластера + + + ПарольАдминистратораКластераРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ПарольАдминистратораКластераКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + true true true - - ПарольАдминистратораКластера - + + <key>ru</key> + <value>Параметры авторизации кластера серверов</value> + - ПарольАдминистратораКластераРасширеннаяПодсказка - 54 + ГруппаАвторизацияКластераРасширеннаяПодсказка + 58 Label true true @@ -368,26 +453,14 @@ Left - - ПарольАдминистратораКластераКонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -395,13 +468,9 @@ true - - <key>ru</key> - <value>Параметры авторизации кластера серверов</value> - - ГруппаАвторизацияКластераРасширеннаяПодсказка - 51 + ГруппаКластерТребуетАвторизацииРасширеннаяПодсказка + 55 Label true true @@ -413,67 +482,36 @@ Vertical Auto + WeakSeparation true true + auto Auto Auto - - НестандартныеПорты - 14 - true - true - - true - - - НестандартныеПорты - - Right - - OnChange - НестандартныеПортыПриИзменении - - - НестандартныеПортыРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - НестандартныеПортыКонтекстноеМеню - 15 - true - - CheckBoxField - Enter - true - Left - true - - - ГруппаПорты - 16 + ГруппаНестандартныеПорты + 38 - ПортКластераСерверов - 17 + НестандартныеПорты + 14 true true true - ПортКластераСерверов + НестандартныеПорты + Right + + OnChange + НестандартныеПортыПриИзменении + - ПортКластераСерверовРасширеннаяПодсказка - 59 + НестандартныеПортыРасширеннаяПодсказка + 64 Label true true @@ -482,38 +520,112 @@ - ПортКластераСерверовКонтекстноеМеню - 18 + НестандартныеПортыКонтекстноеМеню + 15 true - InputField + CheckBoxField Enter true Left true - - true - true - true - true - true - Normal - + - - ПортАгентаСервера - 19 + + ГруппаПорты + 16 + + ПортКластераСерверов + 17 + true + true + + true + + + ПортКластераСерверов + + + ПортКластераСерверовРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ПортКластераСерверовКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПортАгентаСервера + 19 + true + true + + true + + + ПортАгентаСервера + + + ПортАгентаСервераРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ПортАгентаСервераКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + true true true - - ПортАгентаСервера - + + <key>ru</key> + <value>Порты</value> + - ПортАгентаСервераРасширеннаяПодсказка - 61 + ГруппаПортыРасширеннаяПодсказка + 66 Label true true @@ -521,23 +633,14 @@ Left - - ПортАгентаСервераКонтекстноеМеню - 20 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -545,13 +648,9 @@ true - - <key>ru</key> - <value>Порты</value> - - ГруппаПортыРасширеннаяПодсказка - 58 + ГруппаНестандартныеПортыРасширеннаяПодсказка + 63 Label true true @@ -563,8 +662,10 @@ Vertical Auto + WeakSeparation true true + auto Auto Auto @@ -584,7 +685,7 @@ ФормаOKРасширеннаяПодсказка - 36 + 40 Label true true @@ -610,7 +711,7 @@ ФормаОтменаРасширеннаяПодсказка - 37 + 41 Label true true @@ -637,7 +738,7 @@ false СправкаРасширеннаяПодсказка - 38 + 42 Label true true diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html index ea3bf8512..c3763f873 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            • имя и пароль администратора информационной базы для выполнения блокировки регламентных и фоновых заданий от его имени;
            • имя и пароль одного из администратора кластера серверов, от имени которого выполняется принудительное завершение (отключение) сеансов пользователей; не задается, если в кластере серверов не задан ни один администратор; diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 2ca1a6a97..a67ee071d 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -707,6 +707,10 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html index 5915be9b2..cf4da606d 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

              Настройка параметров прокси-сервера для механизмов, расчитанных на работу с веб-сервисами
              При обращении к веб-сервисам параметры прокси-сервера зачитываются автоматически из специального конфигурационного файла "inetcfg.xml", расположенного в каталоге конфигурационных файлов платформы 1С:Предприятие. Каталог конфигурационных файлов платформы 1С:Предприятие, как правило, располагается по адресу "<Каталог установки платформы 1С:Предприятие>\conf\", например "C:\Program Files\1cv82\8.2.16.362\bin\conf\". Если в файле "<Каталог установки платформы 1С:Предприятие\conf\conf.cfg" задан параметр "ConfLocation=<Каталог конфигурационных файлов>", то конфигурационные файлы платформы 1С:Предприятие располагаются в каталоге <Каталог конфигурационных файлов> (как правило, это "C:\Program Files\1cv82\conf\" или "C:\Program Files\1cv8\conf\").

              diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 5a3aceba9..0a3262612 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -67,7 +66,7 @@ // 0 - Не использовать прокси-сервер (по умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) - // Для последнего становятся достуно ручное изменение параметров прокси-сервера + // Для последнего становятся доступно ручное изменение параметров прокси-сервера ВариантИспользованияПроксиСервера = ?(ИспользоватьПрокси, ?(ИспользоватьСистемныеНастройки = Истина, 1, 2), 0); Если ВариантИспользованияПроксиСервера = 0 Тогда ИнициализироватьЭлементыФормы(ЭтаФорма, ПустыеНастройкиПроксиСервера()); @@ -100,6 +99,29 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ДополнительныеПараметрыПроксиСервера") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Для Каждого КлючИЗначение Из ВыбранноеЗначение Цикл + Если КлючИЗначение.Ключ <> "НеИспользоватьПроксиДляАдресов" Тогда + ЭтаФорма[КлючИЗначение.Ключ] = КлючИЗначение.Значение; + КонецЕсли; + КонецЦикла; + + СерверыИсключений = ВыбранноеЗначение.НеИспользоватьПроксиДляАдресов; + + Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -132,7 +154,7 @@ // 0 - Не использовать прокси-сервер (по умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) - // Для последнего становятся достуно ручное изменение параметров прокси-сервера + // Для последнего становятся доступно ручное изменение параметров прокси-сервера Если ВариантИспользованияПроксиСервера = 0 Тогда НастройкиПрокси = ПустыеНастройкиПроксиСервера(); ИначеЕсли ВариантИспользованияПроксиСервера = 1 Тогда @@ -166,22 +188,7 @@ ПараметрыФормы.Вставить("НеИспользоватьПроксиДляАдресов", СерверыИсключений); - ДополнительныеНастройки = ОткрытьФормуМодально("ОбщаяФорма.ДополнительныеПараметрыПроксиСервера", - ПараметрыФормы); - - Если ТипЗнч(ДополнительныеНастройки) = Тип("Структура") Тогда - - Для каждого ИмяРеквизитаЗначение Из ДополнительныеНастройки Цикл - Если ИмяРеквизитаЗначение.Ключ <> "НеИспользоватьПроксиДляАдресов" Тогда - ЭтаФорма[ИмяРеквизитаЗначение.Ключ] = ИмяРеквизитаЗначение.Значение; - КонецЕсли; - КонецЦикла; - - СерверыИсключений = ДополнительныеНастройки.НеИспользоватьПроксиДляАдресов; - - Модифицированность = Истина; - - КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ДополнительныеПараметрыПроксиСервера", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -342,11 +349,11 @@ ЭтоФайловаяИБ = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().Файловый; ТекстВопроса = ""; Если ЭтоФайловаяИБ И НастройкаПроксиНаКлиенте Тогда - ТекстВопроса = НСтр("ru = 'Возможно применить настройки параметров прокси-сервера для механизмов, расчитанных на работу с веб-сервисами. + ТекстВопроса = НСтр("ru = 'Возможно применить настройки параметров прокси-сервера для механизмов, рассчитанных на работу с веб-сервисами. |Для этого необходимо сохранить настройки параметров прокси-сервера в файле конфигурации сети на этом компьютере. |Сохранить настройки параметров прокси-сервера в файле конфигурации сети на этом компьютере (подробнее см. в справке)?'"); ИначеЕсли НЕ ЭтоФайловаяИБ И НЕ НастройкаПроксиНаКлиенте Тогда - ТекстВопроса = НСтр("ru = 'Возможно применить настройки параметров прокси-сервера для механизмов, расчитанных на работу с веб-сервисами. + ТекстВопроса = НСтр("ru = 'Возможно применить настройки параметров прокси-сервера для механизмов, рассчитанных на работу с веб-сервисами. |Для этого необходимо сохранить настройки параметров прокси-сервера в файле конфигурации сети на компьютере сервера 1С:Предприятия. |Сохранить настройки параметров прокси-сервера в файле конфигурации сети на компьютере сервера 1С:Предприятия (подробнее см. в справке)?'"); КонецЕсли; @@ -522,7 +529,7 @@ КонецПроцедуры // Формирует двоичные данные конфигурационного файла настроек сети из -// даных формы. +// данных формы. // Возвращаемое значение: Строка - адрес двоичных данных конфигурационного // файла во временном хранилище. &НаСервере @@ -576,7 +583,7 @@ КонецЕсли; Если ЭтоФайловаяИБ Тогда - ТекстСообщения = НСтр("ru = 'Файл ""%1"" удален на этом компьюетере.'"); + ТекстСообщения = НСтр("ru = 'Файл ""%1"" удален на этом компьютере.'"); Иначе ТекстСообщения = НСтр("ru = 'Файл ""%1"" удален на сервере 1С:Предприятия. |Если в кластере задействовано несколько рабочих серверов, то необходимо вручную на каждом рабочем сервере @@ -592,7 +599,7 @@ ЗаписатьНастройкиПроксиИзДанныхФормыВФайлНаДиске(ПутьККонфФайлу); Если ЭтоФайловаяИБ Тогда - ТекстСообщения = НСтр("ru = 'Настройки прокси-сервера записаны в файл ""%1"" на этом компьюетере.'"); + ТекстСообщения = НСтр("ru = 'Настройки прокси-сервера записаны в файл ""%1"" на этом компьютере.'"); Иначе ТекстСообщения = НСтр("ru = 'Настройки прокси-сервера записаны в файл ""%1"" на сервере 1С:Предприятия. |Если в кластере задействовано несколько рабочих серверов, то необходимо сохранить настройки в файл (Сохранить как...), @@ -774,3 +781,4 @@ Возврат Результат; КонецФункции + diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html deleted file mode 100644 index afe117893..000000000 --- a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html +++ /dev/null @@ -1,3 +0,0 @@ - -

              Рекомендации по установке пароля для синхронизации данных.

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

              -

              Надежный пароль должен быть малопонятным выражением.

              Примеры надежных паролей:
              “nj7{jhjibq*Gfhjkm,
              F5”njnGhkmNj;t{HI.

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

              Примеры ненадежных паролей:
              Иванов,
              qwerty,
              12345678,
              123123123.

              \ No newline at end of file diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl deleted file mode 100644 index 1342068d3..000000000 --- a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl +++ /dev/null @@ -1,86 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); - - УстановитьПривилегированныйРежим(Истина); - - Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - Отказ = Ложь; - - Если ПустаяСтрока(Пароль) Тогда - - НСтрока = НСтр("ru = 'Не задан пароль.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Пароль",, Отказ); - - ИначеЕсли Пароль <> ПодтверждениеПароля Тогда - - НСтрока = НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "ПодтверждениеПароля",, Отказ); - - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ИзменитьПользователя(); - - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура Подробно(Команда) - - ОткрытьЗначение(Пользователь); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ИзменитьПользователя() - - ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); - - УстановитьПривилегированныйРежим(Истина); - - Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); - - Если Не ЗначениеЗаполнено(Пользователь) Тогда - ВызватьИсключение НСтр("ru = 'Пользователя для синхронизации данных с текущим автономным рабочим местом не существует.'"); - КонецЕсли; - - ПользовательОбъект = Пользователь.ПолучитьОбъект(); - - Если ПользовательОбъект = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Пользователя для синхронизации данных с текущим автономным рабочим местом не существует.'"); - КонецЕсли; - - ОписаниеПользователяИБ = Новый Структура; - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("Пароль", Пароль); - - ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); - - ПользовательОбъект.Записать(); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo deleted file mode 100644 index ec75a6668..000000000 --- a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo +++ /dev/null @@ -1,15 +0,0 @@ - - - ПарольДляСинхронизацииДанных - - ru - Пароль для синхронизации данных - - - - ru - - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form index f1195b404..bce925dcc 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form @@ -326,6 +326,10 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -477,12 +481,6 @@ Auto Auto - - ВебКлиентВLinux - - Boolean - - diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html index 858b9763c..5530e8837 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

              В форме выполняются персональные настройки электронной цифровой подписи (ЭЦП).

            Настройка
            diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl index 0c4c5a45a..9725fdc78 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl @@ -25,15 +25,13 @@ ПутьМодуляКриптографии = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭЦП", "ПутьМодуляКриптографии"); - Если НЕ Параметры.ВебКлиентВLinux Тогда - Элементы.ПараметрыВебКлиентаПодУправлениемLinux.Видимость = Ложь; - КонецЕсли; + Элементы.ПараметрыВебКлиентаПодУправлениемLinux.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() И ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); ОтпечатокЛичногоСертификатаДляШифрования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭЦП", "ОтпечатокЛичногоСертификатаДляШифрования"); Если НЕ Параметры.Свойство("ПоказыватьНастройкиШифрования") Тогда Элементы.ЛичныйСертификатДляШифрования.Видимость = Ложь; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -52,6 +50,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборСертификата") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ОтпечатокЛичногоСертификатаДляШифрования = ВыбранноеЗначение.Отпечаток; + СтруктураСертификата = ЭлектроннаяЦифроваяПодписьКлиент.ЗаполнитьСтруктуруСертификатаПоОтпечатку(ОтпечатокЛичногоСертификатаДляШифрования); + ЛичныйСертификатДляШифрования = СтруктураСертификата.КомуВыдан; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -69,17 +84,9 @@ МассивСтруктурЛичныхСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); // ТолькоЛичные - ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов", МассивСтруктурЛичныхСертификатов); - СтруктураВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификата", ПараметрыФормы); - - Если ТипЗнч(СтруктураВозврата) = Тип("Структура") Тогда - - ОтпечатокЛичногоСертификатаДляШифрования = СтруктураВозврата.Отпечаток; - - СтруктураСертификата = ЭлектроннаяЦифроваяПодписьКлиент.ЗаполнитьСтруктуруСертификатаПоОтпечатку(ОтпечатокЛичногоСертификатаДляШифрования); - ЛичныйСертификатДляШифрования = СтруктураСертификата.КомуВыдан; - - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивСтруктурСертификатов", МассивСтруктурЛичныхСертификатов); + ОткрытьФорму("ОбщаяФорма.ВыборСертификата", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -162,4 +169,3 @@ Возврат Истина; КонецФункции - diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 16415fdab..9f23d05ce 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -1399,6 +1399,10 @@ Lefttrue + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения @@ -2113,6 +2117,11 @@ true + + ПараметрыИсточника + + true + diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index ff5a1a045..8b1430a3b 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -10,6 +10,18 @@ Возврат; КонецЕсли; + // поддержка обратной совместимости с 2.1.3 + ПараметрыПечати = Параметры.ПараметрыПечати; + Если Параметры.ПараметрыПечати = Неопределено Тогда + ПараметрыПечати = Новый Структура; + КонецЕсли; + Если Не ПараметрыПечати.Свойство("ДополнительныеПараметры") Тогда + Параметры.ПараметрыПечати = Новый Структура("ДополнительныеПараметры", ПараметрыПечати); + Для Каждого ПараметрПечати Из ПараметрыПечати Цикл + Параметры.ПараметрыПечати.Вставить(ПараметрПечати.Ключ, ПараметрПечати.Значение); + КонецЦикла; + КонецЕсли; + СформироватьПечатныеФормы(КоллекцияПечатныхФорм, Параметры.ИменаМакетов, Отказ); Если Отказ Тогда Возврат; @@ -38,6 +50,38 @@ УстановитьТекущуюСтраницу(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда + + Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда + ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранноеЗначение); + Если ВыбранноеЗначение.ВариантСохранения = "СохранитьВПапку" Тогда + СохранитьПечатныеФормыВПапку(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения); + Иначе + ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, ВыбранноеЗначение.ОбъектДляПрикрепления); + Состояние(НСтр("ru = 'Сохранение успешно завершено.'")); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборФорматаВложений") + Или ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодготовкаНовогоПисьма") Тогда + + Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда + СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранноеЗначение); + ПараметрыОтправки = ПараметрыВывода.ПараметрыОтправки; + Получатели = ПараметрыОтправки.Получатель; + Если ВыбранноеЗначение.Свойство("Получатели") Тогда + Получатели = ВыбранноеЗначение.Получатели; + КонецЕсли; + РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения( , Получатели, ПараметрыОтправки.Тема, ПараметрыОтправки.Текст, СписокВложений, Истина); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии() @@ -62,12 +106,22 @@ НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); - Если Источник = УникальныйИдентификатор И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету Тогда - Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" Тогда + Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" + И Источник.ВладелецФормы = ЭтаФорма + И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету Тогда ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму",0.1,Истина); - ИначеЕсли ИмяСобытия = "ОтказОтИзмененияМакета" Тогда + ИначеЕсли (ИмяСобытия = "ОтказОтИзмененияМакета" + Или Имясобытия = "ОтменаРедактированияТабличногоДокумента" + И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету) + И Источник.ВладелецФормы = ЭтаФорма Тогда ОтобразитьСостояниеТекущейПечатнойФормы(); - КонецЕсли; + ИначеЕсли ИмяСобытия = "Запись_ТабличныйДокумент" + И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету + И Источник.ВладелецФормы = ЭтаФорма Тогда + Макет = Параметр.ТабличныйДокумент; + АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет); + ЗаписатьМакет(Параметр.ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); + ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму",0.1,Истина); КонецЕсли; КонецПроцедуры @@ -140,38 +194,22 @@ &НаКлиенте Процедура Сохранить(Команда) - НастройкиСохранения = ОткрытьФормуМодально("ОбщаяФорма.СохранениеПечатнойФормы", Новый Структура("ОбъектыПечати", ОбъектыПечати)); - Если НастройкиСохранения <> Неопределено И НастройкиСохранения <> КодВозвратаДиалога.Отмена Тогда - ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); - Если НастройкиСохранения.ВариантСохранения = "СохранитьВПапку" Тогда - СохранитьПечатныеФормыВПапку(ФайлыВоВременномХранилище, НастройкиСохранения.ПапкаДляСохранения); - Иначе - ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, НастройкиСохранения.ОбъектДляПрикрепления); - Состояние(НСтр("ru = 'Сохранение успешно завершено.'")); - КонецЕсли; - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати); + ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура Отправить(Команда) - ПараметрыОткрытия = Новый Структура; + ПараметрыФормы = Новый Структура; ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений"; Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда - ПараметрыОткрытия.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); + ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма"; КонецЕсли; - НастройкиСохранения = ОткрытьФормуМодально(ИмяОткрываемойФормы, ПараметрыОткрытия); - Если НастройкиСохранения <> Неопределено И НастройкиСохранения <> КодВозвратаДиалога.Отмена Тогда - СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); - ПараметрыОтправки = ПараметрыВывода.ПараметрыОтправки; - Получатели = ПараметрыОтправки.Получатель; - Если НастройкиСохранения.Свойство("Получатели") Тогда - Получатели = НастройкиСохранения.Получатели; - КонецЕсли; - РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения( , Получатели, ПараметрыОтправки.Тема, ПараметрыОтправки.Текст, СписокВложений, Истина); - КонецЕсли; + ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -261,12 +299,16 @@ // формирование табличных документов Если ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда - ПечатьВыполнена = УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику(Параметры.ИсточникДанных, - Параметры.ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); - Отказ = Отказ Или Не ПечатьВыполнена; + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику(Параметры.ИсточникДанных, + Параметры.ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + Иначе + Отказ = Истина; + КонецЕсли; Иначе УправлениеПечатью.СформироватьПечатныеФормы(Параметры.ИмяМенеджераПечати, ИменаМакетов, - Параметры.ПараметрКоманды, Параметры.ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + Параметры.ПараметрКоманды, Параметры.ПараметрыПечати.ДополнительныеПараметры, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); КонецЕсли; // установка признака сохранения печатной формы в файл (не открывать форму, сразу сохранять в файл) @@ -426,7 +468,7 @@ ДобавитьКоличествоЭкземпляровВПредставленияхПечатныхФорм(); КонецЕсли; - ДоступноИзменениеМакетов = Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм"); + ДоступноИзменениеМакетов = Пользователи.РолиДоступны("ИзменениеМакетовПечатныхФорм") И ЕстьРедактируемыеМакеты(); Элементы.КнопкаИзменитьМакет.Видимость = ДоступноИзменениеМакетов И ЕстьДанныеДляПечати; // отключение "технологической" страницы, которая нужна только в конфигураторе для дизайна формы @@ -842,6 +884,15 @@ Возврат Результат; КонецФункции +&НаСервере +Функция ЕстьРедактируемыеМакеты() + Результат = Ложь; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Результат = Результат Или Не ПустаяСтрока(НастройкаПечатнойФормы.ПутьКМакету); + КонецЦикла; + Возврат Результат; +КонецФункции + &НаКлиенте Процедура ОткрытьМакетДляРедактирования() @@ -851,15 +902,24 @@ ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету; - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета); - ПараметрыОткрытия.Вставить("ТипМакета", "MXL"); #Если ВебКлиент Тогда - ПараметрыОткрытия.Вставить("ЭтоВебКлиент", Истина); + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета); + ПараметрыОткрытия.Вставить("ТипМакета", "MXL"); + ПараметрыОткрытия.Вставить("ЭтоВебКлиент", Истина); + + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыОткрытия, ЭтаФорма); + + #Иначе + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета); + ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыОткрытия.Вставить("ИмяДокумента", НастройкаПечатнойФормы.Представление); + ПараметрыОткрытия.Вставить("Редактирование", Истина); + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтаФорма); #КонецЕсли - ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыОткрытия, ЭтаФорма); - КонецПроцедуры &НаКлиенте @@ -962,3 +1022,7 @@ Возврат Результат; КонецФункции +&НаСервереБезКонтекста +Процедура ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) + УправлениеПечатью.ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); +КонецПроцедуры diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form index a1feb62c4..816543f0e 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Form.form @@ -942,6 +942,10 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -965,7 +969,7 @@ SaveValues Yes 60 - DontBlock + LockOwner Use UseList true diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl index c4bb64044..4196607a4 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl @@ -3,8 +3,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -45,12 +44,28 @@ СформироватьПредставлениеВыбранныхФорматов(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборФорматаВложений") Тогда + + Если ВыбранноеЗначение <> КодВозвратаДиалога.Отмена И ВыбранноеЗначение <> Неопределено Тогда + УстановитьВыборФормата(ВыбранноеЗначение.ФорматыСохранения); + УпаковатьВАрхив = ВыбранноеЗначение.УпаковатьВАрхив; + СформироватьПредставлениеВыбранныхФорматов(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Выбрать(Команда) - Закрыть(ВыбранныеНастройкиФормата()); + РезультатВыбора = ВыбранныеНастройкиФормата(); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры &НаКлиенте @@ -69,12 +84,9 @@ &НаКлиенте Процедура ФорматВложенийНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - РезультатВыбораФорматов = ОткрытьФормуМодально("ОбщаяФорма.ВыборФорматаВложений", Новый Структура("НастройкиФормата", ВыбранныеНастройкиФормата())); - Если РезультатВыбораФорматов <> КодВозвратаДиалога.Отмена И РезультатВыбораФорматов <> Неопределено Тогда - УстановитьВыборФормата(РезультатВыбораФорматов.ФорматыСохранения); - УпаковатьВАрхив = РезультатВыбораФорматов.УпаковатьВАрхив; - СформироватьПредставлениеВыбранныхФорматов(); - КонецЕсли; + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("НастройкиФормата", ВыбранныеНастройкиФормата()); + ОткрытьФорму("ОбщаяФорма.ВыборФорматаВложений", ПараметрыОткрытия, ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -211,3 +223,4 @@ КонецЦикла; КонецФункции + diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl index b360e212c..6da30053c 100644 --- a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl @@ -29,8 +29,7 @@ Отказ, , ЗакрытьФормуБезусловно, - НСтр("ru = 'Отменить подключение конечной точки?'") - ); + НСтр("ru = 'Отменить подключение конечной точки?'")); КонецПроцедуры @@ -60,7 +59,7 @@ Отбор = Новый Структура; Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииПодключениеКонечнойТочки); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); КонецЕсли; Возврат; @@ -94,8 +93,7 @@ НастройкиОтправителяWSПароль, НастройкиПолучателяWSURLВебСервиса, НастройкиПолучателяWSИмяПользователя, - НастройкиПолучателяWSПароль - ); + НастройкиПолучателяWSПароль); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html b/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html index 5625568f4..9d3ebdd60 100644 --- a/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

            Форма предназначена для просмотра основных свойств электронной цифровой подписи (ЭЦП).

            В ней можно посмотреть основные свойства подписи: кому выдан сертификат, кто установил подпись, дату установки подписи, комментарий к подписи.

            По команде "Открыть сертификат" открывается форма просмотра сертификата.

            diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form index 500f1b540..6b9f61e05 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form @@ -305,6 +305,23 @@ true + + ПроверитьВозможностьОтправкиИПолучения + + <key>ru</key> + <value>Проверить возможность отправки и получения</value> + + 5 + + Boolean + + + true + + + true + + СохранитьПарольИПродолжить diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html index cc13455df..962483d6a 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для отправки письма необходимо ввести пароль и нажать кнопку "<strong>Продолжить</strong>" на командной панели. Эта форма открывается при отправке письма с учетных записей, в которых пароль не задан.</p> <p>Командная панель формы содержит следующие кнопки:</p> <ul><li><strong>Продолжить</strong> - эта форма закрывается и письмо отправляется diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl index 5650734e0..092a17460 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl @@ -7,7 +7,7 @@ // // Неопределено - пользователь отказался от ввода пароля // Структура - -// ключ "Статус", булево - истина или ложь в зависмости от успеха вызова +// ключ "Статус", булево - истина или ложь в зависимости от успеха вызова // ключ "Пароль", строка - в случае если статус Истина содержит пароль // ключ "СообщениеОбОшибке" - в случае если статус Истина содержит текст // сообщения об ошибке @@ -26,11 +26,12 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Параметры.Свойство("ПроверитьВозможностьОтправкиИПолучения", ПроверитьВозможностьОтправкиИПолучения); + Если Параметры.УчетнаяЗапись.Пустая() Тогда Отказ = Истина; Возврат; @@ -73,7 +74,11 @@ СохранитьПароль(Неопределено); КонецЕсли; - Закрыть(Пароль); + Если ПроверитьВозможностьОтправкиИПолучения Тогда + РаботаСПочтовымиСообщениямиКлиент.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, Пароль); + КонецЕсли; + + ОповеститьОВыборе(Пароль); КонецПроцедуры @@ -86,8 +91,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ФормаПодтвержденияПароляУчетнойЗаписи", УчетнаяЗапись, - Значение - ); + Значение); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl b/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl index f5f42e171..fecdd9f75 100644 --- a/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl +++ b/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl @@ -37,7 +37,7 @@ Параметры.ПризнакАктуальности = НайденоПоИндексу.ПризнакАктуальности; Параметры.АдресВХранилище = НайденоПоИндексу.АдресВХранилище; СкрыватьНеактуальныеАдреса = Параметры.СкрыватьНеактуальныеАдреса; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); КонецЕсли; ЗначениеВРеквизитФормы(ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище), "НайденныеЗаписиПоИндексу"); @@ -60,7 +60,7 @@ Элементы.НайденныеЗаписиПоИндексу.ПодчиненныеЭлементы.Описание.Видимость = ЕстьОписание; // Восстанавливаем значение флага "Скрывать неактуальные адреса" - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса"); Если Значение = Неопределено Тогда СкрыватьНеактуальныеАдреса = Ложь; Иначе @@ -86,7 +86,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); КонецПроцедуры @@ -174,7 +174,7 @@ Функция ОбработатьРезультатПоискаПоИндексу(КодАдресногоЭлемента) // Восстанавливаем значение флага "Скрывать неактуальные адреса" - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса"); Если Значение = Неопределено Тогда Результат = Новый Структура("СкрыватьНеактуальныеАдреса", Ложь); Иначе diff --git a/SSL/src/CommonForms/ПользователиСервиса/Form.form b/SSL/src/CommonForms/ПользователиСервиса/Form.form index 124d2765c..a055024c1 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Form.form +++ b/SSL/src/CommonForms/ПользователиСервиса/Form.form @@ -457,6 +457,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>OnOpen</event> <name>ПриОткрытии</name> diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl index 005ea48f8..8fd9ec57f 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -14,19 +14,30 @@ ВызватьИсключение(НСтр("ru = 'В демонстрационном режиме не доступно добавление новых пользователей'")); КонецЕсли; + // Форма недоступна пока подготовка не закончена. + Доступность = Ложь; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ); + ПодключитьОбработчикОжидания("ОткрытьФормуАутентификацияВСервисе", 0.1, Истина); - Если Отказ Тогда - Возврат; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АутентификацияВСервисе") Тогда + Если ВыбранноеЗначение = Неопределено Тогда + ПодключитьОбработчикОжидания("ЗакрытьЭтуФорму", 0.1, Истина); + Иначе + ПарольПользователяСервиса = ВыбранноеЗначение; + ПодготовитьФорму(); + КонецЕсли; КонецЕсли; - ПодготовитьФорму(); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -63,6 +74,20 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ОткрытьФормуАутентификацияВСервисе() + + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьЭтуФорму() + + Закрыть(); + +КонецПроцедуры + &НаСервере Процедура ПодготовитьФорму() @@ -76,7 +101,9 @@ СтрокаПользователя = ПользователиСервиса.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаПользователя, ИнформацияОПользователе); КонецЦикла; - + + Доступность = Истина; + КонецПроцедуры &НаСервере diff --git a/SSL/src/CommonForms/ПраваДоступа/Form.form b/SSL/src/CommonForms/ПраваДоступа/Form.form index 2e51f5373..1b76a040f 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваДоступа/Form.form @@ -1148,6 +1148,10 @@ </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> @@ -1163,6 +1167,7 @@ <windowOpeningMode>DontBlock</windowOpeningMode> <autoSaveDataInSettings>Use</autoSaveDataInSettings> <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> <autoFillCheck>true</autoFillCheck> <allowFormCustomize>true</allowFormCustomize> @@ -1508,6 +1513,38 @@ </edit> </columns> </attributes> + <attributes> + <name>ПарольПользователяСервиса</name> + <title> + <key>ru</key> + <value>Пароль пользователя сервиса</value> + + 3 + + + true + + + true + + + + ПолучениеПароляВключитьВГруппуДоступаАдминистраторы + + <key>ru</key> + <value>Получение пароля включить в группу доступа администраторы</value> + + 8 + + Boolean + + + true + + + true + + ВключитьВГруппу diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index cc769fca9..cdbb0e08d 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -8,9 +8,6 @@ Возврат; КонецЕсли; - // Установка заголовка формы. - Заголовок = НСтр("ru = 'Права доступа'"); - ПользовательИБПолноправный = Пользователи.ЭтоПолноправныйПользователь(); СвойДоступ = Параметры.Пользователь = Пользователи.АвторизованныйПользователь(); @@ -25,9 +22,9 @@ Элементы.ФормаОтчетПраваДоступа.Видимость = ПользовательИБПолноправный - ИЛИ Параметры.Пользователь = Пользователи.ТекущийПользователь(); + ИЛИ Параметры.Пользователь = Пользователи.АвторизованныйПользователь(); - // Настройка команд для неполноправного пользователя + // Настройка команд для не полноправного пользователя Элементы.ФормаВключитьВГруппу.Видимость = ПользовательИБОтветственный; Элементы.ФормаИсключитьИзГруппы.Видимость = ПользовательИБОтветственный; Элементы.ФормаИзменитьГруппу.Видимость = ПользовательИБОтветственный; @@ -92,6 +89,63 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ГруппыДоступа.Форма.ВыборПоОтветственному") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ГруппыДоступа") + И ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено + И ВыбранноеЗначение = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + + ПарольЕщёНеВведен = Ложь; + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); + + Если ПарольЕщёНеВведен Тогда + ПолучениеПароляВключитьВГруппуДоступаАдминистраторы = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + + ОписаниеОшибки = ""; + ИзменитьСоставГруппы(ВыбранноеЗначение, Истина, ОписаниеОшибки); + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Предупреждение(ОписаниеОшибки); + Иначе + ОповеститьОбИзменении(ВыбранноеЗначение); + Оповестить("Запись_ГруппыДоступа", Новый Структура, ВыбранноеЗначение); + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АутентификацияВСервисе") Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ПарольПользователяСервиса = ВыбранноеЗначение; + + ОписаниеОшибки = ""; + ИзменитьСоставГруппы( + ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы"), + ПолучениеПароляВключитьВГруппуДоступаАдминистраторы, + ОписаниеОшибки); + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Предупреждение(ОписаниеОшибки); + Иначе + ОповеститьОбИзменении( + ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы")); + + Оповестить("Запись_ГруппыДоступа", Новый Структура, ВыбранноеЗначение); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыДоступа @@ -145,22 +199,7 @@ ПараметрыФормы.Вставить("Выбранные", Выбранные); ПараметрыФормы.Вставить("ПользовательГрупп", Параметры.Пользователь); - НоваяГруппаДоступаПользователя = ОткрытьФормуМодально( - "Справочник.ГруппыДоступа.Форма.ВыборПоОтветственному", ПараметрыФормы); - - Если ТипЗнч(НоваяГруппаДоступаПользователя) = Тип("СправочникСсылка.ГруппыДоступа") - И ЗначениеЗаполнено(НоваяГруппаДоступаПользователя) Тогда - - ОписаниеОшибки = ""; - ИзменитьСоставГруппы(НоваяГруппаДоступаПользователя, Истина, ОписаниеОшибки); - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - - Предупреждение(ОписаниеОшибки); - Иначе - ОповеститьОбИзменении(НоваяГруппаДоступаПользователя); - Оповестить("Запись_ГруппыДоступа", Новый Структура, НоваяГруппаДоступаПользователя); - КонецЕсли; - КонецЕсли; + ОткрытьФорму("Справочник.ГруппыДоступа.Форма.ВыборПоОтветственному", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -172,10 +211,22 @@ Возврат; КонецЕсли; + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено + И ТекущаяГруппаДоступа = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + + ПарольЕщёНеВведен = Ложь; + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); + + Если ПарольЕщёНеВведен Тогда + ПолучениеПароляВключитьВГруппуДоступаАдминистраторы = Ложь; + Возврат; + КонецЕсли; + КонецЕсли; + ОписаниеОшибки = ""; ИзменитьСоставГруппы(ТекущаяГруппаДоступа, Ложь, ОписаниеОшибки); Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - Предупреждение(ОписаниеОшибки); Иначе ОповеститьОбИзменении(ТекущаяГруппаДоступа); @@ -370,6 +421,18 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда + + ДействияСПользователемСервиса = Неопределено; + УправлениеДоступомСлужебный.ПриПолученииДействийСПользователемСервиса(ДействияСПользователемСервиса); + + Если НЕ ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа Тогда + ВызватьИсключение + НСтр("ru = 'Не достаточно прав доступа для изменения состава администраторов.'"); + КонецЕсли; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); @@ -386,14 +449,22 @@ КонецЕсли; Если ГруппаДоступаОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменение состава администраторов выполняется - |непосредственно в группе доступа %1.'"), - ГруппаДоступаОбъект.Наименование); - Иначе - ГруппаДоступаОбъект.Записать(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить( + "ПарольПользователяСервиса", ПарольПользователяСервиса); + Иначе + УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( + ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки); + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Возврат; + КонецЕсли; + КонецЕсли; КонецЕсли; + ГруппаДоступаОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка); ТекущаяГруппаДоступа = ГруппаДоступаОбъект.Ссылка; @@ -447,7 +518,6 @@ КонецФункции - &НаСервере Процедура ЗаполнитьРоли() diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index 4a9879491..84778893b 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -1700,6 +1700,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>BeforeClose</event> <name>ПередЗакрытием</name> @@ -1714,6 +1718,7 @@ </handlers> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> <group>Vertical</group> <autoFillCheck>true</autoFillCheck> diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index c88bbc5b9..86bb06d4e 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -35,10 +35,6 @@ // Заполнение вспомогательных данных. - // Установка заголовка формы - Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( - НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); - Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Элементы.Профили.Заголовок = НСтр("ru = 'Профили внешнего пользователя'"); Иначе @@ -91,7 +87,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); Запрос.УстановитьПараметр("ОтборПрофилейТолькоТекущегоПользователя", - ОтборПрофилейТолькоТекущегоПользователя); + ОтборПрофилейТолькоТекущегоПользователя); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Профили.Ссылка, @@ -203,6 +199,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АутентификацияВСервисе") + И ВыбранноеЗначение <> Неопределено Тогда + + ПарольПользователяСервиса = ВыбранноеЗначение; + ЗаписатьИзменения(); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) @@ -520,10 +528,11 @@ Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено И ТребуетсяСинхронизацияССервисом Тогда - Отказ = Ложь; - СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ); + ПарольЕщёНеВведен = Ложь; + СтандартныеПодсистемыКлиент.ПриЗапросеПароляДляАутентификацииВСервисе( + ЭтаФорма, ПарольПользователяСервиса, ПарольЕщёНеВведен); - Если Отказ Тогда + Если ПарольЕщёНеВведен Тогда Возврат; КонецЕсли; КонецЕсли; @@ -655,8 +664,8 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПрофилиИзмененыхГрупп.Профиль - |ПОМЕСТИТЬ ПрофилиИзмененыхГрупп + | ПрофилиИзмененныхГрупп.Профиль + |ПОМЕСТИТЬ ПрофилиИзмененныхГрупп |ИЗ | (ВЫБРАТЬ | Профили.Ссылка КАК Профиль @@ -717,7 +726,7 @@ | И (ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа) | И (ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа) | ГДЕ - | ЗначенияДоступа.ВидДоступа ЕСТЬ NULL ) КАК ПрофилиИзмененыхГрупп + | ЗначенияДоступа.ВидДоступа ЕСТЬ NULL ) КАК ПрофилиИзмененныхГрупп |; | |//////////////////////////////////////////////////////////////////////////////// @@ -727,13 +736,13 @@ | Профили.Пометка, | ТекущиеПрофили.ПерсональнаяГруппаДоступа |ИЗ - | ПрофилиИзмененыхГрупп КАК ПрофилиИзмененыхГрупп + | ПрофилиИзмененныхГрупп КАК ПрофилиИзмененныхГрупп | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Профили КАК Профили - | ПО ПрофилиИзмененыхГрупп.Профиль = Профили.Ссылка + | ПО ПрофилиИзмененныхГрупп.Профиль = Профили.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили - | ПО ПрофилиИзмененыхГрупп.Профиль = ТекущиеПрофили.Ссылка + | ПО ПрофилиИзмененныхГрупп.Профиль = ТекущиеПрофили.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК СправочникПрофили - | ПО (СправочникПрофили.Ссылка = ПрофилиИзмененыхГрупп.Профиль)"; + | ПО (СправочникПрофили.Ссылка = ПрофилиИзмененныхГрупп.Профиль)"; НачатьТранзакцию(); Попытка @@ -922,8 +931,7 @@ НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ), ?(ТекущиеДанные.ДоступРазрешен, НСтр("ru = 'Запрещенные значения (%1)'"), - НСтр("ru = 'Разрешенные значения (%1)'") ) - ) + НСтр("ru = 'Разрешенные значения (%1)'") )) ), Строка(ТекущиеДанные.ВидДоступа)); diff --git a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form index bb3a67dc5..310f3d445 100644 --- a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form @@ -1,5 +1,9 @@ <?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"> + <title> + <key>ru</key> + <value>Права доступа</value> + ГруппыПрав 1 @@ -638,7 +642,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl index 5210e0a74..0f12a176f 100644 --- a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl @@ -41,10 +41,6 @@ Тип("СправочникСсылка.ВнешниеПользователи"), "ВнешниеПользователи"); - // Установка заголовка формы. - Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( - НСтр("ru = 'Права доступа: %1 (%2)'"), СсылкаНаОбъект); - МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); НазваниеЗначенийДоступа = УправлениеДоступомСлужебный.НазваниеОбъектаИзМетаданных(МетаданныеОбъекта); @@ -286,7 +282,7 @@ &НаКлиенте Процедура ГруппыПравЗапрещеноПриИзменении(Элемент) - // При изменении вида настроки необходимо сбросить флажки прав. + // При изменении вида настройки необходимо сбросить флажки прав. Для каждого ВозможноеПраво Из ВозможныеПрава Цикл Элементы.ГруппыПрав.ТекущиеДанные[ВозможноеПраво.Ключ] = Ложь; КонецЦикла; diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 9c887c3c0..8ff9ddd13 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -27,11 +27,11 @@ ПараметрыФормы = Неопределено; Если СтрокаВопроса.Значение.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда КонецЕсли; - ОткрытьФормуМодально(Форма, ПараметрыФормы); - КонецЕсли; + ОткрытьФорму(Форма, ПараметрыФормы, ЭтаФорма); + КонецЕсли; Прервать; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЦикла; КонецПроцедуры // Инициализирует массив будущих задач, которые необходимо выполнить при закрытии. @@ -43,12 +43,12 @@ Если НайденныйЭлемент = Неопределено Тогда Возврат; - КонецЕсли; + КонецЕсли; ЗначениеЭлемента = ЭтаФорма[ИмяЭлемента]; Если ТипЗнч(ЗначениеЭлемента) <> Тип("Булево") Тогда Возврат; - КонецЕсли; + КонецЕсли; ИдентификаторМассива = ИдентификаторМассиваЗадачПоИмени(ИмяЭлемента); @@ -61,7 +61,7 @@ Если ТипЗнч(Использование) = Тип("Булево") Тогда ЭлементМассива.Значение.Использование = ЗначениеЭлемента; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -106,24 +106,24 @@ Если ТекущееПредупреждение.ТекстФлажка <> Неопределено И ТекущееПредупреждение.ТекстГиперСсылки <> Неопределено Тогда Продолжить; - КонецЕсли; + КонецЕсли; - // Формирование гипперссылки на форме. + // Формирование гиперссылки на форме. Если ТекущееПредупреждение.ТекстГиперСсылки <> Неопределено Тогда Если Не ПустаяСтрока(ТекущееПредупреждение.ТекстГиперСсылки) Тогда - СоздатьГипперссылкуНаФорме(ТекущееПредупреждение); - КонецЕсли; - КонецЕсли; + СоздатьГиперссылкуНаФорме(ТекущееПредупреждение); + КонецЕсли; + КонецЕсли; // Формирование флажка на форме. Если ТекущееПредупреждение.ТекстФлажка <> Неопределено Тогда Если Не ПустаяСтрока(ТекущееПредупреждение.ТекстФлажка) Тогда СоздатьФлажокНаФорме(ТекущееПредупреждение); - КонецЕсли; + КонецЕсли; КонецЕсли; - КонецЦикла; + КонецЦикла; - // Формирование окончательного впороса на форме. + // Формирование окончательного вопроса на форме. СоздатьОкончательныйВопрос(); КонецПроцедуры @@ -137,7 +137,7 @@ ТаблицаПредупреждений.Колонки.Добавить("ДействиеПриУстановленномФлажке"); ТаблицаПредупреждений.Колонки.Добавить("ДействиеПриНажатииГиперссылки"); ТаблицаПредупреждений.Колонки.Добавить("Приоритет"); - ТаблицаПредупреждений.Колонки.Добавить("ОчищатьПредупрежденияДругихОбработчиков"); + ТаблицаПредупреждений.Колонки.Добавить("ВывестиОдноПредупреждение"); Для Каждого ЭлементПредупреждения Из Предупреждения Цикл СтрокаТаблицы = ТаблицаПредупреждений.Добавить(); @@ -147,16 +147,16 @@ ЭлементПредупреждения.Свойство("ДействиеПриУстановленномФлажке", СтрокаТаблицы.ДействиеПриУстановленномФлажке); ЭлементПредупреждения.Свойство("ДействиеПриНажатииГиперссылки", СтрокаТаблицы.ДействиеПриНажатииГиперссылки); ЭлементПредупреждения.Свойство("Приоритет", СтрокаТаблицы.Приоритет); - ЭлементПредупреждения.Свойство("ОчищатьПредупрежденияДругихОбработчиков", СтрокаТаблицы.ОчищатьПредупрежденияДругихОбработчиков); + ЭлементПредупреждения.Свойство("ВывестиОдноПредупреждение", СтрокаТаблицы.ВывестиОдноПредупреждение); - Если СтрокаТаблицы.ОчищатьПредупрежденияДругихОбработчиков <> Истина Тогда + Если СтрокаТаблицы.ВывестиОдноПредупреждение <> Истина Тогда ОчищаемыеПредупреждения.Добавить(СтрокаТаблицы); КонецЕсли; КонецЦикла; // Поиск обработчиков, которые требуют очистки предупреждений. - Отбор = Новый Структура("ОчищатьПредупрежденияДругихОбработчиков", Истина); + Отбор = Новый Структура("ВывестиОдноПредупреждение", Истина); НайденныеПредупреждения = ТаблицаПредупреждений.НайтиСтроки(Отбор); Если НайденныеПредупреждения.Количество() <> 0 Тогда Для Каждого ОчищаемоеПредупреждения Из ОчищаемыеПредупреждения Цикл @@ -192,7 +192,7 @@ // СтруктураВопроса - структура передаваемого вопроса. // &НаСервере -Процедура СоздатьГипперссылкуНаФорме(СтруктураВопроса) +Процедура СоздатьГиперСсылкуНаФорме(СтруктураВопроса) Группа = СформироватьГруппуЭлементовФормы(); Если СтруктураВопроса.ПоясняющийТекст <> Неопределено Тогда @@ -208,23 +208,23 @@ Если СтруктураВопроса.ТекстГиперСсылки <> Неопределено Тогда Если Не ПустаяСтрока(СтруктураВопроса.ТекстГиперСсылки) Тогда - ИмяГиперсылки = ОпределитьИмяНадписиВФорме("НадписьВопроса"); - ТипГиперсылки = Тип("ДекорацияФормы"); - РодительГиперсылки = Группа; + ИмяГиперСсылки = ОпределитьИмяНадписиВФорме("НадписьВопроса"); + ТипГиперСсылки = Тип("ДекорацияФормы"); + РодительГиперСсылки = Группа; - ЭлементГиперСсылки = Элементы.Добавить(ИмяГиперсылки, ТипГиперсылки, РодительГиперсылки); + ЭлементГиперСсылки = Элементы.Добавить(ИмяГиперСсылки, ТипГиперСсылки, РодительГиперСсылки); ЭлементГиперСсылки.Гиперссылка = Истина; ЭлементГиперСсылки.Заголовок = СтруктураВопроса.ТекстГиперСсылки; ЭлементГиперСсылки.УстановитьДействие("Нажатие", "НажатиеНаГиперСсылку"); - ФормаГиперссылки = Неопределено; - ДействиеГиперссылки = Неопределено; + ФормаГиперСсылки = Неопределено; + ДействиеГиперСсылки = Неопределено; Если СтруктураВопроса.ДействиеПриНажатииГиперссылки <> Неопределено Тогда СтруктураОбработки = СтруктураВопроса.ДействиеПриНажатииГиперссылки; - Если СтруктураОбработки.Свойство("Форма", ФормаГиперссылки) Тогда + Если СтруктураОбработки.Свойство("Форма", ФормаГиперСсылки) Тогда СтруктураМассива = Новый Структура; - СтруктураМассива.Вставить("Имя", ИмяГиперсылки); - СтруктураМассива.Вставить("Форма", ФормаГиперссылки); + СтруктураМассива.Вставить("Имя", ИмяГиперСсылки); + СтруктураМассива.Вставить("Форма", ФормаГиперСсылки); ПараметрыФормы = Неопределено; Если СтруктураОбработки.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда @@ -233,21 +233,21 @@ ИначеЕсли ПараметрыФормы = Неопределено Тогда ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЗавершениеРаботыПрограммы", Истина); - КонецЕсли; + КонецЕсли; СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); - КонецЕсли; + КонецЕсли; МассивСоотношенияЭлементовИПараметров.Добавить(СтруктураМассива); - КонецЕсли; + КонецЕсли; КонецЕсли; КонецЕсли; - КонецЕсли; -КонецПроцедуры + КонецЕсли; +КонецПроцедуры // Формирует на форме флажок с поясняющим текстом. // // Параметры: -// СтруктураВопроса - труктура передаваемого вопроса. +// СтруктураВопроса - структура передаваемого вопроса. // &НаСервере Процедура СоздатьФлажокНаФорме(СтруктураВопроса) @@ -304,13 +304,13 @@ ПараметрыФормы = Неопределено; Если СтруктураДействия.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда СтруктураМассива.Вставить("ПараметрыФормы", ПараметрыФормы); - КонецЕсли; + КонецЕсли; МассивЗадачНаВыполнениеПослеЗакрытия.Добавить(СтруктураМассива); КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецПроцедуры &НаСервере @@ -345,11 +345,11 @@ НайденныйЭлемент = Элементы.Найти(Имя); Если НайденныйЭлемент = Неопределено Тогда - Возврат Имя; - КонецЕсли; + Возврат Имя; + КонецЕсли; Индекс = Индекс + 1; - КонецЦикла; + КонецЦикла; КонецФункции &НаКлиенте @@ -382,15 +382,15 @@ КонецЕсли; Если Использование <> Истина Тогда Продолжить; - КонецЕсли; + КонецЕсли; Форма = Неопределено; Если ЭлементМассива.Значение.Свойство("Форма", Форма) Тогда ПараметрыФормы = Неопределено; Если ЭлементМассива.Значение.Свойство("ПараметрыФормы", ПараметрыФормы) Тогда ОткрытьФормуМодально(Форма, СтруктураИзФиксированнойСтруктуры(ПараметрыФормы)); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index edeaed65a..9a57118a7 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -2004,7 +2004,7 @@ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка, ЛОЖЬ КАК ПометкаУдаления, 1 КАК ИндексКартинки, - ВЫРАЗИТЬ("" КАК Строка(50)) КАК Наименование, + ВЫРАЗИТЬ("" КАК Строка(150)) КАК Наименование, ВЫРАЗИТЬ("" КАК Строка(500)) КАК Описание, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаИзменения, diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index 0982182e3..c0aae2ced 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -1540,10 +1540,10 @@ - ПользовательПустаяСссылка + ПользовательПустаяСсылка <key>ru</key> - <value>Пользователь пустая сссылка</value> + <value>Пользователь пустая ссылка</value> 5 diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index ce589d133..47e3a8e82 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -18,7 +18,7 @@ ОписаниеКолонокТаблицыПодписей = Новый ФиксированныйМассив(КолонкиМассив); ТекущийПользователь = Пользователи.ТекущийПользователь(); - ПользовательПустаяСссылка = Справочники.Пользователи.ПустаяСсылка(); + ПользовательПустаяСсылка = Справочники.Пользователи.ПустаяСсылка(); Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); @@ -1205,7 +1205,8 @@ Если ТранзакцияАктивна Тогда ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Ошибка записи присоединенного файла'"), + НСтр("ru = 'Файлы.Ошибка записи присоединенного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1230,11 +1231,11 @@ ТипНовогоОбъекта = Новый Массив; ТипНовогоОбъекта.Добавить(ТипЗнч(НовыйОбъект)); - НовыйРеквит = Новый РеквизитФормы("Объект", Новый ОписаниеТипов(ТипНовогоОбъекта)); - НовыйРеквит.СохраняемыеДанные = Истина; + НовыйРеквизит = Новый РеквизитФормы("Объект", Новый ОписаниеТипов(ТипНовогоОбъекта)); + НовыйРеквизит.СохраняемыеДанные = Истина; ДобавляемыеРеквизиты = Новый Массив; - ДобавляемыеРеквизиты.Добавить(НовыйРеквит); + ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index a393c1dea..747cf8440 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -130,9 +130,7 @@ ПараметрыФормы.Вставить("Ключ", Элемент.Значение); ПараметрыФормы.Вставить("СкрытьДополнительныеРеквизиты", Истина); - ОткрытьФормуМодально( - "Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", - ПараметрыФормы); + ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормы, ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form new file mode 100644 index 000000000..3cfc8276e --- /dev/null +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -0,0 +1,2358 @@ + + + + <key>ru</key> + <value>Табличный документ (Создание)</value> + + + КоманднаяПанель + 3 + + ДействияСДокументом + 31 + + ЗаписатьИЗакрыть + 51 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + Записать + 52 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Form.Command.Записать + Normal + Auto + true + true + UserCmds + Auto + + + Редактирование + 84 + true + true + + true + + + РедактированиеРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + Form.Command.Редактирование + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Действия с документом</value> + + + ru + Действия с документом + + + ДействияСДокументомРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + + + КомандыРедактирования + 85 + + ФорматированиеТекста + 53 + + Шрифт + 57 + + ИзменениеШрифта + 54 + true + true + + true + + + ИзменениеШрифтаРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + Form.Command.Шрифт + Normal + Auto + true + true + UserCmds + Auto + + + УвеличитьРазмерШрифта + 55 + true + true + + true + + + УвеличитьРазмерШрифтаРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Command.УвеличитьРазмерШрифта + Normal + Auto + true + true + UserCmds + Auto + + + УменьшитьРазмерШрифта + 56 + true + true + + true + + + УменьшитьРазмерШрифтаРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + Form.Command.УменьшитьРазмерШрифта + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шрифт</value> + + + ru + Шрифт + + + ШрифтРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + + + Начертание + 58 + + Полужирный + 59 + true + true + + true + + + ПолужирныйРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + Form.Command.Полужирный + Normal + Auto + true + true + UserCmds + Auto + + + Курсив + 60 + true + true + + true + + + КурсивРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Form.Command.Курсив + Normal + Auto + true + true + UserCmds + Auto + + + Подчеркивание + 61 + true + true + + true + + + ПодчеркиваниеРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + Form.Command.Подчеркивание + Normal + Auto + true + true + UserCmds + Auto + + + Зачеркивание + 86 + true + true + + true + + + ЗачеркиваниеРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Command.Зачеркивание + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Начертание</value> + + + ru + Начертание + + + НачертаниеРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + + + Цвет + 62 + + ЦветФона + 64 + true + true + + true + + + ЦветФонаРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.ЦветФона + Normal + Auto + true + true + UserCmds + Auto + + + ЦветТекста + 63 + true + true + + true + + + ЦветТекстаРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Form.Command.ЦветТекста + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Цвет</value> + + + ru + Цвет + + + ЦветРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + + + Выравнивание + 65 + + Влево + 66 + true + true + + true + + + ВлевоРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Form.Command.Влево + Normal + Auto + true + true + UserCmds + Auto + + + ПоЦентру + 67 + true + true + + true + + + ПоЦентруРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.Command.ПоЦентру + Normal + Auto + true + true + UserCmds + Auto + + + Вправо + 68 + true + true + + true + + + ВправоРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + Form.Command.Вправо + Normal + Auto + true + true + UserCmds + Auto + + + ПоШирине + 69 + true + true + + true + + + ПоШиринеРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Form.Command.ПоШирине + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Выравнивание</value> + + + ru + Выравнивание + + + ВыравниваниеРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Форматирование текста</value> + + + ru + Форматирование текста + + + ФорматированиеТекстаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + + + Границы + 70 + + ГраницаСлева + 72 + true + true + + true + + + ГраницаСлеваРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Form.Command.ГраницаСлева + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаСверху + 71 + true + true + + true + + + ГраницаСверхуРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Command.ГраницаСверху + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаСправа + 75 + true + true + + true + + + ГраницаСправаРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Command.ГраницаСправа + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаСнизу + 73 + true + true + + true + + + ГраницаСнизуРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Command.ГраницаСнизу + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаВезде + 74 + true + true + + true + + + ГраницаВездеРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.Command.ГраницаВезде + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаВокруг + 76 + true + true + + true + + + ГраницаВокругРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Form.Command.ГраницаВокруг + Normal + Auto + true + true + UserCmds + Auto + + + ГраницаВнутри + 77 + true + true + + true + + + ГраницаВнутриРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.ГраницаВнутри + Normal + Auto + true + true + UserCmds + Auto + + + ТолстаяГраницаВокруг + 78 + true + true + + true + + + ТолстаяГраницаВокругРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.ТолстаяГраницаВокруг + Normal + Auto + true + true + UserCmds + Auto + + + ТолстаяГраницаСверху + 79 + true + true + + true + + + ТолстаяГраницаСверхуРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.ТолстаяГраницаСверху + Normal + Auto + true + true + UserCmds + Auto + + + ТолстаяГраницаСнизу + 80 + true + true + + true + + + ТолстаяГраницаСнизуРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.Command.ТолстаяГраницаСнизу + Normal + Auto + true + true + UserCmds + Auto + + + НетГраницы + 88 + true + true + + true + + + НетГраницыРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.Command.НетГраницы + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Границы</value> + + + ru + Границы + + + ГраницыРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Popup + + + CommonPicture.ГраницаВокруг + + Picture + Normal + + + + ДействияСЯчейками + 50 + + Объединить + 81 + true + true + + true + + + ОбъединитьРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Form.Command.Объединить + Normal + Auto + true + true + UserCmds + Auto + + + Разъединить + 87 + true + true + + true + + + РазъединитьРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.Разъединить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВставитьПримечание + 82 + true + true + + true + + + ВставитьПримечаниеРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Form.Command.ВставитьПримечание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Действия с ячейками</value> + + + ru + Действия с ячейками + + + ДействияСЯчейкамиРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Команды редактирования</value> + + + ru + Команды редактирования + + + КомандыРедактированияРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + + + ВсеДействия + 83 + + ДействияСГруппами + 34 + + ОтображатьГруппировки + 35 + true + true + + true + + + ОтображатьГруппировкиРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.ShowGroups + Normal + Auto + true + true + UserCmds + Auto + + + СвернутьВсеГруппы + 36 + true + true + + true + + + СвернутьВсеГруппыРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Auto + true + true + UserCmds + Auto + + + РазвернутьВсеГруппы + 37 + true + true + + true + + + РазвернутьВсеГруппыРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Действия с группами</value> + + + ru + Действия с группами + + + ДействияСГруппамиРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + + + ИзменитьФорму + 6 + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Все действия</value> + + + ru + Все действия + + + ВсеДействияРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + + + Справка + 7 + true + true + + true + + + СправкаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + CommandBar + + Left + + + + Предупреждение + 91 + + КартинкаПредупреждения + 92 + + <key>ru</key> + <value>Картинка предупреждения</value> + + true + true + + true + + + КартинкаПредупрежденияРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + КартинкаПредупрежденияКонтекстноеМеню + 93 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + ТекстПредупреждения + 89 + + <key>ru</key> + <value>Изменение имен областей, а также параметров макета может привести к потере работоспособности печатной формы.</value> + + true + true + + true + + + ТекстПредупрежденияРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + ТекстПредупрежденияКонтекстноеМеню + 90 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение</value> + + true + + ПредупреждениеРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + + + ТабличныйДокумент + 1 + true + true + + true + + + ТабличныйДокумент + + None + + ТабличныйДокументРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ТабличныйДокументКонтекстноеМеню + 2 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + OnActivate + ТабличныйДокументПриАктивизацииОбласти + + 50 + true + 10 + true + true + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + true + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + 100 + 20 + DontBlock + Use + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + String + + + + true + + + true + +
            true
            +
            + + ТабличныйДокумент + + <key>ru</key> + <value>Табличный документ</value> + + 2 + + SpreadsheetDocument + + + true + + + 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> + + 1 + + ru + Записать и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + Auto + Auto + + + Редактирование + + <key>ru</key> + <value>Редактирование</value> + + 3 + + ru + Редактирование + + + true + + + StdPicture.SpreadsheetReadOnly + + + + Редактирование + + + TextPicture + Auto + Auto + + + Шрифт + + <key>ru</key> + <value>Шрифт</value> + + 2 + + ru + Шрифт + + + true + + + CommonPicture.ИзменитьШрифт + + + + Шрифт + + + true + Auto + Auto + + + Полужирный + + <key>ru</key> + <value>Полужирный</value> + + 4 + + ru + Полужирный + + + true + + + CommonPicture.ПолужирноеНачертание + + + + Полужирный + + + true + Auto + Auto + + + ЦветТекста + + <key>ru</key> + <value>Цвет текста</value> + + 5 + + ru + Цвет текста + + + true + + + CommonPicture.ЦветТекста + + + + ЦветТекста + + + true + Auto + Auto + + + Объединить + + <key>ru</key> + <value>Объединить</value> + + 8 + + ru + Объединить + + + true + + + CommonPicture.ОбъединитьЯчейки + + + + Объединить + + + true + Auto + Auto + + + ВставитьПримечание + + <key>ru</key> + <value>Вставить примечание</value> + + 9 + + ru + Вставить примечание + + + true + + + StdPicture.SpreadsheetInsertComment + + + + ВставитьПримечание + + + Picture + true + Auto + Auto + + + Курсив + + <key>ru</key> + <value>Курсив</value> + + 11 + + ru + Курсив + + + true + + + CommonPicture.КурсивноеНачертание + + + + Курсив + + + true + Auto + Auto + + + Подчеркивание + + <key>ru</key> + <value>Подчеркивание</value> + + 12 + + ru + Подчеркивание + + + true + + + CommonPicture.Подчеркивание + + + + Подчеркивание + + + true + Auto + Auto + + + УвеличитьРазмерШрифта + + <key>ru</key> + <value>Увеличить размер шрифта</value> + + 13 + + ru + Увеличить размер шрифта + + + true + + + CommonPicture.УвеличитьШрифт + + + + УвеличитьРазмерШрифта + + + true + Auto + Auto + + + УменьшитьРазмерШрифта + + <key>ru</key> + <value>Уменьшить размер шрифта</value> + + 14 + + ru + Уменьшить размер шрифта + + + true + + + CommonPicture.УменьшитьШрифт + + + + УменьшитьРазмерШрифта + + + true + Auto + Auto + + + ЦветФона + + <key>ru</key> + <value>Цвет фона</value> + + 15 + + ru + Цвет фона + + + true + + + CommonPicture.ЦветФона + + + + ЦветФона + + + true + Auto + Auto + + + ПоШирине + + <key>ru</key> + <value>По ширине</value> + + 16 + + ru + По ширине + + + true + + + CommonPicture.ВыравниваниеПоШирине + + + + ПоШирине + + + true + Auto + Auto + + + ПоЦентру + + <key>ru</key> + <value>По центру</value> + + 17 + + ru + По центру + + + true + + + CommonPicture.ВыравниваниеПоЦентру + + + + ПоЦентру + + + true + Auto + Auto + + + Влево + + <key>ru</key> + <value>Влево</value> + + 18 + + ru + Влево + + + true + + + CommonPicture.ВыравниваниеПоЛевомуКраю + + + + Влево + + + true + Auto + Auto + + + Вправо + + <key>ru</key> + <value>Вправо</value> + + 19 + + ru + Вправо + + + true + + + CommonPicture.ВыравниваниеПоПравомуКраю + + + + Вправо + + + true + Auto + Auto + + + ГраницаСлева + + <key>ru</key> + <value>Граница слева</value> + + 20 + + ru + Граница слева + + + true + + + CommonPicture.ГраницаСлева + + + + ГраницаСлева + + + Picture + true + Auto + Auto + + + ГраницаСправа + + <key>ru</key> + <value>Граница справа</value> + + 21 + + ru + Граница справа + + + true + + + CommonPicture.ГраницаСправа + + + + ГраницаСправа + + + Picture + true + Auto + Auto + + + ГраницаСверху + + <key>ru</key> + <value>Граница сверху</value> + + 22 + + ru + Граница сверху + + + true + + + CommonPicture.ГраницаСверху + + + + ГраницаСверху + + + Picture + true + Auto + Auto + + + ГраницаСнизу + + <key>ru</key> + <value>Граница снизу</value> + + 23 + + ru + Граница снизу + + + true + + + CommonPicture.ГраницаСнизу + + + + ГраницаСнизу + + + Picture + true + Auto + Auto + + + ГраницаВезде + + <key>ru</key> + <value>Граница везде</value> + + 24 + + ru + Граница везде + + + true + + + CommonPicture.ГраницаВезде + + + + ГраницаВезде + + + Picture + true + Auto + Auto + + + ГраницаВокруг + + <key>ru</key> + <value>Граница вокруг</value> + + 25 + + ru + Граница вокруг + + + true + + + CommonPicture.ГраницаВокруг + + + + ГраницаВокруг + + + Picture + true + Auto + Auto + + + ГраницаВнутри + + <key>ru</key> + <value>Граница внутри</value> + + 26 + + ru + Граница внутри + + + true + + + CommonPicture.ГраницаВнутри + + + + ГраницаВнутри + + + Picture + true + Auto + Auto + + + ТолстаяГраницаВокруг + + <key>ru</key> + <value>Толстая граница вокруг</value> + + 27 + + ru + Толстая граница вокруг + + + true + + + CommonPicture.ТолстаяГраницаВокруг + + + + ТолстаяГраницаВокруг + + + Picture + true + Auto + Auto + + + ТолстаяГраницаСнизу + + <key>ru</key> + <value>Толстая граница снизу</value> + + 28 + + ru + Толстая граница снизу + + + true + + + CommonPicture.ТолстаяГраницаСнизу + + + + ТолстаяГраницаСнизу + + + Picture + true + Auto + Auto + + + ТолстаяГраницаСверху + + <key>ru</key> + <value>Толстая граница сверху</value> + + 29 + + ru + Толстая граница сверху + + + true + + + CommonPicture.ТолстаяГраницаСверху + + + + ТолстаяГраницаСверху + + + Picture + true + Auto + Auto + + + НетГраницы + + <key>ru</key> + <value>Нет границы</value> + + 30 + + ru + Нет границы + + + true + + + CommonPicture.НетГраницы + + + + НетГраницы + + + Picture + true + Auto + Auto + + + Записать + + <key>ru</key> + <value>Записать</value> + + 31 + + ru + Записать + + + true + + + StdPicture.SaveFile + + + + Записать + + + Auto + Auto + + + Зачеркивание + + <key>ru</key> + <value>Зачеркивание</value> + + 32 + + ru + Зачеркивание + + + true + + + + Зачеркивание + + + true + Auto + Auto + + + Разъединить + + <key>ru</key> + <value>Разъединить</value> + + 7 + + ru + Разъединить + + + true + + + + Разъединить + + + true + Auto + Auto + + + ТабличныйДокумент + + SpreadsheetDocument + + + + ПутьКФайлу + + String + + + true + + + РежимОткрытияОкна + + + + Редактирование + + Boolean + + + + ИмяОбъектаМетаданныхМакета + + String + + + true + + + ИмяДокумента + + String + + + + + + + +
            diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html new file mode 100644 index 000000000..6e0a86883 --- /dev/null +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html @@ -0,0 +1,3 @@ + +

            TODO

            +

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

            \ 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..9c135e10e --- /dev/null +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -0,0 +1,822 @@ + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.РежимОткрытияОкна <> Неопределено Тогда + РежимОткрытияОкна = Параметры.РежимОткрытияОкна; + КонецЕсли; + + Если Параметры.ТабличныйДокумент.ВысотаТаблицы = 0 Тогда + Если Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета) Тогда + ЗагрузитьТабличныйДокументИзМетаданных(); + КонецЕсли; + Иначе + ТабличныйДокумент = Параметры.ТабличныйДокумент; + КонецЕсли; + + Элементы.ТабличныйДокумент.Редактирование = Параметры.Редактирование; + Элементы.ТабличныйДокумент.ОтображатьГруппировки = Истина; + + ЭтоМакет = Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета); + Элементы.Предупреждение.Видимость = ЭтоМакет И Параметры.Редактирование; + + Если Не ПустаяСтрока(Параметры.ИмяДокумента) Тогда + ИмяДокумента = Параметры.ИмяДокумента; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ПустаяСтрока(Параметры.ПутьКФайлу) Тогда + Файл = Новый Файл(Параметры.ПутьКФайлу); + Если ПустаяСтрока(ИмяДокумента) Тогда + ИмяДокумента = Файл.ИмяБезРасширения; + КонецЕсли; + РедактированиеЗапрещено = Файл.ПолучитьТолькоЧтение(); + КонецЕсли; + + Если ПустаяСтрока(ИмяДокумента) Тогда + ИспользованныеИмена = Новый Массив; + Оповестить("ЗапросИменРедактируемыхТабличныхДокументов", ИспользованныеИмена, ЭтаФорма); + + Индекс = 1; + Пока ИспользованныеИмена.Найти(ИмяНовогоДокумента() + Индекс) <> Неопределено Цикл + Индекс = Индекс + 1; + КонецЦикла; + + ИмяДокумента = ИмяНовогоДокумента() + Индекс; + КонецЕсли; + + Элементы.ТабличныйДокумент.Редактирование = Элементы.ТабличныйДокумент.Редактирование Или Не ПустаяСтрока(Параметры.ПутьКФайлу) И Не РедактированиеЗапрещено; + + УстановитьЗаголовок(); + НастроитьПредставлениеКоманд(); + НастроитьОтображениеТабличногоДокумента(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Модифицированность Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранить изменения в %1?'"), ИмяДокумента); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена); + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьТабличныйДокумент(Отказ); + Иначе + Модифицированность = Ложь; + КонецЕсли; + КонецЕсли; + + Если Не Модифицированность Тогда + ИмяСобытия = "ОтменаРедактированияТабличногоДокумента"; + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ПутьКФайлу", Параметры.ПутьКФайлу); + ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", Параметры.ИмяОбъектаМетаданныхМакета); + Оповестить(ИмяСобытия, ПараметрыОповещения, ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "ЗапросИменРедактируемыхТабличныхДокументов" И Источник <> ЭтаФорма Тогда + Параметр.Добавить(ИмяДокумента); + ИначеЕсли ИмяСобытия = "ЗакрытиеФормыВладельца" И Источник = ВладелецФормы Тогда + Закрыть(); + Если Открыта() Тогда + Параметр.Отказ = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ТабличныйДокументПриАктивизацииОбласти(Элемент) + ОбновитьПометкиКнопокКоманднойПанели(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + + +// Действия с документом + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + Отказ = Ложь; + ЗаписатьТабличныйДокумент(Отказ); + Если Не Отказ Тогда + Закрыть(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Записать(Команда) + ЗаписатьТабличныйДокумент(); +КонецПроцедуры + +&НаКлиенте +Процедура Редактирование(Команда) + Элементы.ТабличныйДокумент.Редактирование = Не Элементы.ТабличныйДокумент.Редактирование; + НастроитьПредставлениеКоманд(); + НастроитьОтображениеТабличногоДокумента(); +КонецПроцедуры + +// Форматирование + +&НаКлиенте +Процедура Шрифт(Команда) + + ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта; + + ОбрабатываемыеОбласти = СписокОбластейДляИзмененияШрифта(); + Если ОбрабатываемыеОбласти.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + #Если Не ВебКлиент Тогда + ОбщийШрифт = Новый Шрифт(ОбрабатываемыеОбласти[0].Шрифт); + + Для НомерОбласти = 1 По ОбрабатываемыеОбласти.Количество()-1 Цикл + Область = ОбрабатываемыеОбласти[НомерОбласти]; + Если Область.Шрифт <> ОбщийШрифт Тогда + ИмяШрифта = ?(Область.Шрифт.Имя = ОбщийШрифт.Имя, Неопределено, ""); + Размер = ?(Область.Шрифт.Размер = ОбщийШрифт.Размер, Неопределено, 0); + Жирный = ?(Область.Шрифт.Жирный = ОбщийШрифт.Жирный, Неопределено, Ложь); + Наклонный = ?(Область.Шрифт.Наклонный = ОбщийШрифт.Наклонный, Неопределено, Ложь); + Подчеркнутый = ?(Область.Шрифт.Подчеркивание = ОбщийШрифт.Подчеркивание, Неопределено, Ложь); + Зачеркнутый = ?(Область.Шрифт.Подчеркивание = ОбщийШрифт.Зачеркивание, Неопределено, Ложь); + + ОбщийШрифт = Новый Шрифт(ОбрабатываемыеОбласти[0].Шрифт, ИмяШрифта, Размер, Жирный, Наклонный, Подчеркнутый, Зачеркнутый); + КонецЕсли; + КонецЦикла; + ДиалогВыбораШрифта.Шрифт = ОбщийШрифт; + #КонецЕсли + + Если ДиалогВыбораШрифта.Выбрать() Тогда + Для Каждого Область Из ОбрабатываемыеОбласти Цикл + Область.Шрифт = ДиалогВыбораШрифта.Шрифт; + КонецЦикла; + КонецЕсли; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура УвеличитьРазмерШрифта(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Размер = Область.Шрифт.Размер; + Размер = Размер + ШагИзмененияРазмераШрифтаУвеличение(Размер); + Область.Шрифт = Новый Шрифт(Область.Шрифт,,Размер); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УменьшитьРазмерШрифта(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Размер = Область.Шрифт.Размер; + Размер = Размер - ШагИзмененияРазмераШрифтаУменьшение(Размер); + Если Размер < 1 Тогда + Размер = 1; + КонецЕсли; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,Размер); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Полужирный(Команда) + + УстанавливаемоеЗначение = Неопределено; + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Если УстанавливаемоеЗначение = Неопределено Тогда + УстанавливаемоеЗначение = Не Область.Шрифт.Жирный; + КонецЕсли; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,УстанавливаемоеЗначение); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура Курсив(Команда) + + УстанавливаемоеЗначение = Неопределено; + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Если УстанавливаемоеЗначение = Неопределено Тогда + УстанавливаемоеЗначение = Не Область.Шрифт.Наклонный; + КонецЕсли; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,,УстанавливаемоеЗначение); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура Подчеркивание(Команда) + + УстанавливаемоеЗначение = Неопределено; + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Если УстанавливаемоеЗначение = Неопределено Тогда + УстанавливаемоеЗначение = Не Область.Шрифт.Подчеркивание; + КонецЕсли; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,,,УстанавливаемоеЗначение); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура Зачеркивание(Команда) + + УстанавливаемоеЗначение = Неопределено; + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Если УстанавливаемоеЗначение = Неопределено Тогда + УстанавливаемоеЗначение = Не Область.Шрифт.Зачеркивание; + КонецЕсли; + Область.Шрифт = Новый Шрифт(Область.Шрифт,,,,,,УстанавливаемоеЗначение); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЦветФона(Команда) + ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета; + #Если Не ВебКлиент Тогда + ДиалогВыбораЦвета.Цвет = Элементы.ТабличныйДокумент.ТекущаяОбласть.ЦветФона; + #КонецЕсли + Если ДиалогВыбораЦвета.Выбрать() Тогда + Элементы.ТабличныйДокумент.ТекущаяОбласть.ЦветФона = ДиалогВыбораЦвета.Цвет; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЦветТекста(Команда) + ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета; + #Если Не ВебКлиент Тогда + ДиалогВыбораЦвета.Цвет = Элементы.ТабличныйДокумент.ТекущаяОбласть.ЦветТекста; + #КонецЕсли + Если ДиалогВыбораЦвета.Выбрать() Тогда + Элементы.ТабличныйДокумент.ТекущаяОбласть.ЦветТекста = ДиалогВыбораЦвета.Цвет; + КонецЕсли; +КонецПроцедуры + + +// Выравнивание + +&НаКлиенте +Процедура Влево(Команда) + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура Вправо(Команда) + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоЦентру(Команда) + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоШирине(Команда) + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.ПоШирине; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + + +// Границы + +&НаКлиенте +Процедура ГраницаСлева(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСлева(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаСверху(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСверху(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаСправа(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСправа(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаСнизу(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСнизу(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаВезде(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Область.ГраницаСлева = Линия; + Область.ГраницаСверху = Линия; + Область.ГраницаСправа = Линия; + Область.ГраницаСнизу = Линия; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаВокруг(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + #Если ВебКлиент Тогда + НарисоватьГраницуСлева(Область, Линия); + НарисоватьГраницуСверху(Область, Линия); + НарисоватьГраницуСправа(Область, Линия); + НарисоватьГраницуСнизу(Область, Линия); + #Иначе + Область.Обвести(Линия, Линия, Линия, Линия); + #КонецЕсли + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГраницаВнутри(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + + Если ОбрабатываемаяОбласть.Лево <> ОбрабатываемаяОбласть.Право Тогда + Область = ТабличныйДокумент.Область( + Элементы.ТабличныйДокумент.ТекущаяОбласть.Верх, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Лево + 1, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Низ, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Право); + + Область.ГраницаСлева = Линия; + КонецЕсли; + + Если ОбрабатываемаяОбласть.Верх <> ОбрабатываемаяОбласть.Низ Тогда + Область = ТабличныйДокумент.Область( + Элементы.ТабличныйДокумент.ТекущаяОбласть.Верх + 1, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Лево, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Низ, + Элементы.ТабличныйДокумент.ТекущаяОбласть.Право); + + Область.ГраницаСверху = Линия; + КонецЕсли; + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТолстаяГраницаВокруг(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2); + + Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + #Если ВебКлиент Тогда + НарисоватьГраницуСлева(Область, Линия); + НарисоватьГраницуСверху(Область, Линия); + НарисоватьГраницуСправа(Область, Линия); + НарисоватьГраницуСнизу(Область, Линия); + #Иначе + Область.Обвести(Линия, Линия, Линия, Линия); + #КонецЕсли + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТолстаяГраницаСверху(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСверху(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТолстаяГраницаСнизу(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2); + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + НарисоватьГраницуСнизу(ОбрабатываемаяОбласть, Линия); + КонецЦикла; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура НетГраницы(Команда) + + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + + Область = Элементы.ТабличныйДокумент.ТекущаяОбласть; + Область.ГраницаСлева = Линия; + Область.ГраницаСверху = Линия; + Область.ГраницаСправа = Линия; + Область.ГраницаСнизу = Линия; + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +// Действия с областью + +&НаКлиенте +Процедура Объединить(Команда) + + Область = Элементы.ТабличныйДокумент.ТекущаяОбласть; + Область.Объединить(); + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура Разъединить(Команда) + + Область = Элементы.ТабличныйДокумент.ТекущаяОбласть; + Область.Разъединить(); + + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьПримечание(Команда) + Примечание = Элементы.ТабличныйДокумент.ТекущаяОбласть.Примечание.Текст; + ВвестиСтроку(Примечание, НСтр("ru = 'Примечание'"), , Истина); + Элементы.ТабличныйДокумент.ТекущаяОбласть.Примечание.Текст = Примечание; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗагрузитьТабличныйДокументИзМетаданных() + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатью"); + ТабличныйДокумент = МодульУправлениеПечатью.ПолучитьМакет(Параметры.ИмяОбъектаМетаданныхМакета); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьОтображениеТабличногоДокумента() + Элементы.ТабличныйДокумент.ОтображатьЗаголовки = Элементы.ТабличныйДокумент.Редактирование; + Элементы.ТабличныйДокумент.ОтображатьСетку = Элементы.ТабличныйДокумент.Редактирование; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПометкиКнопокКоманднойПанели(); + + #Если Не ВебКлиент Тогда + Область = Элементы.ТабличныйДокумент.ТекущаяОбласть; + //Если Область = Неопределено Тогда + // Возврат; + //КонецЕсли; + + // Шрифт + Шрифт = Область.Шрифт; + Элементы.Полужирный.Пометка = Шрифт <> Неопределено И Шрифт.Жирный; + Элементы.Курсив.Пометка = Шрифт <> Неопределено И Шрифт.Наклонный; + Элементы.Подчеркивание.Пометка = Шрифт <> Неопределено И Шрифт.Подчеркивание; + Элементы.Зачеркивание.Пометка = Шрифт <> Неопределено И Шрифт.Зачеркивание; + + // Горизонтальное положение + Элементы.Влево.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + Элементы.ПоЦентру.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; + Элементы.Вправо.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право; + Элементы.ПоШирине.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.ПоШирине; + + // Границы + //ОбычнаяЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); + //ТолстаяЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2); + // + //Элементы.ГраницаСверху.Пометка = Область.ГраницаСверху = ОбычнаяЛиния; + //Элементы.ГраницаСлева.Пометка = Область.ГраницаСлева = ОбычнаяЛиния; + //Элементы.ГраницаСнизу.Пометка = Область.ГраницаСнизу = ОбычнаяЛиния; + //Элементы.ГраницаСправа.Пометка = Область.ГраницаСправа = ОбычнаяЛиния; + // + //Элементы.ТолстаяГраницаСверху.Пометка = Область.ГраницаСверху = ТолстаяЛиния; + //Элементы.ТолстаяГраницаСнизу.Пометка = Область.ГраницаСнизу = ТолстаяЛиния; + + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Функция ШагИзмененияРазмераШрифтаУвеличение(Размер) + Если Размер < 10 Тогда + Возврат 1; + ИначеЕсли 10 <= Размер и Размер < 20 Тогда + Возврат 2; + ИначеЕсли 20 <= Размер и Размер < 48 Тогда + Возврат 4; + ИначеЕсли 48 <= Размер и Размер < 72 Тогда + Возврат 6; + ИначеЕсли 72 <= Размер и Размер < 96 Тогда + Возврат 8; + Иначе + Возврат Окр(Размер / 10); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция ШагИзмененияРазмераШрифтаУменьшение(Размер) + Если Размер <= 11 Тогда + Возврат 1; + ИначеЕсли 11 < Размер и Размер <= 23 Тогда + Возврат 2; + ИначеЕсли 23 < Размер и Размер <= 53 Тогда + Возврат 4; + ИначеЕсли 53 < Размер и Размер <= 79 Тогда + Возврат 6; + ИначеЕсли 79 < Размер и Размер <= 105 Тогда + Возврат 8; + Иначе + Возврат Окр(Размер / 11); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция СписокОбластейДляИзмененияШрифта() + + Результат = Новый Массив; + + Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл + Если ОбрабатываемаяОбласть.Шрифт <> Неопределено Тогда + Результат.Добавить(ОбрабатываемаяОбласть); + Продолжить; + КонецЕсли; + + ОбрабатываемаяОбластьВерх = ОбрабатываемаяОбласть.Верх; + ОбрабатываемаяОбластьНиз = ОбрабатываемаяОбласть.Низ; + ОбрабатываемаяОбластьЛево = ОбрабатываемаяОбласть.Лево; + ОбрабатываемаяОбластьПраво = ОбрабатываемаяОбласть.Право; + + Если ОбрабатываемаяОбластьВерх = 0 Тогда + ОбрабатываемаяОбластьВерх = 1; + КонецЕсли; + + Если ОбрабатываемаяОбластьНиз = 0 Тогда + ОбрабатываемаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; + КонецЕсли; + + Если ОбрабатываемаяОбластьЛево = 0 Тогда + ОбрабатываемаяОбластьЛево = 1; + КонецЕсли; + + Если ОбрабатываемаяОбластьПраво = 0 Тогда + ОбрабатываемаяОбластьПраво = ТабличныйДокумент.ШиринаТаблицы; + КонецЕсли; + + Если ОбрабатываемаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда + ОбрабатываемаяОбластьВерх = ОбрабатываемаяОбласть.Низ; + ОбрабатываемаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы; + КонецЕсли; + + Для НомерКолонки = ОбрабатываемаяОбластьЛево По ОбрабатываемаяОбластьПраво Цикл + ШиринаКолонки = Неопределено; + Для НомерСтроки = ОбрабатываемаяОбластьВерх По ОбрабатываемаяОбластьНиз Цикл + Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + Если ОбрабатываемаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда + Если ШиринаКолонки = Неопределено Тогда + ШиринаКолонки = Ячейка.ШиринаКолонки; + КонецЕсли; + Если Ячейка.ШиринаКолонки <> ШиринаКолонки Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + Если Ячейка.Шрифт <> Неопределено Тогда + Результат.Добавить(Ячейка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ЗаписатьТабличныйДокумент(Отказ = Ложь) + + Если ЭтоНовый() Или РедактированиеЗапрещено Тогда + ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогСохраненияФайла.ПолноеИмяФайла = ИмяДокумента; + ДиалогСохраненияФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl"; + //ДиалогСохраненияФайла.Заголовок = ""; + Если ДиалогСохраненияФайла.Выбрать() Тогда + Параметры.ПутьКФайлу = ДиалогСохраненияФайла.ПолноеИмяФайла; + ИмяДокумента = Сред(ДиалогСохраненияФайла.ПолноеИмяФайла, СтрДлина(ДиалогСохраненияФайла.Каталог) + 1); + Если Нрег(Прав(ИмяДокумента, 4)) = ".mxl" Тогда + ИмяДокумента = Лев(ИмяДокумента, СтрДлина(ИмяДокумента) - 4); + КонецЕсли; + Иначе + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(Параметры.ПутьКФайлу) Тогда + ТабличныйДокумент.Записать(Параметры.ПутьКФайлу); + РедактированиеЗапрещено = Ложь; + КонецЕсли; + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ТабличныйДокумент", ТабличныйДокумент); + ПараметрыОповещения.Вставить("ПутьКФайлу", Параметры.ПутьКФайлу); + ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", Параметры.ИмяОбъектаМетаданныхМакета); + + Оповестить("Запись_ТабличныйДокумент", ПараметрыОповещения, ЭтаФорма); + + Модифицированность = Ложь; + УстановитьЗаголовок(); + +КонецПроцедуры + +&НаКлиенте +Функция ИмяНовогоДокумента() + Возврат НСтр("ru = 'Новый'"); +КонецФункции + +&НаКлиенте +Процедура УстановитьЗаголовок() + + Заголовок = ИмяДокумента; + Если ЭтоНовый() Тогда + Заголовок = Заголовок + " (" + НСтр("ru = 'создание'") + ")"; + ИначеЕсли РедактированиеЗапрещено Тогда + Заголовок = Заголовок + " (" + НСтр("ru = 'только просмотр'") + ")"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПредставлениеКоманд() + + ДокументРедактируется = Элементы.ТабличныйДокумент.Редактирование; + Элементы.Редактирование.Пометка = ДокументРедактируется; + Элементы.КомандыРедактирования.Доступность = ДокументРедактируется; + Элементы.ЗаписатьИЗакрыть.Доступность = ДокументРедактируется Или Модифицированность; + Элементы.Записать.Доступность = ДокументРедактируется Или Модифицированность; + + Если ДокументРедактируется И Не ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета) Тогда + Элементы.Предупреждение.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЭтоНовый() + Возврат ПустаяСтрока(Параметры.ИмяОбъектаМетаданныхМакета) И ПустаяСтрока(Параметры.ПутьКФайлу); +КонецФункции + +&НаКлиенте +Процедура НарисоватьГраницуСлева(ОбрабатываемаяОбласть, Линия) + + Область = ТабличныйДокумент.Область( + ОбрабатываемаяОбласть.Верх, + ОбрабатываемаяОбласть.Лево, + ОбрабатываемаяОбласть.Низ, + ОбрабатываемаяОбласть.Лево); + + Область.ГраницаСлева = Линия; + +КонецПроцедуры + +&НаКлиенте +Процедура НарисоватьГраницуСверху(ОбрабатываемаяОбласть, Линия) + + Область = ТабличныйДокумент.Область( + ОбрабатываемаяОбласть.Верх, + ОбрабатываемаяОбласть.Лево, + ОбрабатываемаяОбласть.Верх, + ОбрабатываемаяОбласть.Право); + + Область.ГраницаСверху = Линия; + +КонецПроцедуры + +&НаКлиенте +Процедура НарисоватьГраницуСправа(ОбрабатываемаяОбласть, Линия) + + Область = ТабличныйДокумент.Область( + ОбрабатываемаяОбласть.Верх, + ОбрабатываемаяОбласть.Право, + ОбрабатываемаяОбласть.Низ, + ОбрабатываемаяОбласть.Право); + + Область.ГраницаСправа = Линия; + +КонецПроцедуры + +&НаКлиенте +Процедура НарисоватьГраницуСнизу(ОбрабатываемаяОбласть, Линия) + + Область = ТабличныйДокумент.Область( + ОбрабатываемаяОбласть.Низ, + ОбрабатываемаяОбласть.Лево, + ОбрабатываемаяОбласть.Низ, + ОбрабатываемаяОбласть.Право); + + Область.ГраницаСнизу = Линия; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВводТелефона/ВводТелефона.mdo b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/РедактированиеТабличногоДокумента.mdo similarity index 62% rename from SSL/src/CommonForms/ВводТелефона/ВводТелефона.mdo rename to SSL/src/CommonForms/РедактированиеТабличногоДокумента/РедактированиеТабличногоДокумента.mdo index c95ac0506..4b2268db4 100644 --- a/SSL/src/CommonForms/ВводТелефона/ВводТелефона.mdo +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/РедактированиеТабличногоДокумента.mdo @@ -1,9 +1,9 @@ - - ВводТелефона + + РедактированиеТабличногоДокумента ru - Ввод телефона + Редактирование табличного документа diff --git a/SSL/src/CommonForms/СертификатЭЦП/Form.form b/SSL/src/CommonForms/СертификатЭЦП/Form.form index 5f8b6eac2..1f17d58a7 100644 --- a/SSL/src/CommonForms/СертификатЭЦП/Form.form +++ b/SSL/src/CommonForms/СертификатЭЦП/Form.form @@ -262,7 +262,7 @@ ПриСозданииНаСервере
            60 - DontBlock + LockOwner true true true diff --git a/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html b/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html index 28737ee81..ffc349871 100644 --- a/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

            Форма предназначена для просмотра основных свойств сертификата электронной цифровой подписи (ЭЦП).

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

            По команде "Проверить" выполняется проверка сертификата.

            diff --git a/SSL/src/CommonForms/СертификатЭЦП/Module.bsl b/SSL/src/CommonForms/СертификатЭЦП/Module.bsl index 655026989..6642a88a0 100644 --- a/SSL/src/CommonForms/СертификатЭЦП/Module.bsl +++ b/SSL/src/CommonForms/СертификатЭЦП/Module.bsl @@ -54,8 +54,7 @@ Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сертификат ЭЦП сохранен в файл ""%1""'"), - ДиалогОткрытияФайла.ПолноеИмяФайла - ); + ДиалогОткрытияФайла.ПолноеИмяФайла); Состояние(Текст); diff --git a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Form.form b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Form.form index 814826cda..641876b54 100644 --- a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Form.form +++ b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Form.form @@ -26,7 +26,7 @@ Декорация1РасширеннаяПодсказка - 88 + 89 Label true true @@ -65,7 +65,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 87 + 88 Label true true @@ -100,7 +100,7 @@ Декорация2РасширеннаяПодсказка - 90 + 91 Label true true @@ -138,7 +138,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 89 + 90 Label true true @@ -167,7 +167,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 86 + 87 Label true true @@ -200,7 +200,7 @@ ОжиданиеПолученияДанныхРасширеннаяПодсказка - 85 + 86 Label true true @@ -236,7 +236,7 @@ ВыполнитьСинхронизациюДанныхРасширеннаяПодсказка - 95 + 96 Label true true @@ -267,7 +267,7 @@ ПредставлениеДатыСинхронизацииРасширеннаяПодсказка - 96 + 97 Label true true @@ -291,20 +291,16 @@ - ОбщаяКомандаОткрытьРезультатыОбменаДанными - 81 - - <key>ru</key> - <value>Проблем нет</value> - + ПерейтиККонфликтам + 84 true true true - ОбщаяКомандаОткрытьРезультатыОбменаДаннымиРасширеннаяПодсказка - 97 + ПерейтиККонфликтамРасширеннаяПодсказка + 98 Label true true @@ -313,7 +309,7 @@ Hyperlink - CommonCommand.ОткрытьРезультатыОбменаДанными + Form.Command.ПерейтиККонфликтам Normal Auto true @@ -336,7 +332,7 @@ ГруппировкаЭлементовРасширеннаяПодсказка - 94 + 95 Label true true @@ -368,7 +364,7 @@ СостояниеСинхронизацииРасширеннаяПодсказка - 93 + 94 Label true true @@ -398,7 +394,7 @@ ВыполнитьСинхронизациюДанных1РасширеннаяПодсказка - 100 + 101 Label true true @@ -429,7 +425,7 @@ КартинкаДлительнойОперацииРасширеннаяПодсказка - 101 + 102 Label true true @@ -466,7 +462,7 @@ ПредставлениеВыполненияСинхронизацииРасширеннаяПодсказка - 102 + 103 Label true true @@ -504,7 +500,7 @@ ГруппировкаЭлементов1РасширеннаяПодсказка - 99 + 100 Label true true @@ -536,7 +532,7 @@ ВыполнениеСинхронизацииРасширеннаяПодсказка - 98 + 99 Label true true @@ -565,7 +561,7 @@ ПанельСинхронизацииДанныхРасширеннаяПодсказка - 92 + 93 Label true true @@ -606,7 +602,7 @@ НастройкиСинхронизацииДанныхНаименованиеПриложенияРасширеннаяПодсказка - 136 + 137 Label true true @@ -651,7 +647,7 @@ None НастройкиСинхронизацииДанныхСтатусСинхронизацииРасширеннаяПодсказка - 139 + 140 Label true true @@ -696,7 +692,7 @@ НастройкиСинхронизацииДанныхСостояниеРасширеннаяПодсказка - 141 + 142 Label true true @@ -731,7 +727,7 @@ НастройкиСинхронизацииДанныхГруппа1РасширеннаяПодсказка - 138 + 139 Label true true @@ -759,7 +755,7 @@ НастроитьСинхронизациюДанныхРасширеннаяПодсказка - 114 + 115 Label true true @@ -785,7 +781,7 @@ НастройкиСинхронизацииДанныхОтключитьСинхронизациюДанныхРасширеннаяПодсказка - 115 + 116 Label true true @@ -815,7 +811,7 @@ НастройкиСинхронизацииДанныхНайтиРасширеннаяПодсказка - 117 + 118 Label true true @@ -842,7 +838,7 @@ НастройкиСинхронизацииДанныхОтменитьПоискРасширеннаяПодсказка - 118 + 119 Label true true @@ -866,7 +862,7 @@ НастройкиСинхронизацииДанныхГруппа2РасширеннаяПодсказка - 116 + 117 Label true true @@ -889,7 +885,7 @@ НастройкиСинхронизацииДанныхВывестиСписокРасширеннаяПодсказка - 120 + 121 Label true true @@ -916,7 +912,7 @@ НастройкиСинхронизацииДанныхКопироватьВБуферОбменаРасширеннаяПодсказка - 121 + 122 Label true true @@ -940,7 +936,7 @@ НастройкиСинхронизацииДанныхГруппа3РасширеннаяПодсказка - 119 + 120 Label true true @@ -960,7 +956,7 @@ НастройкиСинхронизацииДанныхИзменитьФормуРасширеннаяПодсказка - 122 + 123 Label true true @@ -987,7 +983,7 @@ НастройкиСинхронизацииДанныхСправкаРасширеннаяПодсказка - 123 + 124 Label true true @@ -1013,7 +1009,7 @@ НастройкиСинхронизацииДанныхОбновитьРасширеннаяПодсказка - 124 + 125 Label true true @@ -1040,7 +1036,7 @@ НастройкиСинхронизацииДанныхПодготовитьДанныеРасширеннаяПодсказка - 125 + 126 Label true true @@ -1068,10 +1064,10 @@
            НастройкиСинхронизацииДанныхСтрокаПоиска - 127 + 128 НастройкиСинхронизацииДанныхСтрокаПоискаРасширеннаяПодсказка - 129 + 130 Label true true @@ -1081,7 +1077,7 @@ НастройкиСинхронизацииДанныхСтрокаПоискаКонтекстноеМеню - 128 + 129 true НастройкиСинхронизацииДанных @@ -1091,10 +1087,10 @@ НастройкиСинхронизацииДанныхСостояниеПросмотра - 130 + 131 НастройкиСинхронизацииДанныхСостояниеПросмотраРасширеннаяПодсказка - 132 + 133 Label true true @@ -1104,7 +1100,7 @@ НастройкиСинхронизацииДанныхСостояниеПросмотраКонтекстноеМеню - 131 + 132 true ViewStatusAddition @@ -1115,10 +1111,10 @@ НастройкиСинхронизацииДанныхУправлениеПоиском - 133 + 134 НастройкиСинхронизацииДанныхУправлениеПоискомРасширеннаяПодсказка - 135 + 136 Label true true @@ -1128,7 +1124,7 @@ НастройкиСинхронизацииДанныхУправлениеПоискомКонтекстноеМеню - 134 + 135 true SearchControlAddition @@ -1139,7 +1135,7 @@ НастройкиСинхронизацииДанныхРасширеннаяПодсказка - 126 + 127 Label true true @@ -1160,7 +1156,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюНастроитьСинхронизациюДанныхРасширеннаяПодсказка - 104 + 105 Label true true @@ -1186,7 +1182,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюОтключитьСинхронизациюДанныхРасширеннаяПодсказка - 105 + 106 Label true true @@ -1215,7 +1211,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюОтправитьДанныеРасширеннаяПодсказка - 107 + 108 Label true true @@ -1238,7 +1234,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюГруппа3РасширеннаяПодсказка - 106 + 107 Label true true @@ -1261,7 +1257,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюНайтиРасширеннаяПодсказка - 109 + 110 Label true true @@ -1287,7 +1283,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 110 + 111 Label true true @@ -1310,7 +1306,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюГруппа1РасширеннаяПодсказка - 108 + 109 Label true true @@ -1333,7 +1329,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 112 + 113 Label true true @@ -1359,7 +1355,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 113 + 114 Label true true @@ -1382,7 +1378,7 @@ НастройкиСинхронизацииДанныхКонтекстноеМенюГруппа2РасширеннаяПодсказка - 111 + 112 Label true true @@ -1434,7 +1430,7 @@ НастройкиСинхронизацииДанныхОписаниеРасширеннаяПодсказка - 151 + 152 Label true true @@ -1476,7 +1472,7 @@ ГруппаМонитораСинхронизацииРасширеннаяПодсказка - 103 + 104 Label true true @@ -1509,7 +1505,7 @@ НастройкаСинхронизацииДанныхРасширеннаяПодсказка - 91 + 92 Label true true @@ -1542,7 +1538,7 @@ Декорация3РасширеннаяПодсказка - 156 + 157 Label true true @@ -1581,7 +1577,7 @@ ГруппаКартинки1РасширеннаяПодсказка - 155 + 156 Label true true @@ -1616,7 +1612,7 @@ Декорация4РасширеннаяПодсказка - 158 + 159 Label true true @@ -1654,7 +1650,7 @@ ГруппаСообщения1РасширеннаяПодсказка - 157 + 158 Label true true @@ -1683,7 +1679,7 @@ ГруппировкаСообщения1РасширеннаяПодсказка - 154 + 155 Label true true @@ -1716,7 +1712,7 @@ ОшибкаПолученияДанныхРасширеннаяПодсказка - 153 + 154 Label true true @@ -1749,7 +1745,7 @@ Декорация5РасширеннаяПодсказка - 162 + 163 Label true true @@ -1788,7 +1784,7 @@ ГруппаКартинки2РасширеннаяПодсказка - 161 + 162 Label true true @@ -1823,7 +1819,7 @@ Декорация6РасширеннаяПодсказка - 164 + 165 Label true true @@ -1861,7 +1857,7 @@ ГруппаСообщения2РасширеннаяПодсказка - 163 + 164 Label true true @@ -1890,7 +1886,7 @@ ГруппировкаСообщения2РасширеннаяПодсказка - 160 + 161 Label true true @@ -1923,7 +1919,7 @@ НетПриложенийДляСинхронизацииРасширеннаяПодсказка - 159 + 160 Label true true @@ -1954,7 +1950,7 @@ true ПанельОсновнаяРасширеннаяПодсказка - 84 + 85 Label true true @@ -2628,6 +2624,28 @@ Auto Auto + + ПерейтиККонфликтам + + <key>ru</key> + <value>Предупреждений нет</value> + + 6 + + ru + Открыть предупреждения при синхронизации данных + + + true + + + + ПерейтиККонфликтам + + + Auto + Auto + diff --git a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl index 55fa657ca..7121deaec 100644 --- a/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанныхВМоделиСервиса/Module.bsl @@ -59,8 +59,7 @@ СтатусСессии = СтатусСессии(Сессия); Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииМониторСинхронизацииДанных - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииМониторСинхронизацииДанных); ПерейтиНазад(); Возврат; КонецПопытки; @@ -87,19 +86,18 @@ &НаКлиенте Процедура ОтправитьДанные(Команда) - // Добавить к выгружаемым данным новые - - ДанныеПриложения = Элементы.НастройкиСинхронизацииДанных.ТекущиеДанные; - Если ДанныеПриложения=Неопределено Или Не ДанныеПриложения.СинхронизацияНастроена Тогда - Возврат; - КонецЕсли; - - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса.Форма.Форма", - Новый Структура("ЗапретитьВыгрузкуТолькоИзмененного, УзелИнформационнойБазы", - Истина, ДанныеПриложения.Корреспондент - ), ЭтаФорма - ); - + // Добавить к выгружаемым данным новые + + ДанныеПриложения = Элементы.НастройкиСинхронизацииДанных.ТекущиеДанные; + Если ДанныеПриложения=Неопределено Или Не ДанныеПриложения.СинхронизацияНастроена Тогда + Возврат; + КонецЕсли; + + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса.Форма.Форма", + Новый Структура("ЗапретитьВыгрузкуТолькоИзмененного, УзелИнформационнойБазы", + Истина, ДанныеПриложения.Корреспондент + ), ЭтаФорма); + КонецПроцедуры &НаКлиенте @@ -127,8 +125,7 @@ Если ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда Предупреждение(НСтр("ru = 'Для отключения синхронизации данных перейдите в менеджер сервиса. - |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'") - ); + |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'")); Иначе ПараметрыФормы = Новый Структура; @@ -164,24 +161,33 @@ Процедура НастройкиСинхронизацииДанныхПриАктивизацииСтроки(Элемент) ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные=Неопределено Тогда + Если ТекущиеДанные=Неопределено Тогда Элементы.НастройкиСинхронизацииДанныхОтключитьСинхронизациюДанных.Доступность = Ложь; Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтключитьСинхронизациюДанных.Доступность = Ложь; НастройкиСинхронизацииДанныхОписание = ""; - - Элементы.НастройкиСинхронизацииДанныхПодготовитьДанные.Доступность = Ложь; - Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтправитьДанные.Доступность = Ложь; - Иначе + + Элементы.НастройкиСинхронизацииДанныхПодготовитьДанные.Доступность = Ложь; + Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтправитьДанные.Доступность = Ложь; + Иначе Элементы.НастройкиСинхронизацииДанныхОтключитьСинхронизациюДанных.Доступность = ТекущиеДанные.СинхронизацияНастроена; Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтключитьСинхронизациюДанных.Доступность = ТекущиеДанные.СинхронизацияНастроена; НастройкиСинхронизацииДанныхОписание = ТекущиеДанные.Описание; - - Элементы.НастройкиСинхронизацииДанныхПодготовитьДанные.Доступность = ТекущиеДанные.СинхронизацияНастроена; - Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтправитьДанные.Доступность = ТекущиеДанные.СинхронизацияНастроена; + + Элементы.НастройкиСинхронизацииДанныхПодготовитьДанные.Доступность = ТекущиеДанные.СинхронизацияНастроена; + Элементы.НастройкиСинхронизацииДанныхКонтекстноеМенюОтправитьДанные.Доступность = ТекущиеДанные.СинхронизацияНастроена; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПерейтиККонфликтам(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзлыОбмена", МассивИспользуемыхУзлов(НастройкиСинхронизацииДанных)); + ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.Форма", ПараметрыФормы); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (Поставляемая часть) @@ -418,8 +424,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -436,6 +441,21 @@ КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Функция МассивИспользуемыхУзлов(НастройкиСинхронизацииДанных) + + УзлыОбмена = Новый Массив; + + Для Каждого СтрокаУзла Из НастройкиСинхронизацииДанных Цикл + Если СтрокаУзла.СинхронизацияНастроена Тогда + УзлыОбмена.Добавить(СтрокаУзла.Корреспондент); + КонецЕсли; + КонецЦикла; + + Возврат УзлыОбмена; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (Переопределяемая часть) @@ -496,8 +516,7 @@ ИначеЕсли ТекущиеДанные.НастройкаСинхронизацииВМенеджереСервиса Тогда Предупреждение(НСтр("ru = 'Для настройки синхронизации данных перейдите в менеджер сервиса. - |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'") - ); + |В менеджере сервиса воспользуйтесь командой ""Синхронизация данных"".'")); Иначе ПараметрыФормы = Новый Структура; @@ -511,8 +530,7 @@ Уникальность = ТекущиеДанные.ПланОбмена + Формат(ТекущиеДанные.ОбластьДанных, "ЧЦ=7; ЧВН=; ЧГ=0"); ОткрытьФорму("Обработка.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.Форма.Форма", - ПараметрыФормы, ЭтаФорма, Уникальность, ВариантОткрытияОкна.ОтдельноеОкно - ); + ПараметрыФормы, ЭтаФорма, Уникальность, ВариантОткрытияОкна.ОтдельноеОкно); КонецЕсли; КонецЕсли; @@ -578,17 +596,10 @@ КонецЕсли; КонецЦикла; - + // Отображение проблем синхронизации в шапке монитора - Если КоличествоПроблем > 0 Тогда - Элементы.ОбщаяКомандаОткрытьРезультатыОбменаДанными.Картинка = БиблиотекаКартинок.Предупреждение; - Элементы.ОбщаяКомандаОткрытьРезультатыОбменаДанными.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Проблемы: %1'"), Формат(КоличествоПроблем) - ); - Иначе - Элементы.ОбщаяКомандаОткрытьРезультатыОбменаДанными.Картинка = Новый Картинка; - Элементы.ОбщаяКомандаОткрытьРезультатыОбменаДанными.Заголовок = НСтр("ru = 'Проблем нет'"); - КонецЕсли; + СтруктураЗаголовка = ОбменДаннымиСервер.СтруктураЗаголовкаГиперссылкиМонитораПроблем(МассивИспользуемыхУзлов(НастройкиСинхронизацииДанных)); + ЗаполнитьЗначенияСвойств(Элементы.ПерейтиККонфликтам, СтруктураЗаголовка); КонецПроцедуры @@ -636,20 +647,17 @@ // Отправляем сообщение в МС Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьНастройкиСинхронизацииДанных() - ); + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьНастройкиСинхронизацииДанных()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.SessionId = НоваяСессия(); СообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииМониторСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииМониторСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; @@ -699,8 +707,7 @@ Если Настройка.КонечнаяТочкаКорреспондента.Пустая() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"), - НастройкаИзМенеджераСервиса.КонечнаяТочкаКорреспондента - ); + НастройкаИзМенеджераСервиса.КонечнаяТочкаКорреспондента); КонецЕсли; Если Настройка.СинхронизацияНастроена Тогда @@ -709,8 +716,7 @@ // Заполняем поле "Корреспондент" для существующих настроек Настройка.Корреспондент = ПланыОбмена[Настройка.ПланОбмена].НайтиПоКоду( - ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Настройка.ОбластьДанных) - ); + ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Настройка.ОбластьДанных)); Настройка.Описание = ОбменДаннымиСервер.ОписаниеОграниченийПередачиДанных(Настройка.Корреспондент); @@ -731,8 +737,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииМониторСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииМониторСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; @@ -763,15 +768,13 @@ // Получаем представление даты успешной синхронизации Элементы.ПредставлениеДатыСинхронизации.Заголовок = ОбменДаннымиСервер.ПредставлениеДатыСинхронизации( - ОбменДаннымиВМоделиСервиса.ДатаПоследнейУспешнойЗагрузкиДляВсехУзловИнформационнойБазы() - ); + ОбменДаннымиВМоделиСервиса.ДатаПоследнейУспешнойЗагрузкиДляВсехУзловИнформационнойБазы()); ОбновитьНастройкиСинхронизацииДанных(); Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииМониторСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииМониторСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; @@ -826,20 +829,17 @@ // Отправляем сообщение в МС Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПротолкнутьСинхронизацию() - ); + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПротолкнутьСинхронизацию()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.SessionId = НоваяСессия(); СообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), Истина); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииМониторСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииМониторСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; @@ -883,4 +883,4 @@ ТаблицаПереходовНоваяСтрока(3, "ОжиданиеПолученияДанных",,,,,, Истина, "ОжиданиеПолученияДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(4, "ОжиданиеПолученияДанных",,,,,, Истина, "ОжиданиеПолученияДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); -КонецПроцедуры +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index cc5397710..909af6c2f 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -1,2 +1,2 @@ - +

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl index 64d74f6cb..c917a272f 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -9,8 +9,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/СообщениеОНеудачномОбновлении.mdo b/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/СообщениеОНеудачномОбновлении.mdo deleted file mode 100644 index 99bb43b16..000000000 --- a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/СообщениеОНеудачномОбновлении.mdo +++ /dev/null @@ -1,10 +0,0 @@ - - - СообщениеОНеудачномОбновлении - - ru - Сообщение о неудачном обновлении - - PersonalComputer - MobileDevice - diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index 84ec8a443..7a42692e7 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -703,7 +703,7 @@ SaveValues Yes 40 - DontBlock + LockOwner Use true true diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl index b0de606e5..60da70b4f 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -3,8 +3,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -112,16 +111,16 @@ Если ФорматыСохранения.Количество() = 0 Тогда Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); Возврат; - КонецЕсли; + КонецЕсли; - Результат = Новый Структура; - Результат.Вставить("УпаковатьВАрхив", УпаковатьВАрхив); - Результат.Вставить("ФорматыСохранения", ФорматыСохранения); - Результат.Вставить("ВариантСохранения", ВариантСохранения); - Результат.Вставить("ПапкаДляСохранения", ВыбраннаяПапка); - Результат.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект); + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("УпаковатьВАрхив", УпаковатьВАрхив); + РезультатВыбора.Вставить("ФорматыСохранения", ФорматыСохранения); + РезультатВыбора.Вставить("ВариантСохранения", ВариантСохранения); + РезультатВыбора.Вставить("ПапкаДляСохранения", ВыбраннаяПапка); + РезультатВыбора.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект); - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html index b4a51492b..72af55e26 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index 88259bd80..757cd4f47 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -164,7 +164,7 @@ Если ДеревоПодчиненныеДокументы.ПолучитьЭлементы().Количество() И ДеревоРодительскиеДокументы.ПолучитьЭлементы().Количество() Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторВерхНиз"); ИначеЕсли ДеревоПодчиненныеДокументы.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУделениеКоннекторНиз"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторНиз"); ИначеЕсли ДеревоРодительскиеДокументы.ПолучитьЭлементы().Количество() Тогда ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторВерх"); Иначе @@ -231,7 +231,7 @@ // СтрокаДерева - ДанныеФормыЭлементДерева - исходная строка дерева значений // от которой ведется отсчет. // Возвращаемое значение: -// Булево - необходимость вывода в области вертиркального коннекотора +// Булево - необходимость вывода в области вертикального коннектора. // &НаСервере Функция НеобходимостьВыводаВертикальногоКоннектора(УровеньВверх,СтрокаДерева,ИщемСредиПодчиненных = Истина) @@ -266,20 +266,13 @@ // Выводит в табличный документ строку с документом, для которого формируется структура подчиненности // // Параметры -// Макет - МакетТабличногоДокумента - макет, на основании которого формирутеся табличный документ. +// Макет - МакетТабличногоДокумента - макет, на основании которого формируется табличный документ. &НаСервере Процедура ВывестиТекущийДокумент(Макет) Выборка = ПолучитьВыборкуПоРеквизитамДокумента(ДокументСсылка); Если Выборка.Следующий() Тогда - ПереопределяемоеПредставление = Неопределено; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.СтруктураПодчиненности\ПриПолученииПредставленияДокументаДляПечати"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриПолученииПредставленияДокументаДляПечати(Выборка, ПереопределяемоеПредставление); - КонецЦикла; - ПереопределяемоеПредставление = СтруктураПодчиненностиПереопределяемый.ПолучитьПредставлениеДокументаДляПечати(Выборка); Если ПереопределяемоеПредставление <> Неопределено Тогда @@ -429,7 +422,7 @@ // Получает выборку по реквизитам документа // // Параметры -// ДокументСсылка - ДокументСсылка - документ, значения реквзитов которого получаются запросом. +// ДокументСсылка - ДокументСсылка - документ, значения реквизитов которого получаются запросом. // // Возвращаемое значение: // ВыборкаИзРезультатаЗапроса @@ -455,13 +448,6 @@ ЗаменитьТекстЗапроса(ТекстЗапроса, МетаданныеДокумента, "#Сумма", "СуммаДокумента"); ЗаменитьТекстЗапроса(ТекстЗапроса, МетаданныеДокумента, "#Валюта", "Валюта"); - МассивДопРеквизитов = Новый Массив; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.СтруктураПодчиненности\ПриФормированииМассиваДополнительныхРеквизитовДокумента"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриФормированииМассиваДополнительныхРеквизитовДокумента(МетаданныеДокумента.Имя, МассивДопРеквизитов); - КонецЦикла; - МассивДопРеквизитов = СтруктураПодчиненностиПереопределяемый.МассивДополнительныхРеквизитовДокумента(МетаданныеДокумента.Имя); ДополнитьТекстЗапросаПоРеквизитамДокумента(ТекстЗапроса, МассивДопРеквизитов); @@ -575,7 +561,7 @@ КонецПроцедуры -// Определяет наличие документа среди родителей строки дерева, которая возомжно будет добавлена +// Определяет наличие документа среди родителей строки дерева, которая возможно будет добавлена // // Параметры // СтрокаРодитель - ДанныеФормыДерево,ДанныеФормыЭлементДерева - родитель, для @@ -715,15 +701,8 @@ | Документ." + КлючИЗначение.Ключ + " |ГДЕ | Ссылка В (&" + КлючИЗначение.Ключ + ")"; - - Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); - МассивДопРеквизитов = Новый Массив; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.СтруктураПодчиненности\ПриФормированииМассиваДополнительныхРеквизитовДокумента"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриФормированииМассиваДополнительныхРеквизитовДокумента(КлючИЗначение.Ключ, МассивДопРеквизитов); - КонецЦикла; + Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); МассивДопРеквизитов = СтруктураПодчиненностиПереопределяемый.МассивДополнительныхРеквизитовДокумента(КлючИЗначение.Ключ); ДополнитьТекстЗапросаПоРеквизитамДокумента(ТекстПоТипуДокумента, МассивДопРеквизитов); @@ -752,13 +731,6 @@ НоваяСтрока = СтрокиДерева.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка, "Ссылка, Представление, СуммаДокумента, Валюта, Проведен, ПометкаУдаления"); - ПереопределяемоеПредставление = Неопределено; - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.СтруктураПодчиненности\ПриПолученииПредставленияДокументаДляПечати"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриПолученииПредставленияДокументаДляПечати(Выборка, ПереопределяемоеПредставление); - КонецЦикла; - ПереопределенноеПредставление = СтруктураПодчиненностиПереопределяемый.ПолучитьПредставлениеДокументаДляПечати(Выборка); Если ПереопределенноеПредставление <> Неопределено Тогда НоваяСтрока.Представление = ПереопределенноеПредставление; diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl index 085e257d4..8fcc53793 100644 --- a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -20,8 +20,7 @@ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Наименование") - ); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Наименование")); КонецПроцедуры @@ -32,8 +31,7 @@ Отказ, , ЗакрытьФормуБезусловно, - НСтр("ru = 'Отменить выполнение операции?'") - ); + НСтр("ru = 'Отменить выполнение операции?'")); КонецПроцедуры @@ -63,7 +61,7 @@ Отбор = Новый Структура; Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); КонецЕсли; Возврат; diff --git a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html index 133ca9919..e10703aa8 100644 --- a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

            В форме выбирается сертификат электронной цифровой подписи (ЭЦП) для подписания данных.

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

            Для выполнения подписи следует нажать кнопку "Подписать".

            diff --git a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Module.bsl b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Module.bsl index 5fd6e6cd0..0e513ad7e 100644 --- a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Module.bsl @@ -54,7 +54,7 @@ СтруктураСертификата = ЭлектроннаяЦифроваяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(ВыбранныйСертификат); Если СтруктураСертификата <> Неопределено Тогда ПараметрыФормы = Новый Структура("СтруктураСертификата, Отпечаток", СтруктураСертификата, СтрокаСертификата.Отпечаток); - СтруктураВозврата = ОткрытьФормуМодально("Общаяформа.СертификатЭЦП", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.СертификатЭЦП", ПараметрыФормы, ЭтаФорма); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Form.form b/SSL/src/CommonForms/УточнениеКонтактов/Form.form index 6e7bbed3f..d9de2527b 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Form.form +++ b/SSL/src/CommonForms/УточнениеКонтактов/Form.form @@ -161,10 +161,6 @@ StartChoice ТаблицаКонтактовКонтактНачалоВыбора - - StartListChoice - ТаблицаКонтактовКонтактНачалоВыбораИзСписка - Clearing ТаблицаКонтактовКонтактОчистка @@ -219,10 +215,6 @@ Left true - - StartListChoice - ТаблицаКонтактовТекущийАдресКонтактаНачалоВыбораИзСписка - Clearing ТаблицаКонтактовТекущийАдресКонтактаОчистка @@ -282,6 +274,10 @@ BeforeDeleteRow ТаблицаКонтактовПередУдалением + + OnActivateCell + ТаблицаКонтактовПриАктивизацииЯчейки + ТаблицаКонтактовСтрокаПоиска 35 @@ -428,6 +424,10 @@ Left true + + NotificationProcessing + ОбработкаОповещения + BeforeClose ПередЗакрытием @@ -437,7 +437,7 @@ ПриСозданииНаСервере 150 - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index 0ce8c6958..25e014d63 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -1,11 +1,9 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -41,41 +39,48 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Таблица контактов - &НаКлиенте -Процедура ТаблицаКонтактовКонтактНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - ТекущиеДанные = Элементы.ТаблицаКонтактов.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; + Если ИмяСобытия = "ВыбранКонтакт" Тогда + + ТекущиеДанные = Элементы.ТаблицаКонтактов.ТекущиеДанные; + ТекущиеДанные.Контакт = Параметр.ВыбранныйКонтакт; + ЗаполнитьАдресаКонтакта(Элементы.ТаблицаКонтактов.ТекущаяСтрока); + УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); + Модифицированность = Истина; - Элементы.ТаблицаКонтактовКонтакт.СписокВыбора.Очистить(); - Если ТекущиеДанные.СписокНайденныхКонтактов.Количество() > 0 Тогда - Элементы.ТаблицаКонтактовКонтакт.СписокВыбора.ЗагрузитьЗначения( - ТекущиеДанные.СписокНайденныхКонтактов.ВыгрузитьЗначения()); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ТаблицаКонтактовТекущийАдресКонтактаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) +Процедура ТаблицаКонтактовПриАктивизацииЯчейки(Элемент) ТекущиеДанные = Элементы.ТаблицаКонтактов.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Элементы.ТаблицаКонтактовТекущийАдресКонтакта.СписокВыбора.Очистить(); - Если ТекущиеДанные.ТаблицаАдресовКонтакта.Количество() > 0 Тогда - Для каждого СтрокаТаблицыАдресов Из ТекущиеДанные.ТаблицаАдресовКонтакта Цикл - Элементы.ТаблицаКонтактовТекущийАдресКонтакта.СписокВыбора.Добавить( - Новый Структура("Вид,Адрес",СтрокаТаблицыАдресов.Вид, СтрокаТаблицыАдресов.АдресЭП), - СформироватьПредставлениеАдресаСВидом(СтрокаТаблицыАдресов.АдресЭП, СтрокаТаблицыАдресов.ВидНаименование)); - КонецЦикла; - + Если Элемент.ТекущийЭлемент.Имя = "ТаблицаКонтактовКонтакт" Тогда + + Элементы.ТаблицаКонтактовКонтакт.СписокВыбора.Очистить(); + Если ТекущиеДанные.СписокНайденныхКонтактов.Количество() > 0 Тогда + Элементы.ТаблицаКонтактовКонтакт.СписокВыбора.ЗагрузитьЗначения( + ТекущиеДанные.СписокНайденныхКонтактов.ВыгрузитьЗначения()); + КонецЕсли; + + ИначеЕсли Элемент.ТекущийЭлемент.Имя = "ТаблицаКонтактовТекущийАдресКонтакта" Тогда + + Элементы.ТаблицаКонтактовТекущийАдресКонтакта.СписокВыбора.Очистить(); + Если ТекущиеДанные.ТаблицаАдресовКонтакта.Количество() > 0 Тогда + Для каждого СтрокаТаблицыАдресов Из ТекущиеДанные.ТаблицаАдресовКонтакта Цикл + Элементы.ТаблицаКонтактовТекущийАдресКонтакта.СписокВыбора.Добавить( + Новый Структура("Вид,Адрес",СтрокаТаблицыАдресов.Вид, СтрокаТаблицыАдресов.АдресЭП), + СформироватьПредставлениеАдресаСВидом(СтрокаТаблицыАдресов.АдресЭП, СтрокаТаблицыАдресов.ВидНаименование)); + КонецЦикла; + + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -188,14 +193,15 @@ Возврат; КонецЕсли; - Если ВзаимодействияКлиент.ВыбратьКонтакт( + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоEmail", Истина); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Ложь); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Ложь); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Истина); + + ВзаимодействияКлиент.ВыбратьКонтакт( Предмет, ТекущиеДанные.Адрес, ТекущиеДанные.Представление, - ТекущиеДанные.Контакт, Истина, Ложь, Ложь,Истина - ) Тогда - ЗаполнитьАдресаКонтакта(Элементы.ТаблицаКонтактов.ТекущаяСтрока); - УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные); - Модифицированность = Истина; - КонецЕсли; + ТекущиеДанные.Контакт, ПараметрыОткрытия); КонецПроцедуры @@ -212,7 +218,7 @@ &НаКлиенте Процедура КомандаОКВыполнить() - Результат = Новый Массив; + РезультатВыбора = Новый Массив; ЕстьКонтактнаяИнформацияДляИзменения = Ложь; Для каждого СтрокаТаблицыКонтактов Из ТаблицаКонтактов Цикл @@ -226,7 +232,7 @@ СтрокаТаблицыКонтактов.Контакт, СтрокаТаблицыКонтактов.Группа); - Результат.Добавить(СтруктураДанные); + РезультатВыбора.Добавить(СтруктураДанные); КонецЦикла; @@ -241,7 +247,7 @@ Возврат; КонецЕсли; - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры @@ -283,8 +289,10 @@ КонецЕсли; Для Каждого Группа Из Группа.Строки Цикл - ПредставлениеКонтакта = Группа.Наименование + ?(ПустаяСтрока(Группа.НаименованиеВладельца), "", " (" + Группа.НаименованиеВладельца + ")"); - СтрокаТаблицы.СписокНайденныхКонтактов.Добавить(Группа.Контакт, ПредставлениеКонтакта); + Если СтрокаТаблицы.СписокНайденныхКонтактов.НайтиПоЗначению(Группа.Контакт) = Неопределено Тогда + ПредставлениеКонтакта = Группа.Наименование + ?(ПустаяСтрока(Группа.НаименованиеВладельца), "", " (" + Группа.НаименованиеВладельца + ")"); + СтрокаТаблицы.СписокНайденныхКонтактов.Добавить(Группа.Контакт, ПредставлениеКонтакта); + КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; @@ -675,7 +683,7 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка - |%2'"), Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -711,7 +719,7 @@ &НаСервере Процедура ЗаполнитьАдресаКонтакта(ТекущаяСтрока) - ТекущиеДанные = ТаблицаКонтактов.НайтиПоИдентификатору(ТекущаяСтрока); + ТекущиеДанные = ТаблицаКонтактов.НайтиПоИдентификатору(ТекущаяСтрока); ТаблицаАдресов = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Контакт,Истина); Если (Не НеИзменятьПредставлениеПриИзмененииКонтакта) ИЛИ ПустаяСтрока(ТекущиеДанные.Представление) Тогда @@ -720,3 +728,6 @@ ЗаполнитьТаблицуАдресовИзКоллекции(ТекущиеДанные, ТаблицаАдресов); КонецПроцедуры + + + diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index 94eaf01e1..2eba21c64 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -3918,23 +3918,6 @@ true - - РежимВыбора - - <key>ru</key> - <value>Режим выбора</value> - - 7 - - Boolean - - - true - - - true - - ЗавершитьРедактирование diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index 3fed281e1..2c12c95d2 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -358,14 +358,11 @@ Возврат; КонецЕсли; - Параметры.Свойство("РежимВыбора", РежимВыбора); - - Если РежимВыбора И Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда + Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда АвтоЗаголовок = Ложь; Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Изменение варианта отчета ""%1""'"), - Параметры.ПредставлениеВарианта - ); + Параметры.ПредставлениеВарианта); КонецЕсли; КонецПроцедуры @@ -375,10 +372,6 @@ &НаКлиенте Процедура ЗавершитьРедактирование(Команда) - Если РежимВыбора Тогда - ОповеститьОВыборе(Отчет.КомпоновщикНастроек); - Иначе - Закрыть(Истина); - КонецЕсли; + ОповеститьОВыборе(Отчет.КомпоновщикНастроек); КонецПроцедуры diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index adae5d858..edf29b8b2 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -253,23 +253,6 @@ </edit> <main>true</main> </attributes> - <attributes> - <name>РежимВыбора</name> - <title> - <key>ru</key> - <value>Режим выбора</value> - - 2 - - Boolean - - - true - - - true - - ЗавершитьРедактирование diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index f68c1c4b1..f81183e01 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -7,14 +7,11 @@ Возврат; КонецЕсли; - Параметры.Свойство("РежимВыбора", РежимВыбора); - - Если РежимВыбора И Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда + Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда АвтоЗаголовок = Ложь; Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Изменение настроек отчета ""%1""'"), - Параметры.ПредставлениеВарианта - ); + Параметры.ПредставлениеВарианта); КонецЕсли; КонецПроцедуры @@ -24,9 +21,5 @@ &НаКлиенте Процедура ЗавершитьРедактирование(Команда) - Если РежимВыбора Тогда - ОповеститьОВыборе(Отчет.КомпоновщикНастроек); - Иначе - Закрыть(Истина); - КонецЕсли; + ОповеститьОВыборе(Отчет.КомпоновщикНастроек); КонецПроцедуры diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 95561ce80..4b9ca62cb 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -1808,6 +1808,10 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>OnClose</event> + <name>ПриЗакрытии</name> + </handlers> <excludedCommands>ReportSettings</excludedCommands> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index 3fca82071..c7a0e2368 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -41,10 +41,10 @@ // Реквизиты ВерсияСтандартныхФункцийОтчетов = ""; - Попытка + Попытка ВерсияСтандартныхФункцийОтчетов = ОтчетОбъект.ВерсияСтандартныхФункцийОтчетов(); Исключение - // Обработка не требуется. Отчет не имеет програмнного интерфейса для тесной интеграции с формой отчета. + // Обработка не требуется. Отчет не имеет программного интерфейса для тесной интеграции с формой отчета. КонецПопытки; // Параметры по умолчанию @@ -61,8 +61,7 @@ ЭтаФормаПараметры = Новый Структура( "КлючНазначенияИспользования, КлючПользовательскихНастроек, |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, - |ФиксированныеНастройки, ОтчетСсылка" - ); + |ФиксированныеНастройки, ОтчетСсылка"); ЗаполнитьЗначенияСвойств(ЭтаФормаПараметры, Параметры); Если НЕ ЗначениеЗаполнено(ЭтаФормаПараметры.ОтчетСсылка) Тогда ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОбъекта); @@ -110,7 +109,10 @@ ВидимостьДоступностьКорректность(); // Механизмы расширения - ВариантыОтчетов.ФормаОтчетаПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтаФорма, Отказ, СтандартнаяОбработка); + КонецЕсли; ФормаОтчетаПереопределяемый.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); // Если в подменю одна команда, то выпадающий список не отображается. @@ -129,28 +131,48 @@ Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Результат = Ложь; - Если ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ФормаНастроекОтчета" Тогда - СуффиксФормыИсточникаИзменений = "Настроек"; - ИначеЕсли ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ФормаВариантаОтчета" Тогда - СуффиксФормыИсточникаИзменений = "Варианта"; + СуффиксФормыИсточникаИзменений = ИсточникВыбора.ИмяФормы; + ПозицияТочки = СтрДлина(СуффиксФормыИсточникаИзменений); + Пока Сред(СуффиксФормыИсточникаИзменений, ПозицияТочки, 1) <> "." Цикл + ПозицияТочки = ПозицияТочки - 1; + КонецЦикла; + СуффиксФормыИсточникаИзменений = ВРег(Сред(СуффиксФормыИсточникаИзменений, ПозицияТочки + 1)); + + Если СуффиксФормыИсточникаИзменений = ВРег("ВыборПроизвольногоПериода") Тогда + ЗагрузитьРезультатВыбораПериодаИзОтдельнойФормы(ВыбранноеЗначение); + Возврат; + ИначеЕсли СуффиксФормыИсточникаИзменений = ВРег("ФормаНастроекОтчета") + Или СуффиксФормыИсточникаИзменений = ВРег("ФормаНастроек") Тогда + ИзмененияИзФормыВариантаОтчета = Ложь; + ИначеЕсли СуффиксФормыИсточникаИзменений = ВРег("ФормаВариантаОтчета") + Или СуффиксФормыИсточникаИзменений = ВРег("ФормаВарианта") Тогда + ИзмененияИзФормыВариантаОтчета = Истина; Иначе - СуффиксФормыИсточникаИзменений = СтрЗаменить("^" + ИсточникВыбора.ИмяФормы, "^" + ИмяФормы, ""); // ^ - начало строки + ИзмененияИзФормыВариантаОтчета = Неопределено; КонецЕсли; - Если СуффиксФормыИсточникаИзменений = "Настроек" ИЛИ СуффиксФормыИсточникаИзменений = "Варианта" Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(ВыбранноеЗначение, СуффиксФормыИсточникаИзменений); + Если ИзмененияИзФормыВариантаОтчета <> Неопределено Тогда + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(ВыбранноеЗначение, ИзмененияИзФормыВариантаОтчета); БыстрыеНастройкиЗаполнить(); Результат = Истина; КонецЕсли; // Механизмы расширения - ВариантыОтчетовКлиент.ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетовКлиент"); + МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + КонецЕсли; ФормаОтчетаКлиентПереопределяемый.ОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); КонецПроцедуры &НаСервере Процедура ПриЗагрузкеВариантаНаСервере(НовыеНастройкиКД) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + // Вызов переопределяемого модуля ФормаОтчетаПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД); @@ -168,7 +190,7 @@ // Заполнение панели быстрых настроек РежимВариантаОтчета = Истина; ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ЭтаФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройкиКД); + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройкиКД, Неопределено); БыстрыеНастройкиЗаполнить(); // Вызов переопределяемого модуля @@ -189,7 +211,7 @@ ФормаОтчетаПереопределяемый.ПередЗагрузкойПользовательскихНастроекНаСервере(ЭтаФорма, НовыеПользовательскиеНастройкиКД); Если РежимВариантаОтчета Тогда - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеПользовательскиеНастройкиКД); + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеПользовательскиеНастройкиКД, Неопределено); БыстрыеНастройкиЗаполнить(); КонецЕсли; @@ -197,6 +219,14 @@ ФормаОтчетаПереопределяемый.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтаФорма, НовыеПользовательскиеНастройкиКД); КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + Если ФоновоеЗаданиеИдентификатор <> Неопределено Тогда + ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор); + ФоновоеЗаданиеИдентификатор = Неопределено; + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -518,7 +548,6 @@ ПараметрыФормы.Вставить("ПредставлениеВарианта", Строка(ОтчетНаименованиеТекущегоВарианта)); ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); - ПараметрыФормы.Вставить("РежимВыбора", Истина); ОткрытьФорму(КлючОбъекта + ".ФормаНастроек", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -536,7 +565,6 @@ ПараметрыФормы.Вставить("ПредставлениеВарианта", Строка(ОтчетНаименованиеТекущегоВарианта)); ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); - ПараметрыФормы.Вставить("РежимВыбора", Истина); ОткрытьФорму(КлючОбъекта + ".ФормаВарианта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -549,7 +577,7 @@ КонецЕсли; // Заполнение панели быстрых настроек - БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму("СброситьНастройки"); + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму("СброситьНастройки", Неопределено); БыстрыеНастройкиЗаполнить(); КонецПроцедуры @@ -578,9 +606,7 @@ ПараметрыФормы.Вставить("Заголовок", СтрЗаменить( НСтр("ru = 'Отправка отчета ""%1"" по почте'"), "%1", - ЭтаФорма.ОтчетНаименованиеТекущегоВарианта - ) - ); + ЭтаФорма.ОтчетНаименованиеТекущегоВарианта)); ОткрытьФорму("ОбщаяФорма.ОтправкаТабличныхДокументовПоПочте", ПараметрыФормы, , ); КонецПроцедуры @@ -611,7 +637,10 @@ Процедура Подключаемый_Команда(Команда) // Механизмы расширения Результат = Ложь; - ВариантыОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетовКлиент"); + МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат); + КонецЕсли; ФормаОтчетаКлиентПереопределяемый.ОбработчикКоманды(ЭтаФорма, Команда, Результат); КонецПроцедуры @@ -667,7 +696,7 @@ ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка) - ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ЭлементЗначение.ВыборГруппИЭлементов); + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ФункцииОтчетовКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(ЭлементЗначение.ВыборГруппИЭлементов)); ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); // Предполагаемые реквизиты @@ -760,8 +789,7 @@ + "-" + Сред(ЭлементИдентификатор, 17, 4) + "-" - + Сред(ЭлементИдентификатор, 21) - ); + + Сред(ЭлементИдентификатор, 21)); КонецФункции @@ -802,12 +830,22 @@ ПараметрыФормы.Вставить("КонецПериода", Настройки.Пользовательская.Значение.ДатаОкончания); ПараметрыФормы.Вставить("МинимальныйПериод", МинимальнаяПериодичность); ПараметрыФормы.Вставить("ВидПериода", ВидПериода); + ПараметрыФормы.Вставить("ИмяЭлемента", ЭлементИлиКоманда.Имя); + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму("ОбщаяФорма.ВыборПроизвольногоПериода", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРезультатВыбораПериодаИзОтдельнойФормы(РезультатВыбора) - РезультатВыбора = ОткрытьФормуМодально("ОбщаяФорма.ВыборПроизвольногоПериода", ПараметрыФормы, ЭтаФорма); Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда Возврат; КонецЕсли; + Настройки = СкомпоноватьНастройкиЭлемента(РезультатВыбора.ИмяЭлемента, Ложь, Ложь); + ПериодЗаполнен = Ложь; НачалоПериода = РезультатВыбора.НачалоПериода; КонецПериода = РезультатВыбора.КонецПериода; @@ -820,8 +858,8 @@ ПериодЗаполнен = Истина; КонецЕсли; - Если НачалоПериода = ПараметрыФормы.НачалоПериода - И КонецПериода = ПараметрыФормы.КонецПериода Тогда + Если НачалоПериода = Настройки.Пользовательская.Значение.ДатаНачала + И КонецПериода = Настройки.Пользовательская.Значение.ДатаОкончания Тогда Возврат; КонецЕсли; @@ -900,8 +938,7 @@ Настройки = Новый Структура( "Идентификатор, ЭлементИдентификатор, СтрокаКэша, Пользовательская, Общая, Прочие, - |Использование, Значение, Элемент" - ); + |Использование, Значение, Элемент"); Настройки.ЭлементИдентификатор = Прав(ИмяИнициатора, 32); Настройки.Идентификатор = ПривестиИмяКИдентификатору(Настройки.ЭлементИдентификатор); Настройки.СтрокаКэша = НайтиВКэше(КэшНастроекСКД, "Идентификатор", Настройки.Идентификатор); @@ -1005,7 +1042,7 @@ КонецПроцедуры &НаСервере -Процедура БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройки, СуффиксФормыИсточникаИзменений = "") +Процедура БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройки, ИзмененияИзФормыВариантаОтчета) Если НовыеНастройки <> Неопределено Тогда ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; @@ -1018,12 +1055,12 @@ ПользовательскиеНастройкиМодифицированы = Истина; - Если СуффиксФормыИсточникаИзменений = "Варианта" Тогда + // Включение флажка "ВариантМодифицирован"... + Если ИзмененияИзФормыВариантаОтчета = Истина Тогда + // ... если редактировался вариант отчета. ВариантМодифицирован = Истина; - КонецЕсли; - - Если СуффиксФормыИсточникаИзменений = "Настроек" И ВариантМодифицирован = Ложь Тогда - + ИначеЕсли ИзмененияИзФормыВариантаОтчета = Ложь И ВариантМодифицирован = Ложь Тогда + // ... если в результате изменения пользовательских настроек так же изменился их состав. ПользовательскиеНастройкиКД = НовыеНастройки.ПользовательскиеНастройки; КэшНастроек = РеквизитФормыВЗначение("КэшНастроекСКД", Тип("ТаблицаЗначений")); Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл @@ -1035,11 +1072,9 @@ КонецЕсли; КэшНастроек.Удалить(СтрокаТаблицы); КонецЦикла; - Если КэшНастроек.Количество() > 0 Тогда ВариантМодифицирован = Истина; КонецЕсли; - КонецЕсли; Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки.Настройки); @@ -1196,8 +1231,7 @@ УникальныйИдентификатор, "ВариантыОтчетов.СформироватьОтчет", ПараметрыФормированияОтчета, - НСтр("ru = 'Варианты отчетов: Формирование отчета'") - ); + НСтр("ru = 'Варианты отчетов: Формирование отчета'")); ДопСвойства.Удалить("КлючВарианта"); Исключение ДопСвойства.Удалить("КлючВарианта"); @@ -1241,12 +1275,23 @@ Возврат ЗаданиеВыполнено; КонецФункции +&НаСервереБезКонтекста +Процедура ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере Процедура БыстрыеНастройкиСоздатьЭлементыУправления() + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяКнопкиСпискаВыбора = "КнопкаВыпадающегоСписка"; + Иначе + ИмяКнопкиСпискаВыбора = "КнопкаСпискаВыбора"; + КонецЕсли; + // Реквизиты ДобавляемыеРеквизиты = Новый Массив; ПутиКДанным = Новый СписокЗначений; @@ -1326,7 +1371,7 @@ ШаблонГруппыСФлажками = Новый Структура; ШаблонГруппыСФлажками.Вставить("Вид", ВидГруппыФормы.ОбычнаяГруппа); ШаблонГруппыСФлажками.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная); - ШаблонГруппыСФлажками.Вставить("Отображение", ОтображениеОбычнойГруппы.Линия); + ШаблонГруппыСФлажками.Вставить("Отображение", ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния()); ШаблонГруппыСФлажками.Вставить("ОтображатьЗаголовок", Истина); ШаблонГруппыСФлажками.Вставить("РастягиватьПоГоризонтали", Истина); @@ -1337,7 +1382,7 @@ ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаОткрытия", Ложь); ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаОчистки", Ложь); ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаРегулирования", Ложь); - ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаСпискаВыбора", Ложь); + ШаблонПоляВводаПроизвольногоПериода.Вставить(ИмяКнопкиСпискаВыбора, Ложь); ШаблонПоляВводаПроизвольногоПериода.Вставить("РедактированиеТекста", Истина); ЕстьБыстрыеНастройки = Ложь; @@ -1471,6 +1516,20 @@ ЭлементЗаголовок = НСтр("ru = 'Диаграмма'"); ИначеЕсли ТипОбщейНастройки = Тип("ГруппировкаДиаграммыМакетаКомпоновкиДанных") Тогда ЭлементЗаголовок = НСтр("ru = 'Группировка диаграммы макета'"); + ИначеЕсли ТипОбщейНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ДоступныйОбъектНастройкиКД = НастройкиКД.ДоступныеОбъекты.Элементы.Найти(ОбщаяНастройка.ИдентификаторОбъекта); + Если ДоступныйОбъектНастройкиКД <> Неопределено Тогда + ЭлементЗаголовок = ДоступныйОбъектНастройкиКД.Заголовок; + КонецЕсли; + Если ПустаяСтрока(ЭлементЗаголовок) Тогда + ВложеннаяСхема = РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.Найти(ОбщаяНастройка.ИдентификаторОбъекта); + Если ВложеннаяСхема <> Неопределено Тогда + ЭлементЗаголовок = ВложеннаяСхема.Заголовок; + КонецЕсли; + КонецЕсли; + Если ПустаяСтрока(ЭлементЗаголовок) Тогда + ЭлементЗаголовок = Строка(ПользовательскаяНастройка); + КонецЕсли; Иначе ЭлементЗаголовок = Строка(ПользовательскаяНастройка); КонецЕсли; @@ -1481,6 +1540,7 @@ СменитьТипНаГруппуЭлементовОтбора = ЗначениеЗаполнено(СтруктураПредставлений.Представление); Если ТипОбщейНастройки = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") ИЛИ СменитьТипНаГруппуЭлементовОтбора Тогда ИспользованиеИмя = "ГруппаОтбора_Использование_" + ЭлементИдентификатор; @@ -1549,8 +1609,7 @@ ВыборИзСписка = ( ТипЗнч(ДоступнаяНастройка) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") И ТипЗнч(ДоступнаяНастройка.ДоступныеЗначения) = Тип("СписокЗначений") - И ДоступнаяНастройка.ДоступныеЗначения.Количество() > 0 - ); + И ДоступнаяНастройка.ДоступныеЗначения.Количество() > 0); ИспользованиеОтбораИмя = "ИспользованиеОтбора_" + ЭлементИдентификатор; ОтборИмя = "Отбор_" + ЭлементИдентификатор; @@ -1635,7 +1694,13 @@ КолонкаЗначение.Вид = ВидПоляФормы.ПолеВвода; ЗаполнитьЗначенияСвойств(КолонкаЗначение, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); - КолонкаЗначение.ВыборГруппИЭлементов = ФункцииОтчетовКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройка.ВыборГруппИЭлементов); + + Если ПользовательскаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или ПользовательскаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + КолонкаЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; + Иначе + КолонкаЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; + КонецЕсли; Если ВыборИзСписка Тогда КолонкаЗначение.РежимВыбораИзСписка = Истина; @@ -1696,7 +1761,13 @@ ЗначениеОтбора.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Значение_ПриИзменении"); ЗаполнитьЗначенияСвойств(ЗначениеОтбора, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); - ЗначениеОтбора.ВыборГруппИЭлементов = ФункцииОтчетовКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройка.ВыборГруппИЭлементов); + + Если ПользовательскаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии + Или ПользовательскаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + ЗначениеОтбора.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; + Иначе + ЗначениеОтбора.ВыборГруппИЭлементов = ФункцииОтчетовКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройка.ВыборГруппИЭлементов); + КонецЕсли; Если ВыборИзСписка Тогда ЗначениеОтбора.РежимВыбораИзСписка = Истина; @@ -1967,7 +2038,6 @@ ВидПериода.КнопкаОткрытия = Ложь; ВидПериода.КнопкаОчистки = Ложь; ВидПериода.КнопкаРегулирования = Ложь; - ВидПериода.КнопкаСпискаВыбора = Истина; ВидПериода.РастягиватьПоГоризонтали = Ложь; ВидПериода.Ширина = 9; ВидПериода.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_ВидПериода_ПриИзменении"); @@ -2009,11 +2079,18 @@ Период.КнопкаОткрытия = Ложь; Период.КнопкаОчистки = Ложь; Период.КнопкаРегулирования = Ложь; - Период.КнопкаСпискаВыбора = Истина; Период.РедактированиеТекста = Ложь; Период.УстановитьДействие("Очистка", "Подключаемый_СтандартныйПериод_Значение_Очистка"); - Период.УстановитьДействие("НачалоВыбораИзСписка", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбораИзСписка"); - Период.УстановитьДействие("НачалоВыбора", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбора"); + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ВидПериода.РежимВыбораИзСписка = Истина; + Период.КнопкаСпискаВыбора = Ложь; + Период.УстановитьДействие("НачалоВыбора", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбораИзСписка"); + Иначе + ВидПериода[ИмяКнопкиСпискаВыбора] = Истина; + Период[ИмяКнопкиСпискаВыбора] = Истина; + Период.УстановитьДействие("НачалоВыбораИзСписка", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбораИзСписка"); + Период.УстановитьДействие("НачалоВыбора", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбора"); + КонецЕсли; // Начало произвольного периода ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); @@ -2120,6 +2197,7 @@ ЗаполнитьЗначенияСвойств(Параметр, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); Параметр.ВыборГруппИЭлементов = ФункцииОтчетовКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы(ДоступнаяНастройка.ВыборГруппИЭлементов); + Параметр.АвтоОтметкаНезаполненного = ДоступнаяНастройка.ЗапрещатьНезаполненныеЗначения; Если ТипЗнч(ДоступнаяНастройка) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") @@ -2189,7 +2267,7 @@ ГруппаГруппировки = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.СтруктурыНастроек); ГруппаГруппировки.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаГруппировки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ГруппаГруппировки.Отображение = ОтображениеОбычнойГруппы.Линия; + ГруппаГруппировки.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния(); ГруппаГруппировки.Заголовок = ЭлементЗаголовок + ":"; ГруппаГруппировки.ОтображатьЗаголовок = Истина; @@ -2323,7 +2401,7 @@ КонецЦикла; Если Элементы.Периоды.ПодчиненныеЭлементы.Количество() > 0 Тогда - Элементы.ПараметрыИОтборы.Отображение = ОтображениеОбычнойГруппы.Линия; + Элементы.ПараметрыИОтборы.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния(); Иначе Элементы.ПараметрыИОтборы.Отображение = ОтображениеОбычнойГруппы.Нет; КонецЕсли; @@ -2399,6 +2477,7 @@ СменитьТипНаГруппуЭлементовОтбора = ЗначениеЗаполнено(СтруктураПредставлений.Представление); Если ТипОбщейНастройки = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") ИЛИ СменитьТипНаГруппуЭлементовОтбора Тогда ИспользованиеОтбораИмя = "ГруппаОтбора_Использование_" + ЭлементИдентификатор; diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl index 3728ac8fb..43d2467e7 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -45,9 +45,9 @@ ПомощникСозданияАвтономногоРабочегоМеста.СоздатьНачальныйОбразАвтономногоРабочегоМеста( Параметры.НастройкаОтборовНаУзле, + Параметры.ВыбранныеПользователиСинхронизации, АдресВременногоХранилищаНачальногоОбраза, - АдресВременногоХранилищаИнформацииОПакетеУстановки - ); + АдресВременногоХранилищаИнформацииОПакетеУстановки); КонецПроцедуры @@ -62,6 +62,7 @@ НачатьТранзакцию(); Попытка + // ============================ {для совместимости с БСП 2.1.3} Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); Если Пользователь <> Неопределено Тогда @@ -75,6 +76,7 @@ КонецЕсли; КонецЕсли; + // ============================ {для совместимости с БСП 2.1.3} АвтономноеРабочееМестоОбъект = Параметры.АвтономноеРабочееМесто.ПолучитьОбъект(); @@ -131,9 +133,9 @@ УстановитьПривилегированныйРежим(Истина); - Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда + Если ОбменДаннымиСервер.ГлавныйУзел() <> Неопределено Тогда - Возврат ПланыОбмена.ГлавныйУзел(); + Возврат ОбменДаннымиСервер.ГлавныйУзел(); Иначе @@ -394,8 +396,7 @@ Если ЗначениеЗаполнено(НастройкаСинхронизации.ДатаСинхронизации) Тогда НастройкаСинхронизации.ПредставлениеДатыСинхронизации = - ОбменДаннымиСервер.ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаСинхронизации - ); + ОбменДаннымиСервер.ОтносительнаяДатаСинхронизации(НастройкаСинхронизации.ДатаСинхронизации); Иначе НастройкаСинхронизации.ПредставлениеДатыСинхронизации = НСтр("ru = 'не выполнялась'"); КонецЕсли; @@ -448,30 +449,6 @@ Возврат Значение; КонецФункции -// Для внутреннего использования -// -Функция ДобавитьКлассОшибки(Знач ПредставлениеОшибки, Знач Класс) Экспорт - - Возврат Класс + ПредставлениеОшибки; - -КонецФункции - -// Для внутреннего использования -// -Функция УдалитьКлассОшибки(Знач ПредставлениеОшибки, Знач Класс) Экспорт - - Возврат СтрЗаменить(ПредставлениеОшибки, Класс, ""); - -КонецФункции - -// Для внутреннего использования -// -Функция КлассОшибкиСозданиеСлужебногоПользователя() Экспорт - - Возврат "#SA_CreateUser#"; - -КонецФункции - // // Для внутреннего использования @@ -513,8 +490,7 @@ ; // Строка записывается в Журнал регистрации ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСинхронизацияДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибкиДляЖурналаРегистрации - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибкиДляЖурналаРегистрации); ВызватьИсключение ПодробноеПредставлениеОшибки; КонецЕсли; @@ -522,8 +498,7 @@ Отказ = Ложь; ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, ПриложениеВСервисе(), Истина, Истина, - Перечисления.ВидыТранспортаСообщенийОбмена.WS - ); + Перечисления.ВидыТранспортаСообщенийОбмена.WS); Если Отказ Тогда ВызватьИсключение НСтр("ru = 'В процессе синхронизации данных с приложением в Интернете возникли ошибки (см. журнал регистрации).'"); @@ -537,8 +512,7 @@ Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться - |в файловом режиме работы информационной базы.'" - ); + |в файловом режиме работы информационной базы.'"); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -561,8 +535,7 @@ УстановитьПривилегированныйРежим(Истина); РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( - Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете, Ложь - ); + Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете, Ложь); КонецЕсли; @@ -587,6 +560,7 @@ И Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() И Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.Получить() И СинхронизацияССервисомДавноНеВыполнялась() + И ОбменДаннымиСервер.СинхронизацияДанныхРазрешена() ; КонецФункции @@ -597,6 +571,7 @@ Возврат ЭтоАвтономноеРабочееМесто() И Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() И Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.Получить() + И ОбменДаннымиСервер.СинхронизацияДанныхРазрешена() ; КонецФункции @@ -674,9 +649,8 @@ // Функция ПараметрыФормыВыполненияОбменаДанными() Экспорт - Возврат Новый Структура("УзелИнформационнойБазы, АдресДляВосстановленияПароляУчетнойЗаписи", - ПриложениеВСервисе(), АдресДляВосстановленияПароляУчетнойЗаписи() - ); + Возврат Новый Структура("УзелИнформационнойБазы, АдресДляВосстановленияПароляУчетнойЗаписи, ЗакрытьПриУспешнойСинхронизации", + ПриложениеВСервисе(), АдресДляВосстановленияПароляУчетнойЗаписи(), Истина); КонецФункции // Для внутреннего использования @@ -724,11 +698,9 @@ ПланыОбмена.УстановитьГлавныйУзел(Неопределено); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение НСтр("ru = 'Возможно, информационная база открыта в режиме конфигуратора. - |Завершите работу конфигуратора и повторите запуск программы.'" - ); + |Завершите работу конфигуратора и повторите запуск программы.'"); КонецПопытки; // Создаем узлы плана обмена автономной работы в нулевой области данных @@ -773,8 +745,7 @@ СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); - СтруктураЗаписи.Вставить("WSURLВебСервиса", Параметры.URL); - СтруктураЗаписи.Вставить("WSИмяПользователя", Параметры.ИмяПользователя); + СтруктураЗаписи.Вставить("WSURLВебСервиса", Параметры.URL); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); @@ -815,8 +786,7 @@ Если Пользователь = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Идентификация пользователя не выполнена. - |Возможно, справочник пользователей не включен в состав плана обмена автономной работы.'" - ); + |Возможно, справочник пользователей не включен в состав плана обмена автономной работы.'"); КонецЕсли; УстановитьМинимальнуюДлинуПаролейПользователей(0); @@ -832,8 +802,7 @@ Исключение ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -847,8 +816,7 @@ ИмяФайлаДанныхНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогИнформационнойБазы, - "data.xml" - ); + "data.xml"); ФайлДанныхНачальногоОбраза = Новый Файл(ИмяФайлаДанныхНачальногоОбраза); Если Не ФайлДанныхНачальногоОбраза.Существует() Тогда @@ -885,8 +853,7 @@ Исключение ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ДанныеНачальногоОбраза = Неопределено; ВызватьИсключение; @@ -898,8 +865,7 @@ УдалитьФайлы(ИмяФайлаДанныхНачальногоОбраза); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -912,8 +878,7 @@ Если ПустаяСтрока(СтрокаXML) Тогда ВызватьИсключение НСтр("ru = 'В автономное рабочее место не были переданы настройки. - |Работа с автономным рабочим место невозможна.'" - ); + |Работа с автономным рабочим место невозможна.'"); КонецЕсли; ЧтениеXML = Новый ЧтениеXML; diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 19abc9689..b62d4cda8 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -95,22 +95,18 @@ Постфикс = ? (ЗагрузкаСВеб, КодАдресногоОбъекта, ""); ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, - ПутьКДаннымНаСервере + "KLADR" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб - ); + ПутьКДаннымНаСервере + "KLADR" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб); ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, ПутьКДаннымНаСервере + "STREET" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб, - 5 - ); + 5); ЗагрузитьАдресныеСведения(КодАдресногоОбъекта, ПутьКДаннымНаСервере + "DOMA" + Постфикс, АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб, - 6 - ); + 6); ЗаполнитьАльтернативныеНазвания(ПутьКДаннымНаСервере + ИмяФайлаАльтернативныхНазваний + Постфикс, - АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб - ); + АдресныеСведения, АльтернативныеНазвания, ЗагрузкаСВеб); Если АдресныеСведения.Количество() = 0 Тогда Возврат; @@ -412,8 +408,7 @@ НоваяСтрока.Улица = ?(ВыборкаАдресов.ТипАдресногоЭлемента > 4, ВыборкаАдресов.Улица, НСтр("ru='< Без улицы >'")); НоваяСтрока.Описание = СформироватьОписаниеИзАдресныхЭлементов(ДетализацияДоУровня, - ВыборкаАдресов.Регион, ВыборкаАдресов.Район, ВыборкаАдресов.Город, ВыборкаАдресов.НаселенныйПункт - ); + ВыборкаАдресов.Регион, ВыборкаАдресов.Район, ВыборкаАдресов.Город, ВыборкаАдресов.НаселенныйПункт); КонецЦикла; АдресВХранилище = ПоместитьВоВременноеХранилище(НайденныеЗаписиПоИндексу, Новый УникальныйИдентификатор); @@ -568,8 +563,7 @@ Если РезультатЗапроса.Пустой() Тогда Индекс = ПолучитьИндекс(СтруктураАдреса.Регион, СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица, - Дом, Корпус - ); + Дом, Корпус); Иначе Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); @@ -604,8 +598,7 @@ РодительИндекса = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); Индекс = ""; Загружен = СтруктураЗагруженныхЭлементовАдреса( - НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы - ); + НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); Регион = ПолучитьАдресныйЭлемент(НазваниеРегиона, 1, РодительИндекса); Если Регион.Код > 0 Тогда @@ -705,8 +698,7 @@ Функция АвтоПодборТекстВАдресномЭлементе(Текст, Регион, Район, Город, НаселенныйПункт, УровеньЭлемента, ПризнакАктуальности = 0) Экспорт СтруктураОграничений = ПолучитьСтруктуруОграниченийПоАдресу( - Регион, Район, Город, НаселенныйПункт, "", УровеньЭлемента - ); + Регион, Район, Город, НаселенныйПункт, "", УровеньЭлемента); РезультатЗапроса = ПолучитьРезультатЗапросаАвтоподбораДляРегистра(Текст, СтруктураОграничений, 51); Количество = РезультатЗапроса.Количество(); @@ -785,8 +777,7 @@ Индекс = АдресныйКлассификаторКлиентСервер.ПустаяСтруктураАдреса(); НомерИндекса = ПолучитьИндекс(НазваниеРегиона, - НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома, НомерКорпуса, Индекс - ); + НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома, НомерКорпуса, Индекс); // Восстанавливаем населенный пункт, который мог потеряться Если ПустаяСтрока(НазваниеНаселенногоПункта) И НаселенныйПункт.Код = 0 И Улица.Код <> 0 Тогда @@ -1016,8 +1007,7 @@ Дом = Новый Структура("Код, Наименование, Сокращение, ТипАдресногоЭлемента, Индекс, |КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде, |ПризнакАктульности", - 0, "", "", 0, "", 0, 0, 0, 0, 0, 0 - ); + 0, "", "", 0, "", 0, 0, 0, 0, 0, 0); Иначе Запрос.Текст = " @@ -1056,6 +1046,18 @@ КонецЕсли; СтруктураПроверки.Вставить("Дом", Дом); + // Дополнительная проверка на упакованные дома с данными ФИАС + Если КодДома=0 Тогда + ДополнительнаяПроверка = ДанныеЗданияПоДомуИКорпусу(Улица, НомерДома, НомерКорпуса); + Если ДополнительнаяПроверка.ЕстьЗдания Тогда + Если ДополнительнаяПроверка.Код<>Неопределено Тогда // Нашли + КодДома = ДополнительнаяПроверка.Код; + КонецЕсли; + Иначе + ЕстьДома = Ложь; + КонецЕсли; + КонецЕсли; + // Если по улице нет домов в КЛАДР - считаем, что ошибки нет // Если же по улице есть дома, и код дома не найден - то ошибка. Если КодДома = 0 И ЕстьДома Тогда @@ -1093,14 +1095,12 @@ Запрос.УстановитьПараметр("УказанныйИндекс", УказанныйИндекс); Если Запрос.Выполнить().Пустой() Тогда СтруктураОшибок.Вставить("Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Индекс ""%1"" не найден в адресном классификаторе.'"), УказанныйИндекс - )); + НСтр("ru='Индекс ""%1"" не найден в адресном классификаторе.'"), УказанныйИндекс)); ЕстьОшибки = Истина; ИначеЕсли НомерИндекса <> УказанныйИндекс Тогда СтруктураОшибок.Вставить("Индекс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Индекс ""%1"" не соответствует введенному адресу.'"), УказанныйИндекс - )); + НСтр("ru='Индекс ""%1"" не соответствует введенному адресу.'"), УказанныйИндекс)); ЕстьОшибки = Истина; КонецЕсли; @@ -1348,8 +1348,7 @@ АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, , , , 3), АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, , , 4), АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, , 5), - АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, 6) - ); + АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, 6)); Возврат СтруктураЗагруженных; КонецФункции @@ -1450,8 +1449,7 @@ СтруктураОграничений = Новый Структура(); РодительскийЭлемент = ВернутьСтруктуруАдресногоКлассификатораПоАдреснымЭлементам( - НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы - ); + НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); УровеньРодителя = РодительскийЭлемент.ТипАдресногоЭлемента; КодРодителя = РодительскийЭлемент.Код; @@ -1459,24 +1457,19 @@ СтруктураОграничений.Вставить("ТипАдресногоЭлемента", Уровень); ДобавитьКодВСтруктуру(Уровень, УровеньРодителя, СтруктураОграничений, - "КодАдресногоОбъектаВКоде", 1, РодительскийЭлемент.КодАдресногоОбъектаВКоде - ); + "КодАдресногоОбъектаВКоде", 1, РодительскийЭлемент.КодАдресногоОбъектаВКоде); ДобавитьКодВСтруктуру(Уровень, УровеньРодителя, СтруктураОграничений, - "КодРайонаВКоде", 2, РодительскийЭлемент.КодРайонаВКоде - ); + "КодРайонаВКоде", 2, РодительскийЭлемент.КодРайонаВКоде); ДобавитьКодВСтруктуру(Уровень, УровеньРодителя, СтруктураОграничений, - "КодГородаВКоде", 3, РодительскийЭлемент.КодГородаВКоде - ); + "КодГородаВКоде", 3, РодительскийЭлемент.КодГородаВКоде); ДобавитьКодВСтруктуру(Уровень, УровеньРодителя, СтруктураОграничений, - "КодНаселенногоПунктаВКоде", 4, РодительскийЭлемент.КодНаселенногоПунктаВКоде - ); + "КодНаселенногоПунктаВКоде", 4, РодительскийЭлемент.КодНаселенногоПунктаВКоде); ДобавитьКодВСтруктуру(Уровень, УровеньРодителя, СтруктураОграничений, - "КодУлицыВКоде", 5, ?(Уровень<5, 0, РодительскийЭлемент.КодУлицыВКоде) - ); + "КодУлицыВКоде", 5, ?(Уровень<5, 0, РодительскийЭлемент.КодУлицыВКоде)); Возврат СтруктураОграничений; КонецФункции @@ -1588,11 +1581,17 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "АдресныйКлассификатор" - ); + "АдресныйКлассификатор"); КонецПроцедуры +// Возвращает базовое имя события для регистрации в журнале событий +// +Функция СобытиеЖурналаРегистрации() Экспорт + Возврат НСтр("ru='Адресный классификатор'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -1645,6 +1644,7 @@ КонецЦикла; НаборЗаписей.Записать(); + КонецПроцедуры // Раскладывает коды адресных объектов на регион, район, город, населенный пункт, город, улицу и признак актуальности @@ -1740,10 +1740,7 @@ Если ЕстьОшибки Тогда СтрокаОшибки = НСтр("ru = 'В файле адресного классификатора %1 есть ошибки уникальности кодов'"); ПараметрыВСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, "socrbase.dbf"); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Адресный классификатор.Загрузка'"), - УровеньЖурналаРегистрации.Ошибка, , , ПараметрыВСтроке - ); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ПараметрыВСтроке); КонецЕсли; НаборЗаписей.Записать(); @@ -1807,8 +1804,7 @@ НовыеВерсииАдресныхОбъектов.Вставить(АдресныйОбъект, ДоступнаяВерсия); ЗагрузитьКлассификаторПоАдресномуОбъекту(АдресныйОбъект, - ПараметрыЗагрузки.ПутьКДаннымНаСервере, ПараметрыЗагрузки.ИсточникДанныхДляЗагрузки = 1 - ); + ПараметрыЗагрузки.ПутьКДаннымНаСервере, ПараметрыЗагрузки.ИсточникДанныхДляЗагрузки = 1); КонецЦикла; @@ -1929,12 +1925,10 @@ Функция ПолучитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт КодПользователя = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "АутентификацияНаПользовательскомСайте", "КодПользователя", "" - ); + "АутентификацияНаПользовательскомСайте", "КодПользователя", ""); Пароль = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "АутентификацияНаПользовательскомСайте", "Пароль", "" - ); + "АутентификацияНаПользовательскомСайте", "Пароль", ""); Возврат Не ПустаяСтрока(КодПользователя) И Не ПустаяСтрока(Пароль); КонецФункции @@ -1948,12 +1942,10 @@ Процедура СохранитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "АутентификацияНаПользовательскомСайте", "КодПользователя", КодПользователя - ); + "АутентификацияНаПользовательскомСайте", "КодПользователя", КодПользователя); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "АутентификацияНаПользовательскомСайте", "Пароль", Пароль - ); + "АутентификацияНаПользовательскомСайте", "Пароль", Пароль); КонецПроцедуры @@ -1968,8 +1960,7 @@ АдресныеСведения = ИнформацияПоАдресномуОбъекту(ОписаниеВерсии.Ключ); УстановитьВерсиюКлассификатора(ОписаниеВерсии.Ключ, АдресныеСведения.Наименование + " " + АдресныеСведения.Сокращение, - ОписаниеВерсии.Значение - ); + ОписаниеВерсии.Значение); КонецЦикла; КонецПроцедуры @@ -2117,9 +2108,7 @@ Если ЕстьОшибки Тогда СтрокаОшибки = НСтр("ru = 'В файле адресного классификатора %1 есть ошибки уникальности кодов'"); ПараметрыВСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, ПутьКДаннымНаСервере); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Адресный классификатор.Загрузка'"), - УровеньЖурналаРегистрации.Ошибка, , , ПараметрыВСтроке - ); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ПараметрыВСтроке); КонецЕсли; Возврат Истина; @@ -3134,8 +3123,7 @@ КодРодителя = Неопределено; СтруктураОграничений = ВернутьСтруктуруОграниченийПоРодителю( ПолеРегиона, ПолеРайона, ПолеГорода, ПолеНаселенногоПункта, ИмяУлицы, - КодРодителя, УровеньЭлемента - ); + КодРодителя, УровеньЭлемента); Иначе СтруктураОграничений = Новый Структура(); @@ -3205,3 +3193,468 @@ Возврат ЦифроваяЧасть; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Учет изменений КЛАДР в упаковке домов по данным ФИАС +// + +// Поиск данных по номеру дома и корпуса. Предназначено для совместимости старых проверок. +// +// Параметры: +// Улица - Структура с описанием улицы (коды частей адреса) +// НомерДома - Строка или число с номером дома (владения, домовладения) +// НомерКорпуса - Строка или число с номером корпуса (строения, литеры, сооружения, участка) +// +// Возвращаемое значение - структура с полями: +// ЕстьЗдания - Булево - признак того, что на улице есть дома +// Индекс - Строка - почтовый индекс дома. Неопределено, если дом не найден +// Код - Строка - код адресного классификатора дома. Неопределено, если дом не найден +// +Функция ДанныеЗданияПоДомуИКорпусу(Знач Улица, Знач НомерДома, Знач НомерКорпуса) + + ВсеВарианты = ВариантыНомеровЗданийУлицы(Улица); + Результат = Новый Структура("ЕстьЗдания, Код, Индекс", ВсеВарианты.Количество()>0); + Если Не Результат.ЕстьЗдания Тогда + Возврат Результат; + КонецЕсли; + + ВсеВарианты.Сортировать("ЭтоДиапазон, Описание"); + + // Перебираем все варианты совместимости: + // номер дома может означать Дом, Владение, Домовладение + // номер корпуса - Корпус, Строение, Литер, Сооружение, Участок + + ВариантыДома = Новый Структура("Дом, Владение, Домовладение"); + ВариантыКорпуса = Новый Структура("Корпус, Строение, Литер, Сооружение, Участок"); + + Если ТипЗнч(НомерДома)=Тип("Число") Тогда + НомерДомаСтрокой = Формат(НомерДома, "ЧГ="); + Иначе + НомерДомаСтрокой = ВРег(СокрЛП(СтрЗаменить(НомерДома, " ", ""))); + КонецЕсли; + + Если ТипЗнч(НомерДома)=Тип("Число") Тогда + НомерКорпусаСтрокой = Формат(НомерКорпуса, "ЧГ="); + Иначе + НомерКорпусаСтрокой = ВРег(СокрЛП(СтрЗаменить(НомерКорпуса, " ", ""))); + КонецЕсли; + + Для Каждого Вариант Из ВсеВарианты Цикл + + Для Каждого КлючЗначениеДом Из ВариантыДома Цикл + Для Каждого КлючЗначениеКорпус Из ВариантыКорпуса Цикл + Здание = Новый Структура; + Здание.Вставить(КлючЗначениеДом.Ключ, НомерДомаСтрокой); + Здание.Вставить(КлючЗначениеКорпус.Ключ, НомерКорпусаСтрокой); + + Если Вариант.ЭтоДиапазон Тогда + Если ЗданиеВходитВДиапазон(Здание, Вариант.Описание) Тогда + Результат.Индекс = Вариант.Индекс; + Результат.Код = Вариант.Код; + Возврат Результат; + КонецЕсли; + Иначе + Если ЗданиеВходитВОписание(Здание, Вариант.Описание, Ложь) Тогда + Результат.Индекс = Вариант.Индекс; + Результат.Код = Вариант.Код; + Возврат Результат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Определяет все описания домов на улице, разбитых до конечного определения или диапазона +// +// Параметры: +// Улица - Структура - поля адресного объекта-улицы, для которой запрашиваются все дома +// +// Возвращаемое значение - ТаблицаЗначений с колонками +// Описание - Строка - описание дома или диапазона +// ЭтоДиапазон - Булево - признак того, что описание содержит диапазон +// Индекс - Строка - почтовый индекс +// Код - Строка - код адресного классификатора, соответствующий описанию +// +Функция ВариантыНомеровЗданийУлицы(Знач Улица) + + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | АдресныйКлассификатор.Наименование КАК Описание, + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.Индекс КАК Индекс, + | ЛОЖЬ КАК ЭтоДиапазон + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ГДЕ + | АдресныйКлассификатор.ТипАдресногоЭлемента = 6 + | И АдресныйКлассификатор.ПризнакАктуальности = 0 + | + | И АдресныйКлассификатор.КодАдресногоОбъектаВКоде = &КодАдресногоОбъектаВКоде + | И АдресныйКлассификатор.КодРайонаВКоде = &КодРайонаВКоде + | И АдресныйКлассификатор.КодГородаВКоде = &КодГородаВКоде + | И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = &КодНаселенногоПунктаВКоде + | И АдресныйКлассификатор.КодУлицыВКоде = &КодУлицыВКоде + |"); + Запрос.УстановитьПараметр("КодАдресногоОбъектаВКоде", Улица.КодАдресногоОбъектаВКоде); + Запрос.УстановитьПараметр("КодРайонаВКоде", Улица.КодРайонаВКоде); + Запрос.УстановитьПараметр("КодГородаВКоде", Улица.КодГородаВКоде); + Запрос.УстановитьПараметр("КодНаселенногоПунктаВКоде", Улица.КодНаселенногоПунктаВКоде); + Запрос.УстановитьПараметр("КодУлицыВКоде", Улица.КодУлицыВКоде); + + Результат = Запрос.Выполнить().Выгрузить(); + + Позиция = Результат.Количество() - 1; + Пока Позиция>=0 Цикл + Строка = Результат[Позиция]; + Позиция = Позиция - 1; + + // Разбиваем на детальные описания + ВариантыОписаний = ВРег(СтрЗаменить( СокрЛП(СтрЗаменить(Строка.Описание, ",", Символы.ПС)), " ", "")); + + Для НомерСтроки=1 По СтрЧислоСтрок(ВариантыОписаний) Цикл + Описание = СтрПолучитьСтроку(ВариантыОписаний, НомерСтроки); + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Описание = Описание; + НоваяСтрока.Код = Строка.Код; + НоваяСтрока.Индекс = Строка.Индекс; + НоваяСтрока.ЭтоДиапазон = ЭтоДиапазон(Описание); + КонецЦикла; + + Результат.Удалить(Строка); + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Проверяет на вхождение дом в диапазон +// +// Параметры: +// Дом - Структура - описание дома, содержит реквизиты Дом, Корпус +// Описание - Строка - одиночное описание диапазон +// +// Возвращаемые значение - Булево - признак вхождения +// +Функция ЗданиеВходитВДиапазон(Знач Здание, Знач Описание) + + ПозицияДефиса = Найти(Описание, "-"); + Если ПозицияДефиса=0 И Описание<>"Н" И Описание<>"Ч" Тогда + // Это не диапазон + Возврат Ложь; + КонецЕсли; + + ТипЧисло = Новый ОписаниеТипов("Число"); + + // Выделяем числовую часть номера + НомерДома = ЧисловаяЧастьНомера( ОсновнойНомерЗдания(Здание) ); + Если НомерДома=0 Тогда + // Нет основного номера дома + Возврат Ложь; + КонецЕсли; + + ДлинаОписания = СтрДлина(Описание); + ТекСимвол = Лев(Описание, 1); + Если ТекСимвол="Н" Тогда + // Нечетный + Если НомерДома%2=0 Тогда + // Четный номер не может входить в нечетный диапазон + Возврат Ложь; + ИначеЕсли ДлинаОписания=1 Тогда + // Все нечетные + Возврат Истина; + КонецЕсли; + Позиция = 2; + + ИначеЕсли ТекСимвол="Ч" Тогда + // Четный + Если НомерДома%2=1 Тогда + // Нечетный номер не может входить в четный диапазон + Возврат Ложь; + ИначеЕсли ДлинаОписания=1 Тогда + // Все четные + Возврат Истина; + КонецЕсли; + Позиция = 2; + + ИначеЕсли ЭтоЦифра(ТекСимвол) Тогда + // Обычный + Позиция = 1; + + Иначе + // Это не диапазон + Возврат Ложь; + КонецЕсли; + + // Ищем начало + НачДиапазона = 0; + Пока Позиция<ПозицияДефиса Цикл + ТекСимвол = Сред(Описание, Позиция, 1); + Позиция = Позиция + 1; + Если ТекСимвол="(" Тогда + // Возможное начало диапазона + Продолжить; + ИначеЕсли Не ЭтоЦифра(ТекСимвол) Тогда + // Это неправильный диапазон + Возврат Ложь; + КонецЕсли; + НачДиапазона = НачДиапазона * 10 + ТипЧисло.ПривестиЗначение(ТекСимвол); + КонецЦикла; + + Позиция = Позиция + 1; + // Ищем конец + КонДиапазона = 0; + Пока Позиция<=ДлинаОписания Цикл + ТекСимвол = Сред(Описание, Позиция, 1); + Позиция = Позиция + 1; + Если ТекСимвол=")" Тогда + // Возможный конец диапазона + Прервать; + ИначеЕсли Не ЭтоЦифра(ТекСимвол) Тогда + // Это неправильный диапазон + Возврат Ложь; + КонецЕсли; + КонДиапазона = КонДиапазона * 10 + ТипЧисло.ПривестиЗначение(ТекСимвол); + КонецЦикла; + + Если НачДиапазона>КонДиапазона Тогда + // Это неправильный диапазон + Возврат Ложь; + КонецЕсли; + + Возврат НомерДома>=НачДиапазона И НомерДома<=КонДиапазона; +КонецФункции + +// Проверяет на соответствие дома описанию +// +// Параметры: +// Здание - Структура - описание дома, содержит реквизиты Дом, Корпус и т.п. +// Описание - Строка - одиночное описание здания +// ПолноеСоответствие - Булево - флаг точного поиска. Если указано Ложь, то поиск происходит только по +// заполненным полям параметра Здание, например под описание +// "Дом 2 корпус 1 строение 6" подойдут "Дом 2 корпус 1" и "Дом 2" +// +// Возвращаемые значение - Булево - признак вхождения +// +Функция ЗданиеВходитВОписание(Знач Здание, Знач Описание, Знач ПолноеСоответствие=Истина) + + // Разбираем в структуру + ЧастиОписания = СтруктураОписанияЗдания(Описание); + Если ЧастиОписания=Неопределено Тогда + // Ошибка разбора строки + Возврат Ложь; + КонецЕсли; + + // Сравниваем по частям + Результат = Истина; + + // То, что передали, необходимо искать всегда + Для Каждого КлючЗначение Из Здание Цикл + Значение = КлючЗначение.Значение; + Ключ = КлючЗначение.Ключ; + Если Не ПустаяСтрока(Значение) И ЧастиОписания[Ключ]<>Значение Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ПолноеСоответствие Тогда + // Все, что нашли, должно полностью совпадать с переданным + Для Каждого КлючЗначение Из ЧастиОписания Цикл + Значение = КлючЗначение.Значение; + Ключ = КлючЗначение.Ключ; + Если Не ПустаяСтрока(Значение) Тогда + Если Не Здание.Свойство(Ключ) Или Здание[Ключ]<>Значение Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Разбирает строковое описание отдельного здания КЛАДР +// +// Параметры: +// Описание - Строка - описание одиночного здания КЛАДР +// +// Возвращаемое значение: +// Структура - Ключ - идентификатор, значение - номер здания. +// Набор идентификаторов определяется по данным таблицы-результата ТипыЧастейЗдания +// +// Неопределено - если описание не удалось распознать. +// +Функция СтруктураОписанияЗдания(Знач Описание) + Текст = Описание; + Результат = Новый Структура; + + // Все дополнительны части здания + ТипыЧастейЗдания = ТипыЧастейЗдания(); + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + Результат.Вставить(ТипЧасти.Идентификатор); + КонецЦикла; + + Идентификатор = "Дом"; // по умолчанию для возможно пустого первого + Результат.Вставить(Идентификатор); + + ЕстьЕщеЧасти = Истина; + + Пока ЕстьЕщеЧасти Цикл + // Тип текущей части + Позиция = 1; + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + Если Лев(Текст, ТипЧасти.Длина)=ТипЧасти.Префикс Тогда + Идентификатор = ТипЧасти.Идентификатор; + Позиция = 1 + ТипЧасти.Длина; + Прервать; + КонецЕсли; + КонецЦикла; + Текст = Сред(Текст, Позиция); + + // Значение части + Позиция = 0; + Для Каждого ТипЧасти Из ТипыЧастейЗдания Цикл + // Ищем ближайший следующий тип, после которого должно быть значение + ТестПозиции = Найти(Текст, ТипЧасти.Префикс); + Если ТестПозиции>0 // Нашли + И (Позиция=0 Или ТестПозиции<Позиция) // Ближайший + И Не ПустаяСтрока(Сред(Текст, ТестПозиции + ТипЧасти.Длина, 1)) // Со значением + Тогда + Позиция = ТестПозиции; + КонецЕсли; + КонецЦикла; + + ЕстьЕщеЧасти = Позиция>0; + Если ЕстьЕщеЧасти Тогда + Значение = Лев(Текст, Позиция-1); + Текст = Сред(Текст, Позиция); + Иначе + Значение = Текст; + КонецЕсли; + + Результат[Идентификатор] = СтрЗаменить(Значение, "_", "-"); + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Выделяем числовую часть номера дома +// +// Параметры: +// Номер - Строка, Число - полный номер дома +// +// Возвращаемое значение -число с числовой частью номера. Если числовой части нет, то возвращается ноль +// +Функция ЧисловаяЧастьНомера(Знач Номер) + ТипЧисло = Новый ОписаниеТипов("Число"); + + Если ТипЧисло.СодержитТип(ТипЗнч(Номер)) Тогда + Возврат Номер; + КонецЕсли; + + НомерДома = 0; + Для Позиция=1 По СтрДлина(Номер) Цикл + ТекСимвол = Сред(Номер, Позиция, 1); + Если Не ЭтоЦифра(ТекСимвол) Тогда + Прервать; + КонецЕсли; + НомерДома = НомерДома * 10 + ТипЧисло.ПривестиЗначение(ТекСимвол); + КонецЦикла; + + Возврат НомерДома; +КонецФункции + +// Определяет тип символа +// +// Параметры: +// Символ- Строка - анализируемый символ +// +// Возвращаемое значение: +// Булево - Истина, если переданный символ является цифрой +// +Функция ЭтоЦифра(Знач Символ) + Возврат Найти("0123456789", Символ)>0; +КонецФункции + +// Вычисляет основной номер здания выбором из заполненного дом, владение, домовладение +// +// Параметры: +// Здание - структура - анализируемое здание с полями Дом, Домовладение, Владение +// +// Возвращаемое значение - строка с основным номером здания +// +Функция ОсновнойНомерЗдания(Знач Здание) + Результат = Здание.Дом; + + Если ПустаяСтрока(Результат) И Здание.Свойство("Владение") Тогда + Результат = Здание.Владение; + КонецЕсли; + + Если ПустаяСтрока(Результат) И Здание.Свойство("Домовладение") Тогда + Результат = Здание.Домовладение; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг того, что переданное описание - диапазон домов +// +// Параметры: +// Описание - Строка - рассматриваемое описание диапазона +// Диапазоном упрощенно считаем или буквы "Н" и "Ч" - все нечетные и четные соответственно +// или строку с дефисом +// +// Возвращаемое значение - Булево - Истина, если переданная строка может быть рассмотрена как диапазон домов +/// +Функция ЭтоДиапазон(Знач Описание) + Возврат Описание="Н" + Или Описание="Ч" + Или Найти(Описание, "-")>0 +КонецФункции + +// Формирует таблицу префиксов-разделителей данных КЛАДР, типов зданий +// Имеет неявную связь с КонтактнаяИнформацияКлиентСерверПовтИсп.ТипыОбъектовАдресацииАдресаРФ() +// +// Возвращаемое значение - ТаблицаЗначений с колонками: +// Префикс - Строка - префикс-разделитель +// Идентификатор - Строка - идентификатор для структуры +// Длина - Число - длина префикса +// +Функция ТипыЧастейЗдания() + Результат = + НоваяСтрокаТаблицы("ВЛД", "Владение", + НоваяСтрокаТаблицы("ДВЛД", "Домовладение", + НоваяСтрокаТаблицы("КОРПУС", "Корпус", + НоваяСтрокаТаблицы("К", "Корпус", + НоваяСтрокаТаблицы("СТР", "Строение", + НоваяСтрокаТаблицы("СТРОЕНИЕ", "Строение", + НоваяСтрокаТаблицы("ЛИТЕР", "Литер", + НоваяСтрокаТаблицы("СООРУЖЕНИЕ", "Сооружение", + НоваяСтрокаТаблицы("УЧАСТОК", "Участок", + "Префикс, Идентификатор, Длина"))))))))); + + Результат.Индексы.Добавить("Идентификатор"); + Результат.Сортировать("Длина УБЫВ, Префикс"); + Возврат Результат; +КонецФункции +Функция НоваяСтрокаТаблицы(Знач Префикс, Знач Идентификатор, Знач Таблица) + Если ТипЗнч(Таблица)=Тип("Строка") Тогда + Результат = Новый ТаблицаЗначений; + Для Каждого КлючЗначение Из Новый Структура(Таблица) Цикл + Результат.Колонки.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Иначе + Результат = Таблица; + КонецЕсли; + + Строка = Результат.Добавить(); + Строка.Префикс = Префикс; + Строка.Идентификатор = Идентификатор; + Строка.Длина = СтрДлина(Префикс); + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 604f5598f..7fbf4e4f6 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -55,8 +55,7 @@ #Если ВебКлиент Тогда СтандартныеПодсистемыКлиент.ВопросПользователю( Текст, РежимДиалогаВопрос.ОК, 0, КодВозвратаДиалога.ОК, Заголовок, - Неопределено, Ложь, Ложь - ); + Неопределено, Ложь, Ложь); #Иначе Кнопки = Новый СписокЗначений; Кнопки.Добавить("Да", НСтр("ru='Обновить'")); @@ -67,8 +66,7 @@ НСтр("ru = 'Приступить к обновлению адресного классификатора на версию от %1?'"), Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D") ) + Символы.ПС + Символы.ПС + Текст, - Кнопки, 0, "Да", Заголовок, Неопределено, Ложь, Ложь - ); + Кнопки, 0, "Да", Заголовок, Неопределено, Ложь, Ложь); Если Результат="Да" Тогда ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ЗагрузкаАдресногоКлассификатора", @@ -79,8 +77,7 @@ Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обновление адресного классификатора не требуется. |В программу уже загружены актуальные адресные сведения от %1.'"), - Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D") - )); + Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D"))); КонецЕсли; Иначе Предупреждение(НСтр("ru = 'Адресный классификатор не заполнен.'")); @@ -90,27 +87,12 @@ // Вызывает форму очистки сведений адресного классификатора по адресным объектам // -Процедура ОчиститьКлассификатор() Экспорт - - ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ОчисткаАдресногоКлассификатора"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в эту подсистему - -// Подбирает адресный объект через форму. -// // Параметры: -// СтруктураАдреса - Структура - структура адреса. -// СтруктураРезультата - Неопределено или Структура - структура возврат выбранного адресного объекта. +// Владелец (УправляемаяФорма) Необязательный. Форма, из которой осуществляется очистка адресного классификатора. // -Процедура ПриПодбореАдресногоОбъекта(Знач СтруктураАдреса, СтруктураРезультата) Экспорт +Процедура ОчиститьКлассификатор(Владелец = Неопределено) Экспорт - СтруктураРезультата = ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора", СтруктураАдреса); + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ОчисткаАдресногоКлассификатора", , Владелец); КонецПроцедуры diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index e2836c2c3..40a5167d7 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -58,7 +58,7 @@ ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект(); ДокументОбъект.ПоказыватьВАрхивеАнкет = НЕ Выборка.ПоказыватьВАрхивеАнкет; - ДокументОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект); КонецЦикла; @@ -952,7 +952,7 @@ ЭлементГруппаВопроса = Форма.Элементы.Добавить(ИмяВопроса + "_Группа" ,Тип("ГруппаФормы"),ЭлементГруппа); ЭлементГруппаВопроса.Вид = ВидГруппыФормы.ОбычнаяГруппа ; ЭлементГруппаВопроса.ОтображатьЗаголовок = Ложь; - ЭлементГруппаВопроса.Отображение = ОтображениеОбычнойГруппы.Отступ; + ЭлементГруппаВопроса.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыОтступ(); ЭлементГруппаВопроса.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; ЭлементГруппаВопроса.ШиринаПодчиненныхЭлементов = ШиринаПодчиненныхЭлементовФормы.ЛевыйОченьУзкий; ЭлементГруппаВопроса.РастягиватьПоГоризонтали = Истина; @@ -1797,30 +1797,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее -// Устанавливает параметры отбора в отбор динамического списка -// -// Параметры -// Параметры - Структура - параметры, переданные форме -// ОтборДинамическогоСписка - Отбор - Отбор динамического списка, -// в который устанавливаются параметры отбора. -Процедура УстановитьПараметрыОтбораФормуВыбора(Параметры,ОтборДинамическогоСписка) Экспорт - - Если Параметры.Свойство("МассивОтбора") = Истина Тогда - - Для каждого ЭлементМассиваОтбора Из Параметры.МассивОтбора Цикл - - ЭлементОтбораДанных = ОтборДинамическогоСписка.Элементы.Добавить(ЭлементМассиваОтбора.ТипОтбора); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ЭлементМассиваОтбора.ЛевоеЗначение); - ЭлементОтбораДанных.Использование = Истина; - ЭлементОтбораДанных.ВидСравнения = ЭлементМассиваОтбора.ВидСравнения; - ЭлементОтбораДанных.ПравоеЗначение = ЭлементМассиваОтбора.ПравоеЗначение; - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - // Функция заполняет структуру значениями перечисления // // Параметры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index eb9d51899..d4a902555 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -78,8 +78,19 @@ // Параметры // УсловноеОформлениеСпискаЗадач - УсловноеОформление - условное оформление списка задач // -Процедура УстановитьОформлениеЗадач(Знач УсловноеОформлениеСпискаЗадач) Экспорт - +Процедура УстановитьОформлениеЗадач(Знач СписокЗадачИлиЕгоУсловноеОформление) Экспорт + + Если ТипЗнч(СписокЗадачИлиЕгоУсловноеОформление) = Тип("ДинамическийСписок") Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + УсловноеОформлениеСпискаЗадач = СписокЗадачИлиЕгоУсловноеОформление.КомпоновщикНастроек.Настройки.УсловноеОформление; + УсловноеОформлениеСпискаЗадач.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + Иначе + УсловноеОформлениеСпискаЗадач = СписокЗадачИлиЕгоУсловноеОформление.УсловноеОформление; + КонецЕсли; + Иначе + УсловноеОформлениеСпискаЗадач = СписокЗадачИлиЕгоУсловноеОформление; + КонецЕсли; + // удаление предустановленных элементов оформления Предустановленные = Новый Массив; Элементы = УсловноеОформлениеСпискаЗадач.Элементы; @@ -893,8 +904,7 @@ | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач |ГДЕ | ИсполнителиЗадач.РольИсполнителя = &РольИсполнителя - | И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации" - ); + | И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации"); Запрос.Параметры.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); Запрос.Параметры.Вставить("РольИсполнителя", РольИсполнителя); ВыборкаЗапроса = Запрос.Выполнить().Выгрузить(); @@ -980,36 +990,36 @@ // Меняем состояние вложенных бизнес-процессов Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл - Если ПравоДоступа("Изменение", МетаданныеБизнесПроцесса) Тогда - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | БизнесПроцессы.Ссылка КАК Ссылка - |ИЗ - | %БизнесПроцесс% КАК БизнесПроцессы - |ГДЕ - | БизнесПроцессы.ВедущаяЗадача = &ВедущаяЗадача - | И БизнесПроцессы.ПометкаУдаления = Ложь - | И БизнесПроцессы.Завершен = Ложь"; - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); - Запрос.УстановитьПараметр("ВедущаяЗадача", ЗадачаСсылка); - - Результат = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = Результат.Выбрать(); - - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - - БизнесПроцесс = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); - БизнесПроцесс.Состояние = НовоеСостояние; - БизнесПроцесс.Записать(); - - КонецЦикла; - + Если НЕ ПравоДоступа("Изменение", МетаданныеБизнесПроцесса) Тогда + Продолжить; КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | БизнесПроцессы.Ссылка КАК Ссылка + |ИЗ + | %БизнесПроцесс% КАК БизнесПроцессы + |ГДЕ + | БизнесПроцессы.ВедущаяЗадача = &ВедущаяЗадача + | И БизнесПроцессы.ПометкаУдаления = Ложь + | И БизнесПроцессы.Завершен = Ложь"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%БизнесПроцесс%", МетаданныеБизнесПроцесса.ПолноеИмя()); + Запрос.УстановитьПараметр("ВедущаяЗадача", ЗадачаСсылка); + + Результат = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = Результат.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + БизнесПроцесс = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + БизнесПроцесс.Состояние = НовоеСостояние; + БизнесПроцесс.Записать(); + + КонецЦикла; + КонецЦикла; // Меняем состояние подчиненных бизнес-процессов @@ -1320,11 +1330,11 @@ БизнесПроцесс = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); БизнесПроцесс.Заблокировать(); БизнесПроцесс.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - БизнесПроцесс.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(БизнесПроцесс); КонецЦикла; - КонецЦикла; + КонецЦикла; // Обновления принятия к исполнению задач Запрос = Новый Запрос; @@ -1345,11 +1355,11 @@ Если ЗадачаОбъект.Выполнена = Истина Тогда ЗадачаОбъект.ПринятаКИсполнению = Истина; ЗадачаОбъект.ДатаПринятияКИсполнению = ЗадачаОбъект.ДатаИсполнения; - КонецЕсли; + КонецЕсли; ЗадачаОбъект.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Активен; - ЗадачаОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗадачаОбъект); КонецЦикла; @@ -1378,7 +1388,7 @@ ЗадачаОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ЗадачаОбъект.ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(ПредметСсылка); - ЗадачаОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗадачаОбъект); КонецЦикла; @@ -1402,12 +1412,12 @@ ЗначениеКода = ВыборкаДетальныеЗаписи.Код; Если ПустаяСтрока(ЗначениеКода) Тогда - Продолжить; - КонецЕсли; + Продолжить; + КонецЕсли; РольИсполнителейОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); РольИсполнителейОбъект.КраткоеПредставление = ЗначениеКода; - РольИсполнителейОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(РольИсполнителейОбъект); КонецЦикла; @@ -1426,8 +1436,8 @@ Процедура ПриПолученииАдресаЭлектроннойПочты(Знач Получатель, Адрес) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Адрес = Модуль.ПолучитьКонтактнуюИнформацияОбъекта( + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + Адрес = МодульУправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта( Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); КонецЕсли; @@ -1457,4 +1467,4 @@ ЗадачаВнешняя = Ложь; КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 82c15c325..07c1d0f11 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -90,8 +90,8 @@ // Дополнить массив ссылкам дополнительных отчетов, доступных текущему пользователю. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю(ДоступныеОтчеты); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю(ДоступныеОтчеты); КонецЕсли; Возврат ДоступныеОтчеты; @@ -128,8 +128,7 @@ НСтр("ru = 'Ошибка получения описания отчета ""%1"", |он не подключен к подсистеме ""%2""'"), СтрокаОтчет.Метаданные.Имя, - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы() - ); + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); КонецЕсли; Возврат СтрокаОтчет; @@ -166,8 +165,7 @@ |он не подключен к подсистеме ""%3""'"), КлючВарианта, СтрокаОтчет.Метаданные.Имя, - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы() - ); + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы("")); КонецЕсли; ЗаполнитьОписаниеСтрокиВарианта(СтрокаВариант, СтрокаОтчет); @@ -225,8 +223,7 @@ Неопределено, НСтр("ru = 'В процессе выборки вариантов отчетов из стандартного хранилища возникла ошибка:'") + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Если ЭлементВыборкиПолучен = Ложь Тогда @@ -450,8 +447,7 @@ НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), ВариантОбъект.Наименование, СтрокаТаблицы.ПредставлениеОтчета, - СтрокаТаблицы.Автор - ); + СтрокаТаблицы.Автор); КонецЕсли; // Поскольку переносятся пользовательские варианты отчетов, @@ -492,6 +488,9 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( "ВариантыОтчетов"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( + "ВариантыОтчетов"); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных\ПослеВыгрузкиОбласти"].Добавить( @@ -527,7 +526,7 @@ Обработчик.ВыполнятьВГруппеОбязательных = Ложь; Обработчик.ОбщиеДанные = Истина; Обработчик.УправлениеОбработчиками = Истина; - Обработчик.МонопольныйРежим = Истина; + Обработчик.МонопольныйРежим = Ложь; Обработчик.Версия = "*"; Обработчик.Процедура = "ВариантыОтчетов.ОбновитьОбщиеДанные"; Обработчик.Приоритет = 90; @@ -556,7 +555,7 @@ // 2.3. Обновить разделенные данные в локальном режиме. Обработчик = Обработчики.Добавить(); - Обработчик.МонопольныйРежим = Истина; + Обработчик.МонопольныйРежим = Ложь; Обработчик.Версия = "*"; Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; Обработчик.Приоритет = 70; @@ -586,6 +585,126 @@ КонецПроцедуры +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. +// Истина – требуется получить список объектов плана обмена РИБ; +// Ложь – требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Константы.ПараметрыВариантовОтчетов); + Объекты.Добавить(Метаданные.Справочники.ВариантыОтчетов); + Объекты.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); + Объекты.Добавить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов); + + КонецЕсли; + +КонецПроцедуры + +// Выгружает данные для идентификации предопределенных вариантов отчетов в XML файл. +Процедура ПослеВыгрузкиОбласти(Знач КаталогВыгрузки) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(КаталогВыгрузки + "PredefinedReportVariants.xml"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Data"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config"); + + Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, КлючВарианта, Отчет ИЗ Справочник.ПредопределенныеВариантыОтчетов"); + ТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТаблицаПредопределенных, НазначениеТипаXML.Явное); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.Закрыть(); + +КонецПроцедуры + +// Добавляет в таблицу замен записи по предопределенным вариантам отчетов. +Процедура ПриФормированииСловаряЗаменПоКаталогуВыгрузки(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(КаталогВыгрузки + "PredefinedReportVariants.xml"); + Чтение.ПерейтиКСодержимому(); + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ Чтение.Имя <> "Data" ИЛИ НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Неверный формат файла PredefinedReportVariants.xml или этот файл не содержит записей.'")); + КонецЕсли; + + Идентификаторы = СловарьЗамен.Найти(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"), "Тип").СоответствиеСсылок; + СоответствиеСтарыхИАктуальныхИОМ = Новый Соответствие; + Для Каждого КлючИЗначение Из Идентификаторы Цикл + СтараяСсылка = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(КлючИЗначение.Значение); + АктуальнаяСсылка = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(КлючИЗначение.Ключ); + СоответствиеСтарыхИАктуальныхИОМ.Вставить(СтараяСсылка, АктуальнаяСсылка); + КонецЦикла; + + ТаблицаПредопределенных = СериализаторXDTO.ПрочитатьXML(Чтение); // Ссылка, КлючВарианта, Отчет + Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл + СтрокаТаблицы.Отчет = СоответствиеСтарыхИАктуальныхИОМ.Получить(СтрокаТаблицы.Отчет); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаПредопределенных.Ссылка, + | ТаблицаПредопределенных.КлючВарианта, + | ТаблицаПредопределенных.Отчет + |ПОМЕСТИТЬ втТаблицаПредопределенных + |ИЗ + | &ТаблицаПредопределенных КАК ТаблицаПредопределенных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | втТаблицаПредопределенных.Ссылка КАК СтараяСсылка, + | ПредопределенныеВариантыОтчетов.Ссылка КАК АктуальнаяСсылка + |ИЗ + | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТаблицаПредопределенных КАК втТаблицаПредопределенных + | ПО ПредопределенныеВариантыОтчетов.Отчет = втТаблицаПредопределенных.Отчет + | И ПредопределенныеВариантыОтчетов.КлючВарианта = втТаблицаПредопределенных.КлючВарианта"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаПредопределенных", ТаблицаПредопределенных); + Запрос.Текст = ТекстЗапроса; + + СоответствиеСсылок = Новый Соответствие; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СоответствиеСсылок.Вставить(Выборка.АктуальнаяСсылка.УникальныйИдентификатор(), Выборка.СтараяСсылка.УникальныйИдентификатор()); + КонецЦикла; + + СтрокаФрагмента = СловарьЗамен.Добавить(); + СтрокаФрагмента.Тип = Тип("СправочникСсылка.ПредопределенныеВариантыОтчетов"); + СтрокаФрагмента.СтандартнаяОбработка = Ложь; + СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок; + +КонецПроцедуры + +// Заполняет массив типов неразделенных данных. Он используется при обновлении ссылок +// при загрузке-выгрузке конфигурации +// +// Параметры: +// МассивТипов - массив +// +Процедура ПриОпределенииСтандартныхТиповОбщихДанных(Знач МассивТипов) Экспорт + + МассивТипов.Добавить(Тип("СправочникСсылка.ПредопределенныеВариантыОтчетов")); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов @@ -600,8 +719,7 @@ Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа для записи вариантов дополнительного отчета ""%1"".'"), - ТекущийОбъект.Наименование - ); + ТекущийОбъект.Наименование); ОшибкаПоВарианту(ТекущийОбъект.Ссылка, ТекстОшибки); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); Возврат; @@ -750,100 +868,45 @@ КонецПроцедуры -// Выгружает данные для идентификации предопределенных вариантов отчетов в XML файл. -Процедура ПослеВыгрузкиОбласти(Знач КаталогВыгрузки) Экспорт - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(КаталогВыгрузки + "PredefinedReportVariants.xml"); - ЗаписьXML.ЗаписатьОбъявлениеXML(); - - ЗаписьXML.ЗаписатьНачалоЭлемента("Data"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config"); - - Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, КлючВарианта, Отчет ИЗ Справочник.ПредопределенныеВариантыОтчетов"); - ТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); - СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТаблицаПредопределенных, НазначениеТипаXML.Явное); - - ЗаписьXML.ЗаписатьКонецЭлемента(); - - ЗаписьXML.Закрыть(); - -КонецПроцедуры - -// Добавляет в таблицу замен записи по предопределенным вариантам отчетов. -Процедура ПриФормированииСловаряЗаменПоКаталогуВыгрузки(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт - - Чтение = Новый ЧтениеXML; - Чтение.ОткрытьФайл(КаталогВыгрузки + "PredefinedReportVariants.xml"); - Чтение.ПерейтиКСодержимому(); - Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ Чтение.Имя <> "Data" ИЛИ НЕ Чтение.Прочитать() Тогда - ВызватьИсключение(НСтр("ru = 'Неверный формат файла PredefinedReportVariants.xml или этот файл не содержит записей.'")); - КонецЕсли; - - Идентификаторы = СловарьЗамен.Найти(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"), "Тип").СоответствиеСсылок; - СоответствиеСтарыхИАктуальныхИОМ = Новый Соответствие; - Для Каждого КлючИЗначение Из Идентификаторы Цикл - СтараяСсылка = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(КлючИЗначение.Значение); - АктуальнаяСсылка = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(КлючИЗначение.Ключ); - СоответствиеСтарыхИАктуальныхИОМ.Вставить(СтараяСсылка, АктуальнаяСсылка); - КонецЦикла; - - ТаблицаПредопределенных = СериализаторXDTO.ПрочитатьXML(Чтение); // Ссылка, КлючВарианта, Отчет - Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл - СтрокаТаблицы.Отчет = СоответствиеСтарыхИАктуальныхИОМ.Получить(СтрокаТаблицы.Отчет); - КонецЦикла; - - ТекстЗапроса = - "ВЫБРАТЬ - | ТаблицаПредопределенных.Ссылка, - | ТаблицаПредопределенных.КлючВарианта, - | ТаблицаПредопределенных.Отчет - |ПОМЕСТИТЬ втТаблицаПредопределенных - |ИЗ - | &ТаблицаПредопределенных КАК ТаблицаПредопределенных - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | втТаблицаПредопределенных.Ссылка КАК СтараяСсылка, - | ПредопределенныеВариантыОтчетов.Ссылка КАК АктуальнаяСсылка - |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТаблицаПредопределенных КАК втТаблицаПредопределенных - | ПО ПредопределенныеВариантыОтчетов.Отчет = втТаблицаПредопределенных.Отчет - | И ПредопределенныеВариантыОтчетов.КлючВарианта = втТаблицаПредопределенных.КлючВарианта"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицаПредопределенных", ТаблицаПредопределенных); - Запрос.Текст = ТекстЗапроса; - - СоответствиеСсылок = Новый Соответствие; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - СоответствиеСсылок.Вставить(Выборка.АктуальнаяСсылка.УникальныйИдентификатор(), Выборка.СтараяСсылка.УникальныйИдентификатор()); - КонецЦикла; - - СтрокаФрагмента = СловарьЗамен.Добавить(); - СтрокаФрагмента.Тип = Тип("СправочникСсылка.ПредопределенныеВариантыОтчетов"); - СтрокаФрагмента.СтандартнаяОбработка = Ложь; - СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок; - -КонецПроцедуры - -// Заполняет массив типов неразделенных данных. Он используется при обновлении ссылок -// при загрузке-выгрузке конфигурации -// -// Параметры: -// МассивТипов - массив +// Добавляет оповещение для открытых форм подсистемы если изменилось значение функциональной опции. // -Процедура ПриОпределенииСтандартныхТиповОбщихДанных(Знач МассивТипов) Экспорт +// Параметры: +// Результат (Структура) Подробнее см. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// КонстантаИмя (Строка) Имя константы, значение которой изменилось. +// +Процедура ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер) Экспорт + // Варианты отчетов связаны с константами через функциональные опции. + // ПовтИсп не используется поскольку при изменении значения функциональной опции их значения как правило сбрасываются. + ПеременныеИнициализированы = Ложь; + КонстантаМетаданные = КонстантаМенеджер.СоздатьМенеджерЗначения().Метаданные(); - МассивТипов.Добавить(Тип("СправочникСсылка.ПредопределенныеВариантыОтчетов")); + // Поиск функциональных опций, связанных с этой константой + Для Каждого ФункциональнаяОпцияМетаданные Из Метаданные.ФункциональныеОпции Цикл + Если ФункциональнаяОпцияМетаданные.Хранение = КонстантаМетаданные Тогда + + // Поиск связи вариантов отчетов с этой функциональной опцией. + Если Не ПеременныеИнициализированы Тогда + ПеременныеИнициализированы = Истина; + ТаблицаОпций = Константы.ПараметрыВариантовОтчетов.Получить().Получить(); + ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(); + КонецЕсли; + + Если ТаблицаОпций.Найти(ФункциональнаяОпцияМетаданные.Имя, "ИмяФункциональнойОпции") <> Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия); + Возврат; + КонецЕсли; + + // Поиск связи отчетов с этой функциональной опцией. + Для Каждого ЭлементСоставаФункциональнойОпции Из ФункциональнаяОпцияМетаданные.Состав Цикл + Если ТипЗнч(ЭлементСоставаФункциональнойОпции.Объект) = Тип("ОбъектМетаданных") + И Метаданные.Отчеты.Содержит(ЭлементСоставаФункциональнойОпции.Объект) Тогда + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия); + Возврат; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -1006,8 +1069,13 @@ // Условные вызовы подсистем БСП. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриНастройкеВариантовОтчетов(ДеревоВариантов); КонецЕсли; // Переопределяемая часть. @@ -1052,21 +1120,18 @@ ПредупреждениеПоВарианту( Неопределено, НСтр("ru = 'Отчет ""%1"" не найден в программе, он будет значиться как внешний.'"), - ОтчетПолноеИмя - ); + ОтчетПолноеИмя); ИначеЕсли НЕ ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа к отчету ""%1"".'"), - ОтчетПолноеИмя - ); + ОтчетПолноеИмя); КонецЕсли; ИначеЕсли ВРег(Префикс) = "ВНЕШНИЙОТЧЕТ" Тогда // Получение метаданных и проверок не требуется. Иначе Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для отчета ""%1"" невозможно определить тип (не установлен префикс).'"), - ОтчетПолноеИмя - ); + ОтчетПолноеИмя); Возврат Результат; КонецЕсли; @@ -1080,8 +1145,8 @@ Результат.Вставить("ПодключеныВсеОтчеты", ПодключеныВсеОтчеты()); - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриОпределенииТипаИСсылкиЕслиОтчетДополнительный(Результат); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриОпределенииТипаИСсылкиЕслиОтчетДополнительный(Результат); Если Результат.Свойство("ОтчетДополнительный") Тогда Результат.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; @@ -1353,8 +1418,7 @@ Для Каждого КлючИЗначение Из Оформление Цикл ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), - КлючИЗначение.Значение - ); + КлючИЗначение.Значение); КонецЦикла; Если ТипЗнч(Поля) = Тип("Строка") Тогда @@ -1488,7 +1552,7 @@ // Процедура ОшибкаПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ВариантыОтчетов, Вариант, @@ -1496,16 +1560,14 @@ Сообщение, Строка(Реквизит1), Строка(Реквизит2), - Строка(Реквизит3) - ) - ); + Строка(Реквизит3))); КонецПроцедуры // Запись информации в журнале регистрации по варианту отчета. // Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ВариантыОтчетов, Вариант, @@ -1513,16 +1575,14 @@ Сообщение, Строка(Реквизит1), Строка(Реквизит2), - Строка(Реквизит3) - ) - ); + Строка(Реквизит3))); КонецПроцедуры // Запись предупреждения в журнале регистрации по варианту отчета. // Процедура ПредупреждениеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт ЗаписьЖурналаРегистрации( - ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВариантыОтчетов, Вариант, @@ -1530,9 +1590,7 @@ Сообщение, Строка(Реквизит1), Строка(Реквизит2), - Строка(Реквизит3) - ) - ); + Строка(Реквизит3))); КонецПроцедуры // Записывает в журнал регистрации событие запуска процедуры и открывает транзакцию. @@ -1549,13 +1607,6 @@ ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Завершение процедуры ""%1"".'"), ПредставлениеПроцедуры); КонецПроцедуры -// Записывает в журнал регистрации событие отмены процедуры и фиксирует транзакцию. -// -Процедура ОтменаПроцедуры(ПредставлениеПроцедуры, Причина) - ОтменитьТранзакцию(); - ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Отмена процедуры ""%1"":%2'"), ПредставлениеПроцедуры, Символы.ПС + " - " + Причина); -КонецПроцедуры - // Создает фильтр по реквизиту КлючОбъекта для СтандартноеХранилищеНастроекМенеджер.Выбрать(). // Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Экспорт @@ -1651,22 +1702,6 @@ //////////////////////////////////////////////////////////////////////////////// // Условные вызовы в друге подсистемы -// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. -// -// Параметры: -// ЭтаФорма (УправляемаяФорма) -// Остальные параметры передаются из параметров обработчика "как есть", -// см. события для "УправляемаяФорма" в справке. -// -Процедура ФормаОтчетаПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетов"); - Модуль.ФормаОтчетаДобавитьКоманды(ЭтаФорма, Отказ, СтандартнаяОбработка); - КонецЕсли; - -КонецПроцедуры - // Создает экземпляр объекта отчета. // // Параметры: @@ -1679,8 +1714,8 @@ ОтчетОбъект = Неопределено; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - ОтчетОбъект = Модуль.ПолучитьОбъектВнешнейОбработки(ОтчетСсылка); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + ОтчетОбъект = МодульДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(ОтчетСсылка); КонецЕсли; Возврат ОтчетОбъект; @@ -1694,8 +1729,6 @@ // Процедура ОбновитьОбщиеДанные(ПараметрыОбновления) Экспорт - Обработчики = ПараметрыОбновления.РазделенныеОбработчики; - //////////////////////////////////////////////////////////////////////////////// // Выполняется только для предопределенных вариантов отчетов. // План обновления: @@ -1705,42 +1738,25 @@ Кэш.Вставить("ПодключеныВсеОтчеты", ПодключеныВсеОтчеты()); Кэш.Вставить("ДеревоВариантов", ДеревоНастроекВариантовОтчетовКонфигурации()); Кэш.Вставить("ОбновитьОбласти", Ложь); - Кэш.Вставить("ПараметрыОбновления", ПараметрыОбновления); - Кэш.Вставить("ТребуетсяУстановитьМонопольныйРежим", Ложь); //////////////////////////////////////////////////////////////////////////////// // 1. Заменить устаревшие ключи вариантов отчетов на актуальные. АктуализироватьКлючиПредопределенных(Кэш); - Если Кэш.ТребуетсяУстановитьМонопольныйРежим Тогда - ПараметрыОбновления.МонопольныйРежим = Истина; - Возврат; - КонецЕсли; - //////////////////////////////////////////////////////////////////////////////// // 2. Актуализировать предопределенные варианты отчетов и перезаписать // константу, в которой хранятся привязки к функциональным опциям. ОбновитьНастройкиПредопределенных(Кэш); - Если Кэш.ТребуетсяУстановитьМонопольныйРежим Тогда - ПараметрыОбновления.МонопольныйРежим = Истина; - Возврат; - КонецЕсли; - //////////////////////////////////////////////////////////////////////////////// // 3. Установить пометку удаления вариантов удаленных отчетов. ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш, Истина); - Если Кэш.ТребуетсяУстановитьМонопольныйРежим Тогда - ПараметрыОбновления.МонопольныйРежим = Истина; - Возврат; - КонецЕсли; - //////////////////////////////////////////////////////////////////////////////// // 4. Обновить разделенные данные в модели сервиса. Если Кэш.ОбновитьОбласти И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.МонопольныйРежим = Истина; + Обработчик = ПараметрыОбновления.РазделенныеОбработчики.Добавить(); + Обработчик.МонопольныйРежим = Ложь; Обработчик.Версия = "*"; Обработчик.Процедура = "ВариантыОтчетов.ОбновитьРазделенныеДанные"; Обработчик.Приоритет = 70; @@ -1750,31 +1766,18 @@ // [*] Актуализирует данные справочника "Варианты отчетов". // -Процедура ОбновитьРазделенныеДанные(ПараметрыОбновления) Экспорт - - Кэш = Новый Структура; - Кэш.Вставить("ПараметрыОбновления", ПараметрыОбновления); - Кэш.Вставить("ТребуетсяУстановитьМонопольныйРежим", Ложь); +Процедура ОбновитьРазделенныеДанные() Экспорт //////////////////////////////////////////////////////////////////////////////// // План обновления: //////////////////////////////////////////////////////////////////////////////// // 1. Актуализировать разделенные варианты отчетов. - АктуализироватьСоставОбласти(Кэш); - - Если Кэш.ТребуетсяУстановитьМонопольныйРежим Тогда - ПараметрыОбновления.МонопольныйРежим = Истина; - Возврат; - КонецЕсли; + АктуализироватьСоставОбласти(); //////////////////////////////////////////////////////////////////////////////// // 2. Установить пометку удаления вариантов удаленных отчетов. - ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш, Ложь); - - Если Кэш.ТребуетсяУстановитьМонопольныйРежим Тогда - ПараметрыОбновления.МонопольныйРежим = Истина; - КонецЕсли; + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Неопределено, Ложь); КонецПроцедуры @@ -1848,7 +1851,7 @@ ВариантОбъект.УдалитьКлючОбъекта = ""; ВариантОбъект.УдалитьПредставлениеОбъекта = ""; ВариантОбъект.УдалитьИсключенияБыстрогоДоступа.Очистить(); - ВариантОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект); КонецЦикла; ЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -1948,7 +1951,7 @@ ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); КонецЦикла; ВариантОбъект.Описание = ""; - ВариантОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВариантОбъект); Иначе ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЕсли; @@ -1994,8 +1997,7 @@ Изменение.АктуальноеИмяВарианта, Изменение.СтароеИмяВарианта, Конфликт.СтароеИмяВарианта, - Конфликт.АктуальноеИмяВарианта - ); + Конфликт.АктуальноеИмяВарианта); КонецЕсли; Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.СтароеИмяВарианта)); Если Найденные.Количество() > 2 Тогда @@ -2009,8 +2011,7 @@ Изменение.СтароеИмяВарианта, Изменение.АктуальноеИмяВарианта, Строка(Конфликт.ОтчетМетаданные.Представление()), - Конфликт.АктуальноеИмяВарианта - ); + Конфликт.АктуальноеИмяВарианта); КонецЕсли; КонецЦикла; @@ -2051,19 +2052,11 @@ // Заменить старые имена вариантов на актуальные. Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Количество() > 0 И НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - ОтменаПроцедуры(ПредставлениеПроцедуры, НСтр("ru = 'Требуется установка монопольного режима.'")); - Возврат; - КонецЕсли; - Пока Выборка.Следующий() Цикл Кэш.ОбновитьОбласти = Истина; ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); - ВариантОбъект.ОбменДанными.Загрузка = Истина; ВариантОбъект.Записать(); КонецЦикла; @@ -2091,14 +2084,8 @@ Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(ПоискВарианта, Истина); ВариантПометкаУдаления = (Найденные.Количество() = 0); Если ВариантПометкаУдаления <> ВариантВыборка.ПометкаУдаления Тогда - Если НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - ОтменаПроцедуры(ПредставлениеПроцедуры, НСтр("ru = 'Требуется установка монопольного режима.'")); - Возврат; - КонецЕсли; ВариантОбъект = ВариантВыборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); - ВариантОбъект.ОбменДанными.Загрузка = Истина; ВариантОбъект.УстановитьПометкуУдаления(ВариантПометкаУдаления); Кэш.ОбновитьОбласти = Истина; КонецЕсли; @@ -2121,12 +2108,6 @@ Продолжить; КонецЕсли; - Если НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - ОтменаПроцедуры(ПредставлениеПроцедуры, НСтр("ru = 'Требуется установка монопольного режима.'")); - Возврат; - КонецЕсли; - Если ВариантВыборка.Наименование <> ОписаниеВарианта.Наименование ИЛИ ВариантВыборка.ВидимостьПоУмолчанию <> ОписаниеВарианта.ВидимостьПоУмолчанию Тогда Кэш.ОбновитьОбласти = Истина; @@ -2138,11 +2119,6 @@ // Добавить варианты, которых нет в базы данных. Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(Новый Структура("НайденВБазеДанных, ЭтоВариант", Ложь, Истина), Истина); Для Каждого ОписаниеВарианта Из Найденные Цикл - Если НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - ОтменаПроцедуры(ПредставлениеПроцедуры, НСтр("ru = 'Требуется установка монопольного режима.'")); - Возврат; - КонецЕсли; Кэш.ОбновитьОбласти = Истина; ЗаполнитьОписаниеСтрокиВарианта(ОписаниеВарианта); @@ -2157,12 +2133,10 @@ КонецЦикла; // Перезапись константы только в случае если обработчик обновления был запущен "для записи" (в монопольном режиме). - Если Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - МенеджерКонстанты = Константы.ПараметрыВариантовОтчетов.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(ТаблицаФункциональныхОпций, Новый СжатиеДанных(9)); - МенеджерКонстанты.ОбменДанными.Загрузка = Истина; - МенеджерКонстанты.Записать(); - КонецЕсли; + МенеджерКонстанты = Константы.ПараметрыВариантовОтчетов.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(ТаблицаФункциональныхОпций, Новый СжатиеДанных(9)); + МенеджерКонстанты.ОбменДанными.Загрузка = Истина; + МенеджерКонстанты.Записать(); ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры @@ -2226,7 +2200,7 @@ // Приводит в соответствие данные разделенного и неразделенного справочников. // Для разделенного справочника (ВариантыОтчетов). // -Процедура АктуализироватьСоставОбласти(Кэш) +Процедура АктуализироватьСоставОбласти() ПредставлениеПроцедуры = НСтр("ru = 'Обновить разделенные вариантов отчетов'"); ЗапускПроцедуры(ПредставлениеПроцедуры); @@ -2289,12 +2263,6 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Если НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - ОтменаПроцедуры(ПредставлениеПроцедуры, НСтр("ru = 'Требуется установка монопольного режима.'")); - Возврат; - КонецЕсли; - Если Выборка.ПредопределенныйВариант = Неопределено Тогда // Удалить (нет в общих, но есть в разделенных). ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); @@ -2304,12 +2272,17 @@ Если Выборка.Ссылка = Неопределено Тогда // Зарегистрировать (есть в общих, но нет в разделенных). ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ВариантОбъект.Заблокировать(); Иначе // Актуализировать (изменилось наименование или ключ варианта). ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.Заблокировать(); // Перенести пользовательские настройки. ЗаменитьКлючиПользовательскихНастроек(ВариантОбъект, Выборка); КонецЕсли; + ВариантОбъект.ОбменДанными.Загрузка = Истина; + ВариантОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; ЗаполнитьЗначенияСвойств(ВариантОбъект, Выборка, "Наименование, Отчет, КлючВарианта, ПредопределенныйВариант"); Если НЕ ВариантОбъект.ВидимостьПоУмолчаниюПереопределена Тогда @@ -2346,11 +2319,6 @@ Возврат; КонецЕсли; - Если НЕ Кэш.ПараметрыОбновления.МонопольныйРежим Тогда - Кэш.ТребуетсяУстановитьМонопольныйРежим = Истина; - Возврат; - КонецЕсли; - Если ОбщиеДанные Тогда Кэш.ОбновитьОбласти = Истина; Суффикс = НСтр("ru = 'общие данные'"); @@ -2364,8 +2332,11 @@ МассивСсылокВариантов = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); Для Каждого ВариантСсылка Из МассивСсылокВариантов Цикл ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); - ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.Заблокировать(); ВариантОбъект.ОбменДанными.Загрузка = Истина; + ВариантОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + ВариантОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЦикла; @@ -2400,8 +2371,7 @@ СтарыйВариант.Ссылка, НСтр("ru = 'В процессе выборки вариантов отчетов из стандартного хранилища возникла ошибка:'") + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Если ЭлементВыборкиПолучен = Ложь Тогда @@ -2418,8 +2388,7 @@ ОписаниеНастроек = ХранилищеПользовательскихНастроекОтчетов.ПолучитьОписание( ВыборкаХранилища.КлючОбъекта, ВыборкаХранилища.КлючНастроек, - ВыборкаХранилища.Пользователь - ); + ВыборкаХранилища.Пользователь); // Запись настроек в хранилище по новому ключу. ХранилищеПользовательскихНастроекОтчетов.Сохранить( @@ -2427,8 +2396,7 @@ ВыборкаХранилища.КлючНастроек, ВыборкаХранилища.Настройки, ОписаниеНастроек, - ВыборкаХранилища.Пользователь - ); + ВыборкаХранилища.Пользователь); КонецЦикла; // Очистка старых настроек хранилища. @@ -2505,4 +2473,3 @@ НаборЗаписей.Записать(Истина); КонецПроцедуры - diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 98c756c81..f779695ca 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -42,8 +42,9 @@ // Параметры: // МассивВариантов (Массив) из (СправочникСсылка.ВариантыОтчетов) // ДополнительныеПараметры (*) Необязательный. +// Владелец (УправляемаяФорма) Необязательный. Используется только для блокирования формы, из которой выполняется размещение вариантов отчетов. // -Процедура ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов, ДополнительныеПараметры = Неопределено, Модально = Ложь) Экспорт +Процедура ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов, ДополнительныеПараметры = Неопределено, Владелец = Неопределено) Экспорт Если ТипЗнч(МассивВариантов) <> Тип("Массив") ИЛИ МассивВариантов.Количество() < 1 Тогда Предупреждение(НСтр("ru = 'Выберите варианты отчетов, которые необходимо разместить в разделах.'")); @@ -51,11 +52,7 @@ КонецЕсли; ПараметрыОткрытия = Новый Структура("МассивВариантов, ДополнительныеПараметры", МассивВариантов, ДополнительныеПараметры); - Если Модально Тогда - ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия); - Иначе - ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия); - КонецЕсли; + ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия, Владелец); КонецПроцедуры @@ -285,41 +282,8 @@ Процедура ОткрытьВариантДополнительногоОтчета(Вариант) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); - Модуль.ОткрытьВариантДополнительногоОтчета(Вариант.Отчет, Вариант.КлючВарианта); - КонецЕсли; - -КонецПроцедуры - -// Обработчик команд, добавленных динамически. -// -// Параметры: -// ЭтаФорма (УправляемаяФорма) Форма отчета. -// Команда (КомандаФормы) Команда, которая была вызвана. -// Результат (Булево) Истина, если вызов команды обработан. -// -Процедура ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетовКлиент"); - Модуль.ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат); - КонецЕсли; - -КонецПроцедуры - -// Обработчик результата выбора подчиненной формы. -// -// Параметры: -// ЭтаФорма (УправляемаяФорма) Форма отчета. -// ВыбранноеЗначение (*) Результат выбора в подчиненной форме. -// ИсточникВыбора (УправляемаяФорма) Форма, где осуществлен выбор. -// Результат (Булево) Истина, если результат выбора обработан. -// -Процедура ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РассылкаОтчетовКлиент"); - Модуль.ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); + МодульДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Вариант.Отчет, Вариант.КлючВарианта); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index fdb0a8487..18e6e2b14 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -10,8 +10,8 @@ // Представление наименования данной подсистемы, используется // для записи в журнале регистрации и в других местах. // -Функция НаименованиеПодсистемы() Экспорт - Возврат НСтр("ru = 'Варианты отчетов'"); +Функция НаименованиеПодсистемы(КодЯзыка) Экспорт + Возврат НСтр("ru = 'Варианты отчетов'", ?(КодЯзыка = Неопределено, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), КодЯзыка)); КонецФункции // Представление группы важности. diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 7f1d9fde0..73750aa33 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -136,58 +136,109 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "ВерсионированиеОбъектов"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( + "ВерсионированиеОбъектов"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( + "ВерсионированиеОбъектов"); КонецПроцедуры -// Создает и записывает версию объекта в информационную базу. +// Записывает версию объекта в информационную базу. // // Параметры -// Объект - записываемый объект ИБ; -// АвторВерсии - Пользователь или Узел плана обмена - Источник версии; -// ТипВерсииОбъекта - Перечисление - Тип создаваемой версии; -// Комментарий - Строка - Комментарий к создаваемой версии; -// УникальныйИдентификаторСтрокой - Строка - Создает пустую ссылку из УИДа, если у переданного объекта ссылка отсутствует. +// Объект - для создания версии // -Процедура СоздатьВерсиюОбъекта(Объект, АвторВерсии = Неопределено, Знач ТипВерсииОбъекта = Неопределено, Комментарий = "", - УникальныйИдентификаторСтрокой = "", БезусловнаяЗапись = Ложь) Экспорт +Процедура ПриСозданииВерсииОбъекта(Объект) Экспорт - Перем НомерПоследнейВерсии, ДополнительныйКомментарий; + Перем НомерПоследнейВерсии, Комментарий; - Если БезусловнаяЗапись ИЛИ Объект.ДополнительныеСвойства.Свойство("ЭтоВерсияОбмена") Тогда - - МассивТипов = Метаданные.ОбщиеКоманды.ИсторияИзменений.ТипПараметраКоманды.Типы(); - - Если МассивТипов.Найти(ТипЗнч(Объект.Ссылка)) <> Неопределено Тогда - - НомерПоследнейВерсии = НомерПоследнейВерсии(Объект.Ссылка); - - Иначе - - Возврат; - - КонецЕсли; - - ИначеЕсли НЕ ОбъектВерсионируется(Объект, НомерПоследнейВерсии) Тогда + Если НЕ ОбъектВерсионируется(Объект, НомерПоследнейВерсии) Тогда + Возврат; + КонецЕсли; + + Если НЕ Объект.ДополнительныеСвойства.Свойство("ВерсионированиеОбъектовКомментарийКВерсии", Комментарий) Тогда + Комментарий = ""; + КонецЕсли; + + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); + СведенияОВерсииОбъекта.Вставить("Комментарий", Комментарий); + + СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта); + +КонецПроцедуры + +// Записывает версию объекта, полученного при обмене данными, в информационную базу. +// Для версии объекта не по коллизии проверяет включенность версионирования. +// +// Параметры +// Объект - для создания версии +// +Процедура ПриСозданииВерсииОбъектаПоОбменуДанными(Объект) Экспорт + + Перем НомерПоследнейВерсии; + + Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Объект.Метаданные()) Тогда Возврат; КонецЕсли; + Ссылка = Объект.Ссылка; + + СведенияОВерсииОбъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру( + Объект.ДополнительныеСвойства.СведенияОВерсииОбъекта); + + Если СведенияОВерсииОбъекта.ТипВерсииОбъекта = "ПринятыеДанныеПоКоллизии" Тогда + + НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); + + СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); + СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); + СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; + + СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, Ложь); + + ИначеЕсли ОбъектВерсионируется(Объект, НомерПоследнейВерсии) Тогда + + Если СведенияОВерсииОбъекта.ОтложеннаяОбработка Тогда + + ЗаписьXML = Новый ЗаписьFastInfoset; + ЗаписьXML.УстановитьДвоичныеДанные(); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное); + ДвоичныеДанные = ЗаписьXML.Закрыть(); + ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); + + НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); + ЗаписатьВерсиюПоверхПредыдущей(Ссылка, НомерПоследнейВерсии, ХранилищеДанных); + + Иначе + + СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); + СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); + СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; + + СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, Ложь); + + КонецЕсли; + + КонецЕсли; + + Объект.ДополнительныеСвойства.Удалить("СведенияОВерсииОбъекта"); + +КонецПроцедуры + +// Создает и записывает версию объекта в информационную базу. +// +Процедура СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, ЗаписьОбычнойВерсии = Истина) + Если Не ПривилегированныйРежим() Тогда ВыполнитьПроверкуПравДоступа("Изменение", Объект.Метаданные()); КонецЕсли; - Если НЕ Объект.ДополнительныеСвойства.Свойство("ВерсионированиеОбъектовКомментарийКВерсии", ДополнительныйКомментарий) Тогда - ДополнительныйКомментарий = ""; - КонецЕсли; - - Ссылка = Объект.Ссылка; - Если Ссылка.Пустая() И ЗначениеЗаполнено(УникальныйИдентификаторСтрокой) Тогда - - Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьСсылку(Новый УникальныйИдентификатор(УникальныйИдентификаторСтрокой)) - - КонецЕсли; - ЗаписьXML = Новый ЗаписьFastInfoset; ЗаписьXML.УстановитьДвоичныеДанные(); ЗаписьXML.ЗаписатьОбъявлениеXML(); @@ -198,20 +249,16 @@ УстановитьПривилегированныйРежим(Истина); МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); - МенеджерЗаписиВерсииОбъектов.Объект = Ссылка; - МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); - МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; - МенеджерЗаписиВерсииОбъектов.НомерВерсии = Число(НомерПоследнейВерсии) + 1; + МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); + МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; - Если Объект.ДополнительныеСвойства.Свойство("ЭтоВерсияОбмена") Тогда + ЗаполнитьЗначенияСвойств(МенеджерЗаписиВерсииОбъектов, СведенияОВерсииОбъекта); + + Если ЗаписьОбычнойВерсии Тогда - ЗаполнитьЗначенияСвойств(МенеджерЗаписиВерсииОбъектов, Объект.ДополнительныеСвойства); - - Иначе - - МенеджерЗаписиВерсииОбъектов.АвторВерсии = ?(ЗначениеЗаполнено(АвторВерсии), АвторВерсии, Пользователи.АвторизованныйПользователь()); - МенеджерЗаписиВерсииОбъектов.Комментарий = ?(ЗначениеЗаполнено(Комментарий), Комментарий, ДополнительныйКомментарий); - МенеджерЗаписиВерсииОбъектов.ТипВерсииОбъекта = ?(ЗначениеЗаполнено(ТипВерсииОбъекта), ТипВерсииОбъекта, Перечисления.ТипыВерсийОбъекта.ИзмененоПользователем); + МенеджерЗаписиВерсииОбъектов.Объект = Объект.Ссылка; + МенеджерЗаписиВерсииОбъектов.АвторВерсии = Пользователи.АвторизованныйПользователь(); + МенеджерЗаписиВерсииОбъектов.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.ИзмененоПользователем; КонецЕсли; @@ -219,6 +266,44 @@ КонецПроцедуры +// Записывает версию объекта, полученного при обмене данными, в информационную базу. +// +// Параметры +// Объект - для создания версии +// СведенияОВерсииОбъекта - Структура - содержит информацию о версии объекта +// СсылкаСуществует - Булево - Признак наличия объекта по ссылке в информационной базе +// +Процедура СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОВерсииОбъекта, СсылкаСуществует = Неопределено) Экспорт + + Ссылка = Объект.Ссылка; + + Если Не ЗначениеЗаполнено(СсылкаСуществует) Тогда + СсылкаСуществует = ОбщегоНазначения.СсылкаСуществует(Ссылка); + КонецЕсли; + + Если СсылкаСуществует Тогда + + НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); + + Иначе + + Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьСсылку(Объект.ПолучитьСсылкуНового().УникальныйИдентификатор()); + НомерПоследнейВерсии = 0; + + КонецЕсли; + + СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); + СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); + СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; + + Если Не ЗначениеЗаполнено(СведенияОВерсииОбъекта.АвторВерсии) Тогда + СведенияОВерсииОбъекта.АвторВерсии = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + + СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, Ложь); + +КонецПроцедуры + // Устанавливает признак игнорирования версии объекта // // Параметры: @@ -250,25 +335,29 @@ // Возвращает количество коллизий или непринятых объектов // // Параметры: -// ЭтоКоличествоКоллизий - Булево - Если Истина, то возвращает количество коллизий, иначе количество непринятых. -// ПоказыватьПроигнорированные - Булево - Признак необходимости учета проигнорированных. +// УзлыОбмена - ПланОбменаСсылка, Массив, СписокЗначений, Неопределено - отбор для получения количества коллизий +// ЭтоКоличествоКоллизий - Булево - Если Истина, то возвращает количество коллизий, иначе количество непринятых +// ПоказыватьПроигнорированные - Булево - Признак необходимости учета проигнорированных // УзелИнформационнойБазы - ПланОбменаСсылка - Количество по конкретному узлу // Период - Стандартный период - Количество за дату // СтрокаПоиска - Строка - Количество объектов, содержащих в комментарии СтрокаПоиска // -Функция КоличествоКоллизийИлиНепринятых(ЭтоКоличествоКоллизий, ПоказыватьПроигнорированные, - УзелИнформационнойБазы = Неопределено, Период = Неопределено, СтрокаПоиска = "") Экспорт +Функция КоличествоКоллизийИлиНепринятых(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, + ПоказыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт Количество = 0; + Если Не ЕстьПравоНаЧтениеВерсийОбъектов() Тогда + Возврат Количество; + КонецЕсли; + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КОЛИЧЕСТВО(ВерсииОбъектов.Объект) КАК Количество |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.ВерсияПроигнорирована <> &ОтборПоПропущенным - | И (ВерсииОбъектов.ТипВерсииОбъекта = &ТипВерсии1 - | ИЛИ ВерсииОбъектов.ТипВерсииОбъекта = &ТипВерсии2) + | И (ВерсииОбъектов.ТипВерсииОбъекта В (&ТипыВерсий)) | [ОтборПоУзлу] | [ОтборПоПериоду] | [ОтборПоПричине]"; @@ -278,11 +367,14 @@ ОтборПоПропущенным = ?(ПоказыватьПроигнорированные, Неопределено, Истина); Запрос.УстановитьПараметр("ОтборПоПропущенным", ОтборПоПропущенным); - Если УзелИнформационнойБазы = Неопределено Тогда + Если УзлыОбмена = Неопределено Тогда СтрокаОтбора = ""; + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзлыОбмена)) Тогда + СтрокаОтбора = "И ВерсииОбъектов.АвторВерсии = &УзлыОбмена"; + Запрос.УстановитьПараметр("УзлыОбмена", УзлыОбмена); Иначе - СтрокаОтбора = "И ВерсииОбъектов.АвторВерсии = &УзелИнформационнойБазы"; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтрокаОтбора = "И ВерсииОбъектов.АвторВерсии В (&УзлыОбмена)"; + Запрос.УстановитьПараметр("УзлыОбмена", УзлыОбмена); КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоУзлу]", СтрокаОтбора); @@ -300,31 +392,44 @@ КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоПериоду]", СтрокаОтбора); - Если ЭтоКоличествоКоллизий Тогда + ТипыВерсий = Новый СписокЗначений; + Если ЗначениеЗаполнено(ЭтоКоличествоКоллизий) Тогда - Запрос.УстановитьПараметр("ТипВерсии1", Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); - Запрос.УстановитьПараметр("ТипВерсии2", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); - - СтрокаОтбора = ""; - - Иначе - - Запрос.УстановитьПараметр("ТипВерсии1", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); - Запрос.УстановитьПараметр("ТипВерсии2", Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); - - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Если ЭтоКоличествоКоллизий Тогда - СтрокаОтбора = "И ВерсииОбъектов.Комментарий ПОДОБНО &Комментарий"; - Запрос.УстановитьПараметр("Комментарий", "%" + СтрокаПоиска + "%"); - - Иначе + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); СтрокаОтбора = ""; + Иначе + + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + + СтрокаОтбора = "И ВерсииОбъектов.Комментарий ПОДОБНО &Комментарий"; + Запрос.УстановитьПараметр("Комментарий", "%" + СтрокаПоиска + "%"); + + Иначе + + СтрокаОтбора = ""; + + КонецЕсли; + КонецЕсли; + Иначе // Отбор по комментарию не поддерживается + + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует); + ТипыВерсий.Добавить(Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует); + КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоПричине]", СтрокаОтбора); + Запрос.УстановитьПараметр("ТипыВерсий", ТипыВерсий); Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); @@ -334,28 +439,13 @@ Выборка = Результат.Выбрать(); Выборка.Следующий(); Количество = Выборка.Количество; - КонецЕсли; Возврат Количество; КонецФункции -// Получает объект из его версии -// -// Параметры: -// Ссылка - Ссылка на объект, версию которого необходимо восстановить -// НомерВерсии - Число - Номер восстанавливаемой версии -// -Функция ОбъектИзВерсии(Ссылка, НомерВерсии, ДатаВерсии = Неопределено) Экспорт - - НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Установить(Ссылка); - НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсии); - НаборЗаписей.Прочитать(); - - Запись = НаборЗаписей[0]; - ДатаВерсии = Запись.ДатаВерсии; +Функция ОбъектИзДвоичныхДанных(Запись) ДвоичныеДанные = Запись.ВерсияОбъекта.Получить(); @@ -374,6 +464,17 @@ ЧтениеXML.Закрыть(); ВызватьИсключение НСтр("ru = 'Ошибка чтения данных'"); КонецЕсли; + +КонецФункции + +Функция ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии) + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсии); + НаборЗаписей.Прочитать(); + + Возврат НаборЗаписей; КонецФункции @@ -392,7 +493,8 @@ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | НЕ(ВерсииОбъектов.ТипВерсииОбъекта <> &ТипВерсииОбъекта1 - | И ВерсииОбъектов.ТипВерсииОбъекта <> &ТипВерсииОбъекта2)"; + | И ВерсииОбъектов.ТипВерсииОбъекта <> &ТипВерсииОбъекта2) + | И ВерсииОбъектов.ВерсияПроигнорирована = ЛОЖЬ"; Если ПолучитьДатуПоследнейКоллизии Тогда @@ -422,6 +524,20 @@ КонецФункции +Процедура ЗаписатьВерсиюПоверхПредыдущей(Ссылка, НомерВерсии, ХранилищеДанных); + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = ЗаписьОВерсииОбъекта(Ссылка, НомерВерсии); + ЗаписьОВерсии = НаборЗаписей[0]; + + ЗаписьОВерсии.ДатаВерсии = ТекущаяДатаСеанса(); + ЗаписьОВерсии.ВерсияОбъекта = ХранилищеДанных; + + НаборЗаписей.Записать(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему @@ -433,25 +549,66 @@ // НомерИгнорируемойВерсии - Число - Номер версии, на которую необходимо проигнорировать // ПропуститьПроверкуЗапретаИзменения - Булево - Признак пропуска проверки даты запрета загрузки // -Процедура ПриПереходеНаВерсиюОбъекта(ОбъектСсылка, НомерВерсииДляПерехода, НомерИгнорируемойВерсии, ПропуститьПроверкуЗапретаИзменения = Ложь) Экспорт +Процедура ПриПереходеНаВерсиюОбъекта(СсылкаНаОбъект, Знач НомерВерсии, ПринятьВерсию, ПропуститьПроверкуЗапретаИзменения = Ложь) Экспорт - Перем ДатаВерсии; - - Объект = ОбъектИзВерсии(ОбъектСсылка, НомерВерсииДляПерехода, ДатаВерсии); - - Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), - Строка(НомерВерсииДляПерехода), - Формат(ДатаВерсии, "ДЛФ=DT")) ); - - Если ПропуститьПроверкуЗапретаИзменения Тогда - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + Если Не ПривилегированныйРежим() Тогда + ВыполнитьПроверкуПравДоступа("Изменение", СсылкаНаОбъект.Метаданные()); КонецЕсли; - Объект.Записать(); + УстановитьПривилегированныйРежим(Истина); + ЗаписатьОбъект = Ложь; - ИгнорироватьВерсиюОбъекта(ОбъектСсылка, НомерИгнорируемойВерсии, Истина); + НаборЗаписей = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); + Запись = НаборЗаписей[0]; + + Если ПринятьВерсию + И (Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии + Или Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует + Или Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует) Тогда + + Объект = ОбъектИзДвоичныхДанных(Запись); + ДатаВерсии = Запись.ДатаВерсии; + ЗаписатьОбъект = Истина; + + ИначеЕсли Не ПринятьВерсию И Запись.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии Тогда + + НомерВерсии = НомерВерсии - 1; + + Если НомерВерсии <> 0 Тогда + + ПредыдущаяЗапись = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии)[0]; + Объект = ОбъектИзДвоичныхДанных(ПредыдущаяЗапись); + ДатаВерсии = ПредыдущаяЗапись.ДатаВерсии; + ЗаписатьОбъект = Истина; + + КонецЕсли; + + + Иначе + + ЗаписатьОбъект = Ложь; + + КонецЕсли; + + Если ЗаписатьОбъект Тогда + + Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), + Строка(НомерВерсии), + Формат(ДатаВерсии, "ДЛФ=DT"))); + + Если ПропуститьПроверкуЗапретаИзменения Тогда + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + КонецЕсли; + + Объект.Записать(); + + Запись.ВерсияПроигнорирована = Истина; + + НаборЗаписей.Записать(); + + КонецЕсли; КонецПроцедуры @@ -577,14 +734,15 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ВерсияОбъекта КАК ВерсияОбъекта, - | АвторВерсии КАК АвторВерсии, - | ДатаВерсии КАК ДатаВерсии - |ИЗ - | РегистрСведений.ВерсииОбъектов - |ГДЕ - | Объект = &Ссылка - | И НомерВерсии = &НомерВерсии"; + | ВерсииОбъектов.ВерсияОбъекта КАК ВерсияОбъекта, + | ВерсииОбъектов.АвторВерсии КАК АвторВерсии, + | ВерсииОбъектов.ДатаВерсии КАК ДатаВерсии, + | ВерсииОбъектов.Комментарий КАК Комментарий + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | ВерсииОбъектов.Объект = &Ссылка + | И ВерсииОбъектов.НомерВерсии = &НомерВерсии"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("НомерВерсии", Число(НомерВерсии)); @@ -600,10 +758,11 @@ ВызватьИсключение НСтр("ru = 'Не удалось получить предыдущую версию объекта.'"); КонецЕсли; - Возврат Новый Структура("ВерсияОбъекта, АвторВерсии, ДатаВерсии", + Возврат Новый Структура("ВерсияОбъекта, АвторВерсии, ДатаВерсии, Комментарий", ВерсияОбъекта, Выборка.АвторВерсии, - Выборка.ДатаВерсии); + Выборка.ДатаВерсии, + Выборка.Комментарий); КонецФункции @@ -633,6 +792,30 @@ КонецФункции +// Добавляет в дополнительные свойства сведения для записи версии объекта, +// полученного при обмене данными. +// +Процедура ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(Объект, АвторВерсии) + + Если ТипЗнч(Объект) <> Тип("УдалениеОбъекта") И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Объект.Метаданные()) Тогда + + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("АвторВерсии", АвторВерсии); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + СведенияОВерсииОбъекта.Вставить("Комментарий", НСтр("ru = 'Версия получена при синхронизации данных.'")); + СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Ложь); + Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", Новый ФиксированнаяСтруктура(СведенияОВерсииОбъекта)); + + КонецЕсли; + +КонецПроцедуры + +// Проверяет наличие у пользователя прав на чтение информации о версиях +// +Функция ЕстьПравоНаЧтениеВерсийОбъектов() Экспорт + Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов, ЧтениеИнформацииОВерсияхОбъектов"); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП @@ -648,6 +831,28 @@ КонецПроцедуры +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(ЭлементДанных, Отправитель); + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + + ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(ЭлементДанных, Отправитель); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Функции для получения отчета по объекту diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index faf667f5d..9876b9372 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -14,13 +14,41 @@ // Процедура ЗаписатьВерсиюОбъекта(Источник, Отказ) Экспорт - ВерсионированиеОбъектов.СоздатьВерсиюОбъекта(Источник); + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда + Возврат; + КонецЕсли; + + ВерсионированиеОбъектов.ПриСозданииВерсииОбъекта(Источник); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему + +// Записывает версию объекта в информационную базу. Вызывается при выполнении +// обмена данными с другой информационной базой. +// +// Параметры +// Источник - Объект - записываемый объект ИБ; +// Отказ - Булево - признак отказа от записи объекта. +// +Процедура ЗаписатьВерсиюОбъектаПриОбменеДанными(Источник, Отказ) Экспорт + + Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда + + ВерсионированиеОбъектов.ПриСозданииВерсииОбъектаПоОбменуДанными(Источник); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index ba5edb1b5..d6a766ca1 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -543,8 +543,7 @@ Для Каждого ЭлементМассива Из ТаблицаКонтактов Цикл Контакт = ?(ТипЗнч(ЭлементМассива.Контакт) = Тип("Строка"), Неопределено, ЭлементМассива.Контакт); Запись = Новый Структура( - "Адрес, Представление, Контакт", ЭлементМассива.Адрес, ЭлементМассива.Представление, Контакт - ); + "Адрес, Представление, Контакт", ЭлементМассива.Адрес, ЭлементМассива.Представление, Контакт); Результат.Добавить(Запись); КонецЦикла; @@ -703,8 +702,7 @@ ПомещатьВоВременнуюТаблицу, "ПОМЕСТИТЬ ТаблицаКонтакты |", - "" - ); + ""); ТекстОбъединить = ""; ШаблонУсловияНаСсылки = ПолучитьШаблонУсловияНаСсылкиКонтактовДляЗапроса(); @@ -1728,6 +1726,7 @@ Функция ПолучитьУчастниковПоТаблице(Ссылка) Экспорт ПолноеИмяОбъекта = Ссылка.Метаданные().ПолноеИмя(); + ИмяТаблицы = ?(ТипЗнч(Ссылка) = Тип("ДокументСсылка.СообщениеSMS"), "Адресаты", "Участники"); ТекстЗапроса = "ВЫБРАТЬ @@ -1735,7 +1734,7 @@ | Участники.ПредставлениеКонтакта КАК Представление, | Участники.КакСвязаться КАК Адрес |ИЗ - | " + ПолноеИмяОбъекта + ".Участники КАК Участники + | " + ПолноеИмяОбъекта + "." + ИмяТаблицы + " КАК Участники |ГДЕ | Участники.Ссылка = &Ссылка"; @@ -1785,7 +1784,7 @@ // Участники - ТабличнаяЧастьДокумента - табличная часть документа, которая будет заполнена // на основании массива. // -Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники) Экспорт +Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники, ТипКонтактнойИнформации = Неопределено) Экспорт Если Не КонтактыЗаполнены(Контакты) Тогда Возврат; @@ -1802,7 +1801,7 @@ НоваяСтрока.Контакт = ЭлементМассива; КонецЕсли; - ДозаполнитьПоляКонтактов(НоваяСтрока.Контакт, НоваяСтрока.ПредставлениеКонтакта, НоваяСтрока.КакСвязаться); + ДозаполнитьПоляКонтактов(НоваяСтрока.Контакт, НоваяСтрока.ПредставлениеКонтакта, НоваяСтрока.КакСвязаться, ТипКонтактнойИнформации); КонецЦикла; @@ -1860,8 +1859,14 @@ // Процедура СформироватьСписокУчастников(Объект) Экспорт + Если ТипЗнч(Объект) = Тип("ДокументОбъект.СообщениеSMS") Тогда + ИмяТаблицы = "Адресаты"; + Иначе + ИмяТаблицы = "Участники"; + КонецЕсли; + Объект.СписокУчастников = ""; - Для Каждого Участник Из Объект.Участники Цикл + Для Каждого Участник Из Объект[ИмяТаблицы] Цикл Объект.СписокУчастников = Объект.СписокУчастников + ?(Объект.СписокУчастников = "", "", "; ") + Участник.ПредставлениеКонтакта; КонецЦикла; @@ -2577,7 +2582,7 @@ Для Каждого Запись Из НаборЗаписей Цикл Запись.ВПредставлениеВключатьИмяПользователя = Истина; КонецЦикла; - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); КонецЦикла; @@ -2678,7 +2683,7 @@ Если Не ПустаяСтрока(Выборка.Описание) Тогда ВзаимодействиеОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВзаимодействиеОбъект.Тема = Выборка.Описание; - ВзаимодействиеОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВзаимодействиеОбъект); КонецЕсли; КонецЦикла; @@ -2701,7 +2706,7 @@ ПисьмоОбъект = Выборка.Ссылка.ПолучитьОбъект(); ПисьмоОбъект.Размер = ОценитьРазмерИсходящегоЭлектронногоПисьма(Выборка.Ссылка); - ПисьмоОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПисьмоОбъект); КонецЦикла; @@ -2760,8 +2765,7 @@ ПапкаОбъект = ВыборкаПредопределенные.Ссылка.ПолучитьОбъект(); ПапкаОбъект.УстановитьНовыйКод(); - ПапкаОбъект.ОбменДанными.Загрузка = Истина; - ПапкаОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПапкаОбъект); КонецЦикла; @@ -2771,9 +2775,7 @@ ПапкаОбъект = ВыборкаПользовательские.Ссылка.ПолучитьОбъект(); ПапкаОбъект.УстановитьНовыйКод(); - ПапкаОбъект.ОбменДанными.Загрузка = Истина; - ПапкаОбъект.Записать(); - + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПапкаОбъект); КонецЦикла; КонецПроцедуры @@ -2987,9 +2989,8 @@ Если ЭлементМассиваОписания.ЕстьВладелец Тогда Форма.Элементы["Таблица_" + ЭлементМассиваОписания.ИмяВладельца].УстановитьДействие( "ПриАктивизацииСтроки","Подключаемый_СписокВладелецПриАктивизацииСтроки"); - ЭлементОтбора = Форма["Список_" + ЭлементМассиваОписания.Имя].Отбор.Элементы.Добавить( - Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец"); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Форма["Список_" + ЭлементМассиваОписания.Имя], "Владелец", Неопределено, , , Истина); КонецЕсли; КолонкаСсылка = Форма.Элементы.Добавить( @@ -3008,9 +3009,10 @@ // Список - ДинамическийСписок - динамический список, для которого устанавливается отбор // Процедура СоздатьОтборПоТипуСогласноФО(Список) Экспорт - + ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( - Список.Отбор.Элементы,"Отбор по типу согласно ФО", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, "Отбор по типу согласно ФО", + ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); ИмяПоля = "Тип"; ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.НеВСписке; @@ -3018,6 +3020,7 @@ СписокТипов.Добавить(Тип("ДокументСсылка.Встреча")); СписокТипов.Добавить(Тип("ДокументСсылка.ЗапланированноеВзаимодействие")); СписокТипов.Добавить(Тип("ДокументСсылка.ТелефонныйЗвонок")); + СписокТипов.Добавить(Тип("ДокументСсылка.СообщениеSMS")); ПравоеЗначение = СписокТипов; ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки( ГруппаОтбора, ИмяПоля, ВидСравненияЭлементаОтбора, ПравоеЗначение); @@ -4183,6 +4186,376 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////// +// Сообщения SMS + +// Проверяет статусы доставки для отправленных SMS. +// +// Параметры +// СообщениеSMS - ДокументОбъект.СообщениеSMS - документ, для которого проверяется статус доставки SMS +// Модифицированность - Булево - признак модифицированности документа +// +Процедура ПроверитьСтатусыДоставкиSMS(СообщениеSMS, Модифицированность) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | СообщениеSMSАдресаты.НомерСтроки, + | СообщениеSMSАдресаты.ИдентификаторСообщения, + | СообщениеSMSАдресаты.СостояниеСообщения + |ИЗ + | Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты + |ГДЕ + | СообщениеSMSАдресаты.Ссылка = &СообщениеSMS + | И СообщениеSMSАдресаты.ИдентификаторСообщения <> """" + | И (СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОтправляетсяПровайдером) + | ИЛИ СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОтправленоПровайдером) + | ИЛИ СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОшибкаПолученияСтатусаУПровайдера))"; + + Запрос.УстановитьПараметр("СообщениеSMS", СообщениеSMS.Ссылка); + + ЕстьИзменения = Ложь; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(Выборка.ИдентификаторСообщения)); + + Если СостояниеСообщения <> Выборка.СостояниеСообщения Тогда + СообщениеSMS.Адресаты[Выборка.НомерСтроки - 1].СостояниеСообщения = СостояниеСообщения; + ЕстьИзменения = Истина; + КонецЕсли; + + КонецЦикла; + + Если ЕстьИзменения Тогда + СообщениеSMS.Состояние = СостояниеДокументаСообщениеSMS(СообщениеSMS); + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +// Определяет статус документа "Сообщение SMS" по состоянию входящих в него сообщений SMS +// +// Параметры +// СообщениеSMS - ДокументОбъект.СообщениеSMS - документ, для которого необходимо определить +// статус +// +// Возвращаемое значение: +// Перечисления.СостоянияДокументаСообщениеSMS - рассчитанный статус документа +// +Функция СостояниеДокументаСообщениеSMS(СообщениеSMS) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Адресаты.СостояниеСообщения КАК Состояние + |ПОМЕСТИТЬ Состояния + |ИЗ + | &Адресаты КАК Адресаты + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Состояния.Состояние + |ИЗ + | Состояния КАК Состояния"; + + Запрос.УстановитьПараметр("Адресаты", СообщениеSMS.Адресаты.Выгрузить()); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Перечисления.СостоянияДокументаСообщениеSMS.Черновик; + КонецЕсли; + + ТекущийСтатус = Неопределено; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.Исходящее Тогда + + Возврат Перечисления.СостоянияДокументаСообщениеSMS.Исходящее; + + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.Черновик Тогда + + Возврат Перечисления.СостоянияСообщенияSMS.Черновик; + + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.НеУдалосьПередатьПровайдеру Тогда + + Если ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.Доставлено Тогда + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено; + Иначе + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.НеДоставлено; + КонецЕсли; + + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером + ИЛИ Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.ОтправленоПровайдером + ИЛИ Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.ОшибкаПолученияСтатусаУПровайдера + ИЛИ Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.НеОтправленоПровайдером Тогда + Возврат Перечисления.СостоянияДокументаСообщениеSMS.Доставляется; + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.Доставлено Тогда + Если ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.Доставлено + ИЛИ ТекущийСтатус = Неопределено Тогда + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.Доставлено; + Иначе + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено; + КонецЕсли; + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.НеДоставлено Тогда + Если ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.Доставлено Тогда + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено; + Иначе + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.НеДоставлено; + КонецЕсли; + ИначеЕсли Выборка.Состояние = Перечисления.СостоянияСообщенияSMS.НеОпознаноПровайдером Тогда + Если ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.Доставлено Тогда + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено; + Иначе + ТекущийСтатус = Перечисления.СостоянияДокументаСообщениеSMS.НеДоставлено; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Возврат ТекущийСтатус; + +КонецФункции + +// Преобразует статусы доставки SMS подсистемы ОтправкаSMS в +// состояния сообщения SMS подсистемы Взаимодействия +// +// Параметры +// СтатусДоставки - Перечисления.СтатусыДоставкиSMS - значение, которое необходимо преобразовать +// +// Возвращаемое значение: +// Перечисления.СостоянияСообщенияSMS - преобразованное значение +// +Функция СостояниеСообщенияSMSСогласноСтатусуДоставки(СтатусДоставки); + + Если СтатусДоставки = "НеОтправлялось" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.НеОтправленоПровайдером; + ИначеЕсли СтатусДоставки = "Отправляется" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером; + ИначеЕсли СтатусДоставки = "Отправлено" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.ОтправленоПровайдером; + ИначеЕсли СтатусДоставки = "НеДоставлено" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.НеДоставлено; + ИначеЕсли СтатусДоставки = "Доставлено" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.Доставлено; + ИначеЕсли СтатусДоставки = "НеОтправлялось" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.НеОпознаноПровайдером; + ИначеЕсли СтатусДоставки = "Ошибка" Тогда + Возврат Перечисления.СостоянияСообщенияSMS.ОшибкаПолученияСтатусаУПровайдера; + Иначе + Возврат Перечисления.СостоянияСообщенияSMS.ОшибкаПолученияСтатусаУПровайдера; + КонецЕсли; + +КонецФункции + +// Выполняет отправку сообщений SMS по переданному документу Сообщение SMS +Функция ОтправкаSMSПоДокументу(Документ) Экспорт + + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); + ВзаимодействияКлиентСервер.УстановитьСостояниеИсходящееДокументСообщениеSMS(Документ); + Возврат 0; + КонецЕсли; + + МассивНомеров = Документ.Адресаты.Выгрузить(,"НомерДляОтправки").ВыгрузитьКолонку("НомерДляОтправки"); + РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, Документ.ТекстСообщения," " , Документ.ОтправлятьВТранслите); + + ОтразитьРезультатыОтправкиSMSВДокументе(Документ, РезультатОтправки); + + Если Не ПустаяСтрока(РезультатОтправки.ОписаниеОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(РезультатОтправки.ОписаниеОшибки,,"Документ"); + КонецЕсли; + + Возврат РезультатОтправки.ОтправленныеСообщения.Количество(); + +КонецФункции + +//Выполняет процедуру отправки сообщений SMS. +Процедура ОтправкаSMS() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Начата регламентная отправка сообщений SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + Возврат; + КонецЕсли; + + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); + Возврат; + КонецЕсли; + + ТаблицаАдресатовСообщения = Новый ТаблицаЗначений; + ТаблицаАдресатовСообщения.Колонки.Добавить("НомерСтроки"); + ТаблицаАдресатовСообщения.Колонки.Добавить("НомерДляОтправки"); + ТаблицаАдресатовСообщения.Колонки.Добавить("КакСвязаться"); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | СообщениеSMS.Ссылка КАК Ссылка, + | СообщениеSMS.ТекстСообщения, + | СообщениеSMS.ОтправлятьВТранслите, + | СообщениеSMSАдресаты.НомерСтроки, + | СообщениеSMSАдресаты.НомерДляОтправки, + | СообщениеSMSАдресаты.КакСвязаться + |ИЗ + | Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СообщениеSMS КАК СообщениеSMS + | ПО СообщениеSMSАдресаты.Ссылка = СообщениеSMS.Ссылка + |ГДЕ + | СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.Исходящее) + | И НЕ СообщениеSMS.ПометкаУдаления + | И СообщениеSMSАдресаты.ИдентификаторСообщения = """" + |ИТОГИ ПО + | Ссылка"; + + ВыборкаДокументы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ВыборкаДокументы.Следующий() Цикл + + ТаблицаАдресатовСообщения.Очистить(); + + ВыборкаАдресаты = ВыборкаДокументы.Выбрать(); + Пока ВыборкаАдресаты.Следующий() Цикл + + ТекстСообщения = ВыборкаАдресаты.ТекстСообщения; + ОтправлятьВТранслите = ВыборкаАдресаты.ОтправлятьВТранслите; + + НоваяСтрока = ТаблицаАдресатовСообщения.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаАдресаты); + + КонецЦикла; + + Если ТаблицаАдресатовСообщения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + МассивНомеров = ТаблицаАдресатовСообщения.ВыгрузитьКолонку("НомерДляОтправки"); + РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ТекстСообщения, "", ОтправлятьВТранслите); + + Если РезультатОтправки.ОтправленныеСообщения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ДокументОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект(); + ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки); + ДокументОбъект.Записать(); + + КонецЦикла; + + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Закончена регламентная отправка сообщений SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + +КонецПроцедуры + +//Выполняет процедуру обновления статусов доставки SMS. +Процедура ОбновлениеСтатусовДоставкиSMS() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Начато регламентное обновление состояний сообщений SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + Возврат; + КонецЕсли; + + ТаблицаИзменившихсяСтатусов = Новый ТаблицаЗначений; + ТаблицаИзменившихсяСтатусов.Колонки.Добавить("НомерСтроки"); + ТаблицаИзменившихсяСтатусов.Колонки.Добавить("СостояниеСообщения"); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | СообщениеSMSАдресаты.Ссылка КАК Ссылка, + | СообщениеSMSАдресаты.НомерСтроки, + | СообщениеSMSАдресаты.ИдентификаторСообщения, + | СообщениеSMSАдресаты.СостояниеСообщения + |ИЗ + | Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты + |ГДЕ + | СообщениеSMSАдресаты.ИдентификаторСообщения <> """" + | И (СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОтправляетсяПровайдером) + | ИЛИ СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОтправленоПровайдером) + | ИЛИ СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.ОшибкаПолученияСтатусаУПровайдера)) + | И НЕ СообщениеSMSАдресаты.Ссылка.ПометкаУдаления + |ИТОГИ ПО + | Ссылка"; + + ВыборкаДокументы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Пока ВыборкаДокументы.Следующий() Цикл + + ТаблицаИзменившихсяСтатусов.Очистить(); + + ВыборкаИдентификаторы = ВыборкаДокументы.Выбрать(); + Пока ВыборкаИдентификаторы.Следующий() Цикл + + СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(ВыборкаИдентификаторы.ИдентификаторСообщения)); + + Если СостояниеСообщения <> ВыборкаИдентификаторы.СостояниеСообщения Тогда + НоваяСтрока = ТаблицаИзменившихсяСтатусов.Добавить(); + НоваяСтрока.НомерСтроки = ВыборкаИдентификаторы.НомерСтроки; + НоваяСтрока.СостояниеСообщения = СостояниеСообщения; + КонецЕсли; + + Если ТаблицаИзменившихсяСтатусов.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ИзменившийсяСтатус ИЗ ТаблицаИзменившихсяСтатусов Цикл + ДокументОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект(); + ДокументОбъект.Адресаты[ИзменившийсяСтатус.НомерСтроки - 1].СостояниеСообщения = ИзменившийсяСтатус.СостояниеСообщения; + КонецЦикла; + + ДокументОбъект.Состояние = СостояниеДокументаСообщениеSMS(ДокументОбъект); + + ДокументОбъект.Записать(); + + КонецЦикла; + + КонецЦикла; + + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Закончено регламентное обновление состояний сообщений SMS'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + +КонецПроцедуры + +// Устанавливает состояние документа "Сообщение SMS" в зависимости от состояний отдельных сообщений различным контактам. +// +// Параметры +// ДокументОбъект - ДокументОбъект.СообщениеSMS - документ, для которого определяется состояние. +// РезультатОтправки - Структура - результат отправки сообщения SMS +// +Процедура ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки) Экспорт + + Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл + Для Каждого НайденнаяСтрока Из ДокументОбъект.Адресаты.НайтиСтроки(Новый Структура("НомерДляОтправки",ОтправленноеСообщение.НомерПолучателя)) Цикл + НайденнаяСтрока.ИдентификаторСообщения = ОтправленноеСообщение.ИдентификаторСообщения; + НайденнаяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером; + КонецЦикла; + КонецЦикла; + + ДокументОбъект.Состояние = СостояниеДокументаСообщениеSMS(ДокументОбъект); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////// // Работа с папками электронных писем @@ -5018,4 +5391,47 @@ КонецЕсли; КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////// +// Прочее + +// Получает в привелигированном режиме значение константы "Адрес публикации информационной базы в интернете" +// +// Возвращаемое значение: +// Строка - значение константы +// +Функция АдресПубликацииИнформационнойБазыВИнтернете() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.АдресПубликацииИнформационнойБазыВИнтернете.Получить(); + +КонецФункции + +//Процедура заполняет список выбора времени +//Параметры: +// ПолеВводаФормы - элемент-владелец списка, +// Интервал - интервал, с которым необходимо заполнить список, по умолчанию час +Процедура ЗаполнитьСписокВыбораВремени(ПолеВводаФормы, Интервал = 3600) Экспорт + + НачалоРабочегоДня = '00010101000000'; + ОкончаниеРабочегоДня = '00010101235959'; + + СписокВремен = ПолеВводаФормы.СписокВыбора; + СписокВремен.Очистить(); + + ВремяСписка = НачалоРабочегоДня; + Пока НачалоЧаса(ВремяСписка) <= НачалоЧаса(ОкончаниеРабочегоДня) Цикл + Если НЕ ЗначениеЗаполнено(ВремяСписка) Тогда + ПредставлениеВремени = "00:00"; + Иначе + ПредставлениеВремени = Формат(ВремяСписка,"ДФ=ЧЧ:мм"); + КонецЕсли; + + СписокВремен.Добавить(ВремяСписка, ПредставлениеВремени); + + ВремяСписка = ВремяСписка + Интервал; + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 1e4ea2859..920ad54ab 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -56,7 +56,7 @@ Для Каждого СтрокаТаблицы Из Выборка.КонтактнаяИнформация.Выгрузить() Цикл Если СтрокаТаблицы.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда - СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", ", ") + СтрокаТаблицы.Представление; + СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", "; ") + СтрокаТаблицы.Представление; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 963773f01..e348a6fb5 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -1,3 +1,71 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАМНЫЙ ИНТЕРФЕЙС + +//Открывает форму нового документа "Электронное письмо исходящее" +//с переданными в процедуру параметрами +// +// Параметры +// Отправитель - СправочникСсылка.УчетныеЗаписи - учетная запись, с которой выполняется отправка +// Получатель - Строка, СписокЗначений, Массив - список получателей письма +// Тема - Строка - тема письма +// Текст - Строка - текст письма +// СписокФайлов - Массив - вложения письма +// Предмет - Ссылка - предмет письма +// +Процедура ОткрытьФормуОтправкиПочтовогоСообщения(знач Отправитель = Неопределено, + знач Получатель = Неопределено, + знач Тема = "", + знач Текст = "", + знач СписокФайлов = Неопределено, + знач Предмет = Неопределено) Экспорт + + ПараметрыПисьма = Новый Структура; + + ПараметрыПисьма.Вставить("УчетнаяЗапись", Отправитель); + ПараметрыПисьма.Вставить("Кому", Получатель); + ПараметрыПисьма.Вставить("Тема", Тема); + ПараметрыПисьма.Вставить("Тело", Текст); + ПараметрыПисьма.Вставить("Вложения", СписокФайлов); + ПараметрыПисьма.Вставить("Предмет", Предмет); + + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыПисьма); + +КонецПроцедуры + +//Открывает форму нового документа "Сообщение SMS" +//с переданными в процедуру параметрами +// +// Параметры +// Адресаты - Строка, СписокЗначений, Массив - список получателей письма +// Текст - Строка - текст письма +// Предмет - Ссылка - предмет письма +// ОтправлятьВТранслите - Булево - признак того, что сообщение при отправке должно быть преобразовано в латинские символы +// +Процедура ОткрытьФормуОтправкиSMS(знач Адресаты = Неопределено, + знач Текст = "", + знач Предмет = Неопределено, + знач ОтправлятьВТранслите = Ложь) Экспорт + + ПараметрыСообщения = Новый Структура; + + ПараметрыСообщения.Вставить("Адресаты", Адресаты); + ПараметрыСообщения.Вставить("Текст", Текст); + ПараметрыСообщения.Вставить("Предмет", Предмет); + ПараметрыСообщения.Вставить("ОтправлятьВТранслите", ОтправлятьВТранслите); + + ОткрытьФорму("Документ.СообщениеSMS.Форма.ФормаДокумента", ПараметрыСообщения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + //Создает взаимодействие или предмет взаимодействия //Параметры: // ИмяФормыОбъекта - имя формы элемента создаваемого объекта, @@ -7,39 +75,33 @@ Процедура СоздатьВзаимодействиеИлиПредмет(ИмяФормыОбъекта, Основание, Источник) Экспорт ПараметрыОткрытияФормы = Новый Структура("Основание", Основание); - Если (ТипЗнч(Основание) = Тип("ДокументСсылка.Встреча") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")) - И Источник.Элементы.Участники.ТекущиеДанные <> Неопределено Тогда + Если (ТипЗнч(Основание) = Тип("ДокументСсылка.Встреча") + ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")) + И Источник.Элементы.Найти("Участники") <> Неопределено + И Источник.Элементы.Участники.ТекущиеДанные <> Неопределено Тогда + ДанныеУчастникаИсточник = Источник.Элементы.Участники.ТекущиеДанные; ПараметрыОткрытияФормы.Вставить("ДанныеУчастника",Новый Структура("Контакт,КакСвязаться,Представление", ДанныеУчастникаИсточник.Контакт, ДанныеУчастникаИсточник.КакСвязаться, ДанныеУчастникаИсточник.ПредставлениеКонтакта)); + + ИначеЕсли (ТипЗнч(Основание) = Тип("ДокументСсылка.СообщениеSMS") + И Источник.Элементы.Адресаты.ТекущиеДанные <> Неопределено) + И Источник.Элементы.Найти("Адресаты") <> Неопределено Тогда + + ДанныеУчастникаИсточник = Источник.Элементы.Адресаты.ТекущиеДанные; + ПараметрыОткрытияФормы.Вставить("ДанныеУчастника",Новый Структура("Контакт,КакСвязаться,Представление", + ДанныеУчастникаИсточник.Контакт, + ДанныеУчастникаИсточник.КакСвязаться, + ДанныеУчастникаИсточник.ПредставлениеКонтакта)); + КонецЕсли; - ОткрытьФормуМодально(ИмяФормыОбъекта, ПараметрыОткрытияФормы, Источник); + ОткрытьФорму(ИмяФормыОбъекта, ПараметрыОткрытияФормы, Источник); КонецПроцедуры -//Открывает форму нового документа "Электронное письмо исходящее" -//с переданными в процедуру параметрами -Процедура ОткрытьФормуОтправкиПочтовогоСообщения(знач Отправитель = Неопределено, - знач Получатель = Неопределено, - знач Тема = "", - знач Текст = "", - знач СписокФайлов = Неопределено) Экспорт - - ПараметрыПисьма = Новый Структура; - - ПараметрыПисьма.Вставить("УчетнаяЗапись", Отправитель); - ПараметрыПисьма.Вставить("Кому", Получатель); - ПараметрыПисьма.Вставить("Тема", Тема); - ПараметрыПисьма.Вставить("Тело", Текст); - ПараметрыПисьма.Вставить("Вложения", СписокФайлов); - - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыПисьма); - -КонецПроцедуры - //Запрашивает подтверждение и обновляет индекс полнотекстового поиска данных // Процедура КомандаОбновитьИндексППДВыполнить(ИнформацияОбАктуальностиИндексаППД,ППДВключен,ИндексАктуален) Экспорт @@ -76,63 +138,14 @@ ПараметрФормы = Новый Структура( "Основание", Новый Структура("Наименование, Адрес, Объект", - Описание, Адрес, Основание) - ); + Описание, Адрес, Основание)); Если НЕ ВзаимодействияКлиентПереопределяемый.СоздатьКонтактНестандартнаяФорма(ТипКонтакта.Значение,ПараметрФормы) Тогда - ОткрытьФормуМодально("Справочник." + ТипКонтакта.Значение + ".ФормаОбъекта", ПараметрФормы); + ОткрытьФорму("Справочник." + ТипКонтакта.Значение + ".ФормаОбъекта", ПараметрФормы); КонецЕсли; КонецЕсли; КонецПроцедуры -//Процедура позволяет выбрать время из выпадающего списка -//Параметры: -// Форма - форма-владелец списка, -// ПолеВводаФормы - элемент-владелец списка, -// ТекущееЗначение - значение, на которое будет спозиционирован выпадающий список, -// Интервал - интервал, с которым необходимо заполнить список, по умолчанию час -// -Функция ВыбратьВремя(Форма, ПолеВводаФормы, Знач ТекущееЗначение, Интервал = 3600) Экспорт - - НачалоРабочегоДня = '00010101000000'; - ОкончаниеРабочегоДня = '00010101235959'; - - СписокВремен = Новый СписокЗначений; - НачалоРабочегоДня = НачалоЧаса(НачалоДня(ТекущееЗначение) + - Час(НачалоРабочегоДня) * 3600 + - Минута(НачалоРабочегоДня)*60); - ОкончаниеРабочегоДня = КонецЧаса(НачалоДня(ТекущееЗначение) + - Час(ОкончаниеРабочегоДня) * 3600 + - Минута(ОкончаниеРабочегоДня)*60); - - ВремяСписка = НачалоРабочегоДня; - Пока НачалоЧаса(ВремяСписка) <= НачалоЧаса(ОкончаниеРабочегоДня) Цикл - Если НЕ ЗначениеЗаполнено(ВремяСписка) Тогда - ПредставлениеВремени = "00:00"; - Иначе - ПредставлениеВремени = Формат(ВремяСписка,"ДФ=ЧЧ:мм"); - КонецЕсли; - - СписокВремен.Добавить(ВремяСписка, ПредставлениеВремени); - - ВремяСписка = ВремяСписка + Интервал; - КонецЦикла; - - НачальноеЗначение = СписокВремен.НайтиПоЗначению(ТекущееЗначение); - Если НачальноеЗначение = Неопределено Тогда - ВыбранноеВремя = Форма.ВыбратьИзСписка(СписокВремен, ПолеВводаФормы); - Иначе - ВыбранноеВремя = Форма.ВыбратьИзСписка(СписокВремен, ПолеВводаФормы, НачальноеЗначение); - КонецЕсли; - - Если ВыбранноеВремя = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат ВыбранноеВремя.Значение; - -КонецФункции - // Обработчик для события формы ОбработкаОповещения. Вызывается для взаимодействия. Процедура ОтработатьОповещение(Форма,ИмяСобытия, Параметр, Источник) Экспорт @@ -159,12 +172,131 @@ Если ПустаяСтрока(Форма.Элементы.Участники.ТекущиеДанные.ПредставлениеКонтакта) Тогда Форма.Элементы.Участники.ТекущиеДанные.ПредставлениеКонтакта = Параметр.Наименование; КонецЕсли; + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.СообщениеSMS") Тогда + Форма.Элементы.Адресаты.ТекущиеДанные.Контакт = Параметр.Ссылка; + Если ПустаяСтрока(Форма.Элементы.Адресаты.ТекущиеДанные.ПредставлениеКонтакта) Тогда + Форма.Элементы.Адресаты.ТекущиеДанные.ПредставлениеКонтакта = Параметр.Наименование; + КонецЕсли; КонецЕсли; Форма.Элементы.СоздатьКонтакт.Доступность = Ложь; Форма.Модифицированность = Истина; КонецЕсли; + + ИначеЕсли ИмяСобытия = "ВыбранКонтакт" Тогда + + Если Форма.ИмяФормы = "Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента" + ИЛИ Форма.ИмяФормы = "Документ.ЭлектронноеПисьмоВходящее.Форма.ФормаДокумента" Тогда + Возврат; + КонецЕсли; + + БылИзмененКонтакт = (Параметр.Контакт <> Параметр.ВыбранныйКонтакт) И ЗначениеЗаполнено(Параметр.Контакт); + Контакт = Параметр.ВыбранныйКонтакт; + Если Параметр.ТолькоEmail Тогда + ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"); + ИначеЕсли Параметр.ТолькоТелефон Тогда + ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон"); + Иначе + ТипКонтактнойИнформации = Неопределено; + КонецЕсли; + + Если БылИзмененКонтакт Тогда + + Если Параметр.ДляФормыУточненияКонтактов Тогда + //Возврат БылИзмененКонтакт; + Иначе + ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта( + Контакт, Параметр.Представление, Параметр.Адрес, ТипКонтактнойИнформации); + КонецЕсли; + + Адрес = Параметр.Адрес; + Представление = Параметр.Представление; + + ИначеЕсли Параметр.ЗаменятьПустыеАдресИПредставление И (ПустаяСтрока(Параметр.Адрес) ИЛИ ПустаяСтрока(Параметр.Представление)) Тогда + + нПредставление = ""; + нАдрес = ""; + ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта( + Контакт, нПредставление, нАдрес, ТипКонтактнойИнформации); + + Если ПустаяСтрока(Параметр.Представление) Тогда + Представление = нПредставление; + КонецЕсли; + + Если ПустаяСтрока(Параметр.Адрес) Тогда + Адрес = нАдрес; + КонецЕсли; + + Иначе + + Адрес = Параметр.Адрес; + Представление = Параметр.Представление; + + КонецЕсли; + + Если Форма.ИмяФормы = "ОбщаяФорма.АдреснаяКнига" Тогда + + ТекущиеДанные = Форма.Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные.Контакт = Контакт; + ТекущиеДанные.Адрес = Адрес; + ТекущиеДанные.Представление = Представление; + + Форма.Модифицированность = Истина; + + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.СообщениеSMS") Тогда + ТекущиеДанные = Форма.Элементы.Адресаты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные.Контакт = Контакт; + ТекущиеДанные.КакСвязаться = Адрес; + ТекущиеДанные.ПредставлениеКонтакта = Представление; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Форма.Объект,Форма,"СообщениеSMS"); + + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда + ТекущиеДанные = Форма.Элементы.Участники.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные.Контакт = Контакт; + ТекущиеДанные.КакСвязаться = Адрес; + ТекущиеДанные.ПредставлениеКонтакта = Представление; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Форма.Объект,Форма,"ЗапланированноеВзаимодействие"); + Форма.Модифицированность = Истина; + + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.Встреча") Тогда + ТекущиеДанные = Форма.Элементы.Участники.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные.Контакт = Контакт; + ТекущиеДанные.КакСвязаться = Адрес; + ТекущиеДанные.ПредставлениеКонтакта = Представление; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Форма.Объект,Форма,"ЗапланированноеВзаимодействие"); + Форма.Модифицированность = Истина; + + ИначеЕсли ТипЗнч(Форма.Объект.Ссылка)=Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда + + Форма.Объект.АбонентКонтакт = Контакт; + Форма.Объект.АбонентКакСвязаться = Адрес; + Форма.Объект.АбонентПредставление = Представление; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Форма.Объект,Форма,"ТелефонныйЗвонок"); + Форма.Модифицированность = Истина; + + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -192,57 +324,25 @@ // Адрес - Строка - адрес контакта. // Представление - Строка - представление контакта. // Контакт - Ссылка - контакт. -// ТолькоEmail - Булево - признак того, что при выборе контакта нас интересует только Email контакта. -// ТолькоТелефон - Булево - признак того, что при выборе контакта нас интересует только телефон контакта. -// ЗаменятьПустыеАдресИПредставление - Булево - признак того, необходимо ли заменять пустые адрес и представление контакта, -// если был выбран тот же контакт. +// Параметры - Структура - структура параметров открытия формы, состоит . +// ТолькоEmail, ТолькоТелефон, ЗаменятьПустыеАдресИПредставление, ДляФормыУточненияКонтактов // //Возвращаемое значение: // Булево - истина, если выбор был сделан, ложь в обратном случае. // -Функция ВыбратьКонтакт(Предмет, Адрес, Представление, Контакт, ТолькоEmail, ТолькоТелефон, ЗаменятьПустыеАдресИПредставление,ДляФормыУточненияКонтактов = Ложь) Экспорт +Функция ВыбратьКонтакт(Предмет, Адрес, Представление, Контакт, Параметры) Экспорт ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("Предмет", Предмет); ПараметрыОткрытия.Вставить("Адрес", Адрес); ПараметрыОткрытия.Вставить("Представление", Представление); ПараметрыОткрытия.Вставить("Контакт", Контакт); - ПараметрыОткрытия.Вставить("ТолькоEmail", ТолькоEmail); - ПараметрыОткрытия.Вставить("ТолькоТелефон", ТолькоТелефон); + ПараметрыОткрытия.Вставить("ТолькоEmail", Параметры.ТолькоEmail); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Параметры.ТолькоТелефон); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Параметры.ЗаменятьПустыеАдресИПредставление); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Параметры.ДляФормыУточненияКонтактов); - Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборКонтакта", ПараметрыОткрытия); - Если (ТипЗнч(Результат) = Тип("КодВозвратаДиалога")) ИЛИ (Результат = Неопределено) Тогда - Возврат Ложь; - КонецЕсли; - - БылИзмененКонтакт = (Контакт <> Результат) И ЗначениеЗаполнено(Контакт); - Контакт = Результат; - - Если БылИзмененКонтакт Тогда - - Если ДляФормыУточненияКонтактов Тогда - Возврат БылИзмененКонтакт; - Иначе - ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, Представление, Адрес); - КонецЕсли; - - ИначеЕсли ЗаменятьПустыеАдресИПредставление И (ПустаяСтрока(Адрес) ИЛИ ПустаяСтрока(Представление)) Тогда - - нПредставление = ""; - нАдрес = ""; - ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, нПредставление, нАдрес); - - Если ПустаяСтрока(Представление) Тогда - Представление = нПредставление; - КонецЕсли; - - Если ПустаяСтрока(Адрес) Тогда - Адрес = нАдрес; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; + ОткрытьФорму("ОбщаяФорма.ВыборКонтакта", ПараметрыОткрытия); КонецФункции @@ -280,8 +380,13 @@ МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); Для каждого ЭлементМассиваОписания Из МассивОписанияКонтактов Цикл - Если ЭлементМассиваОписания.ИмяВладельца = ИмяТаблицыБезПрефикса Тогда - Форма["Список_" + ЭлементМассиваОписания.Имя].Отбор.Элементы[0].ПравоеЗначение = ЗначениеОтбора; + Если ЭлементМассиваОписания.ИмяВладельца = ИмяТаблицыБезПрефикса Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + КоллекцияОтборов = Форма["Список_" + ЭлементМассиваОписания.Имя].КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + Иначе + КоллекцияОтборов = Форма["Список_" + ЭлементМассиваОписания.Имя].Отбор; + КонецЕсли; + КоллекцияОтборов.Элементы[0].ПравоеЗначение = ЗначениеОтбора; КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index ea38ce564..1fc73da42 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -40,7 +40,8 @@ ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"); + ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") + ИЛИ ТипЗнч(ОбъектСсылка) = Тип("ДокументСсылка.СообщениеSMS"); КонецФункции @@ -58,7 +59,8 @@ ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.ЗапланированноеВзаимодействиеПрисоединенныеФайлы") ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.ТелефонныйЗвонокПрисоединенныеФайлы") ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы") - ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы"); + ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы") + ИЛИ ТипЗнч(ОбъектСсылка) = Тип("СправочникСсылка.СообщениеSMSПрисоединенныеФайлы"); КонецФункции @@ -107,6 +109,183 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее +// Устанавливает состояние "Исходящее" для документа сообщение SMS и всех входящих в него сообщений +// +// Параметры +// Объект - Документ.СообщениеSMS - документ, для которого устанавливается состояние +// +Процедура УстановитьСостояниеИсходящееДокументСообщениеSMS(Объект) Экспорт + + Для каждого Адресат Из Объект.Адресаты Цикл + + Адресат.СостояниеСообщения = ПредопределенноеЗначение("Перечисление.СостоянияСообщенияSMS.Исходящее"); + + КонецЦикла; + + Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Исходящее"); + +КонецПроцедуры + +// Определяет, корректно ли введен номер телефона для сообщения SMS +// +// Параметры +// СтруктураПолей - Структура - структура описывающая контактную информацию типа Телефон или МобильныйТелефон +// +// Возвращаемое значение: +// Булево - Истина, если номер введен правильно, Ложь в обратном случае +// +Функция КорректноВведенНомерТелефона(СтруктураПолей) Экспорт + + Если НЕ ПустаяСтрока(СтруктураПолей.КодСтраны) Тогда + КодСтраны = СокрЛП(КодСтраны); + Если ЛЕВ(КодСтраны,1)= "+" Тогда + КодСтраны = Прав(КодСтраны, СтрДлина(СтруктураПолей.КодСтраны)-1); + КонецЕсли; + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(КодСтраны) Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + + Если НЕ ПустаяСтрока(СтруктураПолей.КодГорода) Тогда + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтруктураПолей.КодГорода) Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + + Если НЕ ПустаяСтрока(СтруктураПолей.НомерТелефона) Тогда + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтруктураПолей.НомерТелефона) Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + + Если СтрДлина(СтруктураПолей.КодГорода) + СтрДлина(СтруктураПолей.НомерТелефона) <> 10 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Формирует структуру полей контактной информации типа Телефон или МобильныйТелефон по представлению телефона +// +// Параметры +// Представление - Строка - строковая информация с номером телефона +// +// Возвращаемое значение: +// Структура - сформированная структура +// +Функция СтруктураПолейПоПредставлениюТелефона(Представление) Экспорт + + текСтр = СокрЛП(Представление); + + // вырежем добавочный номер с комментарием + ПозДоб = Найти(ВРЕГ(текСтр), "ДОБ."); + Если ПозДоб <> 0 Тогда + ДобавочныйСКомментарием = СокрЛП(Сред(текСтр, ПозДоб+4)); + + текСтр = СокрЛП(Лев(текСтр, ПозДоб-1)); + + Если Прав(текСтр, 1) = "," Тогда + текСтр = Лев(текСтр, СтрДлина(текСтр)-1); + КонецЕсли; + + ПозДоб = Найти(ВРЕГ(ДобавочныйСКомментарием), ", "); + + Если ПозДоб <> 0 Тогда + Добавочный = СокрЛП(Лев(ДобавочныйСКомментарием, ПозДоб-1)); + Комментарий = СокрЛП(Сред(ДобавочныйСКомментарием, ПозДоб+2)); + Иначе + Добавочный = ДобавочныйСКомментарием; + КонецЕсли; + + КонецЕсли; + + // вырежем код города + Поз = Найти(текСтр, "("); + Если Поз <> 0 Тогда + КодСтраны = СокрЛП(Лев(текСтр, Поз-1)); + + текСтр = СокрЛП(Сред(текСтр, Поз+1)); + Поз = Найти(текСтр, ")"); + + Если Поз <> 0 Тогда + КодГорода = СокрЛП(Лев(текСтр, Поз-1)); + текСтр = СокрЛП(Сред(текСтр, Поз+1)); + КонецЕсли; + КонецЕсли; + + Поз = Найти(текСтр, ", "); + // Если добавочного номера нет - ориентируемся по номеру телефона и комментарию + Если ПозДоб = 0 И Поз <> 0 Тогда + // вырежем комментарий + НомерТелефона = СокрЛП(Лев(текСтр, Поз-1)); + Комментарий = СокрЛП(Сред(текСтр, Поз+2)); + Иначе + // все оставшееся это номер + НомерТелефона = текСтр; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КодСтраны", КодСтраны); + Результат.Вставить("КодГорода", КодГорода); + Результат.Вставить("НомерТелефона", НомерТелефона); + Результат.Вставить("Добавочный", Добавочный); + Результат.Вставить("Комментарий", Комментарий); + + Возврат Результат; + +КонецФункции + +// Формирует тему по тексту сообщения на основании первых трех слов +// +// Параметры +// ТекстСообщения - Строка - текст сообщения, на основании которого формируется тема +// +// Возвращаемое значение: +// Строка - сформированная тема сообщения +// +Функция ТемаПоТекстуСообщения(ТекстСообщения) Экспорт + + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстСообщения," "); + Тема = ""; + Для Инд = 0 По МассивСтрок.Количество() - 1 Цикл + Если Инд > 2 Тогда + Прервать; + КонецЕсли; + Тема = Тема + МассивСтрок[Инд] + " "; + КонецЦикла; + + Возврат Лев(Тема, СтрДлина(Тема) - 1); + +КонецФункции + +// Формирует информационную строку о количестве сообщений и оставшихся символах +// +// Параметры +// ОтправлятьВТранслите - Булево - признак, того что сообщение при отправке будет автоматически +// преобразовано в латинские символы +// ТекстСообщения - Строка - текст сообщения, для которого формируется сообщение +// +// Возвращаемое значение: +// Строка - сформированное информационное сообщение +// +Функция СформироватьИнформационнуюНадписьКоличествоСимволовСообщений(ОтправлятьВТранслите, ТекстСообщения) Экспорт + + СимволовВСообщении = ?(ОтправлятьВТранслите, 140, 50); + ЧислоСимволов = СтрДлина(ТекстСообщения); + КоличествоСообщений = Цел(ЧислоСимволов / СимволовВСообщении) + 1; + ОсталосьСимволов = СимволовВСообщении - ЧислоСимволов % СимволовВСообщении; + ШаблонТекстаСообщения = НСтр("ru = 'Сообщение - %1, осталось символов - %2'"); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, КоличествоСообщений, ОсталосьСимволов); + +КонецФункции + //Функция возвращает таблицу имен кодировок // //Параметры @@ -320,11 +499,7 @@ // Процедура БыстрыйОтборСписокПриИзменении(Форма, ИмяОтбора, ОтборПоПредмету = Истина) Экспорт - Если ОбщегоНазначенияКлиентСервер.Платформа83БезИспользованияРежимаСовместимости() Тогда - Отбор = Форма.Список.КомпоновщикНастроек.Настройки.Отбор; - Иначе - Отбор = Форма.Список.Отбор; - КонецЕсли; + Отбор = ОтборДинамическогоСписка(Форма.Список); Если ИмяОтбора = "Статус" Тогда @@ -372,11 +547,7 @@ // Процедура ПриИзмененииОтбораТипВзаимодействий(Форма,ТипВзаимодействия) Экспорт - Если ОбщегоНазначенияКлиентСервер.Платформа83БезИспользованияРежимаСовместимости() Тогда - Отбор = Форма.Список.КомпоновщикНастроек.Настройки.Отбор; - Иначе - Отбор = Форма.Список.Отбор; - КонецЕсли; + Отбор = ОтборДинамическогоСписка(Форма.Список); //очистить связанные отборы ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( @@ -466,6 +637,10 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ГруппаОтбора, "Входящий", Истина, ВидСравненияКомпоновкиДанных.Равно,, Истина); + ИначеЕсли ТипВзаимодействия = "СообщенияSMS" Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ГруппаОтбора, + "Тип", Тип("ДокументСсылка.СообщениеSMS"),ВидСравненияКомпоновкиДанных.Равно,, Истина); Иначе Отбор.Элементы.Удалить(ГруппаОтбора); @@ -547,10 +722,15 @@ МассивТабличныхЧастей.Добавить("ПолучателиКопий"); МассивТабличныхЧастей.Добавить("ПолучателиОтвета"); - ИначеЕсли ВидДокумента = "Встреча" ИЛИ ВидДокумента = "ЗапланированноеВзаимодействие" Тогда - + ИначеЕсли ВидДокумента = "Встреча" + ИЛИ ВидДокумента = "ЗапланированноеВзаимодействие" Тогда + МассивТабличныхЧастей.Добавить("Участники"); + ИначеЕсли ВидДокумента = "СообщениеSMS" Тогда + + МассивТабличныхЧастей.Добавить("Адресаты"); + ИначеЕсли ВидДокумента = "ТелефонныйЗвонок" Тогда Если НЕ ЗначениеЗаполнено(ВзаимодействиеОбъект.АбонентКонтакт) Тогда @@ -596,4 +776,22 @@ Возврат Строка(Контакт); +КонецФункции + +// Определяет отбор динамического списка в зависимости от наличия режима совместимости +// +// Параметры: +// Список - ДинамическийСписок - список, для которого надо определить отбор +// +// Возвращаемое значение: +// Отбор - требуемый отбор +// +Функция ОтборДинамическогоСписка(Список) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + Иначе + Возврат Список.Отбор; + КонецЕсли; + КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl index 9c889ffbe..60e10c1d4 100644 --- a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl @@ -20,6 +20,8 @@ // Функция ВыгрузитьТекущуюОбластьВАрхив() Экспорт + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение(НСтр("ru = 'Нарушение прав доступа'")); КонецЕсли; @@ -63,6 +65,13 @@ УдалитьКаталог(КаталогВыгрузки); + ОписаниеАрхива = Новый Файл(ИмяАрхива); + + ЗаписатьСобытиеВЖурнал( + НСтр("ru = 'Выгрузка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОписаниеАрхива.Размер(), + ТекущаяУниверсальнаяДата() - НачалоВыполнения); + Возврат ИмяАрхива; КонецФункции @@ -75,6 +84,8 @@ // Функция ЗагрузитьТекущуюОбластьИзАрхива(Знач ИмяАрхива, Знач ЗагружатьПользователей = Ложь) Экспорт + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + КаталогВыгрузки = РаспаковатьАрхив(ИмяАрхива); Попытка @@ -87,6 +98,13 @@ УдалитьКаталог(КаталогВыгрузки); + ОписаниеАрхива = Новый Файл(ИмяАрхива); + + ЗаписатьСобытиеВЖурнал( + НСтр("ru = 'Загрузка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОписаниеАрхива.Размер(), + ТекущаяУниверсальнаяДата() - НачалоВыполнения); + КонецФункции // Выполняет загрузку данных в область из zip архива с XML файлами в рамках подготовки новой области данных. @@ -100,6 +118,8 @@ // Функция ПодготовитьТекущуюОбластьИзАрхива(Знач ИмяАрхива, Знач ЗагружатьПользователей = Ложь) Экспорт + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + КаталогВыгрузки = РаспаковатьАрхив(ИмяАрхива); ИнформацияОВыгрузке = ПолучитьИнформациюОВыгрузке(КаталогВыгрузки); @@ -117,6 +137,13 @@ УдалитьКаталог(КаталогВыгрузки); + ОписаниеАрхива = Новый Файл(ИмяАрхива); + + ЗаписатьСобытиеВЖурнал( + НСтр("ru = 'Загрузка'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ОписаниеАрхива.Размер(), + ТекущаяУниверсальнаяДата() - НачалоВыполнения); + Возврат Истина; КонецФункции @@ -157,7 +184,8 @@ УдалитьФайлы(ИмяАрхива); Исключение // При неудаче система удалит временный файл автоматически - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -310,7 +338,8 @@ УдалитьФайлы(Каталог); Исключение // При неудаче система удалит временный файл автоматически - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -536,7 +565,8 @@ Процедура ЗаписатьПользователейВXML(КаталогВыгрузки, СохранятьПароли) Запись = Новый ЗаписьXML; - Запись.ОткрытьФайл(КаталогВыгрузки + "users.xml"); + Запись.ОткрытьФайл(КаталогВыгрузки + "users.xml", + Новый ПараметрыЗаписиXML(,,,Истина)); Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("Users"); @@ -714,8 +744,9 @@ СтрокаОбъекта.Приоритет = 1; ИначеЕсли РаботаВМоделиСервиса.ЭтоПолноеИмяРегистра(ИмяОбъектаМетаданных) ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПоследовательности(ИмяОбъектаМетаданных) Тогда - СтрокаОбъекта.Приоритет = 2; + ИначеЕсли РаботаВМоделиСервиса.ЭтоПолноеИмяПерерасчета(ИмяОбъектаМетаданных) Тогда + СтрокаОбъекта.Приоритет = 3; Иначе ШаблонТекста = НСтр("ru = 'Выгрузка объекта метаданных не поддерживается %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, ИмяОбъектаМетаданных); @@ -729,6 +760,21 @@ КонецПроцедуры +Функция НоваяТаблицаПредопределенных() + + ОписаниеXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "TypeDescription")); + ОписаниеXDTO.TypeSet.Добавить(СериализаторXDTO.ЗаписатьXDTO(Новый РасширенноеИмяXML( + "http://v8.1c.ru/8.1/data/enterprise/current-config", + "AnyRef"))); + + Предопределенные = Новый ТаблицаЗначений; + Предопределенные.Колонки.Добавить("Ссылка", СериализаторXDTO.ПрочитатьXDTO(ОписаниеXDTO)); + Предопределенные.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(256, ДопустимаяДлина.Переменная))); + + Возврат Предопределенные; + +КонецФункции + Процедура ЗаписатьДанныеВXMLСУказаниемТипов(КаталогВыгрузки, ТипыДляЗамены = Неопределено, МаксимальныйРазмерЧасти = 100000, ВыгружатьСовместноРазделенныеСсылочныеОбъекты = Ложь) @@ -808,8 +854,7 @@ ОписаниеВыгружаемогоОбъекта = Новый Структура( "ПолноеИмя,Имя,Разделитель,УсловноеРазделение", МетаданныеТипаДляЗамены.ПолноеИмя(), - МетаданныеТипаДляЗамены.Имя - ); + МетаданныеТипаДляЗамены.Имя); СтрокаОбъекта.ВыгружаемыйОбъект = ОписаниеВыгружаемогоОбъекта; КонецЕсли; @@ -841,6 +886,11 @@ // Выгрузка в XML всех данных, относящихся к области + ФормироватьТаблицуПредопределенных = НЕ СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости(); + Если ФормироватьТаблицуПредопределенных Тогда + Предопределенные = НоваяТаблицаПредопределенных(); + КонецЕсли; + Для Каждого СтрокаОбъекта Из ВыгружаемыеДанные Цикл ОписаниеВыгружаемогоОбъекта = СтрокаОбъекта.ВыгружаемыйОбъект; @@ -856,8 +906,7 @@ МенеджерЗначения = ПодменаОбъектаМетаданныхПриВыгрузкеЗагрузкеДанных( МенеджерЗначения, ОписаниеВыгружаемогоОбъекта, - ОписаниеЭмулируемогоОбъекта - ); + ОписаниеЭмулируемогоОбъекта); КонецЕсли; @@ -888,6 +937,8 @@ КонецЕсли; + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеВыгружаемогоОбъекта.ПолноеИмя); + РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл @@ -899,8 +950,20 @@ Объект = ПодменаОбъектаМетаданныхПриВыгрузкеЗагрузкеДанных( Объект, ОписаниеВыгружаемогоОбъекта, - ОписаниеЭмулируемогоОбъекта - ); + ОписаниеЭмулируемогоОбъекта); + + КонецЕсли; + + Если ФормироватьТаблицуПредопределенных + И (РаботаВМоделиСервиса.ЭтоПолноеИмяСправочника(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаВидовХарактеристик(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаСчетов(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаВидовРасчета(ОписаниеВыгружаемогоОбъекта.ПолноеИмя)) + И Объект.Предопределенный Тогда + + СтрокаПредопределенного = Предопределенные.Добавить(); + СтрокаПредопределенного.Ссылка = Объект.Ссылка; + СтрокаПредопределенного.Имя = Менеджер.ПолучитьИмяПредопределенного(СтрокаПредопределенного.Ссылка); КонецЕсли; @@ -911,14 +974,17 @@ КонецЦикла; ИначеЕсли РаботаВМоделиСервиса.ЭтоПолноеИмяРегистра(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) - ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПоследовательности(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) Тогда + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПоследовательности(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПерерасчета(ОписаниеВыгружаемогоОбъекта.ПолноеИмя) Тогда ЭтоРегистрСведений = РаботаВМоделиСервиса.ЭтоПолноеИмяРегистраСведений(ОписаниеВыгружаемогоОбъекта.ПолноеИмя); Если ЭтоРегистрСведений Тогда МетаданныеРегистра = Метаданные.РегистрыСведений.Найти(ОписаниеВыгружаемогоОбъекта.Имя); ЭтоНезависимыйРегистрСведений = (МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); + ЭтоПерерасчет = Ложь; Иначе ЭтоНезависимыйРегистрСведений = Ложь; + ЭтоПерерасчет = РаботаВМоделиСервиса.ЭтоПолноеИмяПерерасчета(ОписаниеВыгружаемогоОбъекта.ПолноеИмя); КонецЕсли; Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеВыгружаемогоОбъекта.ПолноеИмя); @@ -934,8 +1000,7 @@ НаборЗаписей = ПодменаОбъектаМетаданныхПриВыгрузкеЗагрузкеДанных( НаборЗаписей, ОписаниеВыгружаемогоОбъекта, - ОписаниеЭмулируемогоОбъекта - ); + ОписаниеЭмулируемогоОбъекта); КонецЕсли; @@ -945,18 +1010,26 @@ Иначе + ПараметрыВыборки = РаботаВМоделиСервиса.ПараметрыВыборки(ОписаниеВыгружаемогоОбъекта.ПолноеИмя); + ИмяПоляРегистратор = ПараметрыВыборки.ИмяПоляРегистратор; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | _XMLВыгрузка_Таблица.Регистратор КАК Регистратор |ИЗ - | " + ОписаниеВыгружаемогоОбъекта.ПолноеИмя + " КАК _XMLВыгрузка_Таблица"; + | " + ПараметрыВыборки.Таблица + " КАК _XMLВыгрузка_Таблица"; + + Если ИмяПоляРегистратор <> "Регистратор" Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Регистратор", ИмяПоляРегистратор); + КонецЕсли; + РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); + НаборЗаписей.Отбор[ИмяПоляРегистратор].Установить(Выборка[ИмяПоляРегистратор]); НаборЗаписей.Прочитать(); Если ОписаниеЭмулируемогоОбъекта <> Неопределено Тогда @@ -964,8 +1037,7 @@ НаборЗаписей = ПодменаОбъектаМетаданныхПриВыгрузкеЗагрузкеДанных( НаборЗаписей, ОписаниеВыгружаемогоОбъекта, - ОписаниеЭмулируемогоОбъекта - ); + ОписаниеЭмулируемогоОбъекта); КонецЕсли; @@ -984,6 +1056,22 @@ ЗакрытьЗаписьXML(ПараметрыЗаписи_ЗаменяемыеТипы); ЗакрытьЗаписьXML(ПараметрыЗаписи_ПрочиеДанные); + Если ФормироватьТаблицуПредопределенных Тогда + Запись = Новый ЗаписьXML; + Запись.ОткрытьФайл(КаталогВыгрузки + "PredefinedDataNames.xml"); + Запись.ЗаписатьОбъявлениеXML(); + Запись.ЗаписатьНачалоЭлемента("Data"); + Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); + Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + Запись.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core"); + Запись.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise"); + Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config"); + + Сериализатор.ЗаписатьXML(Запись, Предопределенные); + Запись.ЗаписатьКонецЭлемента(); + Запись.Закрыть(); + КонецЕсли; + КонецПроцедуры // Возвращает таблицу с правилами замен @@ -1336,11 +1424,16 @@ ВыгруженныйОбъект = Неопределено; Для Каждого ПравилоЭмуляции Из СоответствиеЗаменяемыхОбъектов Цикл Если ПравилоЭмуляции.Ключ.ПолноеИмя() = ИмяЗагружаемогоОбъекта Тогда + ВыгруженныйОбъект = ПравилоЭмуляции.Значение; - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ЗагружаемыйОбъект = ВыгруженныйОбъект; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ЗагружаемыйОбъект = ПравилоЭмуляции.Ключ; + Иначе + ЗагружаемыйОбъект = ПравилоЭмуляции.Значение; КонецЕсли; + Прервать; + КонецЕсли; КонецЦикла; @@ -1348,12 +1441,11 @@ ЭлементЗагружаемыхДанных = Новый Структура("ВыгружаемыйОбъект,ЗагружаемыйОбъект"); ЭлементЗагружаемыхДанных.ВыгружаемыйОбъект = Новый Структура("ПолноеИмя,Имя", ВыгруженныйОбъект.ПолноеИмя(), ВыгруженныйОбъект.Имя); - ЭлементЗагружаемыхДанных.ЗагружаемыйОбъект = Новый Структура("ПолноеИмя,Имя", ИмяЗагружаемогоОбъекта, ЭлементМоделиДанных.Значение.Имя); + ЭлементЗагружаемыхДанных.ЗагружаемыйОбъект = Новый Структура("ПолноеИмя,Имя", ЗагружаемыйОбъект.ПолноеИмя(), ЗагружаемыйОбъект.Имя); ЗагружаемыеДанные.Вставить( ЭлементЗагружаемыхДанных.ВыгружаемыйОбъект.ПолноеИмя, - ЭлементЗагружаемыхДанных - ); + ЭлементЗагружаемыхДанных); КонецЕсли; @@ -1372,6 +1464,35 @@ МаскаПоиска = "data_*.xml"; КонецЕсли; + ИспользоватьИменаПредопределенных = СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости(); + Если ИспользоватьИменаПредопределенных Тогда + ФайлСоответствия = Новый Файл(КаталогВыгрузки + "PredefinedDataNames.xml"); + Если ФайлСоответствия.Существует() Тогда + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ФайлСоответствия.ПолноеИмя); + Чтение.ПерейтиКСодержимому(); + + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Data" Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Data.'")); + КонецЕсли; + + Чтение.Прочитать(); + + Предопределенные = СериализаторXDTO.ПрочитатьXML(Чтение); + + Чтение.Закрыть(); + Чтение = Неопределено; + + ЗагруженыИменаПредопределенных = Истина; + Иначе + Предопределенные = НоваяТаблицаПредопределенных(); + + ЗагруженыИменаПредопределенных = Ложь; + КонецЕсли; + КонецЕсли; + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ВсеФайлыДанных = НайтиФайлы(КаталогВыгрузки, МаскаПоиска, Ложь); @@ -1390,7 +1511,7 @@ Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ Чтение.Имя <> "DataDumpPart" Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Data.'")); + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента DataDumpPart.'")); КонецЕсли; Если РежимОтладки Тогда @@ -1453,7 +1574,8 @@ Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML'"), + НСтр("ru = 'ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1463,9 +1585,7 @@ |Фрагмент файла выгрузки, который не удается прочитать через СериализаторXDTO: |%2'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - Фрагмент - ) - ); + Фрагмент)); ВызватьИсключение; @@ -1474,6 +1594,18 @@ Данные = СериализаторXDTO.ПрочитатьXML(Чтение); КонецЕсли; + // В платформе 8.3.2 и ниже не допускается наличие помеченных на удаление предопределенных элементов + Если Не ИспользоватьИменаПредопределенных И + (Метаданные.Справочники.Содержит(Данные.Метаданные()) Или + Метаданные.ПланыВидовХарактеристик.Содержит(Данные.Метаданные()) Или + Метаданные.ПланыСчетов.Содержит(Данные.Метаданные()) Или + Метаданные.ПланыВидовРасчета.Содержит(Данные.Метаданные())) + И Данные.Предопределенный И Данные.ПометкаУдаления Тогда + + Продолжить; + + КонецЕсли; + МетаданныеЗагруженногоЗначения = Данные.Метаданные(); Если ИсключаемыеОбъекты.Найти(МетаданныеЗагруженногоЗначения) <> Неопределено Тогда @@ -1493,8 +1625,7 @@ Данные = ПодменаОбъектаМетаданныхПриВыгрузкеЗагрузкеДанных( Данные, ПравилоПодменыОбъектовПриЗаписи.ВыгружаемыйОбъект, - ПравилоПодменыОбъектовПриЗаписи.ЗагружаемыйОбъект - ); + ПравилоПодменыОбъектовПриЗаписи.ЗагружаемыйОбъект); МетаданныеЗагруженногоЗначения = Данные.Метаданные(); ОписаниеЗагруженныхДанных = МодельДанных.Получить(МетаданныеЗагруженногоЗначения.ПолноеИмя()); Если ОписаниеЗагруженныхДанных <> Неопределено Тогда @@ -1538,6 +1669,29 @@ Данные.ОбменДанными.Загрузка = Истина; + Если ИспользоватьИменаПредопределенных Тогда + + Если РаботаВМоделиСервиса.ЭтоПолноеИмяСправочника(МетаданныеЗагруженногоЗначения.ПолноеИмя()) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаВидовХарактеристик(МетаданныеЗагруженногоЗначения.ПолноеИмя()) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаСчетов(МетаданныеЗагруженногоЗначения.ПолноеИмя()) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПланаВидовРасчета(МетаданныеЗагруженногоЗначения.ПолноеИмя()) Тогда + + Если ЗначениеЗаполнено(Данные.ИмяПредопределенныхДанных) И Данные.ЭтоНовый() Тогда + Если ЗагруженыИменаПредопределенных Тогда + ВызватьИсключение(НСтр("ru = 'Некорректный формат выгрузки данных - существует файл соответствия имен предопределенных + |и установлено имя предопределенного в объекте.'")); + КонецЕсли; + + СтрокаПредопределенного = Предопределенные.Добавить(); + СтрокаПредопределенного.Ссылка = Данные.ПолучитьСсылкуНового(); + СтрокаПредопределенного.Имя = Данные.ИмяПредопределенныхДанных; + + Данные.ИмяПредопределенныхДанных = ""; + + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; ПередЗагрузкойДанных(Данные); @@ -1555,10 +1709,10 @@ НСтр("ru = 'При попытке загрузки данных из файла выгрузки произошла ошибка: |%1 |Будет предпринята попытка заргузить данные в режиме отладки'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML'"), УровеньЖурналаРегистрации.Ошибка, , , ТекстЖР); + ЗаписьЖурналаРегистрации(НСтр("ru = 'ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстЖР); РежимОтладки = Истина; Продолжить; @@ -1572,6 +1726,101 @@ КонецЦикла; + Если ИспользоватьИменаПредопределенных Тогда + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Текст = + "ВЫБРАТЬ + | Предопределенные.Ссылка КАК Ссылка, + | Предопределенные.Имя КАК Имя + |ПОМЕСТИТЬ Предопределенные + |ИЗ + | &Предопределенные КАК Предопределенные"; + Запрос.УстановитьПараметр("Предопределенные", Предопределенные); + Запрос.Выполнить(); + + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТИПЗНАЧЕНИЯ(Предопределенные.Ссылка) КАК Тип + |ИЗ + | Предопределенные КАК Предопределенные"; + ВыборкаТипов = Запрос.Выполнить().Выбрать(); + + Пока ВыборкаТипов.Следующий() Цикл + + ИмяТаблицы = Метаданные.НайтиПоТипу(ВыборкаТипов.Тип).ПолноеИмя(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ЭтоНеразделенныйОбъект = Истина; + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТаблицы, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда + ЭтоНеразделенныйОбъект = Ложь; + КонецЕсли; + + Если ЭтоНеразделенныйОбъект И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяТаблицы, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда + ЭтоНеразделенныйОбъект = Ложь; + КонецЕсли; + + Если ЭтоНеразделенныйОбъект Тогда + Продолжить; + КонецЕсли; + + КонецЕсли; + + Запрос.Текст = + "ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | Таблица.ИмяПредопределенныхДанных КАК Имя + |ИЗ + | " + ИмяТаблицы + " КАК Таблица + | + |ГДЕ + | Таблица.Предопределенный = ИСТИНА"; + + ВыборкаСуществующих = Запрос.Выполнить().Выбрать(); + + Запрос.Текст = + "ВЫБРАТЬ + | Предопределенные.Ссылка КАК Ссылка, + | Предопределенные.Имя КАК Имя + |ИЗ + | Предопределенные КАК Предопределенные + |ГДЕ + | ТИПЗНАЧЕНИЯ(Предопределенные.Ссылка) = &Тип"; + Запрос.УстановитьПараметр("Тип", ВыборкаТипов.Тип); + ТаблицаЗагруженных = Запрос.Выполнить().Выгрузить(); + ТаблицаЗагруженных.Индексы.Добавить("Имя"); + + Пока ВыборкаСуществующих.Следующий() Цикл + + СтрокаЗагруженной = ТаблицаЗагруженных.Найти(ВыборкаСуществующих.Имя, "Имя"); + Если СтрокаЗагруженной = Неопределено Тогда + // В файле выгрузки нет предопределенного с таким именем + Продолжить; + КонецЕсли; + + Если СтрокаЗагруженной.Ссылка = ВыборкаСуществующих.Ссылка Тогда + // В области уже есть предопределенный с такой же ссылкой + Продолжить; + КонецЕсли; + + Удаление = Новый УдалениеОбъекта(ВыборкаСуществующих.Ссылка); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + + Объект = СтрокаЗагруженной.Ссылка.ПолучитьОбъект(); + Объект.ИмяПредопределенныхДанных = ВыборкаСуществующих.Имя; + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + КонецПроцедуры Функция ПрочитатьТаблицуПользователей(Знач КаталогВыгрузки) @@ -1771,6 +2020,25 @@ КонецПроцедуры +Процедура ЗаписатьСобытиеВЖурнал(Знач Событие, + Знач Размер, + Знач Длительность) + + ДанныеСобытия = Новый Структура; + ДанныеСобытия.Вставить("Размер", Размер); + ДанныеСобытия.Вставить("Длительность", Длительность); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Выгрузка / загрузка областей'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + "." + Событие, + УровеньЖурналаРегистрации.Информация, + , + , + ОбщегоНазначения.ЗначениеВСтрокуXML(ДанныеСобытия)); + + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Запись / чтение пользователей ИБ в / из XML @@ -1966,9 +2234,7 @@ ЗаполнитьЗначенияСвойств( ПодменаОбъекта, ИсходныйОбъект, , СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок( - ИсключенияЗаполненияСвойств - ) - ); + ИсключенияЗаполненияСвойств)); ИсходныйОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОписаниеИсходногоОбъектаМетаданных.ПолноеИмя); ЭмулируемыйОбъектМетаданных = ПодменаОбъекта.Метаданные(); @@ -1987,14 +2253,18 @@ Возврат ПодменаОбъекта; - ИначеЕсли РаботаВМоделиСервиса.ЭтоПолноеИмяРегистра(ОписаниеИсходногоОбъектаМетаданных.ПолноеИмя) Тогда + ИначеЕсли РаботаВМоделиСервиса.ЭтоПолноеИмяРегистра(ОписаниеИсходногоОбъектаМетаданных.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПоследовательности(ОписаниеИсходногоОбъектаМетаданных.ПолноеИмя) + ИЛИ РаботаВМоделиСервиса.ЭтоПолноеИмяПерерасчета(ОписаниеИсходногоОбъектаМетаданных.ПолноеИмя) Тогда Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеЭмулируемогоОбъектаМетаданных.ПолноеИмя); ПодменяемыйНаборЗаписей = Менеджер.СоздатьНаборЗаписей(); - ОтборПоРегистратору = ИсходныйОбъект.Отбор.Найти("Регистратор"); + ПараметрыВыборки = РаботаВМоделиСервиса.ПараметрыВыборки(ОписаниеЭмулируемогоОбъектаМетаданных.ПолноеИмя); + ИмяПоляРегистратор = ПараметрыВыборки.ИмяПоляРегистратор; + ОтборПоРегистратору = ИсходныйОбъект.Отбор.Найти(ИмяПоляРегистратор); Если ОтборПоРегистратору <> Неопределено Тогда - ПодменяемыйНаборЗаписей.Отбор.Регистратор.Установить(ОтборПоРегистратору.Значение); + ПодменяемыйНаборЗаписей.Отбор[ИмяПоляРегистратор].Установить(ОтборПоРегистратору.Значение); КонецЕсли; ПодменяемыйНаборЗаписей.Загрузить(ИсходныйОбъект.Выгрузить()); @@ -2090,14 +2360,14 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); - Модуль.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); + МодульРаботаСФайламиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); - Модуль.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); КонецЕсли; КонецПроцедуры @@ -2111,14 +2381,14 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); - Модуль.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + МодульРаботаСФайламиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); - Модуль.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index d938fc3d2..3a7ea428e 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -935,11 +935,11 @@ КонецЕсли; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Текст, - Формат(Проверка.Дата, "ДФ=dd.MM.yyyy"), + Формат(Проверка.Дата, "ДЛФ=Д"), Проверка.Раздел, Проверка.Объект, Запрет.Пользователь, - Формат(Запрет.ДатаЗапрета, "ДФ=dd.MM.yyyy"), + Формат(Запрет.ДатаЗапрета, "ДЛФ=Д"), Запрет.Пользователь.Метаданные().Представление()) + Символы.ПС; КонецЦикла; Текст = Текст + Символы.ПС; @@ -954,8 +954,10 @@ // тогда выполняется запись в журнал регистрации. ЗаписьЖурналаРегистрации( ?(ПоискЗапретовЗагрузки, - НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'"), - НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'")), + НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + НСтр("ru = 'Даты запрета изменения.Найдены запреты изменения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 28728352e..4e4e34908 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -216,89 +216,109 @@ УстановитьПривилегированныйРежим(Истина); - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(); - ЭлементБлокировки.Область = "РегистрСведений.ДатыЗапретаИзменения"; - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + Выборка = Запрос.Выполнить().Выбрать(); + + ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); + МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); + ПредставлениеОшибки = ""; + Отказ = Ложь; + ЕстьОбновленныеДаты = Ложь; + НетОтносительныхДат = Истина; + + Пока Выборка.Следующий() Цикл + РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию( + ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Выборка = Запрос.Выполнить().Выбрать(); - - ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); - ПредставлениеОшибки = ""; - Отказ = Ложь; - ЕстьОбновленныеДаты = Ложь; - НетОтносительныхДат = Истина; - - Пока Выборка.Следующий() Цикл - РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); + Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда + НетОтносительныхДат = Ложь; - Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда - НетОтносительныхДат = Ложь; - Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); + Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(); + ЭлементБлокировки.Область = "РегистрСведений.ДатыЗапретаИзменения"; + ЭлементБлокировки.УстановитьЗначение("Раздел", Выборка.Раздел); + ЭлементБлокировки.УстановитьЗначение("Объект", Выборка.Объект); + ЭлементБлокировки.УстановитьЗначение("Пользователь", Выборка.Пользователь); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; - Попытка + Если Выборка.ОписаниеДатыЗапрета <> МенеджерЗаписи.ОписаниеДатыЗапрета Тогда + РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию( + ТекущаяДатаНаСервере, МенеджерЗаписи.ОписаниеДатыЗапрета); + КонецЕсли; + Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда + МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; МенеджерЗаписи.Записать(); ЕстьОбновленныеДаты = Истина; - Исключение - Отказ = Истина; - ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки + КонецЕсли; КонецЕсли; - КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Отказ = Истина; + ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; КонецЕсли; - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + КонецЕсли; + КонецЦикла; Если НетОтносительныхДат Тогда ОписаниеРезультата = НСтр("ru = 'Относительные даты запрета не заданы.'"); ИначеЕсли Отказ Тогда Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. - |При пересчете возникли ошибки:'"); + ОписаниеРезультата = + НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. + |При пересчете возникли ошибки:'"); Иначе - ОписаниеРезультата = НСтр("ru = 'Не пересчитаны текущие значения дат запрета. - |При пересчете возникли ошибки:'"); + ОписаниеРезультата = + НСтр("ru = 'Не пересчитаны текущие значения дат запрета. + |При пересчете возникли ошибки:'"); КонецЕсли; ОписаниеРезультата = ОписаниеРезультата + ПредставлениеОшибки; Иначе Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = НСтр("ru = 'Успешно пересчитаны текущие значения относительных дат запрета.'"); + ОписаниеРезультата = + НСтр("ru = 'Успешно пересчитаны текущие значения относительных дат запрета.'"); Иначе - ОписаниеРезультата = НСтр("ru = 'Сегодня уже пересчитаны текущие значения относительных дат запрета.'"); + ОписаниеРезультата = + НСтр("ru = 'Сегодня уже пересчитаны текущие значения относительных дат запрета.'"); КонецЕсли; КонецЕсли; Если ЗаписатьОписаниеРезультатаВЖурналРегистрации Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Даты запрета изменения.Пересчет относительных дат'"), - ?(Отказ, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация), - , - , - ОписаниеРезультата, - РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Даты запрета изменения.Пересчет относительных дат'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ?(Отказ, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация), + , + , + ОписаниеРезультата, + РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + КонецЕсли; + + Если Отказ Тогда + ВызватьИсключение + НСтр("ru = 'Не удалось пересчитать все относительные даты запрета. + |Подробности в журнале регистрации.'"); КонецЕсли; КонецПроцедуры @@ -581,7 +601,7 @@ НаборЗаписей.Отбор.Пользователь.Установить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); Таблица.ЗаполнитьЗначения(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей, "Пользователь"); НаборЗаписей.Загрузить(Таблица); - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); КонецЕсли; КонецПроцедуры @@ -618,7 +638,7 @@ ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Строка); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.Удалить(); + МенеджерЗаписи.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 5890f46cc..0ad0309f1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -96,8 +96,10 @@ // // Параметры: // ЭтаФорма (УправляемаяФорма) +// ТипФормы (Строка) Необязательный. "ФормаСписка" для форм списков и "ФормаОбъекта" для форм элементов. +// см. также функции ТипФормыСписка() и ТипФормыОбъекта() общего модуля ДополнительныеОтчетыИОбработкиКлиентСервер. // -Процедура ПриСозданииНаСервере(ЭтаФорма) Экспорт +Процедура ПриСозданииНаСервере(ЭтаФорма, ТипФормы = Неопределено) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; @@ -110,7 +112,7 @@ ПараметрыФункциональныхОпций = Новый Структура; ПараметрыФункциональныхОпций.Вставить("ДополнительныеОтчетыИОбработкиОбъектНазначения", Параметры.СсылкаРодителя); - ПараметрыФункциональныхОпций.Вставить("ДополнительныеОтчетыИОбработкиТипФормы", Параметры.ТипФормы); + ПараметрыФункциональныхОпций.Вставить("ДополнительныеОтчетыИОбработкиТипФормы", ?(ТипФормы = Неопределено, Параметры.ТипФормы, ТипФормы)); ЭтаФорма.УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФункциональныхОпций); @@ -150,24 +152,21 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Внешняя обработка ""%1"" (тип ""%2"") не обслуживается подсистемой ""Дополнительные отчеты и обработки""'"), Строка(Ссылка), - Строка(ТипЗнч(Ссылка)) - ); + Строка(ТипЗнч(Ссылка))); КонецЕсли; ВнешняяОбработкаОбъект.Печать( ПараметрыИсточника.ОбъектыНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, - ПараметрыВывода - ); + ПараметрыВывода); // Проверим, все ли макеты были сформированы Для Каждого Стр Из КоллекцияПечатныхФорм Цикл Если Стр.ТабличныйДокумент = Неопределено Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), - Стр.ИмяМакета - ); + Стр.ИмяМакета); ВызватьИсключение(ТекстСообщенияОбОшибке); КонецЕсли; @@ -407,6 +406,43 @@ КонецПроцедуры +// Дополняет список команд печати внешними печатными формами. +// +// Параметры: +// КомандыПечати - ТаблицаЗначений - описание см. в УправлениеПечатью.СоздатьКоллекциюКомандПечати(). +// ИмяФормы - Строка - полное имя формы, для которой необходимо получить список команд печати. +// +Процедура ПриПолученииКомандПечати(КомандыПечати, ИмяФормы) Экспорт + + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда + Возврат; + КонецЕсли; + + ПолноеИмяОбъектаМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяФормы).Родитель().ПолноеИмя(); + Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); + ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); + + Если ТаблицаКоманд.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл + КомандаПечати = КомандыПечати.Найти(СтрокаТаблицы.Идентификатор, "Идентификатор"); // подмена встроенной команды на внешнюю + Если КомандаПечати = Неопределено Тогда + КомандаПечати = КомандыПечати.Добавить(); + КонецЕсли; + // Обязательные параметры. + ЗаполнитьЗначенияСвойств(КомандаПечати, СтрокаТаблицы, "Идентификатор, Представление"); + // Параметры, идентифицирующие подсистему. + КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"; + + // Дополнительные параметры. + КомандаПечати.ДополнительныеПараметры = Новый Структура("Ссылка, Модификатор, ВариантЗапуска, ПоказыватьОповещение"); + ЗаполнитьЗначенияСвойств(КомандаПечати.ДополнительныеПараметры, СтрокаТаблицы); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий @@ -571,8 +607,7 @@ ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), - "'"+ Строка(ДопОтчет) +"'" - ); + "'"+ Строка(ДопОтчет) +"'"); Результат = Ложь; @@ -650,7 +685,7 @@ НоваяЗапись.Пользователь = Пользователь; НоваяЗапись.Доступно = Истина; КонецЦикла; - НаборЗаписей.Записать(Истина); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); КонецЦикла; КонецПроцедуры @@ -732,9 +767,9 @@ СтрокаТаблицы.ИмяОбъекта = Объект.ИмяОбъекта; // Запись объекта - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЦикла; + КонецЦикла; КонецПроцедуры @@ -788,8 +823,8 @@ КонецЦикла; // Запись объекта - Объект.Записать(); - КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + КонецЦикла; КонецПроцедуры // Замена имен рабочих мест на идентификаторы разделов. @@ -838,11 +873,10 @@ Для Каждого СтрокаТабличнойЧасти Из МассивСтрокДляУдаления Цикл СправочникОбъект.Назначение.Удалить(СтрокаТабличнойЧасти); КонецЦикла; - СправочникОбъект.ОбменДанными.Загрузка = Истина; - СправочникОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект); КонецЦикла; - РегистрыСведений.НазначениеДополнительныхОбработок.Обновить(); + РегистрыСведений.НазначениеДополнительныхОбработок.Обновить(Истина); ЗафиксироватьТранзакцию(); @@ -889,8 +923,7 @@ ВнешняяОбработка, НСтр("ru = 'Команда %1: Ошибка выполнения:%2'"), ИдентификаторКоманды, - Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; // Запись журнала регистрации @@ -911,8 +944,8 @@ Процедура ПриОпределенииСсылкиВариантаДополнительногоОтчета(Отчет, КлючВарианта, Результат) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); - Результат = Модуль.ПолучитьСсылку(Отчет, КлючВарианта); + МодульВариантыОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); + Результат = МодульВариантыОтчетов.ПолучитьСсылку(Отчет, КлючВарианта); КонецЕсли; КонецПроцедуры @@ -941,8 +974,7 @@ Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, ПолноеИмяИлиСсылкаРодителяИлиРаздела, ЭтоФормаОбъекта = Неопределено) Экспорт ЭтоГлобальныеОбработки = ( ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет - ИЛИ ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ); + ИЛИ ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка); Если ТипЗнч(ПолноеИмяИлиСсылкаРодителяИлиРаздела) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда СсылкаРодителяИлиРаздела = ПолноеИмяИлиСсылкаРодителяИлиРаздела; @@ -1229,8 +1261,7 @@ Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Раздел ""%1""'"), - ПредставлениеРаздела - ); + ПредставлениеРаздела); КонецФункции // Функция для добавления команд дополнительных обработок в список "своих" @@ -1284,8 +1315,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриПроверкеПраваДобавления(ДополнительнаяОбработка, Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПроверкеПраваДобавления(ДополнительнаяОбработка, Результат, СтандартнаяОбработка); КонецЕсли; Если СтандартнаяОбработка Тогда @@ -1407,8 +1438,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Обработка, Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПроверкеВозможностиЗагрузкиОбработкиИзФайла(Обработка, Результат, СтандартнаяОбработка); КонецЕсли; Возврат Результат; @@ -1429,8 +1460,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Обработка, Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПроверкеВозможностиВыгрузкиОбработкиВФайл(Обработка, Результат, СтандартнаяОбработка); КонецЕсли; Возврат Результат; @@ -1445,8 +1476,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПроверкеНеобходимостиОтображенияРасширеннойИнформации(Результат, СтандартнаяОбработка); КонецЕсли; Возврат Результат; @@ -1461,8 +1492,8 @@ Результат = Новый Массив; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - НедоступныеВМоделиСервиса = Модуль.НедоступныеВидыПубликации(); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + НедоступныеВМоделиСервиса = МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.НедоступныеВидыПубликации(); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, НедоступныеВМоделиСервиса, Истина); КонецЕсли; @@ -1474,7 +1505,7 @@ // Процедура ЗаписатьОшибку(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт ЗаписьЖурналаРегистрации( - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(), + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ДополнительныеОтчетыИОбработки, Ссылка, @@ -1482,16 +1513,14 @@ ТекстСообщения, Строка(Реквизит1), Строка(Реквизит2), - Строка(Реквизит3) - ) - ); + Строка(Реквизит3))); КонецПроцедуры // Запись ошибки в журнал регистрации по дополнительному отчету или обработке. // Процедура ЗаписатьИнформацию(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт ЗаписьЖурналаРегистрации( - ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(), + ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Неопределено), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ДополнительныеОтчетыИОбработки, Ссылка, @@ -1499,9 +1528,7 @@ ТекстСообщения, Строка(Реквизит1), Строка(Реквизит2), - Строка(Реквизит3) - ) - ); + Строка(Реквизит3))); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1777,9 +1804,9 @@ Иначе Если ПараметрыКоманды = Неопределено Тогда - ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды.ОбъектыНазначения, ИзмененныеОбъекты); + ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ИзмененныеОбъекты); Иначе - ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыКоманды.ОбъектыНазначения, ИзмененныеОбъекты, ПараметрыКоманды); + ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ИзмененныеОбъекты, ПараметрыКоманды); КонецЕсли; КонецЕсли; @@ -1816,8 +1843,7 @@ ПередаватьПараметры = ( СведенияОВнешнемОбъекте.Свойство("ВерсияБСП") - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СведенияОВнешнемОбъекте.ВерсияБСП, "1.2.1.4") >= 0 - ); + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СведенияОВнешнемОбъекте.ВерсияБСП, "1.2.1.4") >= 0); Если НЕ ПараметрыКоманды.Свойство("РезультатВыполнения") ИЛИ ТипЗнч(ПараметрыКоманды.РезультатВыполнения) <> Тип("Структура") Тогда ПараметрыКоманды.Вставить("РезультатВыполнения", СтандартныеПодсистемыКлиентСервер.НовыйРезультатВыполнения()); @@ -1840,8 +1866,7 @@ ВыполнитьКомандуДополнительногоОтчетаИлиОбработки( ВнешнийОбъект, ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), - ЭтоСценарийВБезопасномРежиме - ); + ЭтоСценарийВБезопасномРежиме); ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда @@ -1851,8 +1876,7 @@ ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ПараметрыКоманды.ОбъектыНазначения, ИзмененныеОбъекты, - ЭтоСценарийВБезопасномРежиме - ); + ЭтоСценарийВБезопасномРежиме); ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта ИЛИ ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет @@ -1868,8 +1892,7 @@ ВнешнийОбъект, ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ОбъектыНазначения, - ЭтоСценарийВБезопасномРежиме - ); + ЭтоСценарийВБезопасномРежиме); Иначе @@ -1877,8 +1900,7 @@ ВнешнийОбъект, ИдентификаторКоманды, ?(ПередаватьПараметры, ПараметрыКоманды, Неопределено), ОбъектыНазначения, - ЭтоСценарийВБезопасномРежиме - ); + ЭтоСценарийВБезопасномРежиме); Если ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда ИзмененныеОбъекты = ОбъектыНазначения; @@ -1909,12 +1931,10 @@ Сценарий = ВнешнийОбъект.СформироватьСценарий(ИдентификаторКоманды, ПараметрыКоманды); КлючСессии = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.СформироватьКлючСессииРасширенияБезопасногоРежима( - ПараметрыКоманды.ДополнительнаяОбработкаСсылка - ); + ПараметрыКоманды.ДополнительнаяОбработкаСсылка); РасширениеБезопасногоРежима.ВыполнитьСценарийБезопасногоРежима( - КлючСессии, Сценарий, ВнешнийОбъект, ПараметрыКоманды, Неопределено, ОбъектыНазначения - ); + КлючСессии, Сценарий, ВнешнийОбъект, ПараметрыКоманды, Неопределено, ОбъектыНазначения); КонецПроцедуры @@ -2073,8 +2093,7 @@ Если НЕ ЗначениеЗаполнено(КомандаОписание.ВариантЗапуска) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтрЗаменить(НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), "%1", КомандаОписание.Представление) - ); + СтрЗаменить(НСтр("ru = 'Для команды ""%1"" не определен способ запуска.'"), "%1", КомандаОписание.Представление)); КонецЕсли; Команда = Объект.Команды.Добавить(); @@ -2131,8 +2150,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриПолученииРегистрационныхДанных(Объект, Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриПолученииРегистрационныхДанных(Объект, Результат, СтандартнаяОбработка); КонецЕсли; Если Не СтандартнаяОбработка Тогда @@ -2183,8 +2202,8 @@ Процедура ПроверитьВозможностьВыполнения(Ссылка) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПроверитьВозможностьВыполнения(Ссылка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПроверитьВозможностьВыполнения(Ссылка); КонецЕсли; КонецПроцедуры @@ -2208,8 +2227,8 @@ Результат = Новый Структура(Свойства); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ОпределениеПараметровЗапуска(Ссылка, Результат, СтандартнаяОбработка); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ОпределениеПараметровЗапуска(Ссылка, Результат, СтандартнаяОбработка); КонецЕсли; Если СтандартнаяОбработка Тогда diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl index 089cf55b6..aa6bcc431 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl @@ -46,15 +46,13 @@ ПроверитьКорректностьВызоваПоОкружению(); - ЗаписьXML.УстановитьСтроку(); Строка = ЗаписьXML.Закрыть(); - Адрес = ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера.СтрокаВДвоичныеДанные( + Возврат ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера.СтрокаВДвоичныеДанные( Строка, , , , - Адрес - ); + Адрес); КонецФункции @@ -99,15 +97,13 @@ ПроверитьКорректностьВызоваПоОкружению(); - ЗаписьHTML.УстановитьСтроку(); Строка = ЗаписьHTML.Закрыть(); - Адрес = ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера.СтрокаВДвоичныеДанные( + Возврат ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера.СтрокаВДвоичныеДанные( Строка, , , , - Адрес - ); + Адрес); КонецФункции @@ -148,7 +144,6 @@ ПроверитьКорректностьВызоваПоОкружению(); - ЗаписьFastInfoset.УстановитьДвоичныеДанные(); Данные = ЗаписьFastInfoset.Закрыть(); Адрес = ПоместитьВоВременноеХранилище(Данные, Адрес); @@ -176,9 +171,7 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеСозданиеCOMОбъекта( - ProgId - ) - ); + ProgId)); Возврат Новый COMОбъект(ProgId); @@ -207,15 +200,12 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПодключениеВнешнейКомпонентыИзОбщегоМакетаКонфигурации( - ИмяОбщегоМакета - ) - ); + ИмяОбщегоМакета)); Возврат ПодключитьВнешнююКомпоненту( "ОбщийМакет." + ИмяОбщегоМакета, СимволическоеИмя, - ТипКомпоненты - ); + ТипКомпоненты); КонецФункции @@ -243,15 +233,12 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПодключениеВнешнейКомпонентыИзМакетаКонфигурации( - ОбъектМетаданных, ИмяМакета - ) - ); + ОбъектМетаданных, ИмяМакета)); Возврат ПодключитьВнешнююКомпоненту( ОбъектМетаданных.ПолноеИмя() + ".Макет." + ИмяМакета, СимволическоеИмя, - ТипКомпоненты - ); + ТипКомпоненты); КонецФункции @@ -403,9 +390,7 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПолучениеДанныхИзИнтернет( - Протокол, ИмяСервера, Порт - ) - ); + ВРег(Протокол), ИмяСервера, Порт)); Результат = ОбработчикПолученияФайлов.ПодготовитьПолучениеФайла( URL, @@ -418,9 +403,7 @@ Новый Структура( "МестоХранения, Путь", "ВременноеХранилище", - Неопределено - ) - ); + Неопределено)); Если Результат.Статус Тогда Возврат Результат.Путь; @@ -482,13 +465,11 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПередачаДанныхВИнтернет( - Протокол, ИмяСервера, Порт - ) - ); + ВРег(Протокол), ИмяСервера, Порт)); ВременныйФайл = ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПолучитьФайлИзВременногоХранилища(АдресДвоичныхДанных); - Если Протокол = "HTTPS" Тогда + Если ВРег(Протокол) = "HTTPS" Тогда ЗащищенноеСоединение = Истина; КонецЕсли; @@ -501,7 +482,7 @@ ПараметрыСоединения.Добавить(Пароль); ПараметрыСоединения.Добавить(Прокси); - Если Протокол = "FTP" Тогда + Если ВРег(Протокол) = "FTP" Тогда ПараметрыСоединения.Добавить(ПассивноеСоединение); @@ -585,9 +566,7 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеWSСоединение( - АдресWSDL - ) - ); + АдресWSDL)); Возврат ОбщегоНазначения.WSПрокси( АдресWSDL, @@ -596,8 +575,7 @@ ИмяТочкиПодключения, ИмяПользователя, Пароль, - Таймаут - ); + Таймаут); КонецФункции @@ -646,9 +624,7 @@ ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ПроверитьЛегитимностьВыполненияОперации(КлючСессии, ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.РазрешениеПроведениеДокументов( - Документ.Метаданные().ПолноеИмя, ПроверяемыйРежимЗаписи - ) - ); + Документ.Метаданные().ПолноеИмя, ПроверяемыйРежимЗаписи)); Документ.Записать(РежимЗаписи, РежимПроведения); @@ -683,8 +659,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 не является корректным именем метода для COM-объекта или объекта внешней компоненты!'"), - ИмяМетода - ); + ИмяМетода); КонецЕсли; @@ -733,4 +708,4 @@ КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl index f8ccd8f98..9fdac5b7f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера/Module.bsl @@ -290,6 +290,18 @@ ПроверитьКорректностьВызоваПоОкружению(); + Если МетодСжатия = Неопределено Тогда + МетодСжатия = МетодСжатияZIP.Сжатие; + КонецЕсли; + + Если УровеньСжатия = Неопределено Тогда + УровеньСжатия = УровеньСжатияZIP.Оптимальный; + КонецЕсли; + + Если МетодШифрования = Неопределено Тогда + МетодШифрования = МетодШифрованияZIP.Zip20; + КонецЕсли; + ВременныйФайл = ПолучитьИмяВременногоФайла(); КаталогУпаковки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогУпаковки); @@ -322,18 +334,16 @@ // // Возвращаемое значение: Произвольный. // -Функция ВыполнитьСценарийВБезопасномРежиме(Знач КлючСессии, Знач АдресСценария, ПараметрыВыполнения = Неопределено, Знач СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт +Функция ВыполнитьСценарийВБезопасномРежиме(Знач КлючСессии, Знач АдресСценария, ПараметрыВыполнения = Неопределено, СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт ПроверитьКорректностьВызоваПоОкружению(); Сценарий = ПолучитьИзВременногоХранилища(АдресСценария); ИсполняемыйОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки( - Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(КлючСессии) - ); + Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(КлючСессии)); ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный.ВыполнитьСценарийБезопасногоРежима( - КлючСессии, Сценарий, ИсполняемыйОбъект, ПараметрыВыполнения, СохраняемыеПараметры, ОбъектыНазначения - ); + КлючСессии, Сценарий, ИсполняемыйОбъект, ПараметрыВыполнения, СохраняемыеПараметры, ОбъектыНазначения); КонецФункции @@ -349,17 +359,13 @@ ОписаниеАрхива.Вставить(ЭлементСодержимого.Имя, ИтерацияРаспаковкиАрхива( - ЭлементСодержимого.Путь + "\", Новый Соответствие(), ИдентификаторФормы - ) - ); + ЭлементСодержимого.Путь + "\", Новый Соответствие(), ИдентификаторФормы)); Иначе ОписаниеАрхива.Вставить(ЭлементСодержимого.Имя, ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ЭлементСодержимого.ПолноеИмя), - ИдентификаторФормы - ) - ); + ИдентификаторФормы)); КонецЕсли; КонецЦикла; @@ -373,14 +379,14 @@ Если ТипЗнч(ЭлементАрхива.Значение) = Тип("Соответствие") Тогда - ИмяПодкаталога = КаталогУпаковки + ЭлементАрхива.Имя; + ИмяПодкаталога = КаталогУпаковки + ЭлементАрхива.Ключ; СоздатьКаталог(ИмяПодкаталога); ИтерацияУпаковкиАрхива(ЭлементАрхива.Значение, ИмяПодкаталога + "\"); Иначе ПолучитьИзВременногоХранилища(ЭлементАрхива.Значение).Записать( - КаталогУпаковки + ЭлементАрхива.Имя); + КаталогУпаковки + ЭлементАрхива.Ключ); КонецЕсли; @@ -398,4 +404,4 @@ КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index ab1ea9132..b60b2d2cb 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -587,7 +587,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl index 42b50aad8..759e72f59 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки", расщирение безопасного режима. +// Подсистема "Дополнительные отчеты и обработки", расширение безопасного режима. // Процедуры и функции с повторным использованием возвращаемых значений. // //////////////////////////////////////////////////////////////////////////////// @@ -62,7 +62,7 @@ // Описание - строка, подробное описание вида разрешения, // Параметры - ТаблицаЗначений, колонки: // Имя - строка, имя свойства, определенного для ТипаXDTO, -// Описание - строка, описание последсвтий параметра разрешения для +// Описание - строка, описание последствий параметра разрешения для // указанного значения параметра, // ОписаниеЛюбогоЗначения - строка, описание последствий параметра // разрешения для неуказанного значения параметра. @@ -87,9 +87,7 @@ "Представление,Описание,Параметры", Представление, Описание, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}GetFileFromInternet @@ -117,16 +115,14 @@ Представление, Описание, Последствия, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SendFileToInternet // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SoapConnect Представление = НСтр("ru = 'Обращение к веб-сервисам в сети Интернет'"); - Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено обращаться к веб-сервисам, расположенным в сети Интернент (при этом возможно как получение дополнительным отчетом или обработкой информации из сети Интернет, так и передача.'"); + Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено обращаться к веб-сервисам, расположенным в сети Интернет (при этом возможно как получение дополнительным отчетом или обработкой информации из сети Интернет, так и передача.'"); Последствия = НСтр("ru = 'Внимание! Обращение к веб-сервисам потенциально может использоваться дополнительным |отчетом или обработкой для совершения действий, не предполагаемых администратором |информационной базы. @@ -145,16 +141,14 @@ Представление, Описание, Последствия, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SoapConnect // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}CreateComObject Представление = НСтр("ru = 'Создание COM-объекта'"); - Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено использовать механизмы внешнего программного обеспечения с попощью COM-соединения'"); + Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено использовать механизмы внешнего программного обеспечения с помощью COM-соединения'"); Последствия = НСтр("ru = 'Внимание! Использование средств стороннего программного обеспечения может использоваться |дополнительным отчетом или обработкой для совершения действий, не предполагаемых администратором |информационной базы, а также для несанкционированного обхода ограничений, накладываемых на дополнительную обработку @@ -174,16 +168,14 @@ Представление, Описание, Последствия, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}CreateComObject // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}AttachAddin Представление = НСтр("ru = 'Создание объекта внешней компоненту'"); - Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено использовать механизмы внешнего программного обеспечения с попощью создания объекта внешней компоненты, поставляемой в макете конфигурации'"); + Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено использовать механизмы внешнего программного обеспечения с помощью создания объекта внешней компоненты, поставляемой в макете конфигурации'"); Последствия = НСтр("ru = 'Внимание! Использование средств стороннего программного обеспечения может использоваться |дополнительным отчетом или обработкой для совершения действий, не предполагаемых администратором |информационной базы, а также для несанкционированного обхода ограничений, накладываемых на дополнительную обработку @@ -203,41 +195,35 @@ Представление, Описание, Последствия, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}AttachAddin // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}GetFileFromExternalSoftware Представление = НСтр("ru = 'Получение файлов из внешнего объекта'"); - Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено получать файлы из внешнего программного обеспечения (например, с помощью COM-соединения или внешней коспоненты)'"); + Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено получать файлы из внешнего программного обеспечения (например, с помощью COM-соединения или внешней компоненты)'"); Результат.Вставить( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.ТипПолучениеФайлаИзВнешнегоОбъекта(), Новый Структура( "Представление,Описание", Представление, - Описание - ) - ); + Описание)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}GetFileFromExternalSoftware // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SendFileToExternalSoftware Представление = НСтр("ru = 'Передача файлов во внешний объект'"); - Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено передавать файлы во внешнее программное обеспечение (например, с помощью COM-соединения или внешней коспоненты)'"); + Описание = НСтр("ru = 'Дополнительному отчету или обработке будет разрешено передавать файлы во внешнее программное обеспечение (например, с помощью COM-соединения или внешней компоненты)'"); Результат.Вставить( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.ТипПередачаФайлаВоВнешнийОбъект(), Новый Структура( "Представление,Описание", Представление, - Описание - ) - ); + Описание)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SendFileToExternalSoftware @@ -256,9 +242,7 @@ "Представление,Описание,Параметры,ОтображатьПользователю", Представление, Описание, - Параметры - ) - ); + Параметры)); // Конец {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}SendFileToInternet @@ -287,4 +271,4 @@ Возврат Результат; -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index 18783ea00..50ecc9ff1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -23,12 +23,11 @@ ОписанияРазрешений = Неопределено; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса"); - Модуль.ПолучитьРазрешенияСессииРасширенияБезопасногоРежима( + МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса.ПолучитьРазрешенияСессииРасширенияБезопасногоРежима( КлючСессии, ОписанияРазрешений, - СтандартнаяОбработка - ); + СтандартнаяОбработка); КонецЕсли; @@ -55,8 +54,7 @@ ТипРазрешения = ФабрикаXDTO.Тип( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.Пакет(), - ОписаниеРазрешения.ВидРазрешения - ); + ОписаниеРазрешения.ВидРазрешения); Результат.Вставить(ТипРазрешения, ОписаниеРазрешения.Параметры.Получить()); @@ -67,7 +65,7 @@ КонецФункции // Только для внутреннего использования. -Функция ВыполнитьСценарийБезопасногоРежима(Знач КлючСессии, Знач Сценарий, Знач ИсполняемыйОбъект, ПараметрыВыполнения, Знач СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт +Функция ВыполнитьСценарийБезопасногоРежима(Знач КлючСессии, Знач Сценарий, Знач ИсполняемыйОбъект, ПараметрыВыполнения, СохраняемыеПараметры = Неопределено, ОбъектыНазначения = Неопределено) Экспорт Исключения = ДополнительныеОтчетыИОбработкиВБезопасномРежимеПовтИсп.ПолучитьРазрешенныеМетоды(); @@ -96,8 +94,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестный вид действия для этапа сценария: %1'"), - ШагСценария.ВидДействия - ); + ШагСценария.ВидДействия); КонецЕсли; @@ -142,8 +139,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестный параметр для этапа сценария: %1'"), - ПараметрМетода.Вид - ); + ПараметрМетода.Вид); КонецЕсли; @@ -248,9 +244,7 @@ ОписаниеРазрешения = ОписанияРазрешений.Получить( ФабрикаXDTO.Тип( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.Пакет(), - ВидРазрешения - ) - ); + ВидРазрешения)); ПредставлениеРазрешения = ОписаниеРазрешения.Представление; @@ -299,9 +293,7 @@ ОписаниеРазрешения = ОписанияРазрешений.Получить( ФабрикаXDTO.Тип( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.Пакет(), - ВидРазрешения - ) - ); + ВидРазрешения)); ПредставлениеРазрешения = ОписаниеРазрешения.Представление; РасшифровкаРазрешения = ОписаниеРазрешения.Описание; @@ -313,16 +305,13 @@ Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "<P><STRONG><FONT size=4>%1</FONT></STRONG></P>", - ПредставлениеРазрешения - ); + ПредставлениеРазрешения); Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "<P><FONT size=2>%1%2</FONT></P>", РасшифровкаРазрешения, ?( ЕстьПараметры, НСтр("ru = ' со следующими ограничениями:'"), - "." - ) - ); + ".")); Если ЕстьПараметры Тогда @@ -336,14 +325,12 @@ Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Параметр.Описание, ЗначениеПараметра - ); + Параметр.Описание, ЗначениеПараметра); Иначе ОписаниеПараметра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "<B>%1</B>", Параметр.ОписаниеЛюбогоЗначения - ); + "<B>%1</B>", Параметр.ОписаниеЛюбогоЗначения); КонецЕсли; @@ -362,8 +349,7 @@ Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "<P><FONT size=2><EM>%1</EM></FONT></P>", - ОписаниеПоследствий - ); + ОписаниеПоследствий); КонецЕсли; @@ -383,8 +369,7 @@ Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дополнительному отчету или обработке %1 не предоставлено разрешение {%2}%3!'"), - Строка(КлючСессии), ТипТребуемогоРазрешения.URIПространстваИмен, ТипТребуемогоРазрешения.Имя - ); + Строка(КлючСессии), ТипТребуемогоРазрешения.URIПространстваИмен, ТипТребуемогоРазрешения.Имя); КонецФункции @@ -396,8 +381,7 @@ |не предоставлено разрешение {%2}%3 при значении |ограничителя %4 равном %5!'"), Строка(КлючСессии), ТипТребуемогоРазрешения.URIПространстваИмен, ТипТребуемогоРазрешения.Имя, - ПроверяемоеОграничение.ЛокальноеИмя, Ограничитель - ); + ПроверяемоеОграничение.ЛокальноеИмя, Ограничитель); КонецФункции @@ -408,8 +392,7 @@ НСтр("ru = 'Для дополнительного отчета или обработки %1 |при предоставлении разрешения {%2}%3 не был указан обязательный ограничитель %4!'"), Строка(КлючСессии), ТипТребуемогоРазрешения.URIПространстваИмен, ТипТребуемогоРазрешения.Имя, - ПроверяемоеОграничение.ЛокальноеИмя - ); + ПроверяемоеОграничение.ЛокальноеИмя); КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl index 5108f4405..4adb9a8c5 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса/Module.bsl @@ -36,8 +36,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не обнаружена поставляемая обработка для ключа запуска %1!'"), - Строка(КлючСессии) - ); + Строка(КлючСессии)); КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl index ee4751ca5..bac347ed5 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl @@ -221,12 +221,13 @@ НачатьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Инициирована установка поставляемой обработки в область данных'"), + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Инициирована установка поставляемой обработки в область данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , Строка(ОписаниеИнсталляции.Идентификатор), - Строка(ОписаниеИнсталляции.Инсталляция) - ); + Строка(ОписаниеИнсталляции.Инсталляция)); Попытка @@ -286,9 +287,7 @@ Если ИспользуемаяОбработка.ЭтоНовый() Тогда ИспользуемаяОбработка.УстановитьСсылкуНового( Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ОписаниеИнсталляции.Инсталляция - ) - ); + ОписаниеИнсталляции.Инсталляция)); КонецЕсли; // Устанавливается связь между поставляемой и используемой обработкой @@ -336,8 +335,7 @@ // Отправляется сообщение в МС об успешной установке обработки в области данных Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУстановлена() - ); + СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУстановлена()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); @@ -346,31 +344,29 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина - ); + Истина); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка, - Строка(ОписаниеИнсталляции.Инсталляция) - ); + Строка(ОписаниеИнсталляции.Инсталляция)); Исключение ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка установки в область данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка установки в область данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ПоставляемаяОбработка, - Строка(ОписаниеИнсталляции.Инсталляция) + Символы.ПС + Символы.ВК + ТекстИсключения - ); + Строка(ОписаниеИнсталляции.Инсталляция) + Символы.ПС + Символы.ВК + ТекстИсключения); // Отправляется сообщение в МС об ошибке установки обработки в области данных Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки() - ); + СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); @@ -380,8 +376,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина - ); + Истина); КонецПопытки; @@ -401,20 +396,19 @@ ВариантыДополнительногоОтчета, Ответственный, ОписаниеИнсталляции.Представление, - ОписаниеИнсталляции.Инсталляция - ); + ОписаниеИнсталляции.Инсталляция); Менеджер = РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.СоздатьМенеджерЗаписи(); Менеджер.ПоставляемаяОбработка = ПоставляемаяОбработка; Менеджер.ПараметрыИнсталляции = Новый ХранилищеЗначения(Контекст); Менеджер.Записать(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных отложена'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных отложена'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , Строка(ОписаниеИнсталляции.Идентификатор), - Строка(ОписаниеИнсталляции.Инсталляция) - ); + Строка(ОписаниеИнсталляции.Инсталляция)); КонецЕсли; @@ -464,28 +458,27 @@ НаборЗаписей.Записать(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Удаление из области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Удаление из области данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки) - ); + Строка(ИдентификаторИспользуемойОбработки)); Исключение ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка удаления из область данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Ошибка удаления из область данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ПоставляемаяОбработка, - Строка(ИдентификаторИспользуемойОбработки) + Символы.ПС + Символы.ВК + ТекстИсключения - ); + Строка(ИдентификаторИспользуемойОбработки) + Символы.ПС + Символы.ВК + ТекстИсключения); // Отправляется сообщение в МС об ошибке установки обработки в области данных Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки() - ); + СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); @@ -494,8 +487,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); КонецПопытки; @@ -510,6 +502,12 @@ КонецПроцедуры +// Выполняет удаление поставляемой дополнительной обработки из всех областей данных +// текущей информационной базы. +// +// Параметры: +// ПоставляемаяОбработка - СправочникСсылка.ПоставляемыеДополнительныеОтчетыИОбработки. +// Процедура ОтозватьПоставляемуюДополнительнуюОбработку(Знач ПоставляемаяОбработка) Экспорт НачатьТранзакцию(); @@ -561,7 +559,7 @@ // СтандартнаяОбработка - Булево, в этот параметр в данной процедуре устанавливается флаг выполнения // стандартной обработки проверки права. // -Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка = Неопределено, Результат, СтандартнаяОбработка) Экспорт +Процедура ПриПроверкеПраваДобавления(Знач ДополнительнаяОбработка, Результат, СтандартнаяОбработка) Экспорт Если ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда Результат = Ложь; @@ -842,11 +840,11 @@ Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса"); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса"); КонецЕсли; КонецПроцедуры @@ -1003,8 +1001,7 @@ // Отправим в МС сообщение об удалении обработки из области данных Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУдалена() - ); + СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.СообщениеДополнительныйОтчетИлиОбработкаУдалена()); Сообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Сообщение.Body.Extension = ПоставляемаяОбработка.УникальныйИдентификатор(); @@ -1012,8 +1009,7 @@ СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); КонецЕсли; @@ -1272,12 +1268,13 @@ Загружать = Ложь; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки отменена'"), + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки отменена'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Поставляемая обработка несовместима с данной конфигурацией'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Совместимость - ); + НСтр("ru = 'Поставляемая обработка несовместима с данной конфигурацией'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Совместимость); КонецЕсли; @@ -1371,12 +1368,12 @@ ТаблицаСовместимости = ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимость.ПрочитатьТаблицуСовместимости( ТаблицаСовместимостиXDTO); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Инициирована загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест - ); + НСтр("ru = 'Инициирована загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); // Получим СправочникОбъект.ПоставляемыеДополнительныеОтчетыИОбработки СсылкаПоставляемойОбработки = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( @@ -1437,12 +1434,12 @@ ПоставляемаяОбработка.ВерсияGUID = ОписаниеПоставляемойОбработки.Версия; ПоставляемаяОбработка.Записать(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки завершена'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Загрузка поставляемой обработки завершена'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Завершена загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест - ); + НСтр("ru = 'Завершена загрузка поставляемой обработки'") + Символы.ПС + Символы.ВК + ОписаниеПоставляемойОбработки.Манифест); // Планирование актуализации настроек используемых обработок ИспользуемыеОбработки = ПереченьИнсталляций(ПоставляемаяОбработка.Ссылка); @@ -1459,12 +1456,12 @@ ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована актуализация настроек поставляемой обработки'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована актуализация настроек поставляемой обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ИнсталляцияОбработки.ОбластьДанных - ); + НСтр("ru = 'Область данных:'") + ИнсталляцияОбработки.ОбластьДанных); КонецЦикла; @@ -1478,8 +1475,7 @@ "Идентификатор,Представление,Инсталляция", ПоставляемаяОбработка.Ссылка.УникальныйИдентификатор(), Контекст.Представление, - Контекст.Инсталляция - ); + Контекст.Инсталляция); ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(ОписаниеИнсталляции); @@ -1499,12 +1495,13 @@ ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована отложенная установка поставляемой обработки в область данных'"), + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Запланирована отложенная установка поставляемой обработки в область данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ПоставляемаяОбработка.Ссылка, - НСтр("ru = 'Область данных:'") + ЭлементОчереди.ОбластьДанных - ); + НСтр("ru = 'Область данных:'") + ЭлементОчереди.ОбластьДанных); КонецЦикла; @@ -1520,4 +1517,4 @@ Возврат "ДОиО"; // Не локализуется -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl index 88ee525fc..493ec00bd 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl @@ -33,7 +33,7 @@ // Примечание: // Помимо кода БСП, данная функция может вызываться из внешней обработки // ПодготовкаДополнительныхОтчетовИОбработокКПубликацииВМоделиСервиса.epf, входящей -// в комлект поставки менеджера сервиса. При изменении структуры параметров данной +// в комплект поставки менеджера сервиса. При изменении структуры параметров данной // функции необходимо актуализировать их и в данной внешней обработке. // Функция СформироватьМанифест(Знач ОбъектОбработки, Знач ОбъектВерсии, Знач ВариантыОтчета = Неопределено, Знач РасписанияКоманд = Неопределено, Знач РазрешенияОбработки = Неопределено) Экспорт @@ -105,8 +105,7 @@ ОбъектНазначенияXDTO.Enabled = ( ВыбранныеРазделы.Найти( ИдентификаторОбъектаМетаданных, "Раздел" - ) <> Неопределено - ); + ) <> Неопределено); НазначениеXDTO.Objects.Добавить(ОбъектНазначенияXDTO); @@ -155,8 +154,7 @@ ОбъектНазначенияXDTO.Enabled = ( ВыбранныеОбъектыНазначения.Найти( ИдентификаторОбъектаМетаданных, "ОбъектНазначения" - ) <> Неопределено - ); + ) <> Неопределено); НазначениеXDTO.Objects.Добавить(ОбъектНазначенияXDTO); @@ -201,8 +199,7 @@ Если РасписанияКоманд.Свойство(ОписаниеКоманды.Идентификатор, РасписаниеКоманды) Тогда КомандаXDTO.DefaultSettings = ФабрикаXDTO.Создать( - ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНастройкиКоманды() - ); + ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНастройкиКоманды()); КомандаXDTO.DefaultSettings.Schedule = СериализаторXDTO.ЗаписатьXDTO(РасписаниеКоманды); @@ -274,9 +271,7 @@ РазрешениеXDTO = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип( ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.Пакет(), - Разрешение.ВидРазрешения - ) - ); + Разрешение.ВидРазрешения)); Параметры = Разрешение.Параметры.Получить(); Если Параметры <> Неопределено Тогда @@ -376,4 +371,4 @@ КонецЦикла; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl index 484832461..9a41d1183 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl @@ -227,7 +227,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl index a2d5aa859..b534c21dc 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаСовместимостьИнтерфейс/Module.bsl @@ -115,7 +115,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 8cbc578c3..6b8bbc41b 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -35,8 +35,7 @@ ОткрытьФорму( "ОбщаяФорма.ДополнительныеОтчетыИОбработки", Параметры, - ПараметрыВыполненияКоманды.Источник - ); + ПараметрыВыполненияКоманды.Источник); КонецПроцедуры @@ -136,8 +135,7 @@ ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Передан тип ""%1"", ожидался ""%2"".'"), Строка(ТипЗнч(ДополнительнаяОбработкаСсылка)), - Строка(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")) - ); + Строка(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки"))); Иначе ТекстОшибки = ТекстОшибки + НСтр("ru = 'Передана пустая ссылка. Вероятно, обработка была открыта напрямую.'"); КонецЕсли; @@ -195,8 +193,7 @@ ТекстВопроса = СтрЗаменить( НСтр("ru = 'Для выполнения команды ""%1"" необходимо записать данные.'"), "%1", - ВыполняемаяКоманда.Представление - ); + ВыполняемаяКоманда.Представление); Кнопки = Новый СписокЗначений; Кнопки.Добавить(1, НСтр("ru = 'Записать и продолжить'")); @@ -296,6 +293,31 @@ КонецПроцедуры +// Обработчик внешней команды печати. +// +// Параметры: +// ПараметрыКоманды - Структура - структура из строки таблицы команд, см. ДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати +// Форма - УправляемаяФорма - форма, в которой выполняется команда печати. +Функция ВыполнитьНазначаемуюКомандуПечати(ВыполняемаяКоманда, Форма) Экспорт + + ВыполняемаяКоманда.Вставить("ЭтоОтчет", Ложь); + ВыполняемаяКоманда.Вставить("Вид", ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма")); + Для Каждого КлючИЗначение Из ВыполняемаяКоманда.ДополнительныеПараметры Цикл + Если НЕ ВыполняемаяКоманда.Свойство(КлючИЗначение.Ключ) Тогда + ВыполняемаяКоманда.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЕсли; + КонецЦикла; + + Если ВыполняемаяКоманда.ДополнительныеПараметры.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") Тогда + ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати); + ИначеЕсли ВыполняемаяКоманда.ДополнительныеПараметры.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") Тогда + ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати); + Иначе + ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати); + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -353,19 +375,150 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Условные вызовы в друге подсистемы - -// Открывает форму размещения нескольких вариантов отчетов по разделам КИ. -// -// Параметры -// МассивВариантов (Массив) См. описание вызываемых процедур и функций. -// -Процедура ПриОткрытииДиалогаРазмещенияВариантовДополнительныхОтчетовВРазделах(МассивВариантов, Модально = Ложь) Экспорт +// Открывает форму обработки. +// +Процедура ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения) Экспорт + ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка, ИмяФормы, КлючСессии"); + ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; + ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка; + ПараметрыОбработки.ИмяФормы = ЭтаФорма.ИмяФормы; + ПараметрыОбработки.КлючСессии = ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка.УникальныйИдентификатор(); - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетовКлиент"); - Модуль.ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов, , Модально); + Если ТипЗнч(ОбъектыНазначения) = Тип("Массив") Тогда + ПараметрыОбработки.Вставить("ОбъектыНазначения", ОбъектыНазначения); КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Тогда + ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка); + ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, ЭтаФорма); + Если ФормаОбработки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, + |или основная форма не предназначена для запуска в обычном приложении. + |Команда ""%2"" не может быть выполнена.'"), + Строка(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка), + ВыполняемаяКоманда.Представление); + КонецЕсли; + ФормаОбработки.Открыть(); + ФормаОбработки = Неопределено; + #Иначе + ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка); + Если ВыполняемаяКоманда.ЭтоОтчет Тогда + ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки, ЭтаФорма); + Иначе + ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки, ЭтаФорма); + КонецЕсли; + #КонецЕсли +КонецПроцедуры + +// Выполняет клиентский метод обработки. +// +Процедура ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения) Экспорт + + ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда); + + ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка, ИмяФормы"); + ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; + ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка; + ПараметрыОбработки.ИмяФормы = ЭтаФорма.ИмяФормы; + + Если ТипЗнч(ОбъектыНазначения) = Тип("Массив") Тогда + ПараметрыОбработки.Вставить("ОбъектыНазначения", ОбъектыНазначения); + КонецЕсли; + + #Если ТолстыйКлиентОбычноеПриложение Тогда + ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка); + ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, ЭтаФорма); + Если ФормаОбработки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, + |или основная форма не предназначена для запуска в обычном приложении. + |Команда ""%2"" не может быть выполнена.'"), + Строка(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка), + ВыполняемаяКоманда.Представление); + КонецЕсли; + #Иначе + ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка); + Если ВыполняемаяКоманда.ЭтоОтчет Тогда + ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки, ЭтаФорма); + Иначе + ФормаОбработки = ПолучитьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки, ЭтаФорма); + КонецЕсли; + #КонецЕсли + + Если ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка") + Или ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет") Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор); + + ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов") Тогда + + СозданныеОбъекты = Новый Массив; + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения, СозданныеОбъекты); + + ТипыСозданныхОбъектов = Новый Массив; + + Для Каждого СозданныйОбъект Из СозданныеОбъекты Цикл + Тип = ТипЗнч(СозданныйОбъект); + Если ТипыСозданныхОбъектов.Найти(Тип) = Неопределено Тогда + ТипыСозданныхОбъектов.Добавить(Тип); + КонецЕсли; + КонецЦикла; + + Для Каждого Тип Из ТипыСозданныхОбъектов Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + + ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма") Тогда + + ФормаОбработки.Печать(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения); + + ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта") Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения); + + ТипыИзмененныхОбъектов = Новый Массив; + + Для Каждого ИзмененныйОбъект Из ОбъектыНазначения Цикл + Тип = ТипЗнч(ИзмененныйОбъект); + Если ТипыИзмененныхОбъектов.Найти(Тип) = Неопределено Тогда + ТипыИзмененныхОбъектов.Добавить(Тип); + КонецЕсли; + КонецЦикла; + + Для Каждого Тип Из ТипыИзмененныхОбъектов Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + + ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.Отчет") Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения); + + КонецЕсли; + + ФормаОбработки = Неопределено; + +КонецПроцедуры + +// Формирует табличный документ в форме подсистемы "Печать". +// +Процедура ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения) Экспорт + + СтандартнаяОбработка = Истина; + ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ОбъектыНазначения, СтандартнаяОбработка); + Если СтандартнаяОбработка И Не УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ОбъектыНазначения) Тогда + Возврат; + КонецЕсли; + + ПараметрыИсточника = Новый Структура; + ПараметрыИсточника.Вставить("ИдентификаторКоманды", ВыполняемаяКоманда.Идентификатор); + ПараметрыИсточника.Вставить("ОбъектыНазначения", ОбъектыНазначения); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИсточникДанных", ВыполняемаяКоманда.ДополнительныеПараметры.Ссылка); + ПараметрыОткрытия.Вставить("ПараметрыИсточника", ПараметрыИсточника); + + ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ЭтаФорма); + КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 5cf0f6e1c..dddd0a00d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -74,9 +74,9 @@ // Наименование подсистемы. // -Функция НаименованиеПодсистемы() Экспорт +Функция НаименованиеПодсистемы(КодЯзыка) Экспорт - Возврат НСтр("ru = 'Дополнительные отчеты и обработки'"); + Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", ?(КодЯзыка = Неопределено, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), КодЯзыка)); КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl index 2723248bc..3b2cd129c 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗадания/Module.bsl @@ -16,9 +16,10 @@ // Функция СоздатьНовоеЗадание(Знач Наименование) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Возврат Модуль.СоздатьНовоеЗадание(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И + ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.СоздатьНовоеЗадание(); КонецЕсли; Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок"); @@ -38,9 +39,10 @@ // Функция ПолучитьИдентификаторЗадания(Знач Задание) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Возврат Модуль.ПолучитьИдентификаторЗадания(Задание); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И + ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьИдентификаторЗадания(Задание); КонецЕсли; Возврат Задание.УникальныйИдентификатор; @@ -58,9 +60,10 @@ // Процедура УстановитьПараметрыЗадания(Задание, Использование, Наименование, Параметры, Расписание) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Модуль.УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И + ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УстановитьПараметрыЗадания(Задание, Использование, Параметры, Расписание); Возврат; КонецЕсли; @@ -86,9 +89,10 @@ // Функция ПолучитьПараметрыЗадания(Знач Задание) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Возврат Модуль.ПолучитьПараметрыЗадания(Задание); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И + ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.ПолучитьПараметрыЗадания(Задание); КонецЕсли; Результат = Новый Структура(); @@ -110,9 +114,10 @@ // Функция НайтиЗадание(Знач Идентификатор) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Возврат Модуль.НайтиЗадание(Идентификатор); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + Возврат МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.НайтиЗадание(Идентификатор); КонецЕсли; Если НЕ ЗначениеЗаполнено(Идентификатор) Тогда @@ -134,9 +139,10 @@ // Процедура УдалитьЗадание(Знач Задание) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); - Модуль.УдалитьЗадание(Задание); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И + ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса.УдалитьЗадание(Задание); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl index 04db77d00..e79c7c733 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиРегламентныеЗаданияВМоделиСервиса/Module.bsl @@ -56,8 +56,7 @@ Если Расписание.ТребуетсяВыполнение(ПроверяемаяДата, ИсходнаяДата) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Расписание, задаваемое для выполнения команд дополнительного отчета или обработки в качестве заданий, должно быть не чаще, чем 1 раз в %1 секунд!'"), МинимальныйИнтервал - ); + НСтр("ru = 'Расписание, задаваемое для выполнения команд дополнительного отчета или обработки в качестве заданий, должно быть не чаще, чем 1 раз в %1 секунд!'"), МинимальныйИнтервал); КонецЕсли; @@ -122,4 +121,4 @@ ОчередьЗаданий.УдалитьЗадание(Задание); КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 22aa48c23..2ee8cf99c 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -30,14 +30,6 @@ МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца; ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки; - // Удаление ранее подготовленных временных данных - ОписанияАдресов = Журнал.ВыгрузитьКолонку("АдресДанных"); - Для каждого Адрес Из ОписанияАдресов Цикл - Если ЗначениеЗаполнено(Адрес) Тогда - УдалитьИзВременногоХранилища(Адрес); - КонецЕсли; - КонецЦикла; - // Подготовка Отбора Отбор = Новый Структура; Для Каждого ЭлементОтбора Из ОтборЖурналаНаКлиенте Цикл @@ -94,13 +86,15 @@ // Обработка данных специальных событий Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда - СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); + УстановитьСтрокуАдресаДанных(СобытиеЖурнала); + Если СобытиеЖурнала.Данные <> Неопределено Тогда СобытиеЖурнала.Данные = ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", "..."); КонецЕсли; ИначеЕсли СобытиеЖурнала.Событие = "_$Access$_.AccessDenied" Тогда - СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); + УстановитьСтрокуАдресаДанных(СобытиеЖурнала); + Если СобытиеЖурнала.Данные <> Неопределено Тогда Если СобытиеЖурнала.Данные.Свойство("Право") Тогда СобытиеЖурнала.Данные = НСтр("ru = 'Право:'") + " " + СобытиеЖурнала.Данные.Право; @@ -112,7 +106,8 @@ ИначеЕсли СобытиеЖурнала.Событие = "_$Session$_.Authentication" ИЛИ СобытиеЖурнала.Событие = "_$Session$_.AuthenticationError" Тогда - СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); + УстановитьСтрокуАдресаДанных(СобытиеЖурнала); + СобытиеЖурналаДанные = ""; Если СобытиеЖурнала.Данные <> Неопределено Тогда Для каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл @@ -126,7 +121,8 @@ СобытиеЖурнала.Данные = СобытиеЖурналаДанные; ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.Delete" Тогда - СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); + УстановитьСтрокуАдресаДанных(СобытиеЖурнала); + СобытиеЖурналаДанные = ""; Если СобытиеЖурнала.Данные <> Неопределено Тогда Для каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл @@ -138,7 +134,8 @@ ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.New" ИЛИ СобытиеЖурнала.Событие = "_$User$_.Update" Тогда - СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); + УстановитьСтрокуАдресаДанных(СобытиеЖурнала); + ИмяПользователяИБ = ""; Если СобытиеЖурнала.Данные <> Неопределено Тогда СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ); @@ -347,20 +344,26 @@ КонецЕсли; КонецЕсли; - Если ИмяОграничения = "Событие" - И СписокОграничений.Количество() > 5 Тогда - ПредставлениеОтбора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Если ИмяОграничения = "Событие" И СписокОграничений.Количество() > 5 Тогда + + Ограничение = ПредставлениеОтбора + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); + + ИначеЕсли ИмяОграничения = "Сеанс" И СписокОграничений.Количество() > 3 Тогда + + Ограничение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сеансы (%1)'"), СписокОграничений.Количество()); + Иначе - + Для Каждого ЭлементСписка Из СписокОграничений Цикл Если Не ПустаяСтрока(Ограничение) Тогда Ограничение = Ограничение + ", "; КонецЕсли; - Если ВРег(ИмяОграничения) = ВРег("Сеанс") - ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень") + Если (ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")) И ПустаяСтрока(Ограничение) Тогда Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); @@ -375,15 +378,46 @@ КонецЕсли; КонецЦикла; - - Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда - ПредставлениеОтбора = ПредставлениеОтбора + "; "; - КонецЕсли; - - ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; КонецЕсли; - + + Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда + ПредставлениеОтбора = ПредставлениеОтбора + "; "; + КонецЕсли; + + ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; + КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Только для внутреннего использования. +// +Процедура ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор) Экспорт + + Для Каждого СтрокаСобытие Из СобытияЖурнала Цикл + Если ПустаяСтрока(СтрокаСобытие.АдресДанных) Тогда + АдресДанных = ""; + Иначе + ЧтениеXML = Новый ЧтениеXML(); + ЧтениеXML.УстановитьСтроку(СтрокаСобытие.АдресДанных); + АдресДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + КонецЕсли; + СтрокаСобытие.АдресДанных = ПоместитьВоВременноеХранилище(АдресДанных, УникальныйИдентификатор); + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования +// +Процедура УстановитьСтрокуАдресаДанных(СобытиеЖурнала) + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СобытиеЖурнала.Данные); + СобытиеЖурнала.АдресДанных = ЗаписьXML.Закрыть(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index c272a8c32..6b24bb455 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -53,33 +53,7 @@ Возврат; КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Дата", Данные.Дата); - ПараметрыФормы.Вставить("ИмяПользователя", Данные.ИмяПользователя); - ПараметрыФормы.Вставить("ПредставлениеПриложения", Данные.ПредставлениеПриложения); - ПараметрыФормы.Вставить("Компьютер", Данные.Компьютер); - ПараметрыФормы.Вставить("Событие", Данные.Событие); - ПараметрыФормы.Вставить("ПредставлениеСобытия", Данные.ПредставлениеСобытия); - ПараметрыФормы.Вставить("Комментарий", Данные.Комментарий); - ПараметрыФормы.Вставить("ПредставлениеМетаданных", Данные.ПредставлениеМетаданных); - ПараметрыФормы.Вставить("Данные", Данные.Данные); - ПараметрыФормы.Вставить("ПредставлениеДанных", Данные.ПредставлениеДанных); - ПараметрыФормы.Вставить("Транзакция", Данные.Транзакция); - ПараметрыФормы.Вставить("СтатусТранзакции", Данные.СтатусТранзакции); - ПараметрыФормы.Вставить("Сеанс", Данные.Сеанс); - ПараметрыФормы.Вставить("РабочийСервер", Данные.РабочийСервер); - ПараметрыФормы.Вставить("ОсновнойIPПорт", Данные.ОсновнойIPПорт); - ПараметрыФормы.Вставить("ВспомогательныйIPПорт", Данные.ВспомогательныйIPПорт); - - Если Данные.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда - ПараметрыФормы.Вставить("ПредставлениеРазделенияДанныхСеанса", Данные.ПредставлениеРазделенияДанныхСеанса); - КонецЕсли; - - Если ЗначениеЗаполнено(Данные.АдресДанных) Тогда - ПараметрыФормы.Вставить("АдресДанных", Данные.АдресДанных); - КонецЕсли; - - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ФормаСобытия", ПараметрыФормы); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ФормаСобытия", СобытиеЖурналаРегистрацииВСтруктуру(Данные)); КонецПроцедуры @@ -228,3 +202,43 @@ КонецФункции // УстановитьОтборПоЗначениюВТекущейКолонке +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Только для внутреннего использования. +// +Функция СобытиеЖурналаРегистрацииВСтруктуру(Данные) Экспорт + + Если ТипЗнч(Данные) = Тип("Структура") Тогда + Возврат Данные; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Дата", Данные.Дата); + ПараметрыФормы.Вставить("ИмяПользователя", Данные.ИмяПользователя); + ПараметрыФормы.Вставить("ПредставлениеПриложения", Данные.ПредставлениеПриложения); + ПараметрыФормы.Вставить("Компьютер", Данные.Компьютер); + ПараметрыФормы.Вставить("Событие", Данные.Событие); + ПараметрыФормы.Вставить("ПредставлениеСобытия", Данные.ПредставлениеСобытия); + ПараметрыФормы.Вставить("Комментарий", Данные.Комментарий); + ПараметрыФормы.Вставить("ПредставлениеМетаданных", Данные.ПредставлениеМетаданных); + ПараметрыФормы.Вставить("Данные", Данные.Данные); + ПараметрыФормы.Вставить("ПредставлениеДанных", Данные.ПредставлениеДанных); + ПараметрыФормы.Вставить("Транзакция", Данные.Транзакция); + ПараметрыФормы.Вставить("СтатусТранзакции", Данные.СтатусТранзакции); + ПараметрыФормы.Вставить("Сеанс", Данные.Сеанс); + ПараметрыФормы.Вставить("РабочийСервер", Данные.РабочийСервер); + ПараметрыФормы.Вставить("ОсновнойIPПорт", Данные.ОсновнойIPПорт); + ПараметрыФормы.Вставить("ВспомогательныйIPПорт", Данные.ВспомогательныйIPПорт); + + Если Данные.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда + ПараметрыФормы.Вставить("ПредставлениеРазделенияДанныхСеанса", Данные.ПредставлениеРазделенияДанныхСеанса); + КонецЕсли; + + Если ЗначениеЗаполнено(Данные.АдресДанных) Тогда + ПараметрыФормы.Вставить("АдресДанных", Данные.АдресДанных); + КонецЕсли; + + Возврат ПараметрыФормы; +КонецФункции + diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index c66dcee3d..566f8082b 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -53,12 +53,20 @@ ВерсияКорреспондента = ВыборВерсииКорреспондента(ИнтерфейсТекущейИБ, ВерсииКорреспондента); КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы"); + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы.ПриОпределенииВерсииИнтерфейсаКорреспондента( + ИнтерфейсСообщения, + ПараметрыПодключения, + ПредставлениеПолучателя, + ВерсияКорреспондента); + КонецЕсли; + ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый.ПриОпределенииВерсииИнтерфейсаКорреспондента( ИнтерфейсСообщения, ПараметрыПодключения, ПредставлениеПолучателя, - ВерсияКорреспондента - ); + ВерсияКорреспондента); Возврат ВерсияКорреспондента; @@ -132,13 +140,12 @@ МассивОбработчиков = Новый Массив(); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы"); - Модуль.ЗаполнитьОбработчикиОтправляемыхСообщений(МассивОбработчиков); + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы"); + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы.ЗаполнитьОбработчикиОтправляемыхСообщений(МассивОбработчиков); КонецЕсли; ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый.ЗаполнитьОбработчикиОтправляемыхСообщений( - МассивОбработчиков - ); + МассивОбработчиков); Возврат Новый ФиксированныйМассив(МассивОбработчиков); @@ -155,13 +162,12 @@ МассивОбработчиков = Новый Массив(); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы"); - Модуль.ЗаполнитьОбработчикиПринимаемыхСообщений(МассивОбработчиков); + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы"); + МодульИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы.ЗаполнитьОбработчикиПринимаемыхСообщений(МассивОбработчиков); КонецЕсли; ИнтерфейсыСообщенийВМоделиСервисаПереопределяемый.ЗаполнитьОбработчикиПринимаемыхСообщений( - МассивОбработчиков - ); + МассивОбработчиков); Возврат Новый ФиксированныйМассив(МассивОбработчиков); @@ -255,8 +261,7 @@ СерверныеОбработчики[ "СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов"].Добавить( - "ИнтерфейсыСообщенийВМоделиСервиса" - ); + "ИнтерфейсыСообщенийВМоделиСервиса"); КонецПроцедуры @@ -351,8 +356,7 @@ СтруктураПоддерживаемыхВерсий.Вставить( ОбработчикИнтерфейса.ПрограммныйИнтерфейс(), - ПоддерживаемыеВерсии - ); + ПоддерживаемыеВерсии); КонецЦикла; @@ -387,8 +391,7 @@ СтруктураПоддерживаемыхВерсий.Вставить( ОбработчикИнтерфейса.ПрограммныйИнтерфейс(), - ПоддерживаемыеВерсии - ); + ПоддерживаемыеВерсии); КонецЦикла; diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы/Module.bsl index 315d2a720..f0a47a372 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы/Module.bsl @@ -47,6 +47,22 @@ КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ИнформационныйЦентр") Тогда + + // Сообщения информационного центра + МассивОбработчиков.Добавить(ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияИнформационногоЦентраИнтерфейс")); + // Конец Сообщения информационного центра + + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + // Сообщения управления дополнительными отчетами и обработками + МассивОбработчиков.Добавить(ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс")); + // Конец Сообщения управления дополнительными отчетами и обработками + + КонецЕсли; + КонецПроцедуры // Заполняет переданный массив общими модулями, которые являются обработчиками интерфейсов @@ -93,4 +109,47 @@ КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + // Сообщения контроля дополнительными отчетами и обработками + МассивОбработчиков.Добавить(ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс")); + // Конец Сообщения контроля дополнительными отчетами и обработками + + КонецЕсли; + КонецПроцедуры + +// Процедура вызывается при определении версии интерфейса сообщений, поддерживаемой как ИБ-корреспондентом, +// так и текущей ИБ. В данной процедуре предполагается реализовывать механизмы поддержки обратной совместимости +// со старыми версиями ИБ-корреспондентов +// +// Параметры: +// ИнтерфейсСообщения - строка, название программного интерфейса сообщения, для которого определяется версия +// ПараметрыПодключения - структура, параметры подключения к ИБ-корреспонденту +// ПредставлениеПолучателя - строка, представление ИБ-корреспондента +// Результат - строка, определяемая версия. Значение данного параметра может быть изменено в данной процедуре. +// +Процедура ПриОпределенииВерсииИнтерфейсаКорреспондента(Знач ИнтерфейсСообщения, Знач ПараметрыПодключения, Знач ПредставлениеПолучателя, Результат) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + // Совместимость с версиями МС, в которых интерфейс ApplicationExtensionsControl являлся + // составной частью интерфейса RemoteAdministrationControl + + ОбщийМодульСообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс"); + + Если Результат = Неопределено И ИнтерфейсСообщения = ОбщийМодульСообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.ПрограммныйИнтерфейс() Тогда + + ПроверяемыйИнтерфейс = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.ПрограммныйИнтерфейс(); + ВерсияИнтерфейсаКонтроляУдаленногоАдминистрирования = ИнтерфейсыСообщенийВМоделиСервиса.ВерсияИнтерфейсаКорреспондента( + ПроверяемыйИнтерфейс, ПараметрыПодключения, ПредставлениеПолучателя); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИнтерфейсаКонтроляУдаленногоАдминистрирования, "1.0.2.4") >= 0 Тогда + Результат = "1.0.0.1"; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl index 5d745c82f..a1e84436f 100644 --- a/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl @@ -4,25 +4,19 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Открывает форму отображения отдельной новости. // // Параметры: -// ВнешняяСсылка - Строка - внешняя ссылка. // Идентификатор - УникальныйИдентификатор - идентификатор новости. // -Процедура ПоказатьНовость(ВнешняяСсылка, Идентификатор) Экспорт - - Если Не ПустаяСтрока(ВнешняяСсылка) Тогда - ПерейтиПоНавигационнойСсылке(ВнешняяСсылка); - Возврат; - КонецЕсли; +Процедура ПоказатьНовость(Идентификатор) Экспорт ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОткрытьНовость"); ПараметрыФормы.Вставить("Идентификатор", Идентификатор); - ОткрытьФорму("ОбщаяФорма.ОтображениеНовостей", ПараметрыФормы); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ОтображениеСообщений", ПараметрыФормы); КонецПроцедуры @@ -31,12 +25,12 @@ // Процедура ПоказатьВсеСообщения() Экспорт - ПараметрыФормы = Новый Структура("ОткрытьВсеНовости"); - ОткрытьФорму("ОбщаяФорма.ОтображениеНовостей", ПараметрыФормы); + ПараметрыФормы = Новый Структура("ОткрытьВсеСообщения"); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ОтображениеСообщений", ПараметрыФормы); КонецПроцедуры -// Возвращает размер в мегабайтах, размер вложения не больше 25 Мегабайта. +// Возвращает размер в мегабайтах, размер вложения не больше 20 Мегабайт. // // Возвращаемое значение: // Число - размер вложений в мегабайтах. @@ -49,11 +43,9 @@ // Открывает форму по отправке сообщения получателю. // -Процедура ОткрытьФормуОтправкиСообщенияВТехподдержку(ИспользоватьРазделениеПоОбластямДанных, ПараметрыСообщения = Неопределено) Экспорт +Процедура ОткрытьФормуОтправкиСообщенияВТехподдержку(ПараметрыСообщения = Неопределено) Экспорт - Если ИспользоватьРазделениеПоОбластямДанных Тогда - ОткрытьФорму("ОбщаяФорма.ОтправкаСообщенияВТехподдержку", ПараметрыСообщения); - КонецЕсли; + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ОтправкаСообщенияВПоддержку", ПараметрыСообщения); КонецПроцедуры @@ -85,4 +77,15 @@ ПараметрыФормы = Новый Структура("ПутьКФорме", ПутьКФорме); ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ИнформационныеСсылкиВКонтексте", ПараметрыФормы); +КонецПроцедуры + +// Открывает форму с содержанием пожелания. +// +// ИдентификаторПожелания - Строка - уникальный идентификатор пожелания. +// +Процедура ПоказатьПожелание(ИдентификаторПожелания) Экспорт + + ПараметрыФормы = Новый Структура("ИдентификаторПожелания", ИдентификаторПожелания); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.Пожелание", ПараметрыФормы); + КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнформационныйЦентрСервер/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрСервер/Module.bsl index 1cbcde119..f598c1988 100644 --- a/SSL/src/CommonModules/ИнформационныйЦентрСервер/Module.bsl +++ b/SSL/src/CommonModules/ИнформационныйЦентрСервер/Module.bsl @@ -3,41 +3,94 @@ // //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Информационные ссылки + +// Выводит информационные ссылки на форме +// +// Параметры: +// Форма - УправляемаяФорма - контекст формы. +// ГруппаФормы - ЭлементФормы - группа формы, в которой выводятся информационные ссылки. +// КоличествоГрупп - Число - количество групп информационных ссылок в форме. +// КоличествоСсылокВГруппе - Число - количество информационных ссылок в группе. +// ВыводитьСсылкуВсе - Булево - выводить или нет ссылку "Все". +// +Процедура ВывестиКонтекстныеСсылки(Форма, ГруппаФормы, КоличествоГрупп = 3, КоличествоСсылокВГруппе = 1, ВыводитьСсылкуВсе = Истина, ПутьКФорме = "") Экспорт + + Попытка + Если ПустаяСтрока(ПутьКФорме) Тогда + ПутьКФорме = Форма.ИмяФормы; + КонецЕсли; + + ТаблицаСсылокФормы = ИнформационныйЦентрСерверПовтИсп.ПолучитьТаблицуИнформационныхСсылокДляФормы(ПутьКФорме); + Если ТаблицаСсылокФормы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + // Изменение параметров формы + ГруппаФормы.ОтображатьЗаголовок = Ложь; + ГруппаФормы.Подсказка = ""; + ГруппаФормы.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаФормы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + + // Добавление списка Информационных ссылок + ИмяРеквизита = "ИнформационныеСсылки"; + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("СписокЗначений"))); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + СформироватьГруппыВывода(Форма, ТаблицаСсылокФормы, ГруппаФормы, КоличествоГрупп, КоличествоСсылокВГруппе, ВыводитьСсылкуВсе); + Исключение + ИмяСобытия = ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС //////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы +// Общие процедуры -// Определяет заголовок общей формы "ИнформационныйЦентрРабочийСтол". +// Возвращает имя события журнала регистрации. // -// Параметры: -// ЗаголовокФормы - Строка - заголовок формы. +// Возвращаемое значение: +// Строка - имя события журнала регистрации. // -Процедура ПриОпределенииЗаголовкаОсновнойФормыИнформационныйЦентр(ЗаголовокФормы) Экспорт +Функция ПолучитьИмяСобытияДляЖурналаРегистрации() Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - УстановитьПривилегированныйРежим(Истина); - Модуль.ПриОпределенииЗаголовкаОсновнойФормыИнформационныйЦентр(ЗаголовокФормы); - КонецЕсли; + Возврат НСтр("ru = 'Информационный центр'"); -КонецПроцедуры +КонецФункции -// Отправляет сообщение пользователя в техподдержку. +// Получить прокси управления конференцией. // -// Параметры: -// ПараметрыСообщения - Структура - параметры сообщения. -// Результат - Булево - Истина, если сообщение отправлено, Ложь - Иначе. +// Возвращаемое значение: +// WSПрокси - прокси управления конференцией. // -Процедура ПриОтправкеСообщенияПользователяВТехподдержку(ПараметрыСообщения, Результат) Экспорт +Функция ПолучитьПроксиУправленияКонференцией() Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ПриОтправкеСообщенияПользователяВТехподдержку(ПараметрыСообщения, Результат); - КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Адрес = Константы.АдресУправленияКонференцией.Получить() + "/ForumService?wsdl"; + ИмяПользователя = Константы.ИмяПользователяКонференцииИнформационногоЦентра.Получить(); + ПарольПользователя = Константы.ПарольПользователяКонференцииИнформационногоЦентра.Получить(); + УстановитьПривилегированныйРежим(Ложь); -КонецПроцедуры + Прокси = ОбщегоНазначения.WSПрокси(Адрес, + "http://ws.forum.saas.onec.ru/", + "ForumIntegrationWSImplService", + "ForumIntegrationWSImplPort", + ИмяПользователя, + ПарольПользователя); + + Возврат Прокси; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -54,16 +107,18 @@ ВызватьИсключение(НСтр("ru = 'Не возможно подключиться к Менеджеру сервиса.'")); КонецЕсли; + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + УстановитьПривилегированныйРежим(Истина); - АдресМенеджераСервиса = Константы["ВнутреннийАдресМенеджераСервиса"].Получить(); + АдресМенеджераСервиса = МодульРаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(); Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; АдресСервиса = АдресМенеджераСервиса + "/ws/ManageInfoCenter?wsdl"; - ИмяПользователя = Константы["ИмяСлужебногоПользователяМенеджераСервиса"].Получить(); - ПарольПользователя = Константы["ПарольСлужебногоПользователяМенеджераСервиса"].Получить(); + ИмяПользователя = МодульРаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = МодульРаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); УстановитьПривилегированныйРежим(Ложь); ПроксиИнформационногоЦентра = ОбщегоНазначения.WSПрокси(АдресСервиса, @@ -89,16 +144,18 @@ ВызватьИсключение(НСтр("ru = 'Не возможно подключиться к Менеджеру сервиса.'")); КонецЕсли; + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + УстановитьПривилегированныйРежим(Истина); - АдресМенеджераСервиса = Константы["ВнутреннийАдресМенеджераСервиса"].Получить(); + АдресМенеджераСервиса = МодульРаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(); Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; АдресСервиса = АдресМенеджераСервиса + "/ws/ManageInfoCenter_1_0_1_1?wsdl"; - ИмяПользователя = Константы["ИмяСлужебногоПользователяМенеджераСервиса"].Получить(); - ПарольПользователя = Константы["ПарольСлужебногоПользователяМенеджераСервиса"].Получить(); + ИмяПользователя = МодульРаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = МодульРаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); УстановитьПривилегированныйРежим(Ложь); ПроксиИнформационногоЦентра = ОбщегоНазначения.WSПрокси(АдресСервиса, @@ -113,57 +170,73 @@ КонецФункции -// Описывает ссылку сайта для для публикации приложений через Интернет. -// +// Возвращает Прокси Информационного центра Менеджера сервиса. +// // Возвращаемое значение: -// Структура - структура с полями, которые описывают ссылку сайта. -// -Функция НовоеОписаниеСсылкиСайтаДляПубликацииПриложенийЧерезИнтернет() Экспорт +// WSПрокси - прокси Информационного центра. +// +Функция ПолучитьПроксиИнформационногоЦентра_1_0_1_2() Экспорт - Возврат Новый Структура("Имя, Адрес"); + Если Не ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + ВызватьИсключение(НСтр("ru = 'Не возможно подключиться к Менеджеру сервиса.'")); + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + + УстановитьПривилегированныйРежим(Истина); + АдресМенеджераСервиса = МодульРаботаВМоделиСервиса.ВнутреннийАдресМенеджераСервиса(); + + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + АдресСервиса = АдресМенеджераСервиса + "/ws/ManageInfoCenter_1_0_1_2?wsdl"; + ИмяПользователя = МодульРаботаВМоделиСервиса.ИмяСлужебногоПользователяМенеджераСервиса(); + ПарольПользователя = МодульРаботаВМоделиСервиса.ПарольСлужебногоПользователяМенеджераСервиса(); + УстановитьПривилегированныйРежим(Ложь); + + ПроксиИнформационногоЦентра = ОбщегоНазначения.WSПрокси(АдресСервиса, + "http://www.1c.ru/SaaS/1.0/WS", + "ManageInfoCenter_1_0_1_2", + , + ИмяПользователя, + ПарольПользователя, + 7); + + Возврат ПроксиИнформационногоЦентра; КонецФункции -// Возвращает имя события журнала регистрации. +//////////////////////////////////////////////////////////////////////////////// +// Оповещения пользователей в форме Информационного центра + +// Возвращает ссылку на элемент справочника "ТипыИнформацииИнформационногоЦентра" по Наименованию +// +// Параметры: +// Наименование - Строка - наименования типа новости. // // Возвращаемое значение: -// Строка - имя события журнала регистрации. +// СправочникСсылка.ТипыИнформацииИнформационногоЦентра - тип информации. // -Функция ПолучитьИмяСобытияДляЖурналаРегистрации() Экспорт +Функция ОпределитьСсылкуТипаИнформации(знач Наименование) Экспорт - Возврат НСтр("ru = 'Информационный центр'"); + УстановитьПривилегированныйРежим(Истина); + Наименование = СокрЛП(Наименование); + + НайденнаяСсылка = Справочники.ТипыИнформацииИнформационногоЦентра.НайтиПоНаименованию(Наименование); + + Если НайденнаяСсылка.Пустая() Тогда + ТипИнформации = Справочники.ТипыИнформацииИнформационногоЦентра.СоздатьЭлемент(); + ТипИнформации.Наименование = Наименование; + ТипИнформации.Записать(); + + Возврат ТипИнформации.Ссылка; + Иначе + Возврат НайденнаяСсылка; + КонецЕсли; КонецФункции -// Описывает структуру полезной ссылки. -// -// Возвращаемое значение: -// Структура - структура с полями, которые описывают полезную ссылку: -// Имя - Строка - наименование полезной ссылки. -// Адрес - Строка - адрес полезной ссылки. -// Пояснение - Строка - пояснение полезной ссылки. -// ДействиеПоНажатию - Строка - процедура-обработчик для полезной ссылки. -// -// Примечание: -// Поле "ДействиеПоНажатию" можно не устанавливать, если подразумевается переход по ссылке. -// -Функция НовоеОписаниеПолезнойСсылки() Экспорт - - Возврат Новый Структура("Имя, Адрес, Пояснение, ДействиеПоНажатию"); - -КонецФункции - -// Описывает структуру статьи. -// -// Возвращаемое значение: -// Структура - структура с полями, которые описывают статью. -// -Функция НовоеОписаниеСтатьи() Экспорт - - Возврат Новый Структура("Имя, Адрес"); - -КонецФункции - // Определяет список всех новостей. // // Возвращаемое значение: @@ -176,12 +249,14 @@ Функция СформироватьСписокВсехНовостей() Экспорт ЗапросВсехНовостей = Новый Запрос; + ЗапросВсехНовостей.Текст = "ВЫБРАТЬ | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, - | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка + | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка, + | ОбщиеДанныеИнформационногоЦентра.ТипИнформации КАК ТипИнформации |ИЗ | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра |ГДЕ @@ -239,141 +314,8 @@ КонецПроцедуры -// Возвращает список актуальных критичных новостей (критичность > 5). -// -// Возвращаемое значение: -// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. -// -Функция СформироватьАктуальныеКритичныеНовости() - - ЗапросКритичныхНовостей = Новый Запрос; - - ЗапросКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); - ЗапросКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); - ЗапросКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); - ЗапросКритичныхНовостей.Текст = - "ВЫБРАТЬ - | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, - | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, - | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, - | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка - |ИЗ - | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра - |ГДЕ - | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата - | И ОбщиеДанныеИнформационногоЦентра.Критичность > &КритичностьПять - | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата - | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) - | И НЕ ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | Критичность УБЫВ, - | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; - - Возврат ЗапросКритичныхНовостей.Выполнить().Выгрузить(); - -КонецФункции - -// Возвращает список актуальных некритичных новостей (критичность <= 5). -// -// Возвращаемое значение: -// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. -// -Функция СформироватьАктуальныеНеКритичныеНовости() - - ЗапросНеКритичныхНовостей = Новый Запрос; - - ЗапросНеКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); - ЗапросНеКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); - ЗапросНеКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); - ЗапросНеКритичныхНовостей.Текст = - "ВЫБРАТЬ - | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, - | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, - | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, - | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка - |ИЗ - | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра - |ГДЕ - | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата - | И ОбщиеДанныеИнформационногоЦентра.Критичность <= &КритичностьПять - | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата - | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) - | И НЕ ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; - - Возврат ЗапросНеКритичныхНовостей.Выполнить().Выгрузить(); - -КонецФункции - -// Возвращает ссылку на элемент справочника "ТипыИнформацииИнформационногоЦентра" по Наименованию -// -// Параметры: -// Наименование - Строка - наименования типа новости. -// -// Возвращаемое значение: -// СправочникСсылка.ТипыИнформацииИнформационногоЦентра - тип информации. -// -Функция ОпределитьСсылкуТипаИнформации(знач Наименование) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Наименование = СокрЛП(Наименование); - - НайденнаяСсылка = Справочники.ТипыИнформацииИнформационногоЦентра.НайтиПоНаименованию(Наименование); - - Если НайденнаяСсылка.Пустая() Тогда - ТипИнформации = Справочники.ТипыИнформацииИнформационногоЦентра.СоздатьЭлемент(); - ТипИнформации.Наименование = Наименование; - ТипИнформации.Записать(); - - Возврат ТипИнформации.Ссылка; - Иначе - Возврат НайденнаяСсылка; - КонецЕсли; - -КонецФункции - -// Возвращает строковое представление версии в числовом диапазоне. -// -// Параметры: -// Версия - Строка - версия. -// -// Возвращаемое значение: -// Число - представление версии числом. -// -Функция ПолучитьВерсиюЧислом(Версия) Экспорт - - МассивЧисел = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); - - Итерация = 1; - ВерсияЧислом = 0; - КоличествоВМассиве = МассивЧисел.Количество(); - - Если КоличествоВМассиве = 0 Тогда - Возврат 0; - КонецЕсли; - - Для Каждого ЧислоВерсии Из МассивЧисел Цикл - - Попытка - ТекущееЧисло = Число(ЧислоВерсии); - ВерсияЧислом = ВерсияЧислом + ТекущееЧисло * ВозвестиЧислоВПоложительнуюСтепень(1000, КоличествоВМассиве - Итерация); - Исключение - Возврат 0; - КонецПопытки; - - Итерация = Итерация + 1; - - КонецЦикла; - - Возврат ВерсияЧислом; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// Получение параметров для отправки сообщений пользователя +// Отправка сообщений в поддержку сервиса // Возвращает адрес электронной почты текущего пользователя. // @@ -417,6 +359,18 @@ КонецФункции +// Возвращает имя файла, в котором находятся технические параметры +// для службы техподдержки. +// +// Возвращаемое значение: +// Строка - имя файла. +// +Функция ПолучитьИмяФайлаТехническихПараметровДляСообщенияВПоддержку() Экспорт + + Возврат "TechnicalParameters.xml"; + +КонецФункции + // Возвращает текст технических параметров. // // Возвращаемое значение: @@ -424,9 +378,9 @@ // Ключ - строка - наименование вложения. // Значение - ДвоичныеДанные - файл вложения. // -Функция СформироватьXMLСТехническимиПараметрами() Экспорт +Функция СформироватьXMLСТехническимиПараметрами(ДополнительныеПараметры = Неопределено) Экспорт - МассивПараметров = ОпределитьМассивТехническихПараметров(); + МассивПараметров = ОпределитьМассивТехническихПараметров(ДополнительныеПараметры); ФайлXML = ПолучитьИмяВременногоФайла("xml"); @@ -446,11 +400,173 @@ КонецПопытки; Вложение = Новый СписокЗначений; - Вложение.Добавить(ДвоичныеДанныеФайла, ПолучитьИмяФайлаТехническихПараметровДляСообщенияВТехПоддержку(), Истина); + Вложение.Добавить(ДвоичныеДанныеФайла, ПолучитьИмяФайлаТехническихПараметровДляСообщенияВПоддержку(), Истина); + Возврат Вложение; КонецФункции +// Возвращает строку с внешней ссылкой. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - уникальный идентификатор новости. +// +// Возвращаемое значение: +// Строка - адрес внешнего ресурса. +// +Функция ПолучитьВнешнююСсылкуПоИдентификаторуНовости(Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + СсылкаНаДанные = Справочники.ОбщиеДанныеИнформационногоЦентра.НайтиПоРеквизиту("Идентификатор", Идентификатор); + Если СсылкаНаДанные.Пустая() Тогда + Возврат ""; + КонецЕсли; + + Возврат СсылкаНаДанные.ВнешняяСсылка; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы + +// Определяет заголовок формы "ИнформационныйЦентр". +// +// Параметры: +// ЗаголовокФормы - Строка - заголовок формы. +// +Процедура ПриОпределенииЗаголовкаОсновнойФормыИнформационныйЦентр(ЗаголовокФормы) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + УстановитьПривилегированныйРежим(Истина); + МодульРаботаВМоделиСервиса.ПриОпределенииЗаголовкаОсновнойФормыИнформационныйЦентр(ЗаголовокФормы); + КонецЕсли; + +КонецПроцедуры + +// Отправляет сообщение пользователя в техподдержку. +// +// Параметры: +// ПараметрыСообщения - Структура - параметры сообщения. +// Результат - Булево - Истина, если сообщение отправлено, Ложь - Иначе. +// +Процедура ПриОтправкеСообщенияПользователяВТехподдержку(ПараметрыСообщения, Результат) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриОтправкеСообщенияПользователяВТехподдержку(ПараметрыСообщения, Результат); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Оповещения пользователей в форме Информационного центра + +// Возвращает список актуальных критичных новостей (критичность > 5). +// +// Возвращаемое значение: +// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. +// +Функция СформироватьАктуальныеКритичныеНовости() + + ЗапросКритичныхНовостей = Новый Запрос; + + ЗапросКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + ЗапросКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); + ЗапросКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); + + ЗапросКритичныхНовостей.Текст = + "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК СсылкаНаДанные + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата + | И ОбщиеДанныеИнформационногоЦентра.Критичность > &КритичностьПять + | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) + | И НЕ ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ОбщиеДанныеИнформационногоЦентра.Критичность УБЫВ, + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; + + Возврат ЗапросКритичныхНовостей.Выполнить().Выгрузить(); + +КонецФункции + +// Возвращает список актуальных некритичных новостей (критичность <= 5). +// +// Возвращаемое значение: +// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. +// +Функция СформироватьАктуальныеНеКритичныеНовости() + + УстановитьПривилегированныйРежим(Истина); + + ЗапросНеКритичныхНовостей = Новый Запрос; + + ЗапросНеКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДата()); // Проектное решение БСП + ЗапросНеКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); + ЗапросНеКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); + ЗапросНеКритичныхНовостей.УстановитьПараметр("Просмотрены", Ложь); + ЗапросНеКритичныхНовостей.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь.Ссылка); + + ЗапросНеКритичныхНовостей.Текст = + "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК СсылкаНаДанные + |ПОМЕСТИТЬ ДанныеИЦ + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата + | И ОбщиеДанныеИнформационногоЦентра.Критичность <= &КритичностьПять + | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) + | И НЕ ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПросмотренныеДанныеИнформационногоЦентра.ДанныеИнформационногоЦентра, + | ПросмотренныеДанныеИнформационногоЦентра.Просмотрены + |ПОМЕСТИТЬ ПросмотренныеПользователем + |ИЗ + | РегистрСведений.ПросмотренныеДанныеИнформационногоЦентра КАК ПросмотренныеДанныеИнформационногоЦентра + |ГДЕ + | ПросмотренныеДанныеИнформационногоЦентра.Пользователь = &Пользователь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеИЦ.СсылкаНаДанные, + | ЕСТЬNULL(ПросмотренныеПользователем.Просмотрены, &Просмотрены) КАК Просмотрены + |ПОМЕСТИТЬ Готовый + |ИЗ + | ДанныеИЦ КАК ДанныеИЦ + | ПОЛНОЕ СОЕДИНЕНИЕ ПросмотренныеПользователем КАК ПросмотренныеПользователем + | ПО ДанныеИЦ.СсылкаНаДанные = ПросмотренныеПользователем.ДанныеИнформационногоЦентра + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Готовый.СсылкаНаДанные + |ИЗ + | Готовый КАК Готовый + |ГДЕ + | Готовый.Просмотрены = &Просмотрены"; + + Возврат ЗапросНеКритичныхНовостей.Выполнить().Выгрузить(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Отправка сообщений в поддержку сервиса + // Возвращает массив технических параметров. // // Возвращаемое значение: @@ -458,19 +574,22 @@ // Имя - Строка - имя параметра. // Значение - Строка - значение параметра. // -Функция ОпределитьМассивТехническихПараметров() +Функция ОпределитьМассивТехническихПараметров(ДополнительныеПараметры) ИнформацияСистемная = Новый СистемнаяИнформация; - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ОбластьДанных = Строка(Формат(ОбластьДанных, "ЧГ=0")); - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ИмяКонфигурации", Метаданные.Имя)); - МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияКонфигурации",Метаданные.Версия)); - МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияПлатформы", ИнформацияСистемная.ВерсияПриложения)); - МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ОбластьДанных", ОбластьДанных)); - МассивПараметров.Добавить(Новый Структура("Имя, Значение", "Логин", ИмяПользователя())); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ИмяКонфигурации", Метаданные.Имя)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияКонфигурации", Метаданные.Версия)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияПлатформы", ИнформацияСистемная.ВерсияПриложения)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ОбластьДанных", Строка(Формат(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ЧГ=0")))); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "Логин", ИмяПользователя())); + + Если ДополнительныеПараметры <> Неопределено Тогда + Для Каждого Параметр Из ДополнительныеПараметры Цикл + МассивПараметров.Добавить(Новый Структура("Имя, Значение", Параметр.Ключ, Строка(Параметр.Значение))); + КонецЦикла; + КонецЕсли; Возврат МассивПараметров; @@ -495,83 +614,9 @@ КонецПроцедуры -// Возвращает строку с внешней ссылкой. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор - уникальный идентификатор новости. -// -// Возвращаемое значение: -// Строка - адрес внешнего ресурса. -// -Функция ПолучитьВнешнююСсылкуПоИдентификаторуНовости(Идентификатор) Экспорт - - УстановитьПривилегированныйРежим(Истина); - СсылкаНаДанные = Справочники.ОбщиеДанныеИнформационногоЦентра.НайтиПоРеквизиту("Идентификатор", Идентификатор); - Если СсылкаНаДанные.Пустая() Тогда - Возврат ""; - КонецЕсли; - - Возврат СсылкаНаДанные.ВнешняяСсылка; - -КонецФункции - -// Возвращает имя файла, в котором находятся технические параметры -// для службы техподдержки. -// -// Возвращаемое значение: -// Строка - имя файла. -// -Функция ПолучитьИмяФайлаТехническихПараметровДляСообщенияВТехПоддержку() Экспорт - - Возврат "TechnicalParameters.xml"; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Информационные ссылки -// Выводит информационные ссылки на форме. -// В данной процедуре 4 необязательных параметра, это проектное решение БСП. -// -// Параметры: -// Форма - УправляемаяФорма - контекст формы. -// ГруппаФормы - ЭлементФормы - группа формы, в которой выводятся информационные ссылки. -// КоличествоГрупп - Число - количество групп информационных ссылок в форме. -// КоличествоСсылокВГруппе - Число - количество информационных ссылок в группе. -// ВыводитьСсылкуВсе - Булево - выводить или нет ссылку "Все". -// -Процедура ВывестиКонтекстныеСсылки(Форма, ГруппаФормы, КоличествоГрупп = 3, КоличествоСсылокВГруппе = 1, ВыводитьСсылкуВсе = Истина, ПутьКФорме = "") Экспорт - - Попытка - Если ПустаяСтрока(ПутьКФорме) Тогда - ПутьКФорме = Форма.ИмяФормы; - КонецЕсли; - - ТаблицаСсылокФормы = ИнформационныйЦентрСерверПовтИсп.ПолучитьТаблицуИнформационныхСсылокДляФормы(ПутьКФорме); - Если ТаблицаСсылокФормы.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - // Изменение параметров формы - ГруппаФормы.ОтображатьЗаголовок = Ложь; - ГруппаФормы.Подсказка = ""; - ГруппаФормы.Отображение = ОтображениеОбычнойГруппы.Нет; - ГруппаФормы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - - // Добавление списка Информационных ссылок - ИмяРеквизита = "ИнформационныеСсылки"; - ДобавляемыеРеквизиты = Новый Массив; - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("СписокЗначений"))); - Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); - - СформироватьГруппыВывода(Форма, ТаблицаСсылокФормы, ГруппаФормы, КоличествоГрупп, КоличествоСсылокВГруппе, ВыводитьСсылкуВсе); - Исключение - ИмяСобытия = ПолучитьИмяСобытияДляЖурналаРегистрации(); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - // Формирует элементы формы информационных ссылок в группе. // // Параметры: @@ -661,31 +706,44 @@ КонецФункции -// Возводит число в степень. -// -// Параметры: -// Число - Число - число, возводимое в степень. -// Степень - Число - степень, в которую необходимо возвести число. -// +// Процедуры и функции для удаления + +// Описывает ссылку сайта для для публикации приложений через Интернет. +// // Возвращаемое значение: -// Число - возведенное в степень число. -// -Функция ВозвестиЧислоВПоложительнуюСтепень(Число, Степень) +// Структура - структура с полями, которые описывают ссылку сайта. +// +Функция НовоеОписаниеСсылкиСайтаДляПубликацииПриложенийЧерезИнтернет() Экспорт - Если Степень = 0 Тогда - Возврат 1; - КонецЕсли; - - Если Степень = 1 Тогда - Возврат Число; - КонецЕсли; - - ВозвращаемоеЧисло = Число; - - Для Итерация = 2 по Степень Цикл - ВозвращаемоеЧисло = ВозвращаемоеЧисло * Число; - КонецЦикла; - - Возврат ВозвращаемоеЧисло; + Возврат Новый Структура("Имя, Адрес"); КонецФункции + +// Описывает структуру полезной ссылки. +// +// Возвращаемое значение: +// Структура - структура с полями, которые описывают полезную ссылку: +// Имя - Строка - наименование полезной ссылки. +// Адрес - Строка - адрес полезной ссылки. +// Пояснение - Строка - пояснение полезной ссылки. +// ДействиеПоНажатию - Строка - процедура-обработчик для полезной ссылки. +// +// Примечание: +// Поле "ДействиеПоНажатию" можно не устанавливать, если подразумевается переход по ссылке. +// +Функция НовоеОписаниеПолезнойСсылки() Экспорт + + Возврат Новый Структура("Имя, Адрес, Пояснение, ДействиеПоНажатию"); + +КонецФункции + +// Описывает структуру статьи. +// +// Возвращаемое значение: +// Структура - структура с полями, которые описывают статью. +// +Функция НовоеОписаниеСтатьи() Экспорт + + Возврат Новый Структура("Имя, Адрес"); + +КонецФункции diff --git a/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/Module.bsl index b7e60c0e4..b595e1937 100644 --- a/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/Module.bsl @@ -4,7 +4,7 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Определяет массив полезных ссылок для вывода на форме информационного центра на рабочем столе. // diff --git a/SSL/src/CommonModules/ИнформационныйЦентрСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрСерверПовтИсп/Module.bsl index 02fe03ac5..7a7c12296 100644 --- a/SSL/src/CommonModules/ИнформационныйЦентрСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ИнформационныйЦентрСерверПовтИсп/Module.bsl @@ -4,7 +4,7 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает таблицу с информационными ссылками для форм // @@ -23,7 +23,7 @@ Функция ПолучитьТаблицуИнформационныхСсылокДляФормы(ПутьКФорме) Экспорт УстановитьПривилегированныйРежим(Истина); - ТекущаяВерсияКонфигурации = ИнформационныйЦентрСервер.ПолучитьВерсиюЧислом(Метаданные.Версия); + ТекущаяВерсияКонфигурации = ИнформационныйЦентрСлужебный.ПолучитьВерсиюЧислом(Метаданные.Версия); УстановитьПривилегированныйРежим(Ложь); Запрос = Новый Запрос; @@ -32,44 +32,46 @@ Запрос.УстановитьПараметр("ТекущаяВерсияКонфигурации", ТекущаяВерсияКонфигурации); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата()); // Проектное решение БСП Запрос.УстановитьПараметр("ПустаяДата", '00010101'); - Запрос.Текст = "ВЫБРАТЬ - | ПолныеПутиКФормам.Ссылка КАК Ссылка - |ПОМЕСТИТЬ ПутиКФормам - |ИЗ - | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам - |ГДЕ - | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ИнформационныеСсылкиДляФорм.Наименование КАК Наименование, - | ИнформационныеСсылкиДляФорм.Адрес КАК Адрес, - | ИнформационныеСсылкиДляФорм.Вес КАК Вес, - | ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности КАК ДатаНачалаАктуальности, - | ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности КАК ДатаОкончанияАктуальности, - | ИнформационныеСсылкиДляФорм.Подсказка КАК Подсказка - |ИЗ - | ПутиКФормам КАК ПутиКФормам - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИнформационныеСсылкиДляФорм КАК ИнформационныеСсылкиДляФорм - | ПО ПутиКФормам.Ссылка = ИнформационныеСсылкиДляФорм.ПолныйПутьКФорме - |ГДЕ - | ((ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт = &НулеваяВерсия - | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо = &НулеваяВерсия) - | ИЛИ (ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт = &НулеваяВерсия - | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо >= &ТекущаяВерсияКонфигурации) - | ИЛИ (ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт <= &ТекущаяВерсияКонфигурации - | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо = &НулеваяВерсия) - | ИЛИ (ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт <= &ТекущаяВерсияКонфигурации - | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо >= &ТекущаяВерсияКонфигурации)) И - | ((ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности = &ПустаяДата - | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности = &ПустаяДата) - | ИЛИ (ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности = &ПустаяДата - | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности >= &ТекущаяДата) - | ИЛИ (ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности <= &ТекущаяДата - | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности = &ПустаяДата) - | ИЛИ (ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности <= &ТекущаяДата - | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности >= &ТекущаяДата))"; + Запрос.Текст = + "ВЫБРАТЬ + | ПолныеПутиКФормам.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ПутиКФормам + |ИЗ + | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам + |ГДЕ + | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ИнформационныеСсылкиДляФорм.Наименование КАК Наименование, + | ИнформационныеСсылкиДляФорм.Адрес КАК Адрес, + | ИнформационныеСсылкиДляФорм.Вес КАК Вес, + | ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности КАК ДатаНачалаАктуальности, + | ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности КАК ДатаОкончанияАктуальности, + | ИнформационныеСсылкиДляФорм.Подсказка КАК Подсказка + |ИЗ + | ПутиКФормам КАК ПутиКФормам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИнформационныеСсылкиДляФорм КАК ИнформационныеСсылкиДляФорм + | ПО ПутиКФормам.Ссылка = ИнформационныеСсылкиДляФорм.ПолныйПутьКФорме + |ГДЕ + | (ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт = &НулеваяВерсия + | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо = &НулеваяВерсия + | ИЛИ ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт = &НулеваяВерсия + | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо >= &ТекущаяВерсияКонфигурации + | ИЛИ ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт <= &ТекущаяВерсияКонфигурации + | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо = &НулеваяВерсия + | ИЛИ ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииОт <= &ТекущаяВерсияКонфигурации + | И ИнформационныеСсылкиДляФорм.ВерсияКонфигурацииДо >= &ТекущаяВерсияКонфигурации) + | И (ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности = &ПустаяДата + | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности = &ПустаяДата + | ИЛИ ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности = &ПустаяДата + | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности >= &ТекущаяДата + | ИЛИ ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности <= &ТекущаяДата + | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности = &ПустаяДата + | ИЛИ ИнформационныеСсылкиДляФорм.ДатаНачалаАктуальности <= &ТекущаяДата + | И ИнформационныеСсылкиДляФорм.ДатаОкончанияАктуальности >= &ТекущаяДата)"; + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции diff --git a/SSL/src/CommonModules/ИнформационныйЦентрСлужебный/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрСлужебный/Module.bsl index a5f9a1a9d..9ff8878c9 100644 --- a/SSL/src/CommonModules/ИнформационныйЦентрСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ИнформационныйЦентрСлужебный/Module.bsl @@ -24,6 +24,80 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "ИнформационныйЦентрСлужебный"); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"].Добавить( + "ИнформационныйЦентрСлужебный"); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий подсистем БСП + +// Формирует список параметров ИБ. +// +// Параметры: +// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. +// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ() +// +Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт + + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "АдресУправленияКонференцией"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяПользователяКонференцииИнформационногоЦентра"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПарольПользователяКонференцииИнформационногоЦентра"); + +КонецПроцедуры + +// Получает список обработчиков сообщений, которые обрабатывают подсистемы библиотеки. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПриОпределенииОбработчиковКаналовСообщений(Обработчики) Экспорт + + СообщенияИнформационногоЦентраОбработчикСообщения.ПолучитьОбработчикиКаналовСообщений(Обработчики); + +КонецПроцедуры + +// Зарегистрировать обработчики поставляемых данных +// +// При получении уведомления о доступности новых общих данных, вызывается процедуры +// ДоступныНовыеДанные модулей, зарегистрированных через ПолучитьОбработчикиПоставляемыхДанных. +// В процедуру передается Дескриптор - ОбъектXDTO Descriptor. +// +// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, +// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру +// ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. +// Если в менеджере сервиса не был указан файл - значение аргумента равно Неопределено. +// +// Параметры: +// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. +// Колонки: +// ВидДанных, строка - код вида данных, обрабатываемый обработчиком +// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя +// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: +// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт +// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт +// ОбработкаДанныхОтменена(Дескриптор) Экспорт +// +Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт + + ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики); + +КонецПроцедуры + +// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + ЗарегистрироватьОбработчикиОбновления(Обработчики); + КонецПроцедуры // Добавляет в список Обработчики процедуры-обработчики обновления, @@ -56,29 +130,59 @@ КонецПроцедуры -// Заполяет справочник "ПолныеПутиКформам" полными путями к формам. +// Заполяет справочник "ПолныеПутиКФормам" полными путями к формам. // Процедура СформироватьСловарьПолныхПутейКФормам() Экспорт - ДобавитьФормыВСправочник("ОбщиеФормы"); - ДобавитьФормыВСправочник("ПланыОбмена"); - ДобавитьФормыВСправочник("Справочники"); - ДобавитьФормыВСправочник("Документы"); - ДобавитьФормыВСправочник("ЖурналыДокументов"); - ДобавитьФормыВСправочник("Перечисления"); - ДобавитьФормыВСправочник("Отчеты"); - ДобавитьФормыВСправочник("Обработки"); - ДобавитьФормыВСправочник("ПланыВидовХарактеристик"); - ДобавитьФормыВСправочник("ПланыСчетов"); - ДобавитьФормыВСправочник("ПланыВидовРасчета"); - ДобавитьФормыВСправочник("РегистрыСведений"); - ДобавитьФормыВСправочник("РегистрыНакопления"); - ДобавитьФормыВСправочник("РегистрыБухгалтерии"); - ДобавитьФормыВСправочник("РегистрыРасчета"); - ДобавитьФормыВСправочник("БизнесПроцессы"); - ДобавитьФормыВСправочник("Задачи"); - ДобавитьФормыВСправочник("ХранилищаНастроек"); - ДобавитьФормыВСправочник("КритерииОтбора"); + // Формирование таблицы со списком полных форм конфигурации + ТаблицаФорм = Новый ТаблицаЗначений; + ТаблицаФорм.Колонки.Добавить("ПолныйПутьКФорме", Новый ОписаниеТипов("Строка")); + + ДобавитьФормыВСправочник(ТаблицаФорм, "ОбщиеФормы"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ПланыОбмена"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Справочники"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Документы"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ЖурналыДокументов"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Перечисления"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Отчеты"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Обработки"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ПланыВидовХарактеристик"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ПланыСчетов"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ПланыВидовРасчета"); + ДобавитьФормыВСправочник(ТаблицаФорм, "РегистрыСведений"); + ДобавитьФормыВСправочник(ТаблицаФорм, "РегистрыНакопления"); + ДобавитьФормыВСправочник(ТаблицаФорм, "РегистрыБухгалтерии"); + ДобавитьФормыВСправочник(ТаблицаФорм, "РегистрыРасчета"); + ДобавитьФормыВСправочник(ТаблицаФорм, "БизнесПроцессы"); + ДобавитьФормыВСправочник(ТаблицаФорм, "Задачи"); + ДобавитьФормыВСправочник(ТаблицаФорм, "ХранилищаНастроек"); + ДобавитьФормыВСправочник(ТаблицаФорм, "КритерииОтбора"); + + // Заполнение справочника "ПолныеПутиКФормам" + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаФорм", ТаблицаФорм); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаФорм.ПолныйПутьКФорме КАК ПолныйПутьКФорме + |ПОМЕСТИТЬ ТаблицаФорм + |ИЗ + | &ТаблицаФорм КАК ТаблицаФорм + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПолныеПутиКФормам.Ссылка КАК Ссылка, + | ТаблицаФорм.ПолныйПутьКФорме КАК ПолныйПутьКФорме + |ИЗ + | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам + | ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаФорм КАК ТаблицаФорм + | ПО (ПОДСТРОКА(ПолныеПутиКФормам.ПолныйПутьКФорме, 1, 1000) = ПОДСТРОКА(ТаблицаФорм.ПолныйПутьКФорме, 1, 1000)) + |ГДЕ + | ПолныеПутиКФормам.Ссылка ЕСТЬ NULL "; + ВыборкаФорм = Запрос.Выполнить().Выбрать(); + Пока ВыборкаФорм.Следующий() Цикл + ДобавитьПолноеИмяВСправочник(ВыборкаФорм.ПолныйПутьКФорме); + КонецЦикла; КонецПроцедуры @@ -92,7 +196,14 @@ ИмяКонфигурации = Метаданные.Имя; УстановитьПривилегированныйРежим(Ложь); ПроксиВебСервиса = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_1(); - ПроксиВебСервиса.UpdateInfoReference(ИмяКонфигурации); + Результат = ПроксиВебСервиса.UpdateInfoReference(ИмяКонфигурации); + Если Результат Тогда + Возврат; + КонецЕсли; + + ТекстОшибки = НСтр("ru = 'Не удалось обновить Информационные ссылки'"); + ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); Исключение ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -121,6 +232,44 @@ КонецПроцедуры +// Возвращает строковое представление версии в числовом диапазоне. +// +// Параметры: +// Версия - Строка - версия. +// +// Возвращаемое значение: +// Число - представление версии числом. +// +Функция ПолучитьВерсиюЧислом(Версия) Экспорт + + МассивЧисел = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); + + Итерация = 1; + ВерсияЧислом = 0; + КоличествоВМассиве = МассивЧисел.Количество(); + + Если КоличествоВМассиве = 0 Тогда + Возврат 0; + КонецЕсли; + + Для Каждого ЧислоВерсии Из МассивЧисел Цикл + + Попытка + ТекущееЧисло = Число(ЧислоВерсии); + ВерсияЧислом = ВерсияЧислом + ТекущееЧисло * ВозвестиЧислоВПоложительнуюСтепень(1000, КоличествоВМассиве - Итерация); + Исключение + Возврат 0; + КонецПопытки; + + Итерация = Итерация + 1; + + КонецЦикла; + + Возврат ВерсияЧислом; + +КонецФункции + + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ ПОЛУЧЕНИЯ ПОСТАВЛЯЕМЫХ ДАННЫХ @@ -210,8 +359,8 @@ Процедура ЗагрузитьИнформационныеСсылки(ПутьКФайлу) - // Формирование дерева тэгов - ДеревоТэгов = ПолучитьДеревоТэгов(); + // Формирование дерева тегов + ДеревоТегов = ПолучитьДеревоТегов(); ДатаОбновления = ТекущаяДата(); // Проектное решение БСП @@ -241,14 +390,14 @@ Если ТипЗнч(ИнформационнаяСсылка.context) = Тип("СписокXDTO") Тогда Для Каждого Контекст из ИнформационнаяСсылка.context Цикл Попытка - ЗаписатьСсылкуПоКонтекстам(ДеревоТэгов, ИнформационнаяСсылка, Контекст, ДатаОбновления); + ЗаписатьСсылкуПоКонтекстам(ДеревоТегов, ИнформационнаяСсылка, Контекст, ДатаОбновления); Исключение ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЦикла; Иначе - ЗаписатьСсылкуПоКонтекстам(ДеревоТэгов, ИнформационнаяСсылка, ИнформационнаяСсылка.context, ДатаОбновления); + ЗаписатьСсылкуПоКонтекстам(ДеревоТегов, ИнформационнаяСсылка, ИнформационнаяСсылка.context, ДатаОбновления); КонецЕсли; КонецЦикла; @@ -299,16 +448,16 @@ КонецПроцедуры -Процедура ЗаписатьСсылкуПоКонтекстам(ДеревоТэгов, ОбъектСсылки, Контекст, ДатаОбновления) +Процедура ЗаписатьСсылкуПоКонтекстам(ДеревоТегов, ОбъектСсылки, Контекст, ДатаОбновления) - Результат = ПроверитьНаличиеИмениФормыПоТэгу(Контекст.tag); + Результат = ПроверитьНаличиеИмениФормыПоТегу(Контекст.tag); Если Результат.ЭтоПутьКФорме Тогда ЗаписатьСсылкуПоКонтексту(ОбъектСсылки, Контекст, Результат.ПутьКФорме, ДатаОбновления); Возврат; КонецЕсли; - Тэг = Контекст.tag; - НайденнаяСтрока = ДеревоТэгов.Строки.Найти(Тэг, "Имя"); + Тег = Контекст.tag; + НайденнаяСтрока = ДеревоТегов.Строки.Найти(Тег, "Имя"); Если НайденнаяСтрока = Неопределено Тогда Возврат; КонецЕсли; @@ -344,8 +493,8 @@ ЭлементСправочника.Наименование = ОбъектСсылки.name; ЭлементСправочника.Подсказка = ОбъектСсылки.helpText; ЭлементСправочника.ПолныйПутьКФорме = СсылкаНаПутьКФорме; - ЭлементСправочника.ВерсияКонфигурацииОт = ИнформационныйЦентрСервер.ПолучитьВерсиюЧислом(Контекст.versionFrom); - ЭлементСправочника.ВерсияКонфигурацииДо = ИнформационныйЦентрСервер.ПолучитьВерсиюЧислом(Контекст.versionTo); + ЭлементСправочника.ВерсияКонфигурацииОт = ПолучитьВерсиюЧислом(Контекст.versionFrom); + ЭлементСправочника.ВерсияКонфигурацииДо = ПолучитьВерсиюЧислом(Контекст.versionTo); ЭлементСправочника.ДатаОбновления = ДатаОбновления; ЭлементСправочника.Записать(); @@ -373,18 +522,19 @@ КонецФункции -Функция ПроверитьНаличиеИмениФормыПоТэгу(Тэг) +Функция ПроверитьНаличиеИмениФормыПоТегу(Тег) Результат = Новый Структура("ЭтоПутьКФорме", Ложь); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПолныйПутьКФорме", Тэг); - Запрос.Текст = "ВЫБРАТЬ - | ПолныеПутиКФормам.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам - |ГДЕ - | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме"; + Запрос.УстановитьПараметр("ПолныйПутьКФорме", Тег); + Запрос.Текст = + "ВЫБРАТЬ + | ПолныеПутиКФормам.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам + |ГДЕ + | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Результат; @@ -399,59 +549,63 @@ КонецФункции -Функция ПолучитьДеревоТэгов() +Функция ПолучитьДеревоТегов() - ДеревоТэгов = Новый ДеревоЗначений; - ДеревоТэгов.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ДеревоТегов = Новый ДеревоЗначений; + ДеревоТегов.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); // Чтение общего макета ИмяФайлаМакета = ПолучитьИмяВременногоФайла("xml"); ПолучитьОбщийМакет("СоответствиеТэговОбщимФормам").Записать(ИмяФайлаМакета); - ЗаписиСоответствияТэговИФорм = Новый ЧтениеXML; - ЗаписиСоответствияТэговИФорм.ОткрытьФайл(ИмяФайлаМакета); + ЗаписиСоответствияТеговИФорм = Новый ЧтениеXML; + ЗаписиСоответствияТеговИФорм.ОткрытьФайл(ИмяФайлаМакета); - ТекущийТэгВДереве = Неопределено; - Пока ЗаписиСоответствияТэговИФорм.Прочитать() Цикл - // Чтение текущего тэга - ЭтоТэг = ЗаписиСоответствияТэговИФорм.ТипУзла = ТипУзлаXML.НачалоЭлемента и ВРег(СокрЛП(ЗаписиСоответствияТэговИФорм.Имя)) = ВРег("tag"); - Если ЭтоТэг Тогда - Пока ЗаписиСоответствияТэговИФорм.ПрочитатьАтрибут() Цикл - Если ВРег(ЗаписиСоответствияТэговИФорм.Имя) = ВРег("name") тогда - ТекущийТэгВДереве = ДеревоТэгов.Строки.Добавить(); - ТекущийТэгВДереве.Имя = ЗаписиСоответствияТэговИФорм.Значение; + ТекущийТегВДереве = Неопределено; + Пока ЗаписиСоответствияТеговИФорм.Прочитать() Цикл + // Чтение текущего тега + ЭтоТег = ЗаписиСоответствияТеговИФорм.ТипУзла = ТипУзлаXML.НачалоЭлемента и ВРег(СокрЛП(ЗаписиСоответствияТеговИФорм.Имя)) = ВРег("tag"); + Если ЭтоТег Тогда + Пока ЗаписиСоответствияТеговИФорм.ПрочитатьАтрибут() Цикл + Если ВРег(ЗаписиСоответствияТеговИФорм.Имя) = ВРег("name") тогда + ТекущийТегВДереве = ДеревоТегов.Строки.Добавить(); + ТекущийТегВДереве.Имя = ЗаписиСоответствияТеговИФорм.Значение; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; // Чтение формы - ЭтоФорма = ЗаписиСоответствияТэговИФорм.ТипУзла = ТипУзлаXML.НачалоЭлемента и ВРег(СокрЛП(ЗаписиСоответствияТэговИФорм.Имя)) = ВРег("form"); + ЭтоФорма = ЗаписиСоответствияТеговИФорм.ТипУзла = ТипУзлаXML.НачалоЭлемента и ВРег(СокрЛП(ЗаписиСоответствияТеговИФорм.Имя)) = ВРег("form"); Если ЭтоФорма Тогда - Пока ЗаписиСоответствияТэговИФорм.ПрочитатьАтрибут() Цикл - Если ВРег(ЗаписиСоответствияТэговИФорм.Имя) = ВРег("path") тогда - Если ТекущийТэгВДереве = Неопределено Тогда + Пока ЗаписиСоответствияТеговИФорм.ПрочитатьАтрибут() Цикл + Если ВРег(ЗаписиСоответствияТеговИФорм.Имя) = ВРег("path") тогда + Если ТекущийТегВДереве = Неопределено Тогда Прервать; КонецЕсли; - ТекущийЭлементДерева = ТекущийТэгВДереве.Строки.Добавить(); - ТекущийЭлементДерева.Имя = ЗаписиСоответствияТэговИФорм.Значение; + ТекущийЭлементДерева = ТекущийТегВДереве.Строки.Добавить(); + ТекущийЭлементДерева.Имя = ЗаписиСоответствияТеговИФорм.Значение; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; - Возврат ДеревоТэгов; + Возврат ДеревоТегов; КонецФункции -Процедура ДобавитьФормыВСправочник(ИмяКлассаМетаданного) +Процедура ДобавитьФормыВСправочник(ТаблицаФорм, ИмяКлассаМетаданного) КлассМетаданных = Метаданные[ИмяКлассаМетаданного]; КоличествоЭлементов = КлассМетаданных.Количество(); Если ИмяКлассаМетаданного = "ОбщиеФормы" Тогда Для ИтерацияЭлементов = 0 По КоличествоЭлементов - 1 Цикл - ПолноеИмяФормы = КлассМетаданных.Получить(ИтерацияЭлементов).ПолноеИмя(); - ДобавитьПолноеИмяВСправочник(ПолноеИмяФормы); + + ПолныйПутьКФорме = КлассМетаданных.Получить(ИтерацияЭлементов).ПолноеИмя(); + + ЭлементТаблицы = ТаблицаФорм.Добавить(); + ЭлементТаблицы.ПолныйПутьКФорме = ПолныйПутьКФорме; + КонецЦикла; Возврат; КонецЕсли; @@ -460,8 +614,12 @@ ФормыКлассаМетаданных = КлассМетаданных.Получить(ИтерацияЭлементов).Формы; КоличествоФорм = ФормыКлассаМетаданных.Количество(); Для ИтерацияФорм = 0 По КоличествоФорм - 1 Цикл - ПолноеИмяФормы = ФормыКлассаМетаданных.Получить(ИтерацияФорм).ПолноеИмя(); - ДобавитьПолноеИмяВСправочник(ПолноеИмяФормы); + + ПолныйПутьКФорме = ФормыКлассаМетаданных.Получить(ИтерацияФорм).ПолноеИмя(); + + ЭлементТаблицы = ТаблицаФорм.Добавить(); + ЭлементТаблицы.ПолныйПутьКФорме = ПолныйПутьКФорме; + КонецЦикла; КонецЦикла; @@ -469,10 +627,6 @@ Процедура ДобавитьПолноеИмяВСправочник(ПолноеИмяФормы) - Если Не СсылкаПутиКФормеВСправочнике(ПолноеИмяФормы).Пустая() Тогда - Возврат; - КонецЕсли; - ЭлементСправочника = Справочники.ПолныеПутиКФормам.СоздатьЭлемент(); ЭлементСправочника.Наименование = ПолноеИмяФормы; ЭлементСправочника.ПолныйПутьКФорме = ПолноеИмяФормы; @@ -484,12 +638,13 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПолныйПутьКФорме", ПолноеИмяФормы); - Запрос.Текст = "ВЫБРАТЬ - | ПолныеПутиКФормам.Ссылка как Ссылка - |ИЗ - | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам - |ГДЕ - | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме"; + Запрос.Текст = + "ВЫБРАТЬ + | ПолныеПутиКФормам.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПолныеПутиКФормам КАК ПолныеПутиКФормам + |ГДЕ + | ПолныеПутиКФормам.ПолныйПутьКФорме ПОДОБНО &ПолныйПутьКФорме"; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); @@ -501,56 +656,32 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий подсистем БСП - -// Получает список обработчиков сообщений, которые обрабатывают подсистемы библиотеки. -// -// Параметры: -// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений -// -Процедура ПриОпределенииОбработчиковКаналовСообщений(Обработчики) Экспорт - - СообщенияИнформационногоЦентраОбработчикСообщения.ПолучитьОбработчикиКаналовСообщений(Обработчики); - -КонецПроцедуры - -// Зарегистрировать обработчики поставляемых данных -// -// При получении уведомления о доступности новых общих данных, вызывается процедуры -// ДоступныНовыеДанные модулей, зарегистрированных через ПолучитьОбработчикиПоставляемыхДанных. -// В процедуру передается Дескриптор - ОбъектXDTO Descriptor. -// -// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, -// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру -// ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. -// Если в менеджере сервиса не был указан файл - значение аргумента равно Неопределено. -// -// Параметры: -// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. -// Колонки: -// ВидДанных, строка - код вида данных, обрабатываемый обработчиком -// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя -// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: -// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт -// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт -// ОбработкаДанныхОтменена(Дескриптор) Экспорт -// -Процедура ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики) Экспорт - - ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики); - -КонецПроцедуры - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. +// Возводит число в степень. // // Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. +// Число - Число - число, возводимое в степень. +// Степень - Число - степень, в которую необходимо возвести число. // -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт +// Возвращаемое значение: +// Число - возведенное в степень число. +// +Функция ВозвестиЧислоВПоложительнуюСтепень(Число, Степень) - ЗарегистрироватьОбработчикиОбновления(Обработчики); + Если Степень = 0 Тогда + Возврат 1; + КонецЕсли; -КонецПроцедуры + Если Степень = 1 Тогда + Возврат Число; + КонецЕсли; + + ВозвращаемоеЧисло = Число; + + Для Итерация = 2 по Степень Цикл + ВозвращаемоеЧисло = ВозвращаемоеЧисло * Число; + КонецЦикла; + + Возврат ВозвращаемоеЧисло; + +КонецФункции diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index 8d628238f..50d4d63ca 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -47,6 +47,10 @@ КонецЦикла; // Алгоритм работает следующим образом: + // а) для графика работы + // Получаем количество включенных в график дней на дату отсчета + // Для всех последующих годов получаем "смещение" количества дней в виде суммы количества дней предыдущих годов + // б) для производственного календаря // Получаем все дни календаря, следующие после даты отсчета. // Для каждого из таких дней рассчитываем количество дней, включенных в график с даты отсчета. // Отбираем рассчитанное таким образом количество по таблице приращения дней. @@ -70,14 +74,65 @@ // По графику работы Запрос.Текст = "ВЫБРАТЬ - | КалендарныеГрафики.ДатаГрафика - |ПОМЕСТИТЬ ВТПоследующиеДатыГрафика + | КалендарныеГрафики.Год, + | МАКСИМУМ(КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода) КАК ДнейВГрафике + |ПОМЕСТИТЬ ВТКоличествоДнейВГрафикеПоГодам |ИЗ | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики |ГДЕ | КалендарныеГрафики.ДатаГрафика >= &ДатаОт | И КалендарныеГрафики.Календарь = &ГрафикРаботы - | И КалендарныеГрафики.ДеньВключенВГрафик"; + | И КалендарныеГрафики.ДеньВключенВГрафик + | + |СГРУППИРОВАТЬ ПО + | КалендарныеГрафики.Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КоличествоДнейВГрафикеПоГодам.Год, + | СУММА(ЕСТЬNULL(КоличествоДнейПредыдущихГодов.ДнейВГрафике, 0)) КАК ДнейВГрафике + |ПОМЕСТИТЬ ВТКоличествоДнейСУчетомПредыдущихГодов + |ИЗ + | ВТКоличествоДнейВГрафикеПоГодам КАК КоличествоДнейВГрафикеПоГодам + | ЛЕВОЕ СОЕДИНЕНИЕ ВТКоличествоДнейВГрафикеПоГодам КАК КоличествоДнейПредыдущихГодов + | ПО (КоличествоДнейПредыдущихГодов.Год < КоличествоДнейВГрафикеПоГодам.Год) + | + |СГРУППИРОВАТЬ ПО + | КоличествоДнейВГрафикеПоГодам.Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | МИНИМУМ(КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода) КАК КоличествоДнейВГрафикеСНачалаГода + |ПОМЕСТИТЬ ВТКоличествоДнейВГрафикеНаДатуОтсчета + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + |ГДЕ + | КалендарныеГрафики.ДатаГрафика >= &ДатаОт + | И КалендарныеГрафики.Год = ГОД(&ДатаОт) + | И КалендарныеГрафики.Календарь = &ГрафикРаботы + | И КалендарныеГрафики.ДеньВключенВГрафик + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПриращениеДней.ИндексСтроки, + | ЕСТЬNULL(КалендарныеГрафики.ДатаГрафика, НЕОПРЕДЕЛЕНО) КАК ДатаПоКалендарю + |ИЗ + | ВТПриращениеДней КАК ПриращениеДней + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКоличествоДнейВГрафикеНаДатуОтсчета КАК КоличествоДнейВГрафикеНаДатуОтсчета + | ПО (ИСТИНА) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКоличествоДнейСУчетомПредыдущихГодов КАК КоличествоДнейСУчетомПредыдущихГодов + | ПО (КоличествоДнейСУчетомПредыдущихГодов.Год = КалендарныеГрафики.Год) + | ПО (КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеНаДатуОтсчета.КоличествоДнейВГрафикеСНачалаГода - КоличествоДнейСУчетомПредыдущихГодов.ДнейВГрафике + ПриращениеДней.КоличествоДней) + | И (КалендарныеГрафики.ДатаГрафика >= &ДатаОт) + | И (КалендарныеГрафики.Календарь = &ГрафикРаботы) + | И (КалендарныеГрафики.ДеньВключенВГрафик) + | + |УПОРЯДОЧИТЬ ПО + | ПриращениеДней.ИндексСтроки"; Иначе // По производственному календарю Запрос.Текст = @@ -89,38 +144,38 @@ |ГДЕ | КалендарныеГрафики.Дата >= &ДатаОт | И КалендарныеГрафики.ПроизводственныйКалендарь = &ГрафикРаботы - | И КалендарныеГрафики.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))"; + | И КалендарныеГрафики.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПоследующиеДатыГрафика.ДатаГрафика, + | КОЛИЧЕСТВО(КалендарныеГрафики.ДатаГрафика) - 1 КАК КоличествоДнейВключенныхВГрафик + |ПОМЕСТИТЬ ВТПоследующиеДатыГрафикаСКоличествомДней + |ИЗ + | ВТПоследующиеДатыГрафика КАК ПоследующиеДатыГрафика + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПоследующиеДатыГрафика КАК КалендарныеГрафики + | ПО (КалендарныеГрафики.ДатаГрафика <= ПоследующиеДатыГрафика.ДатаГрафика) + | + |СГРУППИРОВАТЬ ПО + | ПоследующиеДатыГрафика.ДатаГрафика + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПриращениеДней.ИндексСтроки, + | ЕСТЬNULL(ПоследующиеДни.ДатаГрафика, НЕОПРЕДЕЛЕНО) КАК ДатаПоКалендарю + |ИЗ + | ВТПриращениеДней КАК ПриращениеДней + | ЛЕВОЕ СОЕДИНЕНИЕ ВТПоследующиеДатыГрафикаСКоличествомДней КАК ПоследующиеДни + | ПО ПриращениеДней.КоличествоДней = ПоследующиеДни.КоличествоДнейВключенныхВГрафик + | + |УПОРЯДОЧИТЬ ПО + | ПриращениеДней.ИндексСтроки"; КонецЕсли; Запрос.УстановитьПараметр("ДатаОт", ДатаОт); Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы); - Запрос.Выполнить(); - - Запрос.Текст = - "ВЫБРАТЬ - | ПоследующиеДатыГрафика.ДатаГрафика, - | КОЛИЧЕСТВО(КалендарныеГрафики.ДатаГрафика) - 1 КАК КоличествоДнейВключенныхВГрафик - |ПОМЕСТИТЬ ВТПоследующиеДатыГрафикаСКоличествомДней - |ИЗ - | ВТПоследующиеДатыГрафика КАК ПоследующиеДатыГрафика - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПоследующиеДатыГрафика КАК КалендарныеГрафики - | ПО (КалендарныеГрафики.ДатаГрафика <= ПоследующиеДатыГрафика.ДатаГрафика) - | - |СГРУППИРОВАТЬ ПО - | ПоследующиеДатыГрафика.ДатаГрафика - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПриращениеДней.ИндексСтроки, - | ЕСТЬNULL(ПоследующиеДни.ДатаГрафика, НЕОПРЕДЕЛЕНО) КАК ДатаПоКалендарю - |ИЗ - | ВТПриращениеДней КАК ПриращениеДней - | ЛЕВОЕ СОЕДИНЕНИЕ ВТПоследующиеДатыГрафикаСКоличествомДней КАК ПоследующиеДни - | ПО ПриращениеДней.КоличествоДней = ПоследующиеДни.КоличествоДнейВключенныхВГрафик - | - |УПОРЯДОЧИТЬ ПО - | ПриращениеДней.ИндексСтроки"; Выборка = Запрос.Выполнить().Выбрать(); @@ -128,7 +183,7 @@ Пока Выборка.Следующий() Цикл Если Выборка.ДатаПоКалендарю = Неопределено Тогда - СообщениеОбОшибке = НСтр("ru = 'График работы ""%1"" не заполнен с даты %2 на указанное количество рабочих дней.'"); + СообщениеОбОшибке = НСтр("ru = 'График работы «%1» не заполнен с даты %2 на указанное количество рабочих дней.'"); Если ВызыватьИсключение Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( СообщениеОбОшибке, @@ -320,7 +375,7 @@ Если Результат.Пустой() Тогда Если ВызыватьИсключение Тогда - СообщениеОбОшибке = НСтр("ru = 'График работы ""%1"" не заполнен на период %2.'"); + СообщениеОбОшибке = НСтр("ru = 'График работы «%1» не заполнен на период %2.'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( СообщениеОбОшибке, ГрафикРаботы, ПредставлениеПериода(ДатаНачала, КонецДня(ДатаОкончания))); @@ -364,13 +419,15 @@ // если Истина – определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, // если Ложь – получаются даты не ранее начальной даты // ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного графика +// ИгнорироватьНезаполненностьГрафика - булево, если Истина, то в любом случае будет возвращено соответствие. +// Начальные даты, для которых не будет значений из-за незаполненности графика, включены не будут. // // Возвращаемое значение: // РабочиеДаты - соответствие, где ключ - дата из переданного массива, // значение - ближайшая к ней рабочая дата (если передана рабочая дата, то она же и возвращается) // Если выбранный график не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено // -Функция ПолучитьДатыРабочихДней(График, НачальныеДаты, ПолучатьПредшествующие = Ложь, ВызыватьИсключение = Истина) Экспорт +Функция ПолучитьДатыРабочихДней(График, НачальныеДаты, ПолучатьПредшествующие = Ложь, ВызыватьИсключение = Истина, ИгнорироватьНезаполненностьГрафика = Ложь) Экспорт ТекстЗапросаВТ = ""; ПерваяЧасть = Истина; @@ -445,6 +502,9 @@ Если ЗначениеЗаполнено(Выборка.БлижайшаяДата) Тогда ДатыРабочихДней.Вставить(Выборка.Дата, Выборка.БлижайшаяДата); Иначе + Если ИгнорироватьНезаполненностьГрафика Тогда + Продолжить; + КонецЕсли; Если ВызыватьИсключение Тогда ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно определить ближайшую рабочую дату для даты %1, возможно, график работы не заполнен.'"), @@ -460,7 +520,8 @@ КонецФункции -// Составляет расписания работы для дат, включенных в указанные графики на указанный период +// Составляет расписания работы для дат, включенных в указанные графики на указанный период. +// Если расписание на предпраздничный день не задано, то оно определяется так, как если бы этот день был бы рабочим. // // Параметры // Графики - массив элементов типа СправочникСсылка.Календари @@ -558,14 +619,11 @@ | ДниВключенныеВГрафик.ГрафикРаботы, | ДниВключенныеВГрафик.ДатаГрафика, | ВЫБОР - | КОГДА ДниВключенныеВГрафик.ПредпраздничныйДень - | ТОГДА 0 - | ИНАЧЕ ВЫБОР - | КОГДА ДниВключенныеВГрафик.РезультатДеленияПоМодулю = 0 - | ТОГДА ДниВключенныеВГрафик.ДлинаЦикла - | ИНАЧЕ ДниВключенныеВГрафик.РезультатДеленияПоМодулю - | КОНЕЦ - | КОНЕЦ КАК НомерДня + | КОГДА ДниВключенныеВГрафик.РезультатДеленияПоМодулю = 0 + | ТОГДА ДниВключенныеВГрафик.ДлинаЦикла + | ИНАЧЕ ДниВключенныеВГрафик.РезультатДеленияПоМодулю + | КОНЕЦ КАК НомерДня, + | ДниВключенныеВГрафик.ПредпраздничныйДень |ПОМЕСТИТЬ ВТДатыНомераДней |ИЗ | (ВЫБРАТЬ @@ -599,11 +657,8 @@ |ВЫБРАТЬ | ДниВключенныеВГрафик.ГрафикРаботы, | ДниВключенныеВГрафик.ДатаГрафика, - | ВЫБОР - | КОГДА ДниВключенныеВГрафик.ПредпраздничныйДень - | ТОГДА 0 - | ИНАЧЕ ДЕНЬНЕДЕЛИ(ДниВключенныеВГрафик.ДатаГрафика) - | КОНЕЦ + | ДЕНЬНЕДЕЛИ(ДниВключенныеВГрафик.ДатаГрафика), + | ДниВключенныеВГрафик.ПредпраздничныйДень |ИЗ | ВТДниВключенныеВГрафик КАК ДниВключенныеВГрафик | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Календари КАК Календари @@ -613,18 +668,22 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗЛИЧНЫЕ | ДниВключенныеВГрафик.ГрафикРаботы, | ДниВключенныеВГрафик.ДатаГрафика, | ДниВключенныеВГрафик.НомерДня, - | РасписанияРаботы.ВремяНачала, - | РасписанияРаботы.ВремяОкончания + | ЕСТЬNULL(РасписанияРаботыПредпраздничногоДня.ВремяНачала, РасписанияРаботы.ВремяНачала) КАК ВремяНачала, + | ЕСТЬNULL(РасписанияРаботыПредпраздничногоДня.ВремяОкончания, РасписанияРаботы.ВремяОкончания) КАК ВремяОкончания |ПОМЕСТИТЬ ВТРасписанияРаботы |ИЗ | ВТДатыНомераДней КАК ДниВключенныеВГрафик | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Календари.РасписаниеРаботы КАК РасписанияРаботы | ПО (РасписанияРаботы.Ссылка = ДниВключенныеВГрафик.ГрафикРаботы) | И (РасписанияРаботы.НомерДня = ДниВключенныеВГрафик.НомерДня) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Календари.РасписаниеРаботы КАК РасписанияРаботыПредпраздничногоДня + | ПО (РасписанияРаботыПредпраздничногоДня.Ссылка = ДниВключенныеВГрафик.ГрафикРаботы) + | И (РасписанияРаботыПредпраздничногоДня.НомерДня = 0) + | И (ДниВключенныеВГрафик.ПредпраздничныйДень) | |ИНДЕКСИРОВАТЬ ПО | ДниВключенныеВГрафик.ГрафикРаботы, @@ -730,6 +789,10 @@ ].Добавить("КалендарныеГрафики"); КонецЕсли; + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена" + ].Добавить("КалендарныеГрафики"); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -747,6 +810,30 @@ КонецПроцедуры +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты – Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) – Булево. Признак получения объектов для плана обмена РИБ. +// Истина – требуется получить список объектов плана обмена РИБ; +// Ложь – требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Справочники.ПроизводственныеКалендари); + Объекты.Добавить(Метаданные.РегистрыСведений.ДанныеПроизводственногоКалендаря); + + Объекты.Добавить(Метаданные.Справочники.Календари); + Объекты.Добавить(Метаданные.РегистрыСведений.КалендарныеГрафики); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -759,14 +846,24 @@ Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.11"; - Обработчик.Процедура = "КалендарныеГрафики.СоздатьКалендарьПятидневкаРоссийскойФедерации"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.15"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари"; Обработчик.ОбщиеДанные = Истина; + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "КалендарныеГрафики.СоздатьКалендарьПятидневкаРоссийскойФедерации"; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.1"; Обработчик.Процедура = "КалендарныеГрафики.ЗаполнитьНастройкиЗаполненияГрафиковРаботы"; @@ -776,8 +873,13 @@ Обработчик.Процедура = "КалендарныеГрафики.ОбновитьИспользованиеНесколькихПроизводственныхКалендарей"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.42"; + Обработчик.Версия = "2.1.4.21"; + Обработчик.Процедура = "КалендарныеГрафики.ЗаполнитьКоличествоДнейВГрафикеСНачалаГода"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.24"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; + Обработчик.РежимВыполнения = "Монопольно"; Обработчик.ОбщиеДанные = Истина; КонецПроцедуры @@ -808,7 +910,7 @@ НовыйГрафикРаботы.ШаблонЗаполнения.Добавить().ДеньВключенВГрафик = НомерДня <= 5; КонецЦикла; - НовыйГрафикРаботы.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НовыйГрафикРаботы, Истина, Истина); КонецПроцедуры @@ -887,7 +989,7 @@ НоваяСтрока.ДеньВключенВГрафик = НомерДня <= КоличествоРабочихДней; КонецЦикла; КонецЕсли; - ГрафикРаботыОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГрафикРаботыОбъект); КонецЦикла; КонецПроцедуры @@ -903,6 +1005,71 @@ КонецПроцедуры +// Заполняет вторичные данные для оптимизации расчета дат по календарю +// +Процедура ЗаполнитьКоличествоДнейВГрафикеСНачалаГода() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.Год + |ПОМЕСТИТЬ ВТГрафикиРаботыКоличествоДнейЗаполнено + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + |ГДЕ + | КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода > 0 + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КалендарныеГрафики.Календарь КАК Календарь, + | КалендарныеГрафики.Год КАК Год, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.ДеньВключенВГрафик + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + | ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикиРаботыКоличествоДнейЗаполнено КАК ГрафикиРаботыКоличествоДнейЗаполнено + | ПО (ГрафикиРаботыКоличествоДнейЗаполнено.Календарь = КалендарныеГрафики.Календарь) + | И (ГрафикиРаботыКоличествоДнейЗаполнено.Год = КалендарныеГрафики.Год) + |ГДЕ + | ГрафикиРаботыКоличествоДнейЗаполнено.Год ЕСТЬ NULL + | + |УПОРЯДОЧИТЬ ПО + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.ДеньВключенВГрафик + |ИТОГИ ПО + | Календарь, + | Год"; + + // Выбираем графики работы и годы, для которых не заполнено значение ресурса КоличествоДнейВГрафикеСНачалаГода, + // заполняем для них последовательно рассчитывая количество дней + + Запрос = Новый Запрос(ТекстЗапроса); + ВыборкаПоГрафикам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока ВыборкаПоГрафикам.Следующий() Цикл + ВыборкаПоГодам = ВыборкаПоГрафикам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока ВыборкаПоГодам.Следующий() Цикл + НаборЗаписей = РегистрыСведений.КалендарныеГрафики.СоздатьНаборЗаписей(); + КоличествоДнейВГрафикеСНачалаГода = 0; + Выборка = ВыборкаПоГодам.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.ДеньВключенВГрафик Тогда + КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода + 1; + КонецЕсли; + СтрокаНабора = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаНабора, Выборка); + СтрокаНабора.КоличествоДнейВГрафикеСНачалаГода = КоличествоДнейВГрафикеСНачалаГода; + КонецЦикла; + НаборЗаписей.Отбор.Календарь.Установить(ВыборкаПоГодам.Календарь); + НаборЗаписей.Отбор.Год.Установить(ВыборкаПоГодам.Год); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -912,8 +1079,8 @@ Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); - Модуль.ЗапланироватьОбновлениеГрафиковРаботы(УсловияОбновления); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ЗапланироватьОбновлениеГрафиковРаботы(УсловияОбновления); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/КалендарныеГрафикиКлиентСервер/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиКлиентСервер/Module.bsl index 5942b906b..547ae2098 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиКлиентСервер/Module.bsl @@ -21,7 +21,8 @@ Возврат; КонецЕсли; - Если Не ЗначениеЗаполнено(ТекущаяСтрока[ПолеУпорядочивания]) Тогда + Если ТипЗнч(ТекущаяСтрока[ПолеУпорядочивания]) <> Тип("Дата") + И Не ЗначениеЗаполнено(ТекущаяСтрока[ПолеУпорядочивания]) Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index ee2be8815..7b9dbda14 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -11,10 +11,6 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики[ - "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "КалендарныеГрафикиСлужебныйВМоделиСервиса"); - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда СерверныеОбработчики[ "СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные\ПриОпределенииОбработчиковПоставляемыхДанных"].Добавить( @@ -155,80 +151,6 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.2.6"; - Обработчик.Процедура = "КалендарныеГрафикиСлужебныйВМоделиСервиса.ЗаполнитьФлагиРучногоИзменения"; - Обработчик.Опциональный = Истина; - Обработчик.ОбщиеДанные = Истина; - КонецЕсли; - -КонецПроцедуры - -// Вызывается при обновлении версии в модели сервиса -// -Процедура ЗаполнитьФлагиРучногоИзменения() Экспорт - - УстановитьПривилегированныйРежим (Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - |ГДЕ - | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется)"); - - ВыборкаОбластей = Запрос.Выполнить().Выбрать(); - Попытка - Пока ВыборкаОбластей.Следующий() Цикл - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ВыборкаОбластей.ОбластьДанных); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | УдалитьСвязиПоставляемыхДанных.ЭлементОбщихДанных КАК ГрафикРаботы - |ИЗ - | РегистрСведений.УдалитьСвязиПоставляемыхДанных КАК УдалитьСвязиПоставляемыхДанных - |ГДЕ - | УдалитьСвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных - | И ТИПЗНАЧЕНИЯ(УдалитьСвязиПоставляемыхДанных.ЭлементОбщихДанных) = ТИП(Справочник.ПроизводственныеКалендари) - | И УдалитьСвязиПоставляемыхДанных.РучноеИзменение"); - - Запрос.УстановитьПараметр("ОбластьДанных", ВыборкаОбластей.ОбластьДанных); - - ВыборкаСправочников = Запрос.Выполнить().Выбрать(); - Пока ВыборкаСправочников.Следующий() Цикл - // Если в при использовании подсистемы «Поставляемые данные» был отказ от автоматического обновления, - // добавим запись в регистр ручных изменений графиков работы - НоваяЗапись = РегистрыСведений.РучныеИзмененияГрафиковРаботы.СоздатьМенеджерЗаписи(); - НоваяЗапись.ГрафикРаботы = ВыборкаСправочников.ГрафикРаботы; - НоваяЗапись.Год = 0; - НоваяЗапись.Записать(); - // Запись с незаполненным полем Год при обновлении интерпретируется - // как отказ от обновления графика за все годы - КонецЦикла; - КонецЦикла; - Исключение - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - ВызватьИсключение; - КонецПопытки; - - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - -КонецПроцедуры - // Вызывается при изменении производственных календарей // Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт @@ -300,9 +222,10 @@ Функция НачалоЭлемента(Знач ЧтениеXML, Знач Имя) Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'"), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", + Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; @@ -313,9 +236,10 @@ Функция КонецЭлемента(Знач ЧтениеXML, Знач Имя) Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'"), УровеньЖурналаРегистрации.Ошибка, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", + Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl new file mode 100644 index 000000000..7d2028279 --- /dev/null +++ b/SSL/src/CommonModules/КонтактнаяИнформацияXML/Module.bsl @@ -0,0 +1,676 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация" +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Сравнивает два XML и возвращает результат в виде таблицы значений. +// +// Параметры: +// Текст1, Текст2 - строки с XML данными +// +// Возвращает таблица значений с колонками: +// - Путь - строка - XPath путь к месту различия +// - Значение1 - строка - значение в XML из параметра Текст1 +// - Значение2 - строка - значение в XML из параметра Текст2 +// +Функция РазличияXML(Знач Текст1, Знач Текст2) Экспорт + Возврат ЗначениеИзСтрокиXML( XSLT_ТаблицаЗначенийРазличияXML(Текст1, Текст2) ); +КонецФункции + +// Возвращает соответствующее значение перечисления "ТипыКонтактнойИнформации" по строке XML +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию +// +Функция ТипКонтактнойИнформации(Знач XMLСтрока) Экспорт + Возврат ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока) ); +КонецФункции + +// Читает строку состава из значения контактной информации +// Если значение состава сложного типа, то возвращает неопределено +// +// Параметры: +// Текст XML строка контактной информации. Может быть модифицирован +// +Функция СтрокаСоставаКонтактнойИнформации(Знач Текст, Знач НовоеЗначение=Неопределено) Экспорт + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(Текст); + ОбъектXDTO= ФабрикаXDTO.ПрочитатьXML(Чтение, + ФабрикаXDTO.Тип(КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(), "КонтактнаяИнформация")); + + Состав = ОбъектXDTO.Состав; + Если Состав<>Неопределено + И Состав.Свойства().Получить("Значение")<>Неопределено + И ТипЗнч(Состав.Значение)=Тип("Строка") + Тогда + Возврат Состав.Значение; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +// Преобразует строку пар ключ=значение (см старый формат адреса) в структуру. +// +// Параметры: +// Текст - строка пар ключ=значение, разделенные переносом строки +// +Функция СтрокаКлючЗначениеВСтруктуру(Знач Текст) Экспорт + Возврат ЗначениеИзСтрокиXML( XSLT_СтрокаКлючЗначениеВСтруктуру(Текст) ); +КонецФункции + +// Преобразует строку пар ключ-значение (см старый формат адреса) в список значений. +// В возвращаемом списке значений представление - исходный ключ, значение - исходное значение +// +// Параметры: +// Текст - строка пар ключ=значение, разделенные переносом строки +// +Функция СтрокаКлючЗначениеВСписокЗначений(Знач Текст, Знач УникальностьПолей=Истина) Экспорт + Если УникальностьПолей Тогда + Возврат ЗначениеИзСтрокиXML( XSLT_УникальныеПоПредставлениюВСписке(XSLT_СтрокаКлючЗначениеВСписокЗначений(Текст)) ); + КонецЕсли; + Возврат ЗначениеИзСтрокиXML( XSLT_СтрокаКлючЗначениеВСписокЗначений(Текст) ); +КонецФункции + +// Преобразует структуру в строку пар ключ-значение, разделенный запятыми +// +// Параметры: +// Структура - исходная структура +// +Функция СтруктураВСтрокуКлючЗначение(Знач Структура) Экспорт + Возврат XSLT_СтруктураВСтрокуКлючЗначение( ЗначениеВСтрокуXML(Структура) ); +КонецФункции + +// Преобразует список значений в строку пар ключ-значение, разделенный запятыми +// +// Параметры: +// Список - список значений +// +Функция СписокЗначенийВСтрокуКлючЗначение(Знач Список) Экспорт + Возврат XSLT_СписокЗначенийВСтрокуКлючЗначение( ЗначениеВСтрокуXML(Список) ); +КонецФункции + +// Преобразует структуру в список значений. Ключ преобразуется в представление. +// +// Параметры: +// Структура - исходная структура +// +Функция СтруктураВСписокЗначений(Знач Структура) Экспорт + Возврат ЗначениеИзСтрокиXML( XSLT_СтруктураВСписокЗначений( ЗначениеВСтрокуXML(Структура) ) ); +КонецФункции + +// Преобразует список значений в структуру. Представление преобразуется в ключ. +// +// Параметры: +// Структура - исходная структура +// +Функция СписокЗначенийВСтруктуру(Знач Список) Экспорт + Возврат ЗначениеИзСтрокиXML( XSLT_СписокЗначенийВСтруктуру( ЗначениеВСтрокуXML(Список) ) ); +КонецФункции + +// Сравнивает два экземпляра контактной инфромации. +// +// Параметры: +// Данные1, Данные2 - данные экземпляров контактной информации. Каждый параметр независимо может принимать +// значения следующих типов: +// - ОбъектXTDO. Рассматривается как объект с контактной информацией +// - Строка. Рассматривается как контактная информация в формате XML +// - Структура, описывающие контактную информацию. Ожидаются поля: +// ЗначенияПолей - строка (XML или старый формат ключ-значение), структура, список значений, +// соответствие. Если в этом поле передана строка XML, то остальные поля +// структуры игнорируются. +// Представление - строка представления. Используется в случае, если не удалось вычислить +// представление из ЗначенияПолей (отсутствие в них поля Представление) +// ВидКонтактнойИнформации - ссылка на справочник ВидыКонтактнойИнформации или значение перечисления +// ТипыКонтактнойИнформации. Используется в случае, если не удалось вычислить +// тип из ЗначенияПолей +// Комментарий - строка комментария. Используется в случае, если не удалось вычислить +// комментарий из ЗначенияПолей +// +// Возвращает таблицу отличающихся полей со следующими колонками: +// Путь - строка XPath, идентифицирующая различающееся значение. Значение "ТипКонтактнойИнформации" означает, +// что переданные экземпляры контактной информации различаются типом. +// Описание - строка описания отличающегося реквизита в терминах предметной области +// Значение1 - строка значения, соответствующая объекту, переданному в параметре Данные1 +// Значение2 - строка значения, соответствующая объекту, переданному в параметре Данные2 +// +Функция РазличияКонтактнойИнформации(Знач Данные1, Знач Данные2) Экспорт + ДанныеКИ1 = ПривестиКонтактнуюИнформациюXML(Данные1); + ДанныеКИ2 = ПривестиКонтактнуюИнформациюXML(Данные2); + + ТипКонтактнойИнформации = ДанныеКИ1.ТипКонтактнойИнформации; + Если ТипКонтактнойИнформации<>ДанныеКИ2.ТипКонтактнойИнформации Тогда + // Различные типы, дальше не сравниваем + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата[Колонки.Добавить("Путь").Имя] = "ТипКонтактнойИнформации"; + СтрокаРезультата[Колонки.Добавить("Значение1").Имя] = ДанныеКИ1.ТипКонтактнойИнформации; + СтрокаРезультата[Колонки.Добавить("Значение2").Имя] = ДанныеКИ2.ТипКонтактнойИнформации; + СтрокаРезультата[Колонки.Добавить("Описание").Имя] = НСтр("ru='Различные типы контактной информации'"); + Возврат Результат; + КонецЕсли; + + ТекстРазличияXML = XSLT_ТаблицаЗначенийРазличияXML(ДанныеКИ1.ДанныеXML, ДанныеКИ2.ДанныеXML); + + // Отдаем интерпретацию в зависимости от типа + Возврат ЗначениеИзСтрокиXML( XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( + ТекстРазличияXML, ТипКонтактнойИнформации)); + +КонецФункции + +// Преобразует контактную информацию в вид XML +// +// Параметры: +// Данные - строка XML, объект XTDO или структура, описывающие контактную информацию. +// В структуре ожидаются поля: +// "ЗначенияПолей" - строка (XML или старый формат ключ-значение) или структура или список значений. +// Если в этом поле передана строка XML, то остальные поля игнорируются +// "ВидКонтактнойИнформации" - СправочникСсылка.ВидыКонтактнойИнформации +// или Перечисление.ТипыКонтактнойИнформации +// "Представление" - строка представления +// "Комментарий" - необязательная строка комментария +// +// Возвращаемое значение - структура с полями: +// ТипКонтактнойИнформации - Перечисление.ТипыКонтактнойИнформации +// ДанныеXML - строка с текстом XML +// +Функция ПривестиКонтактнуюИнформациюXML(Знач Данные) Экспорт + Если ЭтоСтрокаXML(Данные) Тогда + Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", + Данные, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(Данные) )); + + ИначеЕсли ТипЗнч(Данные)=Тип("ОбъектXDTO") Тогда + ДанныеXML = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(Данные); + Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", + ДанныеXML, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(ДанныеXML) )); + + КонецЕсли; + // Ожидаем структуру + + Комментарий = Неопределено; + Данные.Свойство("Комментарий", Комментарий); + + ЗначенияПолей = Данные.ЗначенияПолей; + Если ЭтоСтрокаXML(ЗначенияПолей) Тогда + // Возможно необходимо переопределить комментарий + Если Не ПустаяСтрока(Комментарий) Тогда + КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(ЗначенияПолей, Комментарий); + КонецЕсли; + Возврат Новый Структура("ДанныеXML, ТипКонтактнойИнформации", + ЗначенияПолей, ЗначениеИзСтрокиXML( XSLT_ТипКонтактнойИнформацииПоСтрокеXML(ЗначенияПолей) )); + + КонецЕсли; + + // Разбираем по ЗначенияПолей, ВидКонтактнойИнформации, Представление + ТипЗначенийПолей = ТипЗнч(ЗначенияПолей); + Если ТипЗначенийПолей=Тип("Строка") Тогда + // Текст из пар ключ-значение + СтрокаXMLСтруктуры = XSLT_СтрокаКлючЗначениеВСтруктуру(ЗначенияПолей) + ИначеЕсли ТипЗначенийПолей=Тип("СписокЗначений") Тогда + // Список значений + СтрокаXMLСтруктуры = XSLT_СписокЗначенийВСтруктуру( ЗначениеВСтрокуXML(ЗначенияПолей) ); + ИначеЕсли ТипЗначенийПолей=Тип("Соответствие") Тогда + // Соответствие + СтрокаXMLСтруктуры = XSLT_СоответствиеВСтруктуру( ЗначениеВСтрокуXML(ЗначенияПолей) ); + Иначе + // Ожидаем структуру + СтрокаXMLСтруктуры = ЗначениеВСтрокуXML(ЗначенияПолей); + КонецЕсли; + + // Разбираем по ВидКонтактнойИнформации + ТипКонтактнойИнформации = УправлениеКонтактнойИнформацией.ТипВидаКонтактнойИнформации( + Данные.ВидКонтактнойИнформации); + Результат = Новый Структура("ТипКонтактнойИнформации, ДанныеXML", ТипКонтактнойИнформации); + + ВсеТипы = Перечисления.ТипыКонтактнойИнформации; + Если ТипКонтактнойИнформации=ВсеТипы.Адрес Тогда + Результат.ДанныеXML = XSLT_СтруктураВАдрес(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + ИначеЕсли ТипКонтактнойИнформации=ВсеТипы.АдресЭлектроннойПочты Тогда + Результат.ДанныеXML = XSLT_СтруктураВАдресЭлектроннойПочты(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + ИначеЕсли ТипКонтактнойИнформации=ВсеТипы.ВебСтраница Тогда + Результат.ДанныеXML = XSLT_СтруктураВВебСтраницу(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + ИначеЕсли ТипКонтактнойИнформации=ВсеТипы.Телефон Тогда + Результат.ДанныеXML = XSLT_СтруктураВТелефон(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + ИначеЕсли ТипКонтактнойИнформации=ВсеТипы.Факс Тогда + Результат.ДанныеXML = XSLT_СтруктураВФакс(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + ИначеЕсли ТипКонтактнойИнформации=ВсеТипы.Другое Тогда + Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + + Иначе + ВызватьИсключение НСтр("ru='Ошибка параметров преобразования, не определен тип контактной информации'"); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +// Преобразует список значений, оставляя из него только последние значения пар ключ-значение по ключу-представлению. +// +// Параметры: +// Текст - сериализованный список значений +// +// Возвращаемое значение - строка XML сериализованного списка значений +// +Функция XSLT_УникальныеПоПредставлениюВСписке(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_УникальныеПоПредставлениюВСписке(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Производит проверку двух строк XML - параметра и текущего +// Результат преобразования - сериализованый ValueTable (http://v8.1c.ru/8.1/data/core), в котором три колонки: +// - Путь - строка - путь к месту различия +// - Значение1 - строка - значение в XML из параметра Текст1 +// - Значение2 - строка - значение в XML из параметра Текст2 +// +// Проверяем только строки и атрибуты, без пробельных, CDATA и т.п. Порядок важен. +// +Функция XSLT_ТаблицаЗначенийРазличияXML(Текст1, Текст2) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_ТаблицаЗначенийРазличияXML(); + + Построитель = Новый ТекстовыйДокумент; + Построитель.ДобавитьСтроку("<dn><f>"); + Построитель.ДобавитьСтроку( XSLT_УдалитьОписаниеXML(Текст1) ); + Построитель.ДобавитьСтроку("</f><s>"); + Построитель.ДобавитьСтроку( XSLT_УдалитьОписаниеXML(Текст2) ); + Построитель.ДобавитьСтроку("</s></dn>"); + + Возврат Преобразователь.ПреобразоватьИзСтроки( Построитель.ПолучитьТекст() ); +КонецФункции + +// Преобразует текст с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. +// В случае повторных ключей все включаются в результат, но при десериализации будет использован +// последний (особенность работы сериализатора платформы) +// +// Параметры: +// Текст - строка с парами Ключ=Значение +// +// Возвращаемое значение - строка XML сериализованной структуры +// +Функция XSLT_СтрокаКлючЗначениеВСтруктуру(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтрокаКлючЗначениеВСтруктуру(); + Возврат Преобразователь.ПреобразоватьИзСтроки( XSLT_УзелСтрокиПараметра(Текст) ); +КонецФункции + +// Преобразует текст с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. +// В случае повторных ключей все включаются в результат +// +// Параметры: +// Текст - строка с парами Ключ=Значение +// +// Возвращаемое значение - строка XML сериализованного списка значений +// +Функция XSLT_СтрокаКлючЗначениеВСписокЗначений(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтрокаКлючЗначениеВСписокЗначений(); + Возврат Преобразователь.ПреобразоватьИзСтроки( XSLT_УзелСтрокиПараметра(Текст) ); +КонецФункции + +// Преобразует список значений в строку пар ключ=значение, разделенных переносом строки +// +// Параметры: +// Текст - сериализованный список значений +// +// Возвращаемое значение - строка результата +// +Функция XSLT_СписокЗначенийВСтрокуКлючЗначение(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СписокЗначенийВСтрокуКлючЗначение(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Преобразует структуру в строку пар ключ=значение, разделенных переносом строки +// +// Параметры: +// Текст - сериализованная структура +// +// Возвращаемое значение - строка результата +// +Функция XSLT_СтруктураВСтрокуКлючЗначение(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВСтрокуКлючЗначение(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Преобразует список значений в структур. Представление преобразуется в ключ +// +// Параметры: +// Текст - сериализованный список значений +// +// Возвращаемое значение - сериализованная структура +// +Функция XSLT_СписокЗначенийВСтруктуру(Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СписокЗначенийВСтруктуру(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Преобразует структуру в список значений. Ключ преобразуется в представление. +// +// Параметры: +// Текст - сериализованная структура +// +// Возвращаемое значение - сериализованный список значений +// +Функция XSLT_СтруктураВСписокЗначений(Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВСписокЗначений(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Преобразует соответсвие в структуру. Ключ преобразуется в ключ, значение - в значение. +// +// Параметры: +// Текст - сериализованное соответствие +// +// Возвращаемое значение - сериализованная структура +// +Функция XSLT_СоответствиеВСтруктуру(Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СоответствиеВСтруктуру(); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Анализирует таблицу Путь-Значение1-Значение2 для указанного вида контактной информации +// +// Параметры: +// Текст - строка XML с ValueTable из результата сравнения XML. Ожидаются колонки +// "Путь", "Значение1", "Значение2". +// ТипКонтактнойИнформации - значение перечисления типа +// +// Возвращает сериализованную таблицу значений отличающихся полей с колонками +// "Путь", "Описание", "Значение1", "Значение2". +// +Функция XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач Текст, Знач ТипКонтактнойИнформации) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( + ТипКонтактнойИнформации); + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВАдрес(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВАдрес(); + Возврат XSLT_КонтрольПредставленияИКомментария( + Преобразователь.ПреобразоватьИзСтроки(Текст), + Представление, Комментарий); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВАдресЭлектроннойПочты(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВАдресЭлектроннойПочты(); + + Возврат XSLT_КонтрольПредставленияИКомментария( + XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), + Представление, Комментарий); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВВебСтраницу(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВВебСтраницу(); + + Возврат XSLT_КонтрольПредставленияИКомментария( + XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), + Представление, Комментарий); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВТелефон(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВТелефон(); + Возврат XSLT_КонтрольПредставленияИКомментария( + Преобразователь.ПреобразоватьИзСтроки(Текст), + Представление, Комментарий); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВФакс(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВФакс(); + Возврат XSLT_КонтрольПредставленияИКомментария( + Преобразователь.ПреобразоватьИзСтроки(Текст), + Представление, Комментарий); +КонецФункции + +// Преобразует структуру в XML контакной информации +// +// Параметры: +// Текст - сериализованная структура +// Представление - необязательное представление. Используется, только если в структуре нет поля представления +// Комментарий - необязательный комментарий. Используется, только если в структуре нет поля комментария +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_СтруктураВДругое(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_СтруктураВДругое(); + + Возврат XSLT_КонтрольПредставленияИКомментария( + XSLT_КонтрольСтроковогоЗначенияПростогоТипа( Преобразователь.ПреобразоватьИзСтроки(Текст), Представление), + Представление, Комментарий); +КонецФункции + +// Устанавливает в контактной информации представление и комментарий, если они не заполнены +// +// Параметры: +// Текст - XML контактной информации +// Представление - необязательное устанавливаемое представление. +// Комментарий - необязательный устанавливаемый комментарий. +// +// Возвращаемое значение - XML контактной информации +// +Функция XSLT_КонтрольПредставленияИКомментария(Знач Текст, Знач Представление=Неопределено, Знач Комментарий=Неопределено) + Если Представление=Неопределено И Комментарий=Неопределено Тогда + Возврат Текст; + КонецЕсли; + + XSLT_Текст = Новый ТекстовыйДокумент; + XSLT_Текст.ДобавитьСтроку(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:tns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + | <xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + | <xsl:template match=""node() | @*""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" /> + | </xsl:copy> + | </xsl:template> + |"); + + Если Представление<>Неопределено Тогда + XSLT_Текст.ДобавитьСтроку(" + | <xsl:template match=""tns:КонтактнаяИнформация/@Представление""> + | <xsl:attribute name=""Представление""> + | <xsl:choose> + | <xsl:when test="".=''"">" + МногострочнаяСтрокаXML(Представление) + "</xsl:when> + | <xsl:otherwise> + | <xsl:value-of select="".""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | </xsl:template> + |"); + КонецЕсли; + + Если Комментарий<>Неопределено Тогда + XSLT_Текст.ДобавитьСтроку(" + | <xsl:template match=""tns:КонтактнаяИнформация/tns:Комментарий""> + | <xsl:element name=""Комментарий""> + | <xsl:choose> + | <xsl:when test=""text()=''"">" + МногострочнаяСтрокаXML(Комментарий) + "</xsl:when> + | <xsl:otherwise> + | <xsl:value-of select="".""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | </xsl:template> + |"); + КонецЕсли; + XSLT_Текст.ДобавитьСтроку(" + |</xsl:stylesheet> + |"); + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки( XSLT_Текст.ПолучитьТекст() ); + + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +// Устанавливает в контактной информации Состав.Значение на переданное представление +// +// Параметры: +// Текст - XML контактной информации +// Представление - устанавливаемое представление. +// +// Если Представление равно неопределено, то никаких действий не производит. Иначе проверяет на пустоту +// Состав. Если там ничего нет и атрибут "Состав.Значение" пуст, то ставим в состав значение представления +// +Функция XSLT_КонтрольСтроковогоЗначенияПростогоТипа(Знач Текст, Знач Представление) + Если Представление=Неопределено Тогда + Возврат Текст; + КонецЕсли; + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:tns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + | <xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + | <xsl:template match=""node() | @*""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" /> + | </xsl:copy> + | </xsl:template> + | + | <xsl:template match=""tns:КонтактнаяИнформация/tns:Состав/@Значение""> + | <xsl:attribute name=""Значение""> + | <xsl:choose> + | <xsl:when test="".=''"">" + МногострочнаяСтрокаXML(Представление) + "</xsl:when> + | <xsl:otherwise> + | <xsl:value-of select="".""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Возвращает фрагмент XML для подстановки строки в виде <Узел>Строка<Узел> +// +// Параметры: +// - Текст - строка, вставляемая в XML +// - ИмяЭлемента - необязательное имя для внешнего узла +// +Функция XSLT_УзелСтрокиПараметра(Знач Текст, Знач ИмяЭлемента="ExternalParamNode") + // Через запись xml для маскировки спецсимволов + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + Запись.ЗаписатьНачалоЭлемента(ИмяЭлемента); + Запись.ЗаписатьТекст(Текст); + Запись.ЗаписатьКонецЭлемента(); + Возврат Запись.Закрыть(); +КонецФункции + +// Возвращает XML без описания <?xml...> для включения внутрь другого XML +// +// Параметры: +// - Текст - исходный XML +// +Функция XSLT_УдалитьОписаниеXML(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_УдалитьОписаниеXML(); + Возврат Преобразователь.ПреобразоватьИзСтроки(СокрЛ(Текст)); +КонецФункции + +// Преобразует текст XML контактной информации в перечисление типа +// +// Параметры: +// - Текст - исходный XML +// +// Возвращаемое значение - сериализованное значение перечисления ТипыКонтактнойИнформации +// +Функция XSLT_ТипКонтактнойИнформацииПоСтрокеXML(Знач Текст) + Преобразователь = КонтактнаяИнформацияСлужебныйПовтИсп.XSLT_ТипКонтактнойИнформацииПоСтрокеXML(); + Возврат Преобразователь.ПреобразоватьИзСтроки(СокрЛ(Текст)); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Возвращает признак того, является ли текст XML +// +// Параметры: +// Текст - проверяемый текст +// +Функция ЭтоСтрокаXML(Текст) + Возврат ТипЗнч(Текст)=Тип("Строка") И Лев(СокрЛ(Текст),1)="<"; +КонецФункции + +// Десериализатор известных платформе типов +Функция ЗначениеИзСтрокиXML(Знач Текст) + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Текст); + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); +КонецФункции + +// Сериализатор известных платформе типов +Функция ЗначениеВСтрокуXML(Знач Значение) + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Ложь, Ложь, "")); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); + // Платформенный сериализатор позволяет записать в значение атрибутов перенос строки + Возврат СтрЗаменить(ЗаписьXML.Закрыть(), Символы.ПС, " "); +КонецФункции + +// Для работы с атрибутами содержащими переносы строк +Функция МногострочнаяСтрокаXML(Знач Текст) + Возврат СтрЗаменить(Текст, Символы.ПС, " "); +КонецФункции diff --git a/SSL/src/CommonModules/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonModules/КонтактнаяИнформацияXML/КонтактнаяИнформацияXML.mdo similarity index 62% rename from SSL/src/CommonModules/СтруктураПодчиненности/СтруктураПодчиненности.mdo rename to SSL/src/CommonModules/КонтактнаяИнформацияXML/КонтактнаяИнформацияXML.mdo index 894f590ae..89c6972d7 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonModules/КонтактнаяИнформацияXML/КонтактнаяИнформацияXML.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ac78ccb4-6560-4daf-80e2-07df4d71a13e"> - <name>СтруктураПодчиненности</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="caf79125-bde8-4f52-8ad2-f915c7a884cc"> + <name>КонтактнаяИнформацияXML</name> <synonym> <key>ru</key> - <value>Структура подчиненности</value> + <value>Контактная информация XML</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/Module.bsl deleted file mode 100644 index 61da56487..000000000 --- a/SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/Module.bsl +++ /dev/null @@ -1,52 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контактная информация" -// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Разбирает представление контактной информации и возвращает строку XML со значениями полей -// -// Параметры: -// Текст - строка XML -// ОжидаемыйТип - ссылка на вид КИ или перечисление типа КИ для контроля типов -// -Функция ПарсингКонтактнойИнформацииXML(Текст, ОжидаемыйВид) Экспорт - Возврат КонтактнаяИнформацияСлужебный.ПарсингКонтактнойИнформацииXML(Текст, ОжидаемыйВид); -КонецФункции - -// Возвращает представление контактной информации, хранящееся внутри XML. -// -// Параметры: -// Текст - XML строка контактной информации -// -Функция ПредставлениеКонтактнойИнформацииXML(Текст) Экспорт - Возврат КонтактнаяИнформацияСлужебный.ПредставлениеКонтактнойИнформации(Текст); -КонецФункции - -// Возвращает или устанавливает комментарий для контактной информации -// -// Параметры: -// Текст - XML строка контактной информации. Строка может измениться. -// НовоеЗначение - необязательный устанавливаемый новый комментарий. Если параметр не указан, -// то значение параметра "Текст" не меняется, иначе он принимает значение XML, -// соответствующее сериализованной КИ с новым комментарием -// Возвращаемое значение: -// Комментарий, хранящийся внутри XML. Возможно обновленный после установки из параметра "НовоеЗначение" -// -Функция КомментарийКонтактнойИнформацииXML(Текст, НовоеЗначение=Неопределено) Экспорт - Возврат КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(Текст, НовоеЗначение); -КонецФункции - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает значение перечисления типа соответствующего переданному виду КИ -// -// Параметры: -// ВидИнформации - ссылка на справочник ВидыКонтактнойИнформации -// -Функция ТипВидаКонтактнойИнформации(ВидИнформации) Экспорт - Возврат ВидИнформации.Тип; -КонецФункции diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиент/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияКлиент/Module.bsl deleted file mode 100644 index c171fdf2f..000000000 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиент/Module.bsl +++ /dev/null @@ -1,250 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контактная информация" -// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Конструктор для структуры параметров открытия формы контактной информации -// -// Параметры: -// ВидКонтактнойИнформации - вид редактируемой информации, СправочникСсылка.ВидыКонтактнойИнформации -// Значение - строка с сериализованным значением полей контактной информации -// Представление - необязательное представление -// -Функция ПараметрыФормыКонтактнойИнформации(ВидКонтактнойИнформации, Значение, Представление=Неопределено) Экспорт - Возврат Новый Структура("ВидКонтактнойИнформации, ЗначенияПолей, Представление", - ВидКонтактнойИнформации, Значение, Представление - ); -КонецФункции - -// Открывает подходящую форму контактной информации для редактирования или просмотра -// -// Параметры: -// Параметры - результат функции ПараметрыФормыКонтактнойИнформации -// Владелец - параметр для открываемой формы -// Уникальность - параметр для открываемой формы -// Окно - параметр для открываемой формы -// -Процедура ОткрытьФормуКонтактнойИнформации(Параметры, Владелец=Неопределено, Уникальность=Неопределено, Окно=Неопределено) Экспорт - ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно); -КонецПроцедуры - -// Модально открывает подходящую форму контактной информации для редактирования или просмотра -// -// Параметры: -// Параметры - результат функции ПараметрыФормыКонтактнойИнформации -// Владелец - параметр для открываемой формы -// Уникальность - параметр для открываемой формы -// Окно - параметр для открываемой формы -// Таймаут - параметр для открываемой формы -// -Функция ОткрытьФормуКонтактнойИнформацииМодально(Параметры, Владелец=Неопределено, Уникальность=Неопределено, Окно=Неопределено) Экспорт - Возврат ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно, Истина); -КонецФункции - -// Обработчик события НачалоВыбора для улицы -// -// Параметры: -// Элемент - вызывающий элемент формы -// КодКлассификатораНаселенногоПункта - ограничение по населенному пункту -// ТекущееЗначение - текущее значение - или код классификатора, или текст -// ПараметрыФормы - необязательная дополнительная структура параметров для формы подбора -// -Процедура НачалоВыбораУлицы(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, ПараметрыФормы=Неопределено) Экспорт - Если КодКлассификатораНаселенногоПункта<=0 Тогда - Возврат; - КонецЕсли; - - Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); - ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; - Если Вариант=Неопределено Тогда - // Нет подсистемы классификатора - Возврат; - ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда - НачалоВыбораУлицыКЛАДР(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, ПараметрыФормы); - КонецЕсли; - -КонецПроцедуры - -// Обработчик события НачалоВыбора для элемента адреса (субъект РФ, район, город и т.п.) -// -// Параметры: -// Элемент - вызывающий элемент формы -// КодЧастиАдреса - идентификатор обрабатываемой части адреса, зависит от классификатора -// ЧастиАдреса - значения для других частей адреса, зависит от классификатора -// ПараметрыФормы - необязательная дополнительная структура параметров для формы подбора -// -Процедура НачалоВыбораЭлементаАдреса(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы=Неопределено) Экспорт - Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); - ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; - - Если Вариант=Неопределено Тогда - // Нет подсистемы классификатора - Возврат; - ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда - НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы); - КонецЕсли; - -КонецПроцедуры - -// Возвращает полное наименование для населенного пункта. Под населенным пунктом понимается синтетическое -// поле, характеризующее все, что больше улицы -// -// Параметры: -// ЧастиАдреса - значения для частей адреса, зависит от классификатора -// -Функция НаименованиеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса) Экспорт - Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); - ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; - - Если Вариант=Неопределено Тогда - // Нет подсистемы классификатора - Возврат ""; - ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда - Возврат НаименованиеНаселенногоПунктаПоЧастямАдресаКЛАДР(ЧастиАдреса) - КонецЕсли; - - Возврат ""; -КонецФункции - -// Предлагает загрузить адресный классификатор -// -// Параметры: -// Текст - строка с дополнительным текстов предложения -// -Процедура ПредложениеЗагрузкиКлассификатора(Текст="") Экспорт - -#Если ВебКлиент Тогда - Возврат; -#КонецЕсли - - Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); - ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; - - Если Вариант=Неопределено Тогда - // Нет подсистемы классификатора - Возврат; - ИначеЕсли Вариант<>ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда - Возврат; - КонецЕсли; - - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = Текст + Символы.ПС + НСтр("ru='Загрузить классификатор сейчас?'"); - - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ЗагрузитьАдресныйКлассификатор(); - КонецЕсли; - -КонецПроцедуры - -// Загружает адресный классификатор -// -Процедура ЗагрузитьАдресныйКлассификатор() Экспорт -#Если ВебКлиент Тогда - Возврат; -#КонецЕсли - - Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); - ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; - - Если Вариант=Неопределено Тогда - // Нет подсистемы классификатора - Возврат; - ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульКЛАДР = Вычислить("АдресныйКлассификаторКлиент"); - МодульКЛАДР.ЗагрузитьАдресныйКлассификатор(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// - -Функция ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно, Модально=Ложь) - - Если Не Параметры.Свойство("Заголовок") Тогда - Параметры.Вставить("Заголовок", Строка(Параметры.ВидКонтактнойИнформации)); - КонецЕсли; - - ИмяОткрываемойФормы = КонтактнаяИнформацияКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); - Если ИмяОткрываемойФормы=Неопределено Тогда - ВызватьИсключение НСтр("ru='Не обрабатываемый тип адреса: """ + Параметры.ВидКонтактнойИнформации + """'"); - КонецЕсли; - - Если Модально Тогда - Возврат ОткрытьФормуМодально(ИмяОткрываемойФормы, Параметры, Владелец); - КонецЕсли; - - ОткрытьФорму(ИмяОткрываемойФормы, Параметры, Владелец, Уникальность, Окно); - Возврат Неопределено; -КонецФункции - -// ------------------------------------------------------------------------------------------------- -// Реализация КЛАДР -// - -Процедура НачалоВыбораУлицыКЛАДР(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, Параметры=Неопределено) - ПараметрыФормы = ?(Параметры=Неопределено, Новый Структура, Параметры); - - ПараметрыФормы.Вставить("Уровень", 5); - ПараметрыФормы.Вставить("Улица", Строка(ТекущееЗначение)); - - ИмяФормыКЛАДР = "РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора"; - ОткрытьФорму(ИмяФормыКЛАДР, ПараметрыФормы, Элемент); -КонецПроцедуры - -Процедура НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, Параметры=Неопределено) - - ПараметрыФормы = ?(Параметры=Неопределено, Новый Структура, Параметры); - - ПараметрыФормы.Вставить("Регион", ЧастиАдреса.Регион.Значение); - ПараметрыФормы.Вставить("Район", ЧастиАдреса.Район.Значение); - ПараметрыФормы.Вставить("Город", ЧастиАдреса.Город.Значение); - ПараметрыФормы.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Значение); - - КодРеквизита = ВРег(КодЧастиАдреса); - Если КодРеквизита="РЕГИОН" Тогда - Уровень = 1; - ИначеЕсли КодРеквизита="РАЙОН" Тогда - Уровень = 2; - ИначеЕсли КодРеквизита="ГОРОД" Тогда - Уровень = 3; - ИначеЕсли КодРеквизита="НАСЕЛЕННЫЙПУНКТ" Тогда - Уровень = 4; - ИначеЕсли КодРеквизита="УЛИЦА" Тогда - Уровень = 5; - Иначе - Возврат; - КонецЕсли; - ПараметрыФормы.Вставить("Уровень", Уровень); - - ИмяФормыКЛАДР = "РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора"; - ОткрытьФорму(ИмяФормыКЛАДР, ПараметрыФормы, Элемент); -КонецПроцедуры - -Функция НаименованиеНаселенногоПунктаПоЧастямАдресаКЛАДР(ЧастиАдреса) - Возврат КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - ЗначениеИлиНаименование(ЧастиАдреса.НаселенныйПункт), "", - ЗначениеИлиНаименование(ЧастиАдреса.Город), "", - ЗначениеИлиНаименование(ЧастиАдреса.Район), "", - ЗначениеИлиНаименование(ЧастиАдреса.Регион), "", - ); -КонецФункции - -// ------------------------------------------------------------------------------------------------- -// Общие служебные методы -// - -Функция ЗначениеИлиНаименование(ЧастьАдреса) - Если ПустаяСтрока(ЧастьАдреса.Значение) Тогда - Возврат СокрЛП("" + ЧастьАдреса.Наименование + " " + ЧастьАдреса.Сокращение); - КонецЕсли; - Возврат ЧастьАдреса.Значение; -КонецФункции - diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl index 7adad351c..dcc922058 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСервер/Module.bsl @@ -3,29 +3,113 @@ // //////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Возвращает признак того, является ли строка данных контактной информации XML данными +// +// Параметры: +// Текст - проверяемая строка +// +Функция ЭтоКонтактнаяИнформацияВXML(Знач Текст) Экспорт + // Упрощенная проверка + Возврат ЭтоСтрокаXML(Текст); +КонецФункции + //////////////////////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// // Возвращает аккуратно построеное наименование через запятую по парам "Название" + "Сокращение" // -Функция ПолноеНаименование(н0="", с0="", н1="", с1="", н2="", с2="", н3="", с3="", н4="", с4="", н5="", с5="", н6="", с6="", н7="", с7="", н8="", с8="", н9="", с9="") Экспорт +Функция ПолноеНаименование(Знач н0="", Знач с0="", Знач н1="", Знач с1="", Знач н2="", Знач с2="", Знач н3="", Знач с3="", Знач н4="", Знач с4="", Знач н5="", Знач с5="", Знач н6="", Знач с6="", Знач н7="", Знач с7="", Знач н8="", Знач с8="", Знач н9="", Знач с9="") Экспорт - ПолноеНаименование = СокрЛП( ?(ПустаяСтрока(н0), "", СокрЛП(н0) + " " + СокрЛП(с0)) ); + // Часть 0 + Результат = ?(ПустаяСтрока(н0), "", СокрЛП( СокрП(н0) + " " + СокрЛ(с0)) ); - Для ИндексПараметра=1 По 9 Цикл - НомерСтрокой = Формат(ИндексПараметра, "ЧН=; ЧГ="); - ТекН = СокрЛП(Вычислить("н"+НомерСтрокой)); - ТекС = СокрЛП(Вычислить("с"+НомерСтрокой)); - - Наименование = СокрЛП( ?(ПустаяСтрока(ТекН), "", ТекН + " " + ТекС) ); - Если ПустаяСтрока(Наименование) Или ПустаяСтрока(ПолноеНаименование) Тогда - ПолноеНаименование = ПолноеНаименование + Наименование; - Иначе - ПолноеНаименование = ПолноеНаименование + ", " + Наименование; - КонецЕсли; - КонецЦикла; + // Часть 1 + ТекН = СокрЛП(н1); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с1))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; - Возврат ПолноеНаименование; + // Часть 2 + ТекН = СокрЛП(н2); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с2))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 3 + ТекН = СокрЛП(н3); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с3))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 4 + ТекН = СокрЛП(н4); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с4))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 5 + ТекН = СокрЛП(н5); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с5))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 6 + ТекН = СокрЛП(н6); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с6))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 7 + ТекН = СокрЛП(н7); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с7))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 8 + ТекН = СокрЛП(н8); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с8))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + // Часть 9 + ТекН = СокрЛП(н9); + Наименование = ?(ТекН="", "", СокрЛП(ТекН + " " + СокрЛ(с9))); + Если Наименование="" Или Результат="" Тогда + Результат = Результат + Наименование; + Иначе + Результат = Результат + ", " + Наименование; + КонецЕсли; + + Возврат Результат; КонецФункции // Возвращает структуру с наименованием и сокращением от значения @@ -33,7 +117,7 @@ // Параметры: // Текст - строка полного наименования // -Функция НаименованиеСокращение(Текст) Экспорт +Функция НаименованиеСокращение(Знач Текст) Экспорт Результат = Новый Структура("Наименование, Сокращение"); Части = ЧастиАдреса(Текст, Истина); Если Части.Количество()>0 Тогда @@ -49,7 +133,7 @@ // Параметры: // Текст - строка полного наименования // -Функция Сокращение(Текст) Экспорт +Функция Сокращение(Знач Текст) Экспорт Части = НаименованиеСокращение(Текст); Возврат Части.Сокращение; КонецФункции @@ -61,7 +145,7 @@ // Текст - разделяемая строка // Разделители - необязательная строка символов-разделителей // -Функция СловаТекста(Текст, Разделители=Неопределено) Экспорт +Функция СловаТекста(Знач Текст, Знач Разделители=Неопределено) Экспорт НачалоСлова = 0; Состояние = 0; @@ -93,7 +177,7 @@ // Текст - разделяемый текст // ВыделятьСокращения - опциональный параметр режима работы // -Функция ЧастиАдреса(Текст, ВыделятьСокращения=Истина) Экспорт +Функция ЧастиАдреса(Знач Текст, Знач ВыделятьСокращения=Истина) Экспорт Результат = Новый Массив; Для Каждого Часть Из СловаТекста(Текст, ",") Цикл @@ -106,8 +190,7 @@ Пока Позиция>0 Цикл Если Сред(СтрокаЧасти, Позиция, 1)=" " Тогда Результат.Добавить(Новый Структура("Наименование, Сокращение", - СокрЛП(Лев(СтрокаЧасти, Позиция-1)), СокрЛП(Сред(СтрокаЧасти, Позиция)) - )); + СокрЛП(Лев(СтрокаЧасти, Позиция-1)), СокрЛП(Сред(СтрокаЧасти, Позиция)))); Позиция = -1; Прервать; КонецЕсли; @@ -135,22 +218,12 @@ Возврат Неопределено; КонецФункции -// Возвращает признак того, является текст XML -// -// Параметры: -// Текст - проверяемый текст -// -Функция ЭтоСтрокаXML(Текст) Экспорт - // Упрощенная проверка - Возврат ТипЗнч(Текст)=Тип("Строка") И Лев(СокрЛ(Текст),1)="<"; -КонецФункции - // Возвращает первый элемент из списка или Неопределено, если такого элемента нет // // Параметры: // СписокДанных - список значений, массив или поле формы // -Функция ПервыйИлиПустой(СписокДанных) Экспорт +Функция ПервыйИлиПустой(Знач СписокДанных) Экспорт ТипСписка = ТипЗнч(СписокДанных); Если ТипСписка=Тип("СписокЗначений") И СписокДанных.Количество()>0 Тогда @@ -164,3 +237,13 @@ Возврат Неопределено; КонецФункции +// Возвращает признак того, хранит ли строка данные XML +// +// Параметры: +// Текст - проверяемая строка +// +Функция ЭтоСтрокаXML(Знач Текст) Экспорт + // Упрощенная проверка + Возврат ТипЗнч(Текст)=Тип("Строка") И Лев(СокрЛ(Текст),1)="<"; +КонецФункции + diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl index da30c86bb..6b5ab832b 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияКлиентСерверПовтИсп/Module.bsl @@ -81,20 +81,8 @@ // ВидИнформации - запрашиваемый тип. Может принимать тип ПеречислениеСсылка.ТипыКонтактнойИнформации // или СправочникСсылка.ВидыКонтактнойИнформации // -Функция ИмяФормыВводаКонтактнойИнформации(ВидИнформации) Экспорт - - Тип = ТипЗнч(ВидИнформации); - Если Тип=Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда - ТипИнформации = ВидИнформации; - ИначеЕсли Тип=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Или ВнешнееСоединение Тогда - ТипИнформации = ВидИнформации.Тип; -#Иначе - ТипИнформации = КонтактнаяИнформацияВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации); -#КонецЕсли - Иначе - Возврат Неопределено; - КонецЕсли; +Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт + ТипИнформации = КонтактнаяИнформацияСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации); ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; Если ТипИнформации=ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда @@ -117,40 +105,7 @@ КонецЕсли; - Возврат Неопределено; -КонецФункции - -// Возвращает флаг того, что вид контактной информации можно активировать -// -// Параметры: -// ВидИнформации - запрашиваемый тип. Может принимать тип ПеречислениеСсылка.ТипыКонтактнойИнформации -// или СправочникСсылка.ВидыКонтактнойИнформации -// -Функция ВидИнформацииМожноАктивировать(ВидИнформации) Экспорт - - Тип = ТипЗнч(ВидИнформации); - Если Тип=Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда - ТипИнформации = ВидИнформации; - ИначеЕсли Тип=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Или ВнешнееСоединение Тогда - ТипИнформации = ВидИнформации.Тип; -#Иначе - ТипИнформации = КонтактнаяИнформацияВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации); -#КонецЕсли - Иначе - Возврат Ложь; - КонецЕсли; - - ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; - Если ТипИнформации=ПредопределенноеЗначение(ВсеТипы + "АдресЭлектроннойПочты") Тогда - Возврат Истина; - - ИначеЕсли ТипИнформации=ПредопределенноеЗначение(ВсеТипы + "ВебСтраница") Тогда - Возврат Истина; - - КонецЕсли; - - Возврат Ложь; + Возврат Неопределено; КонецФункции // Возвращает массив вариантов наименований по типу (по признаку владения, строения, и т.п) @@ -219,6 +174,5 @@ Функция СтрокаОбъектаАдресации(Код, Наименование, Тип=0, Порядок=0, КодФИАС=0) Возврат Новый Структура("Код, Наименование, Тип, Порядок, КодФИАС, Сокращение, Ключ", - Код, Наименование, Тип, Порядок, КодФИАС, НРег(Наименование), ВРег(Наименование) - ); -КонецФункции \ No newline at end of file + Код, Наименование, Тип, Порядок, КодФИАС, НРег(Наименование), ВРег(Наименование)); +КонецФункции diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl index 4507f9daf..ad0a013ca 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебный/Module.bsl @@ -6,55 +6,16 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Преобразует данные нового формата XML контактной информации в старый формат +// Устарело. Необходимо использовать УправлениеКонтактнойИнформацией.ПредыдущийФорматКонтактнойИнформацииXML // -// Параметры: -// Данные - строка значений полей в новом формате (xml) -// СтарыйСоставПолей - булево - необязательный флаг того, что из состава полей будут исключены -// поля, отсутствующие в версиях БСП младше 2.1.3 -// -// Возвращаемое значение: -// Строка с набором пар ключ-значение, разделенных переносом строки -// -Функция ПредыдущийФорматКонтактнойИнформацииXML(Данные, СтарыйСоставПолей=Ложь) Экспорт - - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(Данные) Тогда - СтарыйФормат = КонтактнаяИнформацияВСтаруюСтруктуру(Данные, СтарыйСоставПолей); - Возврат УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСписокПолейВСтроку( - СтарыйФормат.ЗначенияПолей, Ложь - ); - КонецЕсли; - - Возврат Данные; +Функция ПредыдущийФорматКонтактнойИнформацииXML(Знач Данные, Знач СтарыйСоставПолей=Ложь) Экспорт + Возврат УправлениеКонтактнойИнформацией.ПредыдущийФорматКонтактнойИнформацииXML(Данные, СтарыйСоставПолей); КонецФункции -// Преобразует данные нового формата XML контактной информации в структуру старого формата +// Устарело. УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML // -// Параметры: -// Данные - строка значений полей, в новом формате (xml) или в старом (ключ=значение) -// ВидКонтактнойИнформации - необязательная ссылка на справочник вида, используется, если "Данные" - пустая строка -// -// Возвращаемое значение: -// Структура с набором пар ключ-значение -// -Функция ПредыдущаяСтруктураКонтактнойИнформацииXML(Данные, ВидКонтактнойИнформации=Неопределено) Экспорт - - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(Данные) Тогда - // Новый формат КИ - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( - ПредыдущийФорматКонтактнойИнформацииXML(Данные) - ); - - ИначеЕсли ПустаяСтрока(Данные) И ВидКонтактнойИнформации<>Неопределено Тогда - // Генерируем по виду - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( - ВидКонтактнойИнформации.Тип - ); - - КонецЕсли; - - // Возвращаем полную структуру для данного вида с заполненными полями - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); +Функция ПредыдущаяСтруктураКонтактнойИнформацииXML(Знач Данные, Знач ВидКонтактнойИнформации=Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(Данные, ВидКонтактнойИнформации); КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -153,22 +114,19 @@ // Возвращает варианты типов домов (по признаку владения) Функция ВариантыДанныхДом() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(1), Ложь - ); + КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(1), Ложь); КонецФункции // Возвращает варианты типов домов (по признаку строения) Функция ВариантыДанныхСтроение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(2), Ложь - ); + КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(2), Ложь); КонецФункции // Возвращает варианты типов помещений Функция ВариантыДанныхПомещение() Экспорт Возврат Новый Структура("ВариантыТипа, МожноПодбиратьЗначения", - КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь - ); + КонтактнаяИнформацияКлиентСерверПовтИсп.НаименованияОбъектовАдресацииПоТипу(3, Ложь), Ложь); КонецФункции // Возвращает флаг вхождения объекта в состав родителя @@ -193,9 +151,13 @@ // Возвращает код региона по его полному наименованию // // Параметры: -// НаименованиеРегиона - полное наименование региона с сокращением +// НаименованиеРегиона - Строка - полное наименование региона с сокращением // -Функция КодРегиона(ПолноеНаименование) Экспорт +// Возвращаемое значение: +// Строка - код региона из двух цифр. Пустая строка, если наименование определить не удалось +// Неопределено - если нет ни одной подсистемы адресного классификатора +// +Функция КодРегиона(Знач ПолноеНаименование) Экспорт Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); Если Вариант=Неопределено Тогда @@ -208,6 +170,48 @@ Возврат Неопределено; КонецФункции +// Возвращает наименование региона по его коду +// +// Параметры: +// Код - Строка, Число - код региона +// +// Возвращаемое значение: +// Строка - полное наименование региона с сокращением +// Неопределено - если нет ни одной подсистемы адресного классификатора +// +Функция РегионКода(Знач Код) Экспорт + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат Неопределено; + ИначеЕсли Вариант=Перечисления["ВариантыАдресногоКлассификатора"].КЛАДР Тогда + Возврат РегионКодаКЛАДР(Код); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +// Получает список всех регионов +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками Код, Наименование, Сокращение, Представление +// Неопределено - если нет ни одной подсистемы адресного классификатора +// +Функция ВсеРегионы() Экспорт + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат Неопределено; + ИначеЕсли Вариант=Перечисления["ВариантыАдресногоКлассификатора"].КЛАДР Тогда + Возврат ВсеРегионыКЛАДР(); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + + // Возвращает структуру, описывающую населенный пункт в иерархии младший-старший // для текущего адресного классификатора. Имена ключей структуры зависят от // классификатора @@ -313,14 +317,10 @@ Возврат Новый СписокЗначений; КонецФункции -// ------------------------------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////////////////////////// // Общее служебное // -// ------------------------------------------------------------------------------------------------- -// Работа с сериализованной контактной информацией -// - // Преобразует контактную информацию XDTO в XML, возвращает строку // // Параметры: @@ -341,15 +341,16 @@ // // Параметры: // Текст - строка XML -// ОжидаемыйТип - необязательная ссылка на перечисление типа КИ для контроля типов +// ОжидаемыйВид - необязательная ссылка на КИ, перечисление типов КИ, или объект с полем "Тип" // -Функция ДесериализацияКонтактнойИнформации(Текст, ОжидаемыйВид=Неопределено) Экспорт +// РезультатыЧтения - если параметр указан, то в нем ожидается структура, куда будут внесены дополнительные +// необязательные поля: +// - ТекстОшибки - описание ошибок процесса чтения. Возвращаемый функцией результат будет +// корректного типа, но не заполнен. +// +Функция ДесериализацияКонтактнойИнформации(Знач Текст, Знач ОжидаемыйВид=Неопределено, РезультатыЧтения=Неопределено) Экспорт - Если ТипЗнч(ОжидаемыйВид)=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ОжидаемыйТип = ОжидаемыйВид.Тип - Иначе - ОжидаемыйТип = ОжидаемыйВид; - КонецЕсли; + ОжидаемыйТип = УправлениеКонтактнойИнформацией.ТипВидаКонтактнойИнформации(ОжидаемыйВид); ПеречислениеАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; ПеречислениеАдресЭлектроннойПочты = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; @@ -359,26 +360,60 @@ ПеречислениеДругое = Перечисления.ТипыКонтактнойИнформации.Другое; ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(Текст) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Текст) Тогда ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(Текст); - Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - НайденТип = ?(Результат.Состав=Неопределено, Неопределено, Результат.Состав.Тип()); - Если ОжидаемыйТип=ПеречислениеАдрес И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается адрес'"); - ИначеЕсли ОжидаемыйТип=ПеречислениеАдресЭлектроннойПочты И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается адрес электронной почты'"); - ИначеЕсли ОжидаемыйТип=ПеречислениеВебСтраница И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается веб-страница'"); - ИначеЕсли ОжидаемыйТип=ПеречислениеТелефон И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается телефон'"); - ИначеЕсли ОжидаемыйТип=ПеречислениеФакс И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается телефон'"); - ИначеЕсли ОжидаемыйТип=ПеречислениеДругое И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда - ВызватьИсключение НСтр("ru='Ошибка десериализации контактной информации, ожидается ""другое""'"); + ТекстОшибки = Неопределено; + Попытка + Результат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Исключение + // Некорректный формат XML + ЗаписьЖурналаРегистрации(КонтактнаяИнформацияСлужебныйПовтИсп.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , Текст, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + Если ТипЗнч(ОжидаемыйВид)=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + ТекстОшибки = СтрЗаменить(НСтр("ru='Некорректный формат XML контактной информации для ""%1"", значения полей были очищены.'"), + "%1", Строка(ОжидаемыйВид)); + Иначе + ТекстОшибки = НСтр("ru='Некорректный формат XML контактной информации, значения полей были очищены.'"); + КонецЕсли; + КонецПопытки; + + Если ТекстОшибки=Неопределено Тогда + // Контролируем соответствие типов + НайденТип = ?(Результат.Состав=Неопределено, Неопределено, Результат.Состав.Тип()); + Если ОжидаемыйТип=ПеречислениеАдрес И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается адрес'"); + ИначеЕсли ОжидаемыйТип=ПеречислениеАдресЭлектроннойПочты И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается адрес электронной почты'"); + ИначеЕсли ОжидаемыйТип=ПеречислениеВебСтраница И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается веб-страница'"); + ИначеЕсли ОжидаемыйТип=ПеречислениеТелефон И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается телефон'"); + ИначеЕсли ОжидаемыйТип=ПеречислениеФакс И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается телефон'"); + ИначеЕсли ОжидаемыйТип=ПеречислениеДругое И НайденТип<>ФабрикаXDTO.Тип(ПространствоИмен, "Прочее") Тогда + ТекстОшибки = НСтр("ru='Ошибка десериализации контактной информации, ожидается ""другое""'"); + КонецЕсли; КонецЕсли; - Возврат Результат; + + Если ТекстОшибки=Неопределено Тогда + // Успешно прочитано + Возврат Результат; + КонецЕсли; + + // Проверим ошибку и вернем расширенную информацию + Если РезультатыЧтения=Неопределено Тогда + ВызватьИсключение ТекстОшибки; + ИначеЕсли ТипЗнч(РезультатыЧтения)<>Тип("Структура") Тогда + РезультатыЧтения = Новый Структура; + КонецЕсли; + РезультатыЧтения.Вставить("ТекстОшибки", ТекстОшибки); + + // Будет возвращен пустой объект + Текст = ""; КонецЕсли; Если ТипЗнч(Текст)=Тип("СписокЗначений") Тогда @@ -445,24 +480,21 @@ // // Параметры: // Текст - строка XML -// ОжидаемыйТип - ссылка на вид КИ или перечисление типа КИ для контроля типов +// ОжидаемыйТип - ссылка на вид КИ или перечисление типа КИ для контроля типов, +// объект с полем "Тип" // Функция ПарсингКонтактнойИнформации(Текст, ОжидаемыйВид) Экспорт - Если ТипЗнч(ОжидаемыйВид)=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ОжидаемыйТип = ОжидаемыйВид.Тип - Иначе - ОжидаемыйТип = ОжидаемыйВид; - КонецЕсли; + ОжидаемыйТип = УправлениеКонтактнойИнформацией.ТипВидаКонтактнойИнформации(ОжидаемыйВид); Если ОжидаемыйТип=Перечисления.ТипыКонтактнойИнформации.Адрес Тогда Возврат ДесериализацияАдреса("", Текст, ОжидаемыйТип); ИначеЕсли ОжидаемыйТип=Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); + Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); ИначеЕсли ОжидаемыйТип=Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); + Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); ИначеЕсли ОжидаемыйТип=Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Возврат ДесериализацияТелефона("", Текст, ОжидаемыйТип); @@ -486,8 +518,7 @@ // Функция ПарсингКонтактнойИнформацииXML(Текст, ОжидаемыйВид) Экспорт Возврат СериализацияКонтактнойИнформации( - ПарсингКонтактнойИнформации(Текст, ОжидаемыйВид) - ); + ПарсингКонтактнойИнформации(Текст, ОжидаемыйВид)); КонецФункции // Преобразует строку в XDTO контактную информацию адреса @@ -498,11 +529,14 @@ // если ЗначенияПолей пусто // ОжидаемыйТип - необязательный тип для контроля // -Функция ДесериализацияАдреса(ЗначенияПолей, Представление="", ОжидаемыйТип=Неопределено) Экспорт +// Возвращаемое значение +// ОбъектXDTO контактной информации. +// +Функция ДесериализацияАдреса(Знач ЗначенияПолей, Знач Представление="", Знач ОжидаемыйТип=Неопределено) Экспорт ТипЗначения = ТипЗнч(ЗначенияПолей); РазбиратьПоПолям = ТипЗначения=Тип("СписокЗначений") Или ТипЗначения=Тип("Структура") - Или (ТипЗначения=Тип("Строка") И Не ПустаяСтрока(ЗначенияПолей)); + Или ( ТипЗначения=Тип("Строка") И Не ПустаяСтрока(ЗначенияПолей) ); Если РазбиратьПоПолям Тогда // Разбираем из значений полей @@ -561,7 +595,7 @@ // Функция ДесериализацияПрочейКонтактнойИнформации(ЗначенияПолей, Представление="", ОжидаемыйТип=Неопределено) Экспорт - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(ЗначенияПолей) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда // Общий формат контактной информации Возврат ДесериализацияКонтактнойИнформации(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; @@ -598,7 +632,7 @@ // Функция ПредставлениеКонтактнойИнформации(XDTOИнформация, НовоеЗначение=Неопределено) Экспорт НадоСериализовать = ТипЗнч(XDTOИнформация)=Тип("Строка"); - Если НадоСериализовать И Не КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(XDTOИнформация) Тогда + Если НадоСериализовать И Не КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOИнформация) Тогда // Старая версия значений полей, возвращаем саму строку Возврат XDTOИнформация; КонецЕсли; @@ -606,11 +640,11 @@ ОбъектXDTO = ?(НадоСериализовать, ДесериализацияКонтактнойИнформации(XDTOИнформация), XDTOИнформация); Если НовоеЗначение<>Неопределено Тогда ОбъектXDTO.Представление = НовоеЗначение; + Если НадоСериализовать Тогда + XDTOИнформация = СериализацияКонтактнойИнформации(ОбъектXDTO); + КонецЕсли; КонецЕсли; - Если НадоСериализовать Тогда - XDTOИнформация = СериализацияКонтактнойИнформации(ОбъектXDTO); - КонецЕсли; Возврат ОбъектXDTO.Представление КонецФункции @@ -622,7 +656,7 @@ // Функция КомментарийКонтактнойИнформации(XDTOИнформация, НовоеЗначение=Неопределено) Экспорт НадоСериализовать = ТипЗнч(XDTOИнформация)=Тип("Строка"); - Если НадоСериализовать И Не КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(XDTOИнформация) Тогда + Если НадоСериализовать И Не КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOИнформация) Тогда // Старая версия значений полей, комментарий не поддерживается Возврат ""; КонецЕсли; @@ -630,12 +664,51 @@ ОбъектXDTO = ?(НадоСериализовать, ДесериализацияКонтактнойИнформации(XDTOИнформация), XDTOИнформация); Если НовоеЗначение<>Неопределено Тогда ОбъектXDTO.Комментарий = НовоеЗначение; + Если НадоСериализовать Тогда + XDTOИнформация = СериализацияКонтактнойИнформации(ОбъектXDTO); + КонецЕсли; + КонецЕсли; + + Возврат ОбъектXDTO.Комментарий; +КонецФункции + +// Вычисляет и устанавливает флаг того, что адрес был введен в свободной форме +// В качестве флага используется не пустота значения поля "Адрес_по_документу" +// +// Параметры: +// XDTOИнформация - ОбъектXDTO или XML строка контактной информации. Объект может измениться +// НовоеЗначение - булево - необязательное устанавливаемое новое значение +// +Функция АдресВведенВСвободнойФорме(XDTOИнформация, НовоеЗначение=Неопределено) Экспорт + НадоСериализовать = ТипЗнч(XDTOИнформация)=Тип("Строка"); + Если НадоСериализовать И Не КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOИнформация) Тогда + // Старая версия значений полей, не поддерживается + Возврат Ложь; + КонецЕсли; + + ОбъектXDTO = ?(НадоСериализовать, ДесериализацияКонтактнойИнформации(XDTOИнформация), XDTOИнформация); + Если Не ЭтоРоссийскийАдрес(ОбъектXDTO) Тогда + // Не поддерживаем + Возврат Ложь; + КонецЕсли; + + АдресРФ = ОбъектXDTO.Состав.Состав; + Если ТипЗнч(НовоеЗначение)<>Тип("Булево") Тогда + // Читаем + Возврат Не ПустаяСтрока(АдресРФ.Адрес_по_документу); + КонецЕсли; + + // Устанавливаем + Если НовоеЗначение Тогда + АдресРФ.Адрес_по_документу = ОбъектXDTO.Представление; + Иначе + АдресРФ.Сбросить("Адрес_по_документу"); КонецЕсли; Если НадоСериализовать Тогда XDTOИнформация = СериализацияКонтактнойИнформации(ОбъектXDTO); КонецЕсли; - Возврат ОбъектXDTO.Комментарий + Возврат НовоеЗначение; КонецФункции // Формирует и возвращает представление контактной информации @@ -839,8 +912,7 @@ Результат = Новый Структура("Здания, Помещения", ТаблицаЗначений("Тип, Значение, Сокращение, ПутьXPath, Вид", "Тип, Вид"), - ТаблицаЗначений("Тип, Значение, Сокращение, ПутьXPath, Вид", "Тип, Вид") - ); + ТаблицаЗначений("Тип, Значение, Сокращение, ПутьXPath, Вид", "Тип, Вид")); АдресРФ = РоссийскийАдрес(XDTOАдрес); Если АдресРФ=Неопределено Тогда @@ -863,9 +935,6 @@ КонецЕсли; // Чтение - Результат.Здания.Колонки.Добавить("Порядок"); - Результат.Помещения.Колонки.Добавить("Порядок"); - Для Каждого ДопЭлемент Из АдресРФ.ДопАдрЭл Цикл Если ДопЭлемент.Номер<>Неопределено Тогда КодОбъекта = ДопЭлемент.Номер.Тип; @@ -880,7 +949,6 @@ НоваяСтрока = Неопределено; КонецЕсли; Если НоваяСтрока<>Неопределено Тогда - НоваяСтрока.Порядок = ТипОбъекта.Порядок; НоваяСтрока.Тип = ТипОбъекта.Наименование; НоваяСтрока.Значение = ДопЭлемент.Номер.Значение; НоваяСтрока.Сокращение = ТипОбъекта.Сокращение; @@ -891,11 +959,8 @@ КонецЕсли; КонецЦикла; - Результат.Здания.Сортировать("Вид, Порядок, Значение"); - Результат.Здания.Колонки.Удалить("Порядок"); - - Результат.Помещения.Сортировать("Вид, Порядок, Значение"); - Результат.Помещения.Колонки.Удалить("Порядок"); + Результат.Здания.Сортировать("Вид"); + Результат.Помещения.Сортировать("Вид"); Возврат Результат; КонецФункции @@ -955,8 +1020,7 @@ ИначеЕсли АдресРФ.СвРайМО.СвМО<>Неопределено Тогда Район = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( АдресРФ.СвРайМО.СвМО.МунОбр2, "", - АдресРФ.СвРайМО.СвМО.МунОбр1, "" - ); + АдресРФ.СвРайМО.СвМО.МунОбр1, ""); Иначе Район = "";; КонецЕсли; @@ -966,8 +1030,7 @@ АдресРФ.Город, "", Район, "", АдресРФ.Округ, "", - АдресРФ.СубъектРФ, "" - ); + АдресРФ.СубъектРФ, ""); КонецФункции @@ -984,8 +1047,7 @@ КонецЕсли; Возврат КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - АдресРФ.Улица, "" - ); + АдресРФ.Улица, ""); КонецФункции @@ -997,20 +1059,22 @@ // Функция ПредставлениеАдреса(XDTOАдрес, ВидИнформации) Экспорт - // 1) Страна, если надо + // 1) Страна, если надо. // 2) Индекс, субъект рф, округ, район, город, внутригородской район, населенный пункт, улица // 3) Здания, помещения - Страна = ?(ВидИнформации.ВключатьСтрануВПредставление, СокрЛП(XDTOАдрес.Страна), ""); - АдресРФ = XDTOАдрес.Состав; - - Если ТипЗнч(АдресРФ)<>Тип("ОбъектXDTO") Тогда - Возврат ?(ПустаяСтрока(Страна), "", Страна + ", ") + СокрЛП(АдресРФ); - КонецЕсли; + ПараметрыФормирования = Новый Структура("ВключатьСтрануВПредставление", Ложь); + ЗаполнитьЗначенияСвойств(ПараметрыФормирования, ВидИнформации); ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); - Если АдресРФ.Тип()=ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ") Тогда - + АдресРФ = XDTOАдрес.Состав; + Страна = СокрЛП(XDTOАдрес.Страна); + + Если ЭтоРоссийскийАдрес(АдресРФ) Тогда + // Это российский адрес, смотрим на настройки + Если Не ПараметрыФормирования.ВключатьСтрануВПредставление Тогда + Страна = ""; + КонецЕсли; // Значимые части Представление = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( ПочтовыйИндексАдреса(АдресРФ), "", @@ -1020,31 +1084,33 @@ АдресРФ.Город, "", АдресРФ.ВнутригРайон, "", АдресРФ.НаселПункт, "", - АдресРФ.Улица, "" - ); + АдресРФ.Улица, ""); // Строения и помещения НомерНеВыведен = Истина; Данные = ЗданияИПомещенияАдреса(АдресРФ); Для Каждого Строка Из Данные.Здания Цикл Представление = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( Представление, "", - СокрЛП(Строка.Сокращение + ?(НомерНеВыведен, " № ", " ") + Строка.Значение), "" - ); + СокрЛП(Строка.Сокращение + ?(НомерНеВыведен, " № ", " ") + Строка.Значение), ""); НомерНеВыведен = Ложь; КонецЦикла; Для Каждого Строка Из Данные.Помещения Цикл Представление = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( Представление, "", - СокрЛП(Строка.Сокращение + " " + Строка.Значение), "" - ); + СокрЛП(Строка.Сокращение + " " + Строка.Значение), ""); КонецЦикла; + + Иначе + // Это иностранный адрес, страна в представление будет включена всегда. + Представление = СокрЛП(АдресРФ); КонецЕсли; - Возврат КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - Страна, "", - Представление, "" - ); - + // При пустом представлении страну нет смысла выводить + Если ПустаяСтрока(Представление) Тогда + Возврат ""; + КонецЕсли; + + Возврат КонтактнаяИнформацияКлиентСервер.ПолноеНаименование(Страна, "", Представление, ""); КонецФункции // Возвращает перечень ошибок для адреса. @@ -1107,25 +1173,32 @@ КонецЕсли; Если РезультатГруппами Тогда - Если ОшибкиКлассификатора.Количество()>0 Тогда - // Добавляем ко всем ошибкам - ВсеОшибки.Добавить(ГруппаОшибокАдреса("ОшибкиПоКлассификатору", - НСтр("ru='Части адреса не соответствуют адресному классификатору:'") - )); + НаименованиеГруппыОшибки = "ОшибкиПоКлассификатору"; + КоличествоОшибок = ОшибкиКлассификатора.Количество(); + + Если КоличествоОшибок=1 И ОшибкиКлассификатора[0].Значение<>Неопределено + И ОшибкиКлассификатора[0].Значение.ПутьXPath=Неопределено + Тогда + ВсеОшибки.Добавить(ГруппаОшибокАдреса(НаименованиеГруппыОшибки, + ОшибкиКлассификатора[0].Представление)); + + ИначеЕсли КоличествоОшибок>0 Тогда + // Подробное описание ошибок + ВсеОшибки.Добавить(ГруппаОшибокАдреса(НаименованиеГруппыОшибки, + НСтр("ru='Части адреса не соответствуют адресному классификатору:'"))); + ГруппаОшибокКлассификатора = ВсеОшибки[ВсеОшибки.ВГраница()]; СписокСущностей = ""; Для Каждого Элемент Из ОшибкиКлассификатора Цикл ЭлементОшибки = Элемент.Значение; Если ЭлементОшибки=Неопределено Тогда - // абстрактная ошибка + // Абстрактная ошибка ДобавитьОшибкуЗаполненияАдреса(ГруппаОшибокКлассификатора, - "", Элемент.Представление - ); + "", Элемент.Представление); Иначе ДобавитьОшибкуЗаполненияАдреса(ГруппаОшибокКлассификатора, - ЭлементОшибки.ПутьXPath, Элемент.Представление - ); + ЭлементОшибки.ПутьXPath, Элемент.Представление); СписокСущностей = СписокСущностей + ", " + ЭлементОшибки.СущностьПоля; КонецЕсли; КонецЦикла; @@ -1185,50 +1258,41 @@ Представление = ПредставлениеАдреса(АдресРФ, ВидИнформации); Если XTDOКонтактная.Представление<>Представление Тогда Результат.Добавить(ГруппаОшибокАдреса("ПредставлениеНеСоответствуетНаборуПолей", - НСтр("ru='Адрес не соответствует значениям в наборе полей.'") - )); + НСтр("ru='Адрес не соответствует значениям в наборе полей.'"))); ДобавитьОшибкуЗаполненияАдреса(Результат[0], "", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Представление адреса для вида контактной информации ""%1"" отличается от данных в адресе.'"), - Строка(ВидИнформации) - ) - ); + Строка(ВидИнформации))); КонецЕсли; КонецЕсли; НеЗаполненыОбязательныеПоля = ГруппаОшибокАдреса("НеЗаполненыОбязательныеПоля", - НСтр("ru='Не заполнены обязательные поля:'") - ); + НСтр("ru='Не заполнены обязательные поля:'")); Результат.Добавить(НеЗаполненыОбязательныеПоля); НеУказаныСокращенияПолей = ГруппаОшибокАдреса("НеУказаныСокращенияПолей", - НСтр("ru='Не указано сокращение для полей:'") - ); + НСтр("ru='Не указано сокращение для полей:'")); Результат.Добавить(НеУказаныСокращенияПолей); НедопустимыеСимволыПолей = ГруппаОшибокАдреса("НедопустимыеСимволыПолей", - НСтр("ru='Найдены недопустимые символы в полях:'") - ); + НСтр("ru='Найдены недопустимые символы в полях:'")); Результат.Добавить(НедопустимыеСимволыПолей); НеСоответствуетДлинаПолей = ГруппаОшибокАдреса("НеСоответствуетДлинаПолей", - НСтр("ru='Не соответствует установленной длина полей:'") - ); + НСтр("ru='Не соответствует установленной длина полей:'")); Результат.Добавить(НеСоответствуетДлинаПолей); // 2) Индекс, Регион, Дом должны быть заполнены Индекс = ПочтовыйИндексАдреса(АдресРФ); Если ПустаяСтрока(Индекс) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса(), - НСтр("ru='Не указан почтовый индекс.'"), "Индекс" - ); + НСтр("ru='Не указан почтовый индекс.'"), "Индекс"); КонецЕсли; Регион = АдресРФ.СубъектРФ; Если ПустаяСтрока(Регион) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "СубъектРФ", - НСтр("ru='Не указан регион.'"), "Регион" - ); + НСтр("ru='Не указан регион.'"), "Регион"); КонецЕсли; ЗданияПомещения = ЗданияИПомещенияАдреса(АдресРФ); @@ -1236,12 +1300,10 @@ Если ДанныеДома=Неопределено Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, КонтактнаяИнформацияКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Дом"), - НСтр("ru='Не указан дом или владение.'"), "Дом" - ); + НСтр("ru='Не указан дом или владение.'"), "Дом"); ИначеЕсли ПустаяСтрока(ДанныеДома.Значение) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, ДанныеДома.ПутьXPath, - НСтр("ru='Не заполнено значение дома или владения.'"), "Дом" - ); + НСтр("ru='Не заполнено значение дома или владения.'"), "Дом"); КонецЕсли; // 3) Регион, Район, Город, НаселенныйПункт, Улица должны: @@ -1258,22 +1320,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, "СубъектРФ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не указано сокращение в названии региона ""%1"".'"), Регион - ), "Регион" - ); + ), "Регион"); КонецЕсли; Если СтрДлина(Регион)>50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Название региона ""%1"" должно быть короче 50 символов.'"), Регион - ), "Регион" - ); + ), "Регион"); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Регион, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='В названии региона ""%1"" есть не кириллические символы.'"), Регион - ), "Регион" - ); + ), "Регион"); КонецЕсли КонецЕсли; @@ -1285,22 +1344,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не указано сокращение в названии района ""%1""'."), Район - ), "Район" - ); + ), "Район"); КонецЕсли; Если СтрДлина(Район)>50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Название района ""%1"" должно быть короче 50 символов.'"), Район - ), "Район" - ); + ), "Район"); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Район, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='В названии района ""%1"" есть не кириллические символы.'"), Район - ), "Район" - ); + ), "Район"); КонецЕсли; КонецЕсли; @@ -1312,22 +1368,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не указано сокращение в названии города ""%1"".'"), Город - ), "Город" - ); + ), "Город"); КонецЕсли; Если СтрДлина(Город)>50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Название города ""%1"" должно быть короче 50 символов.'"), Город - ), "Город" - ); + ), "Город"); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Город, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='В названии города ""%1"" есть не кириллические символы.'"), Город - ), "Город" - ); + ), "Город"); КонецЕсли; КонецЕсли; @@ -1339,22 +1392,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не указано сокращение в названии населенного пункта ""%1"".'"), НаселенныйПункт - ), "Населенный пункт" - ); + ), "Населенный пункт"); КонецЕсли; Если СтрДлина(НаселенныйПункт)>50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Название населенного пункта ""%1"" должно быть короче 50 символов.'"), НаселенныйПункт - ), "Населенный пункт" - ); + ), "Населенный пункт"); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='В названии населенного пункта ""%1"" есть не кириллические символы.'"), НаселенныйПункт - ), "Населенный пункт" - ); + ), "Населенный пункт"); КонецЕсли; КонецЕсли; @@ -1366,22 +1416,19 @@ ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не указано сокращение в названии улицы ""%1"".'"), Улица - ), "Улица" - ); + ), "Улица"); КонецЕсли; Если СтрДлина(Район)>50 Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Название улицы ""%1"" должно быть короче 50 символов.'"), Улица - ), "Улица" - ); + ), "Улица"); КонецЕсли; Если Не СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Улица, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='В названии улицы ""%1"" есть не кириллические символы.'"), Улица - ), "Улица" - ); + ), "Улица"); КонецЕсли; КонецЕсли; @@ -1390,8 +1437,7 @@ Поле = КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса(); Если СтрДлина(Индекс)<>6 Или Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Индекс) Тогда ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, Поле, - НСтр("ru='Почтовый индекс должен состоять из 6 цифр.'"), "Индекс" - ); + НСтр("ru='Почтовый индекс должен состоять из 6 цифр.'"), "Индекс"); КонецЕсли; КонецЕсли; @@ -1401,8 +1447,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеЗдания.ПутьXPath, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеЗдания.Тип - ), ДанныеЗдания.Тип - ); + ), ДанныеЗдания.Тип); КонецЕсли; КонецЦикла; Для Каждого ДанныеПомещения Из ЗданияПомещения.Помещения Цикл @@ -1410,8 +1455,7 @@ ДобавитьОшибкуЗаполненияАдреса(НеСоответствуетДлинаПолей, ДанныеПомещения.ПутьXPath, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Значение поля ""%1"" должно быть короче 10 символов.'"), ДанныеПомещения.Тип - ), ДанныеПомещения.Тип - ); + ), ДанныеПомещения.Тип); КонецЕсли; КонецЦикла; @@ -1420,20 +1464,17 @@ Если НазванияГородовФедеральногоЗначения().Найти(ВРег(Регион))=Неопределено Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Город", НСтр("ru='Город может быть не указан только в регионе - городе федерального значения.'"), - "Город" - ); + "Город"); ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "НаселПункт", НСтр("ru='Населенный пункт может быть не указан только в регионе - городе федерального значения.'"), - "Населенный пункт" - ); + "Населенный пункт"); КонецЕсли; КонецЕсли; // 7) Улица не может быть пустой если НаселенныйПункт пустой Если ПустаяСтрока(НаселенныйПункт) И ПустаяСтрока(Улица) Тогда ДобавитьОшибкуЗаполненияАдреса(НеЗаполненыОбязательныеПоля, "Улица", - НСтр("ru='Если неопределен населенный пункт, то должна быть указана улица.'"), "Улица" - ); + НСтр("ru='Если неопределен населенный пункт, то должна быть указана улица.'"), "Улица"); КонецЕсли; // Все. Убираем пустые результаты, корректируем сообщение группы. @@ -1482,8 +1523,7 @@ XDTOДанные.КодГорода, XDTOДанные.Номер, XDTOДанные.Добавочный, - "" - ); + ""); КонецФункции // Возвращает представление факса @@ -1498,12 +1538,9 @@ XDTOДанные.КодГорода, XDTOДанные.Номер, XDTOДанные.Добавочный, - "" - ); + ""); КонецФункции -// ------------------------------------------------------------------------------------------------- - // Возвращает флаг того, что текущий пользователь может загружать или очищать адресный классификатор Функция ЕстьВозможностьИзмененияАдресногоКлассификатора() Экспорт @@ -1519,7 +1556,7 @@ Возврат Ложь; КонецФункции -// ------------------------------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////////////////////////// // Совместимость // @@ -1532,7 +1569,7 @@ // Функция КонтактнаяИнформацияВСтаруюСтруктуру(XDTOКонтактнаяИнформация, СтарыйСоставПолей=Ложь) Экспорт - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(XDTOКонтактнаяИнформация) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(XDTOКонтактнаяИнформация) Тогда XDTOКонтактная = ДесериализацияКонтактнойИнформации(XDTOКонтактнаяИнформация); Иначе XDTOКонтактная = XDTOКонтактнаяИнформация @@ -1561,7 +1598,15 @@ Возврат Результат; КонецФункции -// Внутреннее для совместимости +// Преобразует адрес формата XDTO в старый список полей типа СписокЗначений +// +// Параметры: +// XDTOАдрес - XDTOОбъект типа Адрес или АдресРФ, источник данных +// РасширенныйСоставПолей - Необязательный флаг того, что состав полей будет сокращен для совместимости +// с обменом БСП 2.1.2 +// +// Возвращаемый результат - список значений +// Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей=Истина) Экспорт Список = Новый СписокЗначений; @@ -1660,6 +1705,7 @@ Возврат Список; КонецФункции + Процедура ДобавитьЗначение(Список, ИмяПоля, Значение, РазрешитьДубли=Ложь) Если Не РазрешитьДубли Тогда @@ -1673,6 +1719,7 @@ Список.Добавить(Строка(Значение), ИмяПоля); КонецПроцедуры + Функция ЗначениеЗданияИлиПомещения(Данные, Варианты, ВсеЗначенияВарианта) Результат = ТаблицаЗначений("Тип, Значение"); @@ -1699,15 +1746,15 @@ Возврат Результат; КонецФункции -// Внутреннее для создания структур Функция ГруппаОшибокАдреса(ТипОшибки, Сообщение) Возврат Новый Структура("ТипОшибки, Сообщение, Поля", ТипОшибки, Сообщение, Новый Массив); КонецФункции + Процедура ДобавитьОшибкуЗаполненияАдреса(Группа, ИмяПоля="", Сообщение="", СущностьПоля="") Группа.Поля.Добавить(Новый Структура("ИмяПоля, Сообщение, СущностьПоля", ИмяПоля, Сообщение, СущностьПоля)); КонецПроцедуры -// ------------------------------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////////////////////////// // Реализация КЛАДР // @@ -1906,8 +1953,7 @@ Выборка.НаселенныеПунктыНаименование, Выборка.НаселенныеПунктыСокращение, Выборка.ГородаНаименование, Выборка.ГородаСокращение, Выборка.РайоныНаименование, Выборка.РайоныСокращение, - Выборка.РегионыНаименование, Выборка.РегионыСокращение - ); + Выборка.РегионыНаименование, Выборка.РегионыСокращение); Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); @@ -1923,8 +1969,7 @@ ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, Новый Структура("Код, Представление, МожноЗагружатьРегион", Выборка.Код, ПолноеНаименование, Выборка.МожноЗагружатьРегион - )), ПолноеНаименование, Пометка, Картинка - ); + )), ПолноеНаименование, Пометка, Картинка); Иначе ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); КонецЕсли; @@ -1986,8 +2031,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - Выборка.Наименование, Выборка.Сокращение - ); + Выборка.Наименование, Выборка.Сокращение); Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); @@ -2003,8 +2047,7 @@ ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, Новый Структура("Код, Представление", Выборка.Код, ПолноеНаименование - )), ПолноеНаименование, Пометка, Картинка - ); + )), ПолноеНаименование, Пометка, Картинка); Иначе ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); КонецЕсли; @@ -2012,8 +2055,7 @@ КонецЦикла; Возврат Новый Структура("СлишкомМногоДанных, ДанныеВыбора", - Выборка.Количество()>ВыбиратьСтрок, ДанныеВыбора - ); + Выборка.Количество()>ВыбиратьСтрок, ДанныеВыбора); КонецФункции @@ -2061,8 +2103,7 @@ | ИЛИ (Районы.Наименование>=&%1 И Районы.Наименование<&%2) | ИЛИ (Регионы.Наименование>=&%1 И Регионы.Наименование<&%2) |)", - ИмяПараметраНаименование, ИмяПараметраОграничитель - ); + ИмяПараметраНаименование, ИмяПараметраОграничитель); Иначе УсловиеНаименования = УсловиеНаименования + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(" |И ( @@ -2071,8 +2112,7 @@ | ИЛИ (Районы.Наименование=&%1 И Районы.Сокращение=&%2) | ИЛИ (Регионы.Наименование=&%1 И Регионы.Сокращение=&%2) |)", - ИмяПараметраНаименование, ИмяПараметраСокращение - ); + ИмяПараметраНаименование, ИмяПараметраСокращение); КонецЕсли; Запрос.УстановитьПараметр(ИмяПараметраНаименование, Наименование); Запрос.УстановитьПараметр(ИмяПараметраОграничитель, Наименование + ОграничительСверху); @@ -2182,8 +2222,7 @@ Выборка.НаселенныеПунктыНаименование, Выборка.НаселенныеПунктыСокращение, Выборка.ГородаНаименование, Выборка.ГородаСокращение, Выборка.РайоныНаименование, Выборка.РайоныСокращение, - Выборка.РегионыНаименование, Выборка.РегионыСокращение - ); + Выборка.РегионыНаименование, Выборка.РегионыСокращение); Если Выборка.Неактуален Тогда ТекстПредупреждения = ПредупреждениеНеактуальности; @@ -2219,8 +2258,7 @@ ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, Новый Структура("Код, Представление, СписокРеквизитов", Выборка.Код, ПолноеНаименование, СписокРеквизитов - )), ПолноеНаименование, Пометка, Картинка - ); + )), ПолноеНаименование, Пометка, Картинка); КонецЦикла; Возврат Результат; @@ -2291,8 +2329,7 @@ Пока Выборка.Следующий() Цикл ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - Выборка.Наименование, Выборка.Сокращение - ); + Выборка.Наименование, Выборка.Сокращение); Если Выборка.Неактуален Тогда ТекстПредупреждения = ПредупреждениеНеактуальности; @@ -2307,8 +2344,7 @@ ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, Новый Структура("Код, Представление", Выборка.Код, ПолноеНаименование - )), ПолноеНаименование, Пометка, Картинка - ); + )), ПолноеНаименование, Пометка, Картинка); КонецЦикла; Результат.СлишкомМногоДанных = Выборка.Количество()>ВыбиратьСтрок; @@ -2348,13 +2384,17 @@ Функция СписокРеквизитовНаселенныйПунктКЛАДР(Код=Неопределено) // Первый уровень - внутренние идентификаторы - Результат = Новый Структура("Регион, Район, Город, НаселенныйПункт", - // Второй уровень - одинаково для всех классификаторов - ЭлементАдреснойСтруктуры("Регион", "СубъектРФ"), - ЭлементАдреснойСтруктуры("Район", "СвРайМО/Район"), - ЭлементАдреснойСтруктуры("Город", "Город"), - ЭлементАдреснойСтруктуры("Нас.пункт", "НаселПункт", ,Истина) - ); + Результат = Новый Структура; + Результат.Вставить("Регион", ЭлементАдреснойСтруктуры(НСтр("ru='Регион'"), "СубъектРФ") ); + Результат.Вставить("Район", ЭлементАдреснойСтруктуры(НСтр("ru='Район'"), "СвРайМО/Район") ); + Результат.Вставить("Город", ЭлементАдреснойСтруктуры(НСтр("ru='Город'"), "Город") ); + Результат.Вставить("НаселенныйПункт", ЭлементАдреснойСтруктуры(НСтр("ru='Нас.пункт'"), "НаселПункт", ,Истина)); + + // Подсказки для интерфейса + Результат.Регион.Вставить("Подсказка", НСтр("ru='Регион адреса'")); + Результат.Район.Вставить("Подсказка", НСтр("ru='Район адреса'")); + Результат.Город.Вставить("Подсказка", НСтр("ru='Город адреса'")); + Результат.НаселенныйПункт.Вставить("Подсказка", НСтр("ru='Населенный пункт адреса'")); Если Код=Неопределено Тогда Возврат Результат; @@ -2450,8 +2490,7 @@ // Возвращает или пустую структуру-заготовку, или заполненную структуру по коду Функция СписокРеквизитовУлицаКЛАДР(Код=Неопределено) Результат = Новый Структура("Улица", - ЭлементАдреснойСтруктуры("Улица", "Улица"), - ); + ЭлементАдреснойСтруктуры("Улица", "Улица"),); Если Код<>Неопределено Тогда // Мы знаем что там КЛАДР, поэтому можем заполнить поля @@ -2671,8 +2710,7 @@ Пока Выборка.Следующий() Цикл ПолноеНаименование = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( - Выборка.АдресаНаименование, Выборка.АдресаСокращение - ); + Выборка.АдресаНаименование, Выборка.АдресаСокращение); Если Выборка.Неактуален Тогда ТекстПредупреждения = СтрЗаменить(ПредупреждениеНеактуальности, "%1", ПолноеНаименование); @@ -2689,12 +2727,10 @@ ДанныеСтроки = Новый Структура( "Код, Представление, ПолноеНаименование, Наименование, Сокращение, МожноЗагружатьРегион", Выборка.Код, ПолноеНаименование, ПолноеНаименование, - Выборка.АдресаНаименование, Выборка.АдресаСокращение, Выборка.МожноЗагружатьРегион - ); + Выборка.АдресаНаименование, Выборка.АдресаСокращение, Выборка.МожноЗагружатьРегион); ДанныеВыбора.Добавить(Новый Структура("Предупреждение, Значение", ТекстПредупреждения, ДанныеСтроки), - ПолноеНаименование, Пометка, Картинка - ); + ПолноеНаименование, Пометка, Картинка); Иначе ДанныеВыбора.Добавить(ПолноеНаименование, ПолноеНаименование, Пометка, Картинка); КонецЕсли; @@ -2742,20 +2778,40 @@ КонецЕсли; Если МодульКЛАДР.ЧислоЗаполненныхАдресныхОбъектов()=0 Тогда - // классификатор КЛАДР не загружен ни по одному региону - Результат.Добавить( - Новый Структура("СущностьПоля, ПутьXPath"), - НСтр("ru='Адресный классификатор не загружен.'") - ); + // Классификатор КЛАДР не загружен ни по одному региону + Результат.Добавить(Новый Структура("СущностьПоля, ПутьXPath"), + НСтр("ru='Адресный классификатор не загружен.'")); Возврат; КонецЕсли; Данные = СтруктураКЛАДРПоАдресуРФ(XDTOАдресРФ); + + // Проверим регион + КодРегиона = КодРегионаКЛАДР(Данные.Регион); + Если ПустаяСтрока(КодРегиона) Тогда + // Переданное значение - не регион с точки зрения КЛАДР + Результат.Добавить(Новый Структура("СущностьПоля, ПутьXPath"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Регион ""%1"" не является субъектом РФ по классификатору'"), + Данные.Регион)); + Возврат; + КонецЕсли; + + // Проверим классификатор на загруженность по региону + Если Не МодульКЛАДР.АдресныйЭлементЗагружен(Данные.Регион) Тогда + Результат.Добавить(Новый Структура("СущностьПоля, ПутьXPath"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Адресный классификатор по региону ""%1"" не загружен'"), + Данные.Регион)); + Возврат; + КонецЕсли; + + // Проверим на соответсвие частей классификатору СтруктураПроверки = МодульКЛАДР.ПроверитьСоответствиеАдресаКЛАДРу( Данные.Индекс, Данные.Регион, Данные.Район, Данные.Город, Данные.НаселенныйПункт, Данные.Улица, - Данные.Дом, Данные.Корпус - ); + Данные.Дом, Данные.Корпус); Если СтруктураПроверки=Неопределено Или Не СтруктураПроверки.ЕстьОшибки Тогда + // Нет ошибок, адрес корректен Возврат; КонецЕсли; @@ -2766,13 +2822,11 @@ Если РеквизитыПроверки.Свойство(ИмяРеквизита) Тогда Результат.Добавить( Новый Структура("СущностьПоля, ПутьXPath", Элемент.Значение, РеквизитыПроверки[ИмяРеквизита].ПутьXPath), - Элемент.Значение - ); + Элемент.Значение); Иначе Результат.Добавить( Новый Структура("СущностьПоля, ПутьXPath"), - Элемент.Значение - ); + Элемент.Значение); КонецЕсли; КонецЦикла; @@ -2854,6 +2908,11 @@ | РегистрСведений.АдресныйКлассификатор |ГДЕ | ТипАдресногоЭлемента = 1 + | И КодРайонаВКоде = 0 + | И КодГородаВКоде = 0 + | И КодНаселенногоПунктаВКоде = 0 + | И КодУлицыВКоде = 0 + | | И Наименование = &Наименование | И Сокращение = &Сокращение |"); @@ -2867,7 +2926,62 @@ КонецЕсли; Возврат ""; -КонецФункции +КонецФункции + +Функция РегионКодаКЛАДР(Знач Код) + + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Наименование + "" "" + Сокращение КАК Регион + |ИЗ + | РегистрСведений.АдресныйКлассификатор + |ГДЕ + | ТипАдресногоЭлемента = 1 + | И КодАдресногоОбъектаВКоде = &Код + | И КодРайонаВКоде = 0 + | И КодГородаВКоде = 0 + | И КодНаселенногоПунктаВКоде = 0 + | И КодУлицыВКоде = 0 + |"); + + Если ТипЗнч(Код)=Тип("Число") Тогда + КодЧислом = Код; + Иначе + ТипЧисло = Новый ОписаниеТипов("Число"); + КодЧислом = ТипЧисло.ПривестиЗначение(Код); + КонецЕсли; + Запрос.УстановитьПараметр("Код", КодЧислом); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Регион; + КонецЕсли; + + Возврат ""; +КонецФункции + +Функция ВсеРегионыКЛАДР() + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | КодАдресногоОбъектаВКоде КАК Код, + | Наименование КАК Наименование, + | Сокращение КАК Сокращение, + | Наименование + "" "" + Сокращение КАК Представление + |ИЗ + | РегистрСведений.АдресныйКлассификатор + |ГДЕ + | ТипАдресногоЭлемента = 1 + | И КодРайонаВКоде = 0 + | И КодГородаВКоде = 0 + | И КодНаселенногоПунктаВКоде = 0 + | И КодУлицыВКоде = 0 + |"); + Результат = Запрос.Выполнить().Выгрузить(); + Результат.Индексы.Добавить("Код"); + Результат.Индексы.Добавить("Представление"); + + Возврат Результат; +КонецФункции Функция ОпределитьПочтовыйИндексАдресаКЛАДР(XDTOАдресРФ) @@ -2876,8 +2990,7 @@ Данные = СтруктураКЛАДРПоАдресуРФ(XDTOАдресРФ); Индекс = МодульКЛАДР.ПолучитьИндекс( Данные.Регион, Данные.Район, Данные.Город, Данные.НаселенныйПункт, Данные.Улица, - Данные.Дом, Данные.Корпус - ); + Данные.Дом, Данные.Корпус); Если Не ПустаяСтрока(Индекс) Тогда Возврат СокрЛП(Индекс); КонецЕсли; @@ -2886,10 +2999,6 @@ Возврат Неопределено; КонецФункции -// ------------------------------------------------------------------------------------------------- -// Внутреннее -// - // Конструктор таблицы значений Функция ТаблицаЗначений(СписокКолонок, СписокИндексов="") ТаблицаРезультата = Новый ТаблицаЗначений; @@ -2910,11 +3019,10 @@ КонецФункции // Конструктор внутренней структуры элемента адреса -Функция ЭлементАдреснойСтруктуры(Заголовок=Неопределено, ПутьXPath=Неопределено, Значение=Неопределено, Предопределенный=Ложь) +Функция ЭлементАдреснойСтруктуры(Заголовок, ПутьXPath, Значение=Неопределено, Предопределенный=Ложь) Возврат Новый Структура("Заголовок, ПутьXPath, Значение, Предопределенный, Наименование, Сокращение, КодКлассификатора", - Заголовок, ПутьXPath, Значение, Предопределенный - ); -КонецФункции + Заголовок, ПутьXPath, Значение, Предопределенный); +КонецФункции // Возвращает строку для поиска в операторе ПОДОБНО Функция ЗамаскироватьСпецсимволы(Текст) @@ -2937,16 +3045,13 @@ // Индекс Результат.Вставить("Индекс", ЭлементАдреснойСтруктуры("Индекс", - КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса() - )); + КонтактнаяИнформацияКлиентСерверПовтИсп.XPathПочтовогоИндекса())); // Дом Результат.Вставить("Дом", ЭлементАдреснойСтруктуры("Дом", - КонтактнаяИнформацияКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Дом") - )); + КонтактнаяИнформацияКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Дом"))); // Корпус Результат.Вставить("Корпус", ЭлементАдреснойСтруктуры("Корпус", - КонтактнаяИнформацияКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Корпус") - )); + КонтактнаяИнформацияКлиентСерверПовтИсп.XPathНомераДополнительногоОбъектаАдресации("Корпус"))); Возврат Результат; КонецФункции @@ -2992,7 +3097,7 @@ // Внутреннее для сериализации Функция ДесериализацияАдресаОбщая(ЗначенияПолей, Представление, ОжидаемыйТип=Неопределено) - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(ЗначенияПолей) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда // Общий формат контактной информации Возврат ДесериализацияКонтактнойИнформации(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; @@ -3029,8 +3134,7 @@ СписокПолей = ЗначенияПолей; ИначеЕсли ТипЗначенийПолей=Тип("Структура") Тогда СписокПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей( - УправлениеКонтактнойИнформациейКлиентСервер.СтрокаПолей(ЗначенияПолей, Ложь) - ); + УправлениеКонтактнойИнформациейКлиентСервер.СтрокаПолей(ЗначенияПолей, Ложь)); Иначе // Уже преобразовано в строку СписокПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); @@ -3056,8 +3160,10 @@ ИначеЕсли ИмяПоля="КОДСТРАНЫ" Тогда ; + ИначеЕсли ИмяПоля="КОДРЕГИОНА" Тогда - ; + АдресРФ.СубъектРФ = РегионКода(ЭлементСписка.Значение); + ИначеЕсли ИмяПоля="РЕГИОН" Тогда АдресРФ.СубъектРФ = ЭлементСписка.Значение; @@ -3136,6 +3242,7 @@ Возврат Результат; КонецФункции + Процедура ВставитьЗданиеПомещение(XDTOАдрес, Тип, Значение) Если ПустаяСтрока(Значение) Тогда Возврат; @@ -3157,17 +3264,20 @@ КонецЕсли; КонецПроцедуры + Функция СоздатьНомерДопАдрЭл(АдресРФ) ДопАдрЭл = СоздатьДопАдрЭл(АдресРФ); ДопАдрЭл.Номер = ФабрикаXDTO.Создать(ДопАдрЭл.Тип().Свойства.Получить("Номер").Тип); Возврат ДопАдрЭл.Номер; КонецФункции + Функция СоздатьДопАдрЭл(АдресРФ) СвойствоДопАдрЭл = АдресРФ.ДопАдрЭл.ВладеющееСвойство; ДопАдрЭл = ФабрикаXDTO.Создать(СвойствоДопАдрЭл.Тип); АдресРФ.ДопАдрЭл.Добавить(ДопАдрЭл); Возврат ДопАдрЭл; КонецФункции + Функция СвРайМО(АдресРФ) Если АдресРФ.СвРайМО<>Неопределено Тогда Возврат АдресРФ.СвРайМО; @@ -3177,7 +3287,7 @@ Возврат АдресРФ.СвРайМО; КонецФункции -Функция ДесериализацияАдресаПоПредставлениюКЛАДР(Представление) +Функция ДесериализацияАдресаПоПредставлениюКЛАДР(Знач Представление) ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); @@ -3185,122 +3295,330 @@ Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); Результат.Представление = Представление; - СтрокиЧастейАдреса = КонтактнаяИнформацияКлиентСервер.ЧастиАдреса(Представление); - КоличествоЧастей = СтрокиЧастейАдреса.Количество(); - Если КоличествоЧастей=0 Тогда + ДанныеАнализа = ЧастиАдресаТаблицей(Представление); + Если ДанныеАнализа.Количество()=0 Тогда Возврат Результат; КонецЕсли; Адрес = Результат.Состав; - // Страна - определяем по классификатору стран. - СтранаРоссия = Справочники.СтраныМира.Россия; - Страна = Справочники.СтраныМира.НайтиПоНаименованию(СтрокиЧастейАдреса[0].Наименование, Истина); - Если ЗначениеЗаполнено(Страна) Тогда - Адрес.Страна = Страна.Наименование; - // Если явно не Россия, то возвращаемся - Если Страна<>СтранаРоссия Тогда - Адрес.Состав = Представление; - Возврат Результат; - КонецЕсли; - СтрокиЧастейАдреса.Удалить(0); - КонецЕсли; - - // Считаем это все российским адресом - Адрес.Страна = СтранаРоссия.Наименование; - Адрес.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ")); - АдресРФ = Адрес.Состав; - - // Создадим затычку под район - СвРайМО(АдресРФ); - - // Индекс. Определяем по всем цифрам в первом элементе - Наименование = СтрокиЧастейАдреса[0].Наименование; - Индекс = Неопределено; - Если СтрДлина(Наименование)=6 Тогда - Попытка - Индекс = Число(Наименование); - Исключение - ; - КонецПопытки; - КонецЕсли; - Если Индекс<>Неопределено Тогда - // Определили индекс - ПочтовыйИндексАдреса(АдресРФ, Индекс); - СтрокиЧастейАдреса.Удалить(0); - КонецЕсли; - - // Части адреса до зданий - ЧастиАдреса = СписокРеквизитовНаселенныйПунктКЛАДР(); - Для Каждого КлючЗначение Из СписокРеквизитовУлицаКЛАДР() Цикл - ЧастиАдреса.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение); - КонецЦикла; - - Для Каждого КлючЗначение Из ЧастиАдреса Цикл - Если СтрокиЧастейАдреса.Количество()=0 Тогда - Прервать; - КонецЕсли; + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | ДанныеАдреса.Позиция0 КАК Позиция0, + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Значение КАК Значение, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение, + | ДанныеАдреса.Начало КАК Начало, + | ДанныеАдреса.Длина КАК Длина + |ПОМЕСТИТЬ + | ДанныеАдреса + |ИЗ + | &ДанныеАдреса КАК ДанныеАдреса + |ИНДЕКСИРОВАТЬ ПО + | Позиция0, Позиция, Наименование, Сокращение + |;////////////////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ДанныеАдреса.Позиция КАК Позиция, + | ДанныеАдреса.Значение КАК Значение, + | ДанныеАдреса.Наименование КАК Наименование, + | ДанныеАдреса.Сокращение КАК Сокращение, + | + | ДанныеАдреса.Начало КАК Начало, + | ДанныеАдреса.Длина КАК Длина, + | ЛОЖЬ КАК Обработано, + | + | МИНИМУМ(АдресныйКлассификатор.ТипАдресногоЭлемента) КАК УровеньПоКлассификатору, + | ВЫБОР + | КОГДА МИНИМУМ(АдресныйКлассификатор.ТипАдресногоЭлемента) ЕСТЬ NULL ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК НайденоПоКлассификатору, + | + | МИНИМУМ(АдресныеСокращения.Уровень) КАК УровеньПоСокращениям, + | ВЫБОР + | КОГДА МИНИМУМ(АдресныеСокращения.Уровень) ЕСТЬ NULL ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК НайденоПоСокращениям, + | + | ВЫБОР + | КОГДА НЕ МИНИМУМ(СтраныМира.Наименование) ЕСТЬ NULL ТОГДА ИСТИНА + | КОГДА ДанныеАдреса.Значение В (&СтраныКлассификатора) ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НайденоПоСтранамМира, + | + | ВЫБОР + | КОГДА ДанныеАдреса.Значение=СтранаРоссия.Наименование ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоСтранаРоссия, + | + | ВЫБОР + | КОГДА ДанныеАдреса.Наименование ПОДОБНО ""[0-9][0-9][0-9][0-9][0-9][0-9]"" ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НайденоПоИндексу + | + |ИЗ + | ДанныеАдреса КАК ДанныеАдреса + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ПО + | АдресныйКлассификатор.Наименование=ДанныеАдреса.Наименование + | И АдресныйКлассификатор.Сокращение=ДанныеАдреса.Сокращение + | И АдресныйКлассификатор.ТипАдресногоЭлемента<=5 + | И АдресныйКлассификатор.ТипАдресногоЭлемента>=ДанныеАдреса.Позиция0 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения + |ПО + | АдресныеСокращения.Сокращение=ДанныеАдреса.Сокращение + | И АдресныеСокращения.Уровень<=5 + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | Справочник.СтраныМира КАК СтраныМира + |ПО + | СтраныМира.Наименование=ДанныеАдреса.Значение + | + |ЛЕВОЕ СОЕДИНЕНИЕ + | Справочник.СтраныМира КАК СтранаРоссия + |ПО + | СтранаРоссия.Ссылка = ЗНАЧЕНИЕ(Справочник.СтраныМира.Россия) + | + |СГРУППИРОВАТЬ ПО + | СтранаРоссия.Наименование, + | ДанныеАдреса.Позиция, + | ДанныеАдреса.Значение, + | ДанныеАдреса.Наименование, + | ДанныеАдреса.Сокращение, + | ДанныеАдреса.Начало, + | ДанныеАдреса.Длина + | + |УПОРЯДОЧИТЬ ПО + | ДанныеАдреса.Позиция УБЫВ + |"); - ИдентификаторЧасти = КлючЗначение.Ключ; - Наименование = СтрокиЧастейАдреса[0].Наименование; - Сокращение = СтрокиЧастейАдреса[0].Сокращение; - ВариантыДанных = СписокАнализаЭлементаАдресаКЛАДР(Наименование, Сокращение, ИдентификаторЧасти, ЧастиАдреса, Ложь, Истина, 2); - КоличествоВариантов = ВариантыДанных.Количество(); - - // Если нет вариантов, то возможно это уровень ниже - Если КоличествоВариантов=1 Тогда - // Найдено точно, ставим части адреса для ограничения остального - Приемник = КлючЗначение.Значение; - Источник = ВариантыДанных[0].Значение.Значение; - Приемник.КодКлассификатора = Источник.Код; - Приемник.Наименование = Источник.Наименование; - Приемник.Сокращение = Источник.Сокращение; - Приемник.Значение = КонтактнаяИнформацияКлиентСервер.ПолноеНаименование(Приемник.Наименование, Приемник.Сокращение); + Классификатор = Справочники.СтраныМира.ТаблицаКлассификатора(); + Запрос.УстановитьПараметр("СтраныКлассификатора", Классификатор.ВыгрузитьКолонку("Наименование") ); + Запрос.УстановитьПараметр("ДанныеАдреса", ДанныеАнализа); + + РезультатАнализа = Запрос.Выполнить().Выгрузить(); + + АдресРФ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "АдресРФ")); + + // Просмотр будет с конца, чтобы актуальным было первое + ЭтоРоссийскийАдрес = Истина; + СтрокаСтраны = Неопределено; + + ОбработанныеУровни = Новый Соответствие; + ВведеноВСвободнойФорме = Ложь; + + ТаблицаЗданийПомещений = Новый ТаблицаЗначений; + ТаблицаЗданийПомещений.Колонки.Добавить("Тип"); + ТаблицаЗданийПомещений.Колонки.Добавить("Значение"); + + Для Каждого Строка Из РезультатАнализа Цикл + // Проход по классификатору, сокращения, страны, индекс + Если Строка.НайденоПоИндексу Тогда + ПочтовыйИндексАдреса(АдресРФ, Строка.Значение); + Строка.Обработано = Истина; - // И в результат - АдресРФ.Установить(Приемник.ПутьXPath, Приемник.Значение); + ИначеЕсли Строка.ЭтоСтранаРоссия Тогда + ЭтоРоссийскийАдрес = Истина; + Строка.Обработано = Истина; + СтрокаСтраны = Строка; + + ИначеЕсли Строка.НайденоПоСтранамМира Тогда + ЭтоРоссийскийАдрес = Ложь; + Строка.Обработано = Истина; + СтрокаСтраны = Строка; + + ИначеЕсли Строка.НайденоПоКлассификатору Тогда + Уровень = Строка.УровеньПоКлассификатору; + УстановитьЧастьВАдресеПоУровнюКЛАДР(АдресРФ, Уровень, Строка.Значение); + Строка.Обработано = Истина; + // Контроль повторной обработки + Если ОбработанныеУровни[Уровень]<>Неопределено Тогда + ВведеноВСвободнойФорме = Истина; + КонецЕсли; + + ИначеЕсли Строка.НайденоПоСокращениям Тогда + Уровень = Строка.УровеньПоСокращениям; + УстановитьЧастьВАдресеПоУровнюКЛАДР(АдресРФ, Уровень, Строка.Значение); + Строка.Обработано = Истина; + // Контроль повторной обработки + Если ОбработанныеУровни[Уровень]<>Неопределено Тогда + ВведеноВСвободнойФорме = Истина; + КонецЕсли; + + Иначе + // Проверка на квартиру или здание + Тип = СокрЛП(СтрЗаменить(Строка.Наименование, "№", "")); + Если КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(Тип)<>Неопределено Тогда + // Вставляем в начало, так как порядок результата запроса у нас обратный + НоваяСтрока = ТаблицаЗданийПомещений.Вставить(0); + НоваяСтрока.Значение = СокрЛП(СтрЗаменить(Строка.Сокращение, "№", "")); + НоваяСтрока.Тип = Тип; + Строка.Обработано = Истина; + КонецЕсли; - СтрокиЧастейАдреса.Удалить(0); - ИначеЕсли КоличествоВариантов>0 Тогда - // Есть много вариантов, не учитываем - СтрокиЧастейАдреса.Удалить(0); КонецЕсли; КонецЦикла; - // Остальное пытаемся распихать с конца по домам и квартирам, если не получилось - оставляем - ТаблицаЗданийПомещений = ТаблицаЗначений("Тип, Значение"); - ИндексСтроки = СтрокиЧастейАдреса.Количество() - 1; - Пока ИндексСтроки>=0 Цикл - Строка = СтрокиЧастейАдреса[ИндексСтроки]; + // Смотрим на страну разбора + Если ЭтоРоссийскийАдрес Тогда + Адрес.Страна = СокрЛП(Справочники.СтраныМира.Россия.Наименование); + Адрес.Состав = АдресРФ; - Тип = СокрЛП(СтрЗаменить(Строка.Наименование, "№", "")); - Если КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииОбъектаАдресации(Тип)<>Неопределено Тогда - НоваяСтрока = ТаблицаЗданийПомещений.Добавить(); - НоваяСтрока.Значение = СокрЛП(СтрЗаменить(Строка.Сокращение, "№", "")); - НоваяСтрока.Тип = Тип; - СтрокиЧастейАдреса.Удалить(ИндексСтроки); + ЗданияИПомещения = Новый Структура("Здания, Помещения", ТаблицаЗданийПомещений, ТаблицаЗданийПомещений); + ЗданияИПомещенияАдреса(АдресРФ, ЗданияИПомещения); + + Если ВведеноВСвободнойФорме Или РезультатАнализа.Найти(Ложь, "Обработано")<>Неопределено Тогда + // Что-то осталось, считаем адресом в свободной форме + АдресРФ.Адрес_По_Документу = Представление; КонецЕсли; - ИндексСтроки = ИндексСтроки - 1; - КонецЦикла; - ЗданияИПомещенияАдреса(АдресРФ, Новый Структура("Здания, Помещения", ТаблицаЗданийПомещений, ТаблицаЗданийПомещений)); + Возврат Результат; + КонецЕсли; - // Все, что осталось - склеиваем и ставим в населенный пункт - Остаток = ""; - Для Каждого Строка Из СтрокиЧастейАдреса Цикл - Остаток = Остаток + " " + КонтактнаяИнформацияКлиентСервер.ПолноеНаименование(Строка.Наименование, Строка.Сокращение); - КонецЦикла; - Если Не ПустаяСтрока(Остаток) Тогда - АдресРФ.НаселПункт = СокрЛП("" + АдресРФ.НаселПункт + СокрЛП(Остаток)); + // Адрес за пределами РФ + Если СтрокаСтраны=Неопределено Тогда + Адрес.Состав = Представление; + Иначе + Адрес.Страна = СтрокаСтраны.Значение; + + // Состав без страны, она остается в представлении + Позиция = СтрокаСтраны.Начало + СтрокаСтраны.Длина; + Длина = СтрДлина(Представление); + Разделители = "," + Символы.ПС; + Пока Позиция<=Длина И Найти(Разделители, Сред(Представление, Позиция, 1))<=0 Цикл + Позиция = Позиция + 1; + КонецЦикла; + Пока Позиция<=Длина И Найти(Разделители, Сред(Представление, Позиция, 1))>0 Цикл + Позиция = Позиция + 1; + КонецЦикла; + Адрес.Состав = СокрЛП( Лев(Представление, СтрокаСтраны.Начало -1 ) + " " + Сред(Представление, Позиция) ); КонецЕсли; Возврат Результат; КонецФункции +Функция ЧастиАдресаТаблицей(Знач Текст) + + ТипСтрока = Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(128)); + ТипЧисло = Новый ОписаниеТипов("Число"); + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("Позиция0", ТипЧисло); + Колонки.Добавить("Позиция", ТипЧисло); + Колонки.Добавить("Значение", ТипСтрока); + Колонки.Добавить("Наименование", ТипСтрока); + Колонки.Добавить("Сокращение", ТипСтрока); + + Колонки.Добавить("Начало", ТипЧисло); + Колонки.Добавить("Длина", ТипЧисло); + + Номер = 0; + Для Каждого Часть Из СловаТекстаТаблицей(Текст, "," + Символы.ПС) Цикл + Значение = СокрЛП(Часть.Значение); + Если ПустаяСтрока(Значение) Тогда + Продолжить; + КонецЕсли; + + Строка = Результат.Добавить(); + Строка.Значение = Значение; + + Строка.Позиция0 = Номер; + Номер = Номер + 1; + Строка.Позиция = Номер; + + Строка.Начало = Часть.Начало; + Строка.Длина = Часть.Длина; + + Позиция = СтрДлина(Значение); + Пока Позиция>0 Цикл + Символ = Сред(Значение, Позиция, 1); + Если ПустаяСтрока(Символ) Тогда + Строка.Наименование = Лев(Значение, Позиция-1); + Прервать; + КонецЕсли; + Строка.Сокращение = Символ + Строка.Сокращение; + Позиция = Позиция - 1; + КонецЦикла; + + Если ПустаяСтрока(Строка.Наименование) Тогда + Строка.Наименование = Строка.Сокращение; + Строка.Сокращение = ""; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция СловаТекстаТаблицей(Знач Текст, Знач Разделители=Неопределено) + + НачалоСлова = 0; + Состояние = 0; + + ТипСтрока = Новый ОписаниеТипов("Строка"); + ТипЧисло = Новый ОписаниеТипов("Число"); + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("Значение", ТипСтрока); + Колонки.Добавить("Начало", ТипЧисло); + Колонки.Добавить("Длина", ТипЧисло); + + Для Позиция=1 По СтрДлина(Текст) Цикл + ТекущийСимвол = Сред(Текст, Позиция, 1); + ЭтоРазделитель = ?(Разделители=Неопределено, ПустаяСтрока(ТекущийСимвол), Найти(Разделители, ТекущийСимвол)>0); + + Если Состояние=0 И (Не ЭтоРазделитель) Тогда + НачалоСлова = Позиция; + Состояние = 1; + ИначеЕсли Состояние=1 И ЭтоРазделитель Тогда + Строка = Результат.Добавить(); + Строка.Начало = НачалоСлова; + Строка.Длина = Позиция-НачалоСлова; + Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина); + Состояние = 0; + КонецЕсли; + КонецЦикла; + + Если Состояние=1 Тогда + Строка = Результат.Добавить(); + Строка.Начало = НачалоСлова; + Строка.Длина = Позиция-НачалоСлова; + Строка.Значение = Сред(Текст, Строка.Начало, Строка.Длина) + КонецЕсли; + + Возврат Результат; +КонецФункции + +Процедура УстановитьЧастьВАдресеПоУровнюКЛАДР(XDTOАдресРФ, Знач Уровень, Знач Значение) + + // XPath + Если Уровень=1 Тогда + Путь = "СубъектРФ"; + ИначеЕсли Уровень=2 Тогда + Путь = "СвРайМО/Район"; + ИначеЕсли Уровень=3 Тогда + Путь = "Город"; + ИначеЕсли Уровень=4 Тогда + Путь = "НаселПункт"; + ИначеЕсли Уровень=5 Тогда + Путь = "Улица"; + Иначе + Возврат; + КонецЕсли; + + УстановитьСвойствоПоXPath(XDTOАдресРФ, Путь, Значение); +КонецПроцедуры + Функция ДесериализацияТелефонаФакса(ЗначенияПолей, Представление="", ОжидаемыйТип=Неопределено) - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(ЗначенияПолей) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда // Общий формат контактной информации Возврат ДесериализацияКонтактнойИнформации(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; @@ -3423,6 +3741,7 @@ Возврат СократитьНеЦифры(Результат, ДопустимоКромеЦифр, Ложь); КонецФункции + Функция СократитьНеЦифры(Текст, ДопустимоКромеЦифр="", Направление=Истина) Длина = СтрДлина(Текст); diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..1acd68ccb --- /dev/null +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,63 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация" +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Разбирает представление контактной информации и возвращает строку XML со значениями полей +// +// Параметры: +// Текст - строка XML +// ОжидаемыйТип - ссылка на вид КИ или перечисление типа КИ для контроля типов +// +Функция ПарсингКонтактнойИнформацииXML(Знач Текст, Знач ОжидаемыйВид) Экспорт + Возврат КонтактнаяИнформацияСлужебный.ПарсингКонтактнойИнформацииXML(Текст, ОжидаемыйВид); +КонецФункции + +// Возвращает значение перечисления тип вида контактной информации +// +// Параметры: +// ВидИнформации - перечисление типа, ссылка на справочник ВидыКонтактнойИнформации или объект +// с полем "Тип" +// +Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт + Возврат УправлениеКонтактнойИнформацией.ТипВидаКонтактнойИнформации(ВидИнформации); +КонецФункции + +// Возвращает строку состава из значения контактной информации. +// +// Параметры: +// XMLДанные - строка XML данных контакной информации +// +// Если значение состава сложного типа, то возвращает Неопределено +// +Функция СтрокаСоставаКонтактнойИнформации(Знач XMLДанные) Экспорт; + Возврат КонтактнаяИнформацияXML.СтрокаСоставаКонтактнойИнформации(XMLДанные); +КонецФункции + +// Преобразует все входящие форматы контактной информации в XML +// +Функция ПривестиКонтактнуюИнформациюXML(Знач Данные) Экспорт + Возврат КонтактнаяИнформацияXML.ПривестиКонтактнуюИнформациюXML(Данные); +КонецФункции + +// Возвращает найденную ссылку или создает новую страну мира и возвращает ссылку на нее +// +Функция СтранаМираПоДаннымКлассификатора(Знач КодСтраны) Экспорт + Возврат Справочники.СтраныМира.СсылкаПоДаннымКлассификатора( + Новый Структура("Код", КодСтраны) + ); +КонецФункции + +// Заполняет коллекцию ссылками на найденные или созданные страны мира +// +Процедура КоллекцияСтранМираПоДаннымКлассификатора(Коллекция) Экспорт + Для Каждого КлючЗначение Из Коллекция Цикл + Коллекция[КлючЗначение.Ключ] = Справочники.СтраныМира.СсылкаПоДаннымКлассификатора( + Новый Структура("Код", КлючЗначение.Значение.Код) + ); + КонецЦикла; +КонецПроцедуры + diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/КонтактнаяИнформацияВызовСервера.mdo b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/КонтактнаяИнформацияСлужебныйВызовСервера.mdo similarity index 58% rename from SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/КонтактнаяИнформацияВызовСервера.mdo rename to SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/КонтактнаяИнформацияСлужебныйВызовСервера.mdo index 5795d0701..26a550031 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияВызовСервера/КонтактнаяИнформацияВызовСервера.mdo +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйВызовСервера/КонтактнаяИнформацияСлужебныйВызовСервера.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6afcc089-7f15-42e8-97b5-6aad6cf2e6f9"> - <name>КонтактнаяИнформацияВызовСервера</name> + <name>КонтактнаяИнформацияСлужебныйВызовСервера</name> <synonym> <key>ru</key> - <value>Контактная информация вызов сервера</value> + <value>Контактная информация служебный вызов сервера</value> </synonym> <server>true</server> <serverCall>true</serverCall> diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl new file mode 100644 index 000000000..418ffb2a6 --- /dev/null +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/Module.bsl @@ -0,0 +1,1172 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация" +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Возвращает имя события для регистрации в журнале событий контактной информации +// +Функция СобытиеЖурналаРегистрации() Экспорт + Возврат НСтр("ru='Контактная информация'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() ); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Поставщики преобразований +// + +// Преобразует список значений, оставляя из него только последние значения пар ключ-значение +// +// Результат преобразования - строка XML сериализованного списка значений +// +Функция XSLT_УникальныеПоПредставлениюВСписке() Экспорт + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + | <xsl:template match=""node() | @*""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" /> + | </xsl:copy> + | </xsl:template> + | + | <xsl:template match=""//tns:ValueListType/tns:item""> + | <xsl:variable name=""presentation"" select=""string(tns:presentation)"" /> + | <xsl:if test=""0=count(following-sibling::tns:item[tns:presentation=$presentation])"" > + | <xsl:copy-of select=""."" /> + | </xsl:if> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +Конецфункции + +// Производит проверку двух строк XML - параметра и текущего +// +// Результат преобразования - сериализованный ValueTable (http://v8.1c.ru/8.1/data/core), в котором три колонки: +// - Путь - строка - путь к месту различия +// - Значение1 - строка - значение в XML из параметра Текст1 +// - Значение2 - строка - значение в XML из параметра Текст2 +// +// Проверяем только строки и атрибуты, без пробельных, CDATA и т.п. Порядок важен. +// +Функция XSLT_ТаблицаЗначенийРазличияXML() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + + // Пространство имен должно быть пустым! + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" + | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:xs=""http://www.w3.org/2001/XMLSchema"" + | + | xmlns:str=""http://exslt.org/strings"" + | xmlns:exsl=""http://exslt.org/common"" + | + | extension-element-prefixes=""str exsl"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + |" + XSLT_ШаблоныФункцийXPath() + " + | + | <!-- parce tree elements to xpath-value --> + | <xsl:template match=""node()"" mode=""action""> + | + | <xsl:variable name=""text""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""text()"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <xsl:if test=""$text!=''""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> + | <xsl:variable name=""tmp-path""> + | <xsl:call-template name=""build-path"" /> + | </xsl:variable> + | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> + | </xsl:attribute> + | <xsl:attribute name=""value""> + | <xsl:value-of select=""text()"" /> + | </xsl:attribute> + | </xsl:element> + | </xsl:if> + | + | <xsl:apply-templates select=""@* | node()"" mode=""action""/> + | </xsl:template> + | + | <!-- parce tree attributes to xpath-value --> + | <xsl:template match=""@*"" mode=""action""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> + | <xsl:variable name=""tmp-path""> + | <xsl:call-template name=""build-path"" /> + | </xsl:variable> + | <xsl:value-of select=""substring($tmp-path, 6)"" /> <!-- pass '/dn/f' or '/dn/s' --> + | </xsl:attribute> + | <xsl:attribute name=""value""> + | <xsl:value-of select=""."" /> + | </xsl:attribute> + | </xsl:element> + | </xsl:template> + | + | <!-- main --> + | <xsl:variable name=""dummy""> + | <xsl:element name=""first""> + | <xsl:apply-templates select=""/dn/f"" mode=""action"" /> + | </xsl:element> + | <xsl:element name=""second""> + | <xsl:apply-templates select=""/dn/s"" mode=""action"" /> + | </xsl:element> + | </xsl:variable> + | <xsl:variable name=""dummy-nodeset"" select=""exsl:node-set($dummy)"" /> + | <xsl:variable name=""first-items"" select=""$dummy-nodeset/first/item"" /> + | <xsl:variable name=""second-items"" select=""$dummy-nodeset/second/item"" /> + | + | <xsl:template match=""/""> + | + | <!-- first vs second --> + | <xsl:variable name=""first-second""> + | <xsl:for-each select=""$first-items""> + | <xsl:call-template name=""compare""> + | <xsl:with-param name=""check"" select=""$second-items"" /> + | </xsl:call-template> + | </xsl:for-each> + | </xsl:variable> + | <xsl:variable name=""first-second-nodeset"" select=""exsl:node-set($first-second)"" /> + | + | <!-- second vs first without doubles --> + | <xsl:variable name=""doubles"" select=""$first-second-nodeset/item"" /> + | <xsl:variable name=""second-first""> + | <xsl:for-each select=""$second-items""> + | <xsl:call-template name=""compare""> + | <xsl:with-param name=""check"" select=""$first-items"" /> + | <xsl:with-param name=""doubles"" select=""$doubles"" /> + | </xsl:call-template> + | </xsl:for-each> + | </xsl:variable> + | + | <!-- result --> + | <ValueTable xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xsi:type=""ValueTable""> + | <column> + | <Name xsi:type=""xs:string"">Путь</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | <column> + | <Name xsi:type=""xs:string"">Значение1</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | <column> + | <Name xsi:type=""xs:string"">Значение2</Name> + | <ValueType> + | <Type>xs:string</Type> + | <StringQualifiers><Length>0</Length><AllowedLength>Variable</AllowedLength></StringQualifiers> + | </ValueType> + | </column> + | + | <xsl:for-each select=""$first-second-nodeset/item | exsl:node-set($second-first)/item""> + | <xsl:element name=""row""> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@path""/> + | </xsl:element> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@value1""/> + | </xsl:element> + | <xsl:element name=""Value""> + | <xsl:value-of select=""@value2""/> + | </xsl:element> + | </xsl:element> + | </xsl:for-each> + | + | </ValueTable> + | + | </xsl:template> + | <!-- /main --> + | + | <!-- compare sub --> + | <xsl:template name=""compare""> + | <xsl:param name=""check"" /> + | <xsl:param name=""doubles"" select=""/.."" /> + | + | <xsl:variable name=""path"" select=""@path""/> + | <xsl:variable name=""value"" select=""@value""/> + | <xsl:variable name=""diff"" select=""$check[@path=$path]""/> + | <xsl:choose> + | <xsl:when test=""count($diff)=0""> + | <xsl:if test=""count($doubles[@path=$path and @value1='' and @value2=$value])=0""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> + | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> + | <xsl:attribute name=""value2"" /> + | </xsl:element> + | </xsl:if> + | </xsl:when> + | <xsl:otherwise> + | + | <xsl:for-each select=""$diff[@value!=$value]""> + | <xsl:variable name=""diff-value"" select=""@value""/> + | <xsl:if test=""count($doubles[@path=$path and @value1=$diff-value and @value2=$value])=0""> + | <xsl:element name=""item""> + | <xsl:attribute name=""path""> <xsl:value-of select=""$path""/> </xsl:attribute> + | <xsl:attribute name=""value1""> <xsl:value-of select=""$value""/> </xsl:attribute> + | <xsl:attribute name=""value2""> <xsl:value-of select=""@value""/> </xsl:attribute> + | </xsl:element> + | </xsl:if> + | </xsl:for-each> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +КонецФункции + +// Преобразует текст с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. +// В случае повторных ключей все включаются в результат, но при десериализации будет использован +// последний (особенность работы сериализатора платформы) +// +// Результат преобразования - строка XML сериализованной структуры +// +Функция XSLT_СтрокаКлючЗначениеВСтруктуру() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" + | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:str=""http://exslt.org/strings"" + | extension-element-prefixes=""str"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""ExternalParamNode""> + | + | <xsl:variable name=""source""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""."" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | + | <xsl:for-each select=""str:tokenize($source, ' ')"" > + | <xsl:if test=""contains(., '=')""> + | + | <xsl:element name=""Property""> + | <xsl:attribute name=""name"" > + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""substring-before(., '=')"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <Value xsi:type=""xs:string""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""substring-after(., '=')"" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </Value> + | + | </xsl:element> + | + | </xsl:if> + | </xsl:for-each> + | + | </Structure> + | + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +КонецФункции + +// Преобразует текст с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. +// В случае повторных ключей все включаются в результат +// +// Результат преобразования - строка XML сериализованного списка значений +// +Функция XSLT_СтрокаКлючЗначениеВСписокЗначений() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" + | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:str=""http://exslt.org/strings"" + | extension-element-prefixes=""str"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""ExternalParamNode""> + | + | <xsl:variable name=""source""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""."" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <ValueListType xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""ValueListType""> + | <valueType/> + | + | <xsl:for-each select=""str:tokenize($source, ' ')"" > + | <xsl:if test=""contains(., '=')""> + | + | <item> + | <value xsi:type=""xs:string""> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""substring-after(., '=')"" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | </value> + | <presentation> + | <xsl:call-template name=""str-trim-left""> + | <xsl:with-param name=""str"" select=""substring-before(., '=')"" /> + | </xsl:call-template> + | </presentation> + | </item> + | + | </xsl:if> + | </xsl:for-each> + | + | </ValueListType > + | + | </xsl:template> + | + |</xsl:stylesheet> + |"); + + Возврат Преобразователь; +КонецФункции + +// Преобразует список значений в строку пар ключ=значение, разделенных переносом строки +// +// Результат преобразования - строка результата +// +Функция XSLT_СписокЗначенийВСтрокуКлючЗначение() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""text"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <xsl:apply-templates select=""//tns:ValueListType/tns:item"" /> + | </xsl:template> + | + | <xsl:template match=""//tns:ValueListType/tns:item""> + | + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""tns:presentation"" /> + | </xsl:call-template> + | <xsl:text/>=<xsl:text/> + | + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""tns:value"" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | + | <xsl:if test=""position()!=last()""> + | <xsl:text/> + | <xsl:value-of select=""' '""/> + | <xsl:text/> + | </xsl:if> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует структуру в строку пар ключ=значение, разделенных переносом строки +// +// Результат преобразования - строка результата +// +Функция XSLT_СтруктураВСтрокуКлючЗначение() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""text"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <xsl:apply-templates select=""//tns:Structure/tns:Property"" /> + | </xsl:template> + | + | <xsl:template match=""//tns:Property""> + | + | <xsl:value-of select=""@name"" /> + | <xsl:text/>=<xsl:text/> + | + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""tns:Value"" /> + | <xsl:with-param name=""search-for"" select=""' '"" /> + | <xsl:with-param name=""replace-by"" select=""' '"" /> + | </xsl:call-template> + | + | <xsl:if test=""position()!=last()""> + | <xsl:text/> + | <xsl:value-of select=""' '""/> + | <xsl:text/> + | </xsl:if> + | </xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует список значений в структуру. Представление преобразуется в ключ +// +// Результат преобразования - сериализованная структура +// +Функция XSLT_СписокЗначенийВСтруктуру() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | <xsl:apply-templates select=""//tns:ValueListType/tns:item"" /> + | </Structure > + | </xsl:template> + | + | <xsl:template match=""//tns:ValueListType/tns:item""> + | <xsl:element name=""Property""> + | <xsl:attribute name=""name""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""tns:presentation"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <xsl:element name=""Value""> + | <xsl:attribute name=""xsi:type""> + | <xsl:value-of select=""tns:value/@xsi:type""/> + | </xsl:attribute> + | <xsl:value-of select=""tns:value""/> + | </xsl:element> + | + | </xsl:element> + |</xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует структуру в список значений. Ключ преобразуется в представление. +// +// Результат преобразования - сериализованный список значений +// +Функция XSLT_СтруктураВСписокЗначений() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <ValueListType xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""ValueListType""> + | <valueType/> + | <xsl:apply-templates select=""//tns:Structure/tns:Property"" /> + | </ValueListType> + | </xsl:template> + | + | <xsl:template match=""//tns:Property""> + | <item> + | <value xsi:type=""xs:string""> + | <xsl:value-of select=""tns:Value"" /> + | </value> + | <presentation> + | <xsl:value-of select=""@name"" /> + | </presentation> + | </item> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует соответствие в структуру. Ключ преобразуется в ключ, значение - в значение +// +// Результат преобразования - сериализованная структура +// +Функция XSLT_СоответствиеВСтруктуру() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://v8.1c.ru/8.1/data/core"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + |" + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:template match=""/""> + | <Structure xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""Structure""> + | <xsl:apply-templates select=""//tns:Map/tns:pair"" /> + | </Structure > + | </xsl:template> + | + | <xsl:template match=""//tns:Map/tns:pair""> + | <xsl:element name=""Property""> + | <xsl:attribute name=""name""> + | <xsl:call-template name=""str-trim-all""> + | <xsl:with-param name=""str"" select=""tns:Key"" /> + | </xsl:call-template> + | </xsl:attribute> + | + | <xsl:element name=""Value""> + | <xsl:attribute name=""xsi:type""> + | <xsl:value-of select=""tns:Value/@xsi:type""/> + | </xsl:attribute> + | <xsl:value-of select=""tns:Value""/> + | </xsl:element> + | + | </xsl:element> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Убирает описание <?xml...> для включения внутрь другого XML +// +Функция XSLT_УдалитьОписаниеXML() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:template match=""node() | @*""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" /> + | </xsl:copy> + | </xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует контактную информацию в виде XML (см пакет XDTO КонтактнаяИнформация) в перечисление ТипКонтакнойИнформации +// +// Результат преобразования - сериализованное значение перечисления +// +Функция XSLT_ТипКонтактнойИнформацииПоСтрокеXML() Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + | <xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + | <xsl:template match=""/""> + | <EnumRef.ТипыКонтактнойИнформации xmlns=""http://v8.1c.ru/8.1/data/enterprise/current-config"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""EnumRef.ТипыКонтактнойИнформации""> + | <xsl:call-template name=""enum-by-type"" > + | <xsl:with-param name=""type"" select=""ci:КонтактнаяИнформация/ci:Состав/@xsi:type"" /> + | </xsl:call-template> + | </EnumRef.ТипыКонтактнойИнформации> + | </xsl:template> + | + | <xsl:template name=""enum-by-type""> + | <xsl:param name=""type"" /> + | <xsl:choose> + | <xsl:when test=""$type='Адрес'""> + | <xsl:text>Адрес</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='НомерТелефона'""> + | <xsl:text>Телефон</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='НомерФакса'""> + | <xsl:text>Факс</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='ЭлектроннаяПочта'""> + | <xsl:text>АдресЭлектроннойПочты</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='ВебСайт'""> + | <xsl:text>ВебСтраница</xsl:text> + | </xsl:when> + | <xsl:when test=""$type='Прочее'""> + | <xsl:text>Другое</xsl:text> + | </xsl:when> + | </xsl:choose> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует таблицу различий XML в зависимости от типа контактной информации +// +// Параметры: +// ТипКонтактнойИнформации - значение или имя перечисления +// +// Результат преобразования - сериализованный ValueTable (http://v8.1c.ru/8.1/data/core), в котором три колонки: +// - Путь - строка - путь к месту различия +// - Описание - строка - описание отличающегося реквизита в терминах предметной области +// - Значение1 - строка - значение из первого XML +// - Значение2 - строка - значение из второго XML +// +Функция XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации(Знач ТипКонтактнойИнформации) Экспорт + + Если ТипЗнч(ТипКонтактнойИнформации)<>Тип("Строка") Тогда + ТипКонтактнойИнформации = ТипКонтактнойИнформации.Метаданные().Имя; + КонецЕсли; + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:ci=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:param name=""target-type"" select=""'" + ТипКонтактнойИнформации + "'""/> + | + | <xsl:template match=""/""> + | <xsl:choose> + | <xsl:when test=""$target-type='Адрес'""> + | <xsl:apply-templates select=""."" mode=""action-address""/> + | </xsl:when> + | <xsl:otherwise> + | <xsl:apply-templates select=""."" mode=""action-copy""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template match=""node() | @*"" mode=""action-copy""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" mode=""action-copy""/> + | </xsl:copy> + | </xsl:template> + | + | <xsl:template match=""node() | @*"" mode=""action-address""> + | <xsl:copy> + | <xsl:apply-templates select=""node() | @*"" mode=""action-address""/> + | </xsl:copy> + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВАдрес() Экспорт + + КодыДопАдрЭл = Новый ТекстовыйДокумент; + Для Каждого ДопАдрЭл Из КонтактнаяИнформацияКлиентСерверПовтИсп.ТипыОбъектовАдресацииАдресаРФ() Цикл + КодыДопАдрЭл.ДобавитьСтроку("<data:item data:title=""" + ДопАдрЭл.Наименование + """>" + ДопАдрЭл.Код + "</data:item>"); + КонецЦикла; + + КодыРегионов = Новый ТекстовыйДокумент; + ВсеРегионы = КонтактнаяИнформацияСлужебный.ВсеРегионы(); + Если ВсеРегионы<>Неопределено Тогда + Для Каждого Строка Из ВсеРегионы Цикл + КодыРегионов.ДобавитьСтроку("<data:item data:code=""" + Формат(Строка.Код, "ЧН=; ЧГ=") + """>" + Строка.Представление + "</data:item>"); + КонецЦикла; + КонецЕсли; + + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + | + | xmlns:data=""http://www.v8.1c.ru/ssl/contactinfo"" + | + | xmlns:exsl=""http://exslt.org/common"" + | extension-element-prefixes=""exsl"" + | exclude-result-prefixes=""data"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | " + XSLT_ШаблоныСтроковыхФункций() + " + | + | <xsl:variable name=""local-сountry"">РОССИЯ</xsl:variable> + | + | <xsl:variable name=""presentation"" select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()"" /> + | + | <xsl:template match=""/""> + | <xsl:element name=""КонтактнаяИнформация""> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""$presentation""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">Адрес</xsl:attribute> + | <xsl:variable name=""country"" select=""tns:Structure/tns:Property[@name='Страна']/tns:Value/text()""></xsl:variable> + | <xsl:variable name=""country-upper""> + | <xsl:call-template name=""str-upper""> + | <xsl:with-param name=""str"" select=""$country"" /> + | </xsl:call-template> + | </xsl:variable> + | + | <xsl:attribute name=""Страна""> + | <xsl:choose> + | <xsl:when test=""0=count($country)""> + | <xsl:value-of select=""$local-сountry"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$country"" /> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | + | <xsl:choose> + | <xsl:when test=""0=count($country)""> + | <xsl:apply-templates select=""/"" mode=""domestic"" /> + | </xsl:when> + | <xsl:when test=""$country-upper=$local-сountry""> + | <xsl:apply-templates select=""/"" mode=""domestic"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:apply-templates select=""/"" mode=""foreign"" /> + | </xsl:otherwise> + | </xsl:choose> + | + | </xsl:element> + | </xsl:element> + | </xsl:template> + | + | <xsl:template match=""/"" mode=""foreign""> + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">xs:string</xsl:attribute> + | + | <xsl:variable name=""value"" select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()"" /> + | <xsl:choose> + | <xsl:when test=""0=count($value)""> + | <xsl:value-of select=""$presentation"" /> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$value"" /> + | </xsl:otherwise> + | </xsl:choose> + | + | </xsl:element> + | </xsl:template> + | + | <xsl:template match=""/"" mode=""domestic""> + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">АдресРФ</xsl:attribute> + | + | <xsl:element name=""СубъектРФ""> + | <xsl:variable name=""value"" select=""tns:Structure/tns:Property[@name='Регион']/tns:Value/text()"" /> + | + | <xsl:choose> + | <xsl:when test=""0=count($value)""> + | <xsl:variable name=""regioncode"" select=""tns:Structure/tns:Property[@name='КодРегиона']/tns:Value/text()""/> + | <xsl:variable name=""regiontitle"" select=""$enum-regioncode-nodes/data:item[@data:code=number($regioncode)]"" /> + | <xsl:if test=""0!=count($regiontitle)""> + | <xsl:value-of select=""$regiontitle""/> + | </xsl:if> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$value"" /> + | </xsl:otherwise> + | </xsl:choose> + | + | </xsl:element> + | + | <xsl:element name=""СвРайМО""> + | <xsl:element name=""Район""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Район']/tns:Value/text()""/> + | </xsl:element> + | </xsl:element> + | + | <xsl:element name=""Город""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Город']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""НаселПункт""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='НаселенныйПункт']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""Улица""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Улица']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:variable name=""index"" select=""tns:Structure/tns:Property[@name='Индекс']/tns:Value/text()"" /> + | <xsl:if test=""0!=count($index)""> + | <xsl:element name=""ДопАдрЭл""> + | <xsl:attribute name=""ТипАдрЭл"">" + КонтактнаяИнформацияКлиентСерверПовтИсп.КодСериализацииПочтовогоИндекса() + "</xsl:attribute> + | <xsl:attribute name=""Значение""><xsl:value-of select=""$index""/></xsl:attribute> + | </xsl:element> + | </xsl:if> + | + | <xsl:call-template name=""add-elem-number""> + | <xsl:with-param name=""source"" select=""tns:Structure/tns:Property[@name='ТипДома']/tns:Value/text()"" /> + | <xsl:with-param name=""value"" select=""tns:Structure/tns:Property[@name='Дом']/tns:Value/text()"" /> + | </xsl:call-template> + | + | <xsl:call-template name=""add-elem-number""> + | <xsl:with-param name=""source"" select=""tns:Structure/tns:Property[@name='ТипКорпуса']/tns:Value/text()"" /> + | <xsl:with-param name=""value"" select=""tns:Structure/tns:Property[@name='Корпус']/tns:Value/text()"" /> + | </xsl:call-template> + | + | <xsl:call-template name=""add-elem-number""> + | <xsl:with-param name=""source"" select=""tns:Structure/tns:Property[@name='ТипКвартиры']/tns:Value/text()"" /> + | <xsl:with-param name=""value"" select=""tns:Structure/tns:Property[@name='Квартира']/tns:Value/text()"" /> + | </xsl:call-template> + | + | </xsl:element> + | </xsl:template> + | + | <xsl:param name=""enum-codevalue""> + |" + КодыДопАдрЭл.ПолучитьТекст() + " + | </xsl:param> + | <xsl:variable name=""enum-codevalue-nodes"" select=""exsl:node-set($enum-codevalue)"" /> + | + | <xsl:param name=""enum-regioncode""> + |" + КодыРегионов.ПолучитьТекст() + " + | </xsl:param> + | <xsl:variable name=""enum-regioncode-nodes"" select=""exsl:node-set($enum-regioncode)"" /> + | + | <xsl:template name=""add-elem-number""> + | <xsl:param name=""source"" /> + | <xsl:param name=""value"" /> + | + | <xsl:if test=""0!=count($source)""> + | <xsl:variable name=""type-code"" select=""$enum-codevalue-nodes/data:item[@data:title=$source]"" /> + | <xsl:if test=""0!=count($type-code)""> + | <xsl:element name=""ДопАдрЭл""> + | <xsl:element name=""Номер""> + | <xsl:attribute name=""Тип""><xsl:value-of select=""$type-code"" /></xsl:attribute> + | <xsl:attribute name=""Значение""><xsl:value-of select=""$value""/></xsl:attribute> + | </xsl:element> + | </xsl:element> + | </xsl:if> + | </xsl:if> + | + | </xsl:template> + | + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВАдресЭлектроннойПочты() Экспорт + Возврат XSLT_СтруктураВСтроковыйСостав("ЭлектроннаяПочта"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВВебСтраницу() Экспорт + Возврат XSLT_СтруктураВСтроковыйСостав("ВебСайт"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВТелефон() Экспорт + Возврат XSLT_СтруктураВТелефонФакс("НомерТелефона"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВФакс() Экспорт + Возврат XSLT_СтруктураВТелефонФакс("НомерФакса"); +КонецФункции + +// Преобразует сериализованную структуру в контактную информацию в виде XML +// +Функция XSLT_СтруктураВДругое() Экспорт + Возврат XSLT_СтруктураВСтроковыйСостав("Прочее"); +КонецФункции + +// Общее преобразование сериализованной структуры в контактную информацию в виде XML простого типа +Функция XSLT_СтруктураВСтроковыйСостав(Знач ИмяXDTOТипа) + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | + |<xsl:template match=""/""> + | + | <xsl:element name=""КонтактнаяИнформация""> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> + | <xsl:attribute name=""Значение""> + | <xsl:choose> + | <xsl:when test=""0=count(tns:Structure/tns:Property[@name='Значение'])""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Значение']/tns:Value/text()""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:attribute> + | + | </xsl:element> + | </xsl:element> + | + |</xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +// Общее преобразование для телефона и факса +Функция XSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) Экспорт + Преобразователь = Новый ПреобразованиеXSL; + Преобразователь.ЗагрузитьИзСтроки(" + |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" + | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" + | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" + | xmlns=""http://www.v8.1c.ru/ssl/contactinfo"" + |> + |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> + | <xsl:template match=""/""> + | + | <xsl:element name=""КонтактнаяИнформация""> + | + | <xsl:attribute name=""Представление""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Представление']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:element name=""Комментарий""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Комментарий']/tns:Value/text()""/> + | </xsl:element> + | <xsl:element name=""Состав""> + | <xsl:attribute name=""xsi:type"">" + ИмяXDTOТипа + "</xsl:attribute> + | + | <xsl:attribute name=""КодСтраны""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодСтраны']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""КодГорода""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='КодГорода']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""Номер""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='НомерТелефона']/tns:Value/text()""/> + | </xsl:attribute> + | <xsl:attribute name=""Добавочный""> + | <xsl:value-of select=""tns:Structure/tns:Property[@name='Добавочный']/tns:Value/text()""/> + | </xsl:attribute> + | + | </xsl:element> + | </xsl:element> + | + | </xsl:template> + |</xsl:stylesheet> + |"); + Возврат Преобразователь; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Библиотечные методы для XSL транформаций. Предназначено для имитации <xsl:include href="..."/> +// + +// Фрагмент XSL с процедурами для обработки строк +Функция XSLT_ШаблоныСтроковыхФункций() + Возврат " + |<!-- string functions --> + | + | <xsl:template name=""str-trim-left""> + | <xsl:param name=""str"" /> + | <xsl:variable name=""head"" select=""substring($str, 1, 1)""/> + | <xsl:variable name=""tail"" select=""substring($str, 2)""/> + | <xsl:choose> + | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($head)) = 0)""> + | <xsl:call-template name=""str-trim-left""> + | <xsl:with-param name=""str"" select=""$tail""/> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template name=""str-trim-right""> + | <xsl:param name=""str"" /> + | <xsl:variable name=""head"" select=""substring($str, 1, string-length($str) - 1)""/> + | <xsl:variable name=""tail"" select=""substring($str, string-length($str))""/> + | <xsl:choose> + | <xsl:when test=""(string-length($str) > 0) and (string-length(normalize-space($tail)) = 0)""> + | <xsl:call-template name=""str-trim-right""> + | <xsl:with-param name=""str"" select=""$head""/> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str""/> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:template name=""str-trim-all""> + | <xsl:param name=""str"" /> + | <xsl:call-template name=""str-trim-right""> + | <xsl:with-param name=""str""> + | <xsl:call-template name=""str-trim-left""> + | <xsl:with-param name=""str"" select=""$str""/> + | </xsl:call-template> + | </xsl:with-param> + | </xsl:call-template> + | </xsl:template> + | + | <xsl:template name=""str-replace-all""> + | <xsl:param name=""str"" /> + | <xsl:param name=""search-for"" /> + | <xsl:param name=""replace-by"" /> + | <xsl:choose> + | <xsl:when test=""contains($str, $search-for)""> + | <xsl:value-of select=""substring-before($str, $search-for)"" /> + | <xsl:value-of select=""$replace-by"" /> + | <xsl:call-template name=""str-replace-all""> + | <xsl:with-param name=""str"" select=""substring-after($str, $search-for)"" /> + | <xsl:with-param name=""search-for"" select=""$search-for"" /> + | <xsl:with-param name=""replace-by"" select=""$replace-by"" /> + | </xsl:call-template> + | </xsl:when> + | <xsl:otherwise> + | <xsl:value-of select=""$str"" /> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:template> + | + | <xsl:param name=""alpha-low"" select=""'абвгдеёжзийклмнопрстуфхцчшщыъьэюяabcdefghijklmnopqrstuvwxyz'"" /> + | <xsl:param name=""alpha-up"" select=""'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ'"" /> + | + | <xsl:template name=""str-upper""> + | <xsl:param name=""str"" /> + | <xsl:value-of select=""translate($str, $alpha-low, $alpha-up)""/> + | </xsl:template> + | + | <xsl:template name=""str-lower""> + | <xsl:param name=""str"" /> + | <xsl:value-of select=""translate($str, alpha-up, $alpha-low)"" /> + | </xsl:template> + | + |<!-- /string functions --> + |"; +КонецФункции + +// Фрагмент XSL с процедурами для работы с xpath +Функция XSLT_ШаблоныФункцийXPath() + Возврат " + |<!-- path functions --> + | + | <xsl:template name=""build-path""> + | <xsl:variable name=""node"" select="".""/> + | + | <xsl:for-each select=""$node | $node/ancestor-or-self::node()[..]""> + | <xsl:choose> + | <!-- element --> + | <xsl:when test=""self::*""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""name()""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::*[name(current()) = name()])""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::*[name(current()) = name()])""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <xsl:otherwise> + | <!-- not element --> + | <xsl:choose> + | <!-- attribute --> + | <xsl:when test=""count(. | ../@*) = count(../@*)""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""concat('@',name())""/> + | </xsl:when> + | <!-- text- --> + | <xsl:when test=""self::text()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'text()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::text())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::text())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- processing instruction --> + | <xsl:when test=""self::processing-instruction()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'processing-instruction()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::processing-instruction())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::processing-instruction())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- comment --> + | <xsl:when test=""self::comment()""> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""'comment()'""/> + | <xsl:variable name=""thisPosition"" select=""count(preceding-sibling::comment())""/> + | <xsl:variable name=""numFollowing"" select=""count(following-sibling::comment())""/> + | <xsl:if test=""$thisPosition + $numFollowing > 0""> + | <xsl:value-of select=""concat('[', $thisPosition +1, ']')""/> + | </xsl:if> + | </xsl:when> + | <!-- namespace --> + | <xsl:when test=""count(. | ../namespace::*) = count(../namespace::*)""> + | <xsl:variable name=""ap"">'</xsl:variable> + | <xsl:value-of select=""'/'""/> + | <xsl:value-of select=""concat('namespace::*','[local-name() = ', $ap, local-name(), $ap, ']')""/> + | </xsl:when> + | </xsl:choose> + | </xsl:otherwise> + | </xsl:choose> + | </xsl:for-each> + | + | </xsl:template> + | + |<!-- /path functions --> + |"; +КонецФункции + diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/КонтактнаяИнформацияСлужебныйПовтИсп.mdo b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/КонтактнаяИнформацияСлужебныйПовтИсп.mdo new file mode 100644 index 000000000..8294702e4 --- /dev/null +++ b/SSL/src/CommonModules/КонтактнаяИнформацияСлужебныйПовтИсп/КонтактнаяИнформацияСлужебныйПовтИсп.mdo @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cce4c615-dc29-42b3-9d3d-b277dde4a2e4"> + <name>КонтактнаяИнформацияСлужебныйПовтИсп</name> + <synonym> + <key>ru</key> + <value>Контактная информация служебный повт исп</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> + <returnValuesReuse>DuringSession</returnValuesReuse> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index e3ebea543..d2523e8b3 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -162,7 +162,6 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.1.7"; Обработчик.Процедура = "КурсыВалютСлужебныйВМоделиСервиса.ПреобразованиеСвязейВалют"; - Обработчик.Опциональный = Истина; КонецПроцедуры @@ -184,7 +183,7 @@ НайденнаяСтрока = КлассификаторТаблица.Найти(Валюта.Код, "Code"); Если НайденнаяСтрока <> Неопределено И НайденнаяСтрока.RBCLoading = "истина" Тогда Валюта.ЗагружаетсяИзИнтернета = Истина; - Валюта.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Валюта); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index a96d560ba..2b6d9806b 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -28,7 +28,7 @@ Если НапоминанияПользователяКлиент.ПолучитьТекущиеОповещения(ВремяБлижайшего).Количество() > 0 Тогда НапоминанияПользователяКлиент.ОткрытьФормуОповещения(); ИначеЕсли ЗначениеЗаполнено(ВремяБлижайшего) Тогда - ИнтервалСледующейПроверки = Мин(ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса(), ИнтервалСледующейПроверки); + ИнтервалСледующейПроверки = Макс(Мин(ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса(), ИнтервалСледующейПроверки), 1); КонецЕсли; ПодключитьОбработчикОжидания("ПроверитьТекущиеНапоминания", ИнтервалСледующейПроверки, Истина); diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index 3c5d3d2f0..005453ce8 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -362,8 +362,7 @@ "ИнтервалПроверкиНапоминаний", 1, , - ПолучитьИмяПользователяИБ(Пользователь) - ); + ПолучитьИмяПользователяИБ(Пользователь)); Возврат Макс(Интервал, 1); КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index 92f95193a..5dc3b9036 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -80,8 +80,7 @@ Попытка ОбменСообщениями.ОтправитьСообщение("ОбменДанными\УправляющееПриложение\ПризнакИзмененияДанных", Новый Структура("КодУзла", ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ОбластьДанных)), - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); Константы.ЗарегистрированыИзмененияДанных.Установить(Истина); @@ -248,8 +247,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не определена конечная точка корреспондента для адреса ""%1"".'"), - Выборка2.Адрес - ); + Выборка2.Адрес); КонецЕсли; Запись = Новый Структура; @@ -385,6 +383,10 @@ // Процедура ПеренестиДанныеСостоянийОбменаДанными() Экспорт + Если ОбменДаннымиПовтИсп.РазделенныеПланыОбменаБСП().Количество() = 0 Тогда + Возврат; + КонецЕсли; + // Обработка регистров СостоянияОбменовДанными и СостоянияОбменовДаннымиОбластейДанных НачатьТранзакцию(); Попытка @@ -503,8 +505,7 @@ Если ПустаяСтрока(Каталог) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат каталога обмена информацией ""%1"".'"), - Каталог - ); + Каталог); КонецЕсли; Разделитель = "/"; @@ -516,8 +517,7 @@ Если Найти(Каталог, Разделитель) = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат каталога обмена информацией ""%1"".'"), - Каталог - ); + Каталог); КонецЕсли; КонецЕсли; @@ -527,8 +527,7 @@ Если Каталоги.Количество() = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат каталога обмена информацией ""%1"".'"), - Каталог - ); + Каталог); КонецЕсли; Результат = Каталоги[Каталоги.ВГраница()]; @@ -538,8 +537,7 @@ Если Каталоги.Количество() = 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неправильный формат каталога обмена информацией ""%1"".'"), - Каталог - ); + Каталог); КонецЕсли; Результат = Каталоги[Каталоги.ВГраница() - 1]; @@ -788,13 +786,14 @@ УстановитьПривилегированныйРежим(Истина); - Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы", + Параметры.Вставить("ЭтоАвтономноеРабочееМесто", + АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто()); + Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы", АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы()); - Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы", + Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы", АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы()); - Параметры.Вставить("ОткрытьПомощникНастройкиАвтономногоРабочегоМеста", + Параметры.Вставить("ОткрытьПомощникНастройкиАвтономногоРабочегоМеста", АвтономнаяРаботаСлужебный.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста()); - КонецПроцедуры // Заполняет структуру параметров, необходимых для работы клиентского кода @@ -867,8 +866,7 @@ УдалитьФайлы(ФайлСообщения.ПолноеИмя); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Продолжить; КонецПопытки; КонецЕсли; @@ -990,8 +988,7 @@ Процедура ВыполнитьВыгрузкуДанных(Отказ, Знач Корреспондент) Экспорт ОбменДаннымиСервер.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( - Отказ, Корреспондент, Перечисления.ДействияПриОбмене.ВыгрузкаДанных - ); + Отказ, Корреспондент, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); КонецПроцедуры // Выполняет загрузку данных в обмене между областями данных. @@ -1003,8 +1000,7 @@ Процедура ВыполнитьЗагрузкуДанных(Отказ, Знач Корреспондент) Экспорт ОбменДаннымиСервер.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( - Отказ, Корреспондент, Перечисления.ДействияПриОбмене.ЗагрузкаДанных - ); + Отказ, Корреспондент, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); КонецПроцедуры // @@ -1061,8 +1057,7 @@ Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестное действие ""%1"" при обмене данными между областями данных.'"), - СтрокаСценария.ВыполняемоеДействие - ); + СтрокаСценария.ВыполняемоеДействие); КонецЕсли; // Переходим к следующему шагу сценария @@ -1136,8 +1131,7 @@ Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестное действие ""%1"" при обмене данными между областями данных.'"), - СтрокаСценария.ВыполняемоеДействие - ); + СтрокаСценария.ВыполняемоеДействие); КонецЕсли; // Завершение выполнения сценария @@ -1459,8 +1453,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка назначения кода узла корреспондента. |Назначенное значение ""%1"" - |Фактическое значение ""%2"".'" - ); + |Фактическое значение ""%2"".'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КодКорреспондента, ФактическийКодКорреспондента); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -1494,8 +1487,7 @@ FILEАбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( FILEОбщийКаталогОбменаИнформацией, - FILEОтносительныйКаталогОбменаИнформацией - ); + FILEОтносительныйКаталогОбменаИнформацией); АбсолютныйКаталог = Новый Файл(FILEАбсолютныйКаталогОбменаИнформацией); Если Не АбсолютныйКаталог.Существует() Тогда @@ -1551,8 +1543,7 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Сообщение.Body.SessionId), Представление); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСессииОбменаСообщениямиСистемы(), - УровеньЖурналаРегистрации.Информация,,, СтрокаСообщения - ); + УровеньЖурналаРегистрации.Информация,,, СтрокаСообщения); РегистрыСведений.СессииОбменаСообщениямиСистемы.СохранитьДанныеСессии(Сообщение.Body.SessionId, Сообщение.Body.Data); КонецПроцедуры @@ -1570,8 +1561,7 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Сообщение.Body.SessionId), Представление); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСессииОбменаСообщениямиСистемы(), - УровеньЖурналаРегистрации.Информация,,, СтрокаСообщения - ); + УровеньЖурналаРегистрации.Информация,,, СтрокаСообщения); РегистрыСведений.СессииОбменаСообщениямиСистемы.ЗафиксироватьУспешноеВыполнениеСессии(Сообщение.Body.SessionId); КонецПроцедуры @@ -1585,14 +1575,11 @@ КонецЕсли; СтрокаСообщения = НСтр("ru = 'Ошибка выполнения сессии обмена сообщениями системы ""%1"".%2 - |Описание ошибки из корреспондента: %3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() - ); + |Описание ошибки из корреспондента: %3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - Строка(Сообщение.Body.SessionId), Представление, Сообщение.Body.ErrorDescription - ); + Строка(Сообщение.Body.SessionId), Представление, Сообщение.Body.ErrorDescription); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСессииОбменаСообщениямиСистемы(), - УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения - ); + УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); РегистрыСведений.СессииОбменаСообщениямиСистемы.ЗафиксироватьНеуспешноеВыполнениеСессии(Сообщение.Body.SessionId); КонецПроцедуры @@ -1792,8 +1779,7 @@ ПолучитьТаблицуПлановОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбменаМетода, ДополнительныеСвойстваПланаОбмена); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ДополнительныеСвойстваПланаОбмена]", - ПолучитьДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена) - ); + ПолучитьДополнительныеСвойстваПланаОбменаСтрокой(ДополнительныеСвойстваПланаОбмена)); Если ТолькоНеуспешные Тогда Отбор = " @@ -2115,4 +2101,4 @@ ПередЗаписьюОбщихДанных(Источник, Отказ); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl index e801ab58b..52f99c7e0 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl @@ -11,22 +11,25 @@ Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.РазделениеВключено ИЛИ Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + + Если ПараметрыРаботыКлиента.РазделениеВключено Тогда Возврат; КонецЕсли; - ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = - ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы; - - Если ПараметрыРаботыКлиента.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста Тогда + Если ПараметрыРаботыКлиента.ЭтоАвтономноеРабочееМесто Тогда - ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.НастройкаНаСторонеАвтономногоРабочегоМеста"); - - ИначеЕсли ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы Тогда - - ПоказатьОповещениеПользователя(НСтр("ru = 'Автономная работа'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", - НСтр("ru = 'Рекомендуется синхронизировать данные с приложением в Интернете.'"), БиблиотекаКартинок.Информация32 - ); + ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = + ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы + ; + Если ПараметрыРаботыКлиента.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста Тогда + + ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.НастройкаНаСторонеАвтономногоРабочегоМеста"); + + ИначеЕсли ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы Тогда + + ПоказатьОповещениеПользователя(НСтр("ru = 'Автономная работа'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", + НСтр("ru = 'Рекомендуется синхронизировать данные с приложением в Интернете.'"), БиблиотекаКартинок.Информация32); + КонецЕсли; КонецЕсли; @@ -44,9 +47,13 @@ И СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыАвтономнойРаботы.СинхронизацияССервисомДавноНеВыполнялась Тогда ТекстФлажка = НСтр("ru = 'Синхронизировать данные с приложением в Интернете'"); + ПараметрыФормы = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыАвтономнойРаботы.ПараметрыФормыВыполненияОбменаДанными; + ПараметрыФормы = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыФормы); + ПараметрыФормы.Вставить("ЗавершениеРаботыСистемы", Истина); + ПараметрыФормы = Новый ФиксированнаяСтруктура(ПараметрыФормы); ДействиеПриУстановленномФлажке = Новый Структура; ДействиеПриУстановленномФлажке.Вставить("Форма", "Обработка.ВыполнениеОбменаДанными.Форма.Форма"); - ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыАвтономнойРаботы.ПараметрыФормыВыполненияОбменаДанными); + ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", ПараметрыФормы); ПараметрыПредупреждения = Новый Структура; ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); @@ -58,19 +65,6 @@ КонецПроцедуры -// Обработчик события открытия инструкции по восстановлению/изменению пароля синхронизации данных -// с автономным рабочим местом. -// -Процедура ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных() Экспорт - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИмяМакета", "КакИзменитьПарольСинхронизацииДанных"); - ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Как изменить пароль синхронизации данных'")); - - ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.ДополнительноеОписание", ПараметрыФормы,, "КакИзменитьПарольСинхронизацииДанных"); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index bb37795f8..480fcf804 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -14,8 +14,7 @@ Функция ПолучитьWSПроксиСервисаОбмена() Экспорт НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS( - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); СтруктураНастроек = Новый Структура; СтруктураНастроек.Вставить("WSURLВебСервиса", НастройкиТранспорта.WSURLВебСервиса); diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 95cbd4194..1670a8aaa 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -27,7 +27,7 @@ ИдентификаторОперации = "", ИдентификаторФайла = "", ДлительнаяОперацияРазрешена = Ложь, - Знач Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, @@ -39,8 +39,7 @@ ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена, - Пароль - ); + ПараметрыАутентификации); КонецПроцедуры @@ -207,8 +206,7 @@ ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, ДействиеПриОбмене, ДатаНачала, - СтрокаСообщенияОбОшибке - ); + СтрокаСообщенияОбОшибке); КонецПроцедуры // Выполняет получение файла сообщения обмена из базы-корреспондента через веб-сервис. @@ -219,7 +217,7 @@ Знач УзелИнформационнойБазы, Знач ИдентификаторФайла, Знач ДатаНачалаОперации, - Знач Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( @@ -227,8 +225,7 @@ УзелИнформационнойБазы, ИдентификаторФайла, ДатаНачалаОперации, - Пароль - ); + ПараметрыАутентификации); КонецПроцедуры // Выполняет попытку установки внешнего соединения по переданным параметрам подключения. @@ -334,6 +331,32 @@ КонецФункции +// Возвращает состояние выполнения фонового задания. +// Используется для реализации логики длительных операций. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, для которого необходимо получить состояние. +// +// Возвращаемое значение: +// Строка – состояние выполнения фонового задания: +// "Активно" - задание выполняется; +// "Завершено" - задание выполнено успешно; +// "ЗавершеноАварийно" - задание завершено аварийно или отменено пользователем. +// +Функция СостояниеЗадания(Знач ИдентификаторЗадания) Экспорт + + Попытка + Результат = ?(ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания), "Завершено", "Активно"); + Исключение + Результат = "ЗавершеноАварийно"; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + Возврат Результат; +КонецФункции + // Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте. // Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, @@ -357,6 +380,27 @@ Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); КонецФункции +// Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте для узла информационной базы. +// +Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач ИдентификаторОперации, + Знач УзелИнформационнойБазы, + Знач ПараметрыАутентификации = Неопределено, + СтрокаСообщенияОбОшибке = "" + ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); +КонецФункции + // Получает сообщение обмена из базы-корреспондента через веб-сервис. // Сохраняет полученное сообщение обмена во временный каталог. // @@ -366,7 +410,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( @@ -375,8 +419,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Пароль - ); + ПараметрыАутентификации); КонецФункции // Получает сообщение обмена из базы-корреспондента через веб-сервис. @@ -387,15 +430,14 @@ Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Знач Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Пароль - ); + ПараметрыАутентификации); КонецФункции // Возвращает признак изменения конфигурации для подчиненного узла распределенной ИБ. @@ -438,6 +480,18 @@ КонецПроцедуры +// Выполняет удаление настройки синхронизации данных. +// +Процедура УдалитьНастройкуСинхронизации(Знач УзелИнформационнойБазы) Экспорт + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + УстановитьПривилегированныйРежим(Истина); + + УзелИнформационнойБазы.ПолучитьОбъект().Удалить(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обмен данными под полными правами @@ -449,18 +503,33 @@ // Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - // процедура обновления повторно-используемых значений и параметров сеанса - ОбновитьКэшМеханизмаРегистрацииОбъектов(); - - // зарегистрируем имена параметров, которые установлены при - // выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов - УстановленныеПараметры.Добавить("ИспользуемыеПланыОбмена"); - УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - ОбменДаннымиСервер.УстановитьРежимЗагрузкиПараметровРаботыПрограммы(Ложь); - УстановленныеПараметры.Добавить("ЗагрузкаПараметровРаботыПрограммы"); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + // процедура обновления повторно-используемых значений и параметров сеанса + ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + // зарегистрируем имена параметров, которые установлены при + // выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов + УстановленныеПараметры.Добавить("ИспользуемыеПланыОбмена"); + УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + + ОбменДаннымиСервер.УстановитьРежимЗагрузкиПараметровРаботыПрограммы(Ложь); + УстановленныеПараметры.Добавить("ЗагрузкаПараметровРаботыПрограммы"); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); + УстановленныеПараметры.Добавить("ПриоритетныеДанныеОбмена"); + + Иначе + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); + + КонецЕсли; КонецПроцедуры @@ -669,21 +738,73 @@ Возврат ПараметрыСеанса.ЗагрузкаПараметровРаботыПрограммы = Истина; КонецФункции -// Возвращает признак режима загрузки параметров работы программы из сообщения обмена +// Возвращает признак ошибки при запуске: +// 1) Ошибка загрузки сообщения обмена: +// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, +// - ошибка проверки идентификаторов объектов метаданных, +// - ошибка загрузки сообщения обмена перед обновлением ИБ, +// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; +// 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. // -Функция ВыполнитьЗагрузкуПараметровРаботыПрограммы() Экспорт +Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт УстановитьПривилегированныйРежим(Истина); - Возврат Константы.ВыполнитьЗагрузкуПараметровРаботыПрограммы.Получить() = Истина; + Возврат Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Получить() = Истина + И ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПропуститьПовторнуюЗагрузкуСообщенияОбменаДанными") = Неопределено; + КонецФункции -// Отменяет режим загрузки параметров работы программы из сообщения обмена -// -Процедура ОтменитьЗагрузкуПараметровРаботыПрограммы() Экспорт +// Сбрасывает признак повторения загрузки, установленный при ошибке. +Процедура ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() Экспорт + УстановитьПривилегированныйРежим(Истина); - Константы.ВыполнитьЗагрузкуПараметровРаботыПрограммы.Установить(Ложь); + Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Ложь); + +КонецПроцедуры + +// Возвращает список приоритетных данных обмена +// +// Возвращаемое значение: +// Тип: Массив. Коллекция ссылок на выгруженные приоритетные данные обмена +// +Функция ПриоритетныеДанныеОбмена() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Массив; + + Для Каждого Элемент Из ПараметрыСеанса.ПриоритетныеДанныеОбмена Цикл + + Результат.Добавить(Элемент); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Дополняет список приоритетных данных обмена переданным значением +// +Процедура ДополнитьПриоритетныеДанныеОбмена(Знач Данные) Экспорт + + Результат = ПриоритетныеДанныеОбмена(); + + Результат.Добавить(Данные); + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Результат); + +КонецПроцедуры + +// Очищает список приоритетных данных обмена +// +Процедура ОчиститьПриоритетныеДанныеОбмена() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 5f5e77552..086cd0ce2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -128,7 +128,7 @@ ПараметрыФормы.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); - ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); КонецПроцедуры @@ -159,7 +159,7 @@ ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); - ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); КонецПроцедуры @@ -345,6 +345,29 @@ КонецПроцедуры +// Процедура-обработчик запуска клиентского сеанса приложения. +// Если выполняется запуск ИБ для подчиненного узла РИБ, +// с необходимостью повтора загрузки сообщения обмена, тогда +// пользователю предлагается принять решение о повторной загрузке +// или продолжении без загрузки. +// +Процедура ПередНачаломРаботыСистемы(Отказ, ПараметрыКлиента, ОбновитьПараметрыКлиента) Экспорт + + Если НЕ ПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат; + КонецЕсли; + + ОбновитьПараметрыКлиента = Истина; + + Результат = ОткрытьФормуМодально( + "РегистрСведений.НастройкиТранспортаОбмена.Форма.ПовторнаяСинхронизацияДанныхПередЗапуском"); + + Если Результат <> "Продолжить" Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + // Процедура-обработчик запуска клиентского сеанса приложения. // Если выполняется первый запуск ИБ для подчиненного узла РИБ, // то открывается форма помощника создания обмена данными. @@ -359,7 +382,7 @@ Если ПараметрыРаботыКлиента.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла Тогда ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , ВариантОткрытияОкна.ОтдельноеОкно); ИначеЕсли ПараметрыРаботыКлиента.ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла Тогда @@ -460,8 +483,8 @@ Знач ИмяРегистра, ФормаВладелец, Знач ИмяФормы = "", - ПараметрыФормы = Неопределено - ) Экспорт + ПараметрыФормы = Неопределено, + ОткрытьМодально = Ложь) Экспорт Перем КлючЗаписи; @@ -505,7 +528,11 @@ КонецЕсли; // открываем форму записи РС - ОткрытьФормуМодально(ПолноеИмяФормы, ПараметрыЗаписи, ФормаВладелец); + Если ОткрытьМодально Тогда + ОткрытьФормуМодально(ПолноеИмяФормы, ПараметрыЗаписи, ФормаВладелец); + Иначе + ОткрытьФорму(ПолноеИмяФормы, ПараметрыЗаписи, ФормаВладелец); + КонецЕсли; КонецПроцедуры @@ -529,7 +556,7 @@ // вызов сервера ПараметрыФормы = ОбменДаннымиВызовСервера.ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Владелец); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Владелец); КонецПроцедуры @@ -539,19 +566,7 @@ // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; // Владелец – форма-владелец для открываемой формы; // -Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец, ЗадатьВопрос = Истина, АдресДляВосстановленияПароляУчетнойЗаписи = "") Экспорт - - Если ЗадатьВопрос Тогда - - ТекстВопроса = НСтр("ru = 'Синхронизировать данные с ""[УзелИнформационнойБазы]""?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "[УзелИнформационнойБазы]", Строка(УзелИнформационнойБазы)); - - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - КонецЕсли; +Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец, АдресДляВосстановленияПароляУчетнойЗаписи = "") Экспорт ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); @@ -650,8 +665,7 @@ ПараметрыПодключения.ИмяПользователя, ПараметрыПодключения.ПарольПользователя, ИмяПланаОбмена, - КодНовогоУзлаВторойБазы - ); + КодНовогоУзлаВторойБазы); Иначе // клиент-серверный @@ -664,8 +678,7 @@ ПараметрыПодключения.ИмяПользователя, ПараметрыПодключения.ПарольПользователя, ИмяПланаОбмена, - КодНовогоУзлаВторойБазы - ); + КодНовогоУзлаВторойБазы); КонецЕсли; @@ -691,16 +704,78 @@ // Для внутреннего использования // -Процедура ВыполнитьОбновлениеИнформационнойБазы() Экспорт +Процедура ВыполнитьОбновлениеИнформационнойБазы(ЗавершениеРаботыСистемы = Ложь) Экспорт СтандартнаяОбработка = Истина; - ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка); + ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка, ЗавершениеРаботыСистемы); Если СтандартнаяОбработка Тогда ОткрытьФорму("ОбщаяФорма.ДополнительноеОписание", Новый Структура("Заголовок,ИмяМакета", - НСтр("ru = 'Установка обновления'"), "ИнструкцияКакВыполнитьУстановкуОбновленияВручную") - ); + НСтр("ru = 'Установка обновления'"), "ИнструкцияКакВыполнитьУстановкуОбновленияВручную")); + КонецЕсли; + +КонецПроцедуры + +// Открывает форму монитора зарегистрированных к отправке данных +// +Процедура ОткрытьСоставОтправляемыхДанных(Знач УзелИнформационнойБазы) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелОбмена", УзелИнформационнойБазы); + ПараметрыФормы.Вставить("ЗапрещеноВыбиратьУзелОбмена", Истина); + + ПараметрыФормы.Вставить("ИменаСкрываемыхМетаданных", Новый СписокЗначений); + ПараметрыФормы.ИменаСкрываемыхМетаданных.Добавить("РегистрСведений.СоответствияОбъектовИнформационныхБаз"); + + ОткрытьФорму("Обработка.РегистрацияИзмененийДляОбменаДанными.Форма", ПараметрыФормы,, УзелИнформационнойБазы); +КонецПроцедуры + +// Выполняет удаление настройки синхронизации данных +// +Процедура УдалитьНастройкуСинхронизации(Знач УзелИнформационнойБазы) Экспорт + + Ответ = Вопрос(НСтр("ru = 'Удалить настройку синхронизации данных?'"), РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + ОбменДаннымиВызовСервера.УдалитьНастройкуСинхронизации(УзелИнформационнойБазы); + + Оповестить("Запись_УзелПланаОбмена"); + + ЗакрытьФормы("ФормаУзла"); + + КонецЕсли; + +КонецПроцедуры + +// Закрывает все открытые формы, в имени которых встречается указанная подстрока, +// и у которых не установлен флаг модифицированности. +// +Процедура ЗакрытьФормы(Знач ИмяФормы) + + Окна = ПолучитьОкна(); + + Если Окна <> Неопределено Тогда + + Для Каждого Окно Из Окна Цикл + + Если Не Окно.Основное Тогда + + Форма = Окно.ПолучитьСодержимое(); + + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") + И Не Форма.Модифицированность + И Найти(Форма.ИмяФормы, ИмяФормы) <> 0 Тогда + + Форма.Закрыть(); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -708,17 +783,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем -// Только для внутреннего использования -Процедура ПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ(ГлавныйУзел) Экспорт - - Отбор = Новый Структура("Узел", ГлавныйУзел); - ЗначенияЗаполнения = Новый Структура("Узел", ГлавныйУзел); - - ОткрытьФормуЗаписиРегистраСведенийПоОтбору( - Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", Неопределено); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -727,11 +791,11 @@ // Параметры: // СтандартнаяОбработка - Булево - если в процедуре установить данному параметру значение Ложь, то инструкция по // "ручному" обновлению показана не будет. -Процедура ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка) +Процедура ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка, ЗавершениеРаботыСистемы = Ложь) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); - Модуль.ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка); + МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); + МодульОбновлениеКонфигурацииКлиент.ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка, ЗавершениеРаботыСистемы); КонецЕсли; КонецПроцедуры @@ -744,8 +808,8 @@ Процедура ПриИзмененииВыделенныхОбъектов(Список) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); - Модуль.ИзменитьВыделенные(Список); + МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент"); + МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Список); КонецЕсли; КонецПроцедуры @@ -769,8 +833,8 @@ Если ЗапуститьМенеджерЗаданий Тогда Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РегламентныеЗаданияСлужебныйГлобальный"); - Модуль.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания(); + МодульРегламентныеЗаданияСлужебныйГлобальный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РегламентныеЗаданияСлужебныйГлобальный"); + МодульРегламентныеЗаданияСлужебныйГлобальный.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания(); КонецЕсли; КонецЕсли; @@ -779,11 +843,16 @@ // Обработчик события открытия инструкции по восстановлению/изменению пароля синхронизации данных // с автономным рабочим местом. // -Процедура ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных() Экспорт +Процедура ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(Знач АдресДляВосстановленияПароляУчетнойЗаписи) Экспорт - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервисаКлиент"); - Модуль.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(); + Если ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи) Тогда + + Предупреждение(НСтр("ru = 'Адрес для восстановления пароля учетной записи не задан.'")); + + Иначе + + ПерейтиПоНавигационнойСсылке(АдресДляВосстановленияПароляУчетнойЗаписи); + КонецЕсли; КонецПроцедуры @@ -798,8 +867,8 @@ Процедура ПриОткрытииФормыОтчетаПоВерсии(Ссылка, СравниваемыеВерсии) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); - Модуль.ПриОткрытииФормыОтчетаПоВерсии(Ссылка, СравниваемыеВерсии); + МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); + МодульВерсионированиеОбъектовКлиент.ПриОткрытииФормыОтчетаПоВерсии(Ссылка, СравниваемыеВерсии); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl index 22bc33080..5744289c6 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl @@ -13,11 +13,9 @@ Если СтрокаСодержитСимвол(ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()) Тогда СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. - |Имя пользователя не должно содержать символы %2.'" - ); + |Имя пользователя не должно содержать символы %2.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси() - ); + ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -27,7 +25,13 @@ // Функция НедопустимыеСимволыВИмениПользователяWSПрокси() Экспорт - Возврат "@/\[]#&*?:;="; + СистемнаяИнформация = Новый СистемнаяИнформация; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.2.17.0") > 0 Тогда + Возврат ":"; + Иначе + Возврат "@/\[]#&*?:;="; + КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index 917fdc0b5..51729bfc5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -6,6 +6,20 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Возвращает префикс кодов и номеров объектов информационной базы по умолчанию +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Строка, 2 - префикс кодов и номеров объектов информационной базы по умолчанию +// +Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт + + Возврат НСтр("ru = 'ДМ'"); + +КонецФункции + // Определяет список планов обмена, которые используют функционал подсистемы обмена данными. // // Параметры: @@ -159,16 +173,43 @@ КонецПроцедуры -// Возвращает префикс кодов и номеров объектов информационной базы по умолчанию +// Обработчик при коллизии изменений данных. +// Событие возникает при получении данных, если в текущей информационной базе изменен тот же объект, +// что получен из сообщения обмена и эти объекты различаются. +// Используется для переопределения стандартной обработки коллизий изменений данных. +// Стандартная обработка коллизий предполагает получение изменений от главного узла +// и игнорирование изменений, полученных от подчиненного узла. +// В данном обработчике должен быть переопределен параметр ПолучениеЭлемента, +// если требуется изменить поведение по умолчанию. +// В данном обработчике можно задать поведение системы при возникновении коллизии изменений данных в разрезе данных, +// в разрезе свойств данных, в разрезе отправителей или для всей информационной базы в целом, или для всех данных в целом. +// Обработчик вызывается как в обмене в распределенной информационной базе (РИБ), +// так и во всех остальных обменах, в том числе в обменах по правилам обмена. // -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Строка, 2 - префикс кодов и номеров объектов информационной базы по умолчанию +// Параметры: +// ЭлементДанных – Элемент данных, прочитанный из сообщения обмена данными. +// Элементами данных могут быть КонстантаМенеджерЗначения.<Имя константы>, +// объекты базы данных (кроме объекта "Удаление объекта"), наборы записей регистров, последовательностей или перерасчетов. // -Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт +// ПолучениеЭлемента – Тип: ПолучениеЭлементаДанных. +// Значение данного параметра может быть переопределено в обработчике. +// Определяет, будет ли прочитанный элемент данных записан в базу данных или нет в случае коллизии. +// При вызове обработчика параметр имеет значение Авто, что означает действия по умолчанию +// (принимать от главного, игнорировать от подчиненного). +// +// Отправитель – Тип: ПланОбменаСсылка. Узел плана обмена, от имени которого выполняется получение данных. +// +// ПолучениеОтГлавного – Тип: Булево. +// В распределенной информационной базе обозначает признак получения данных от главного узла. +// Истина – выполняется получение данных от главного узла, Ложь – от подчиненного. +// В обменах по правилам обмена принимает значение Истина – если в правилах обмена приоритет объекта +// при коллизии установлен в значение "Выше" (значение по умолчанию) или не указан; +// Ложь – если в правилах обмена приоритет объекта при коллизии установлен в значение "Ниже" или "Совпадает". +// Во всех остальных типах обмена данными параметр принимает значение Истина. +// +Процедура ПриКоллизииИзмененийДанных(Знач ЭлементДанных, ПолучениеЭлемента, Знач Отправитель, Знач ПолучениеОтГлавного) Экспорт - Возврат НСтр("ru = 'ДМ'"); -КонецФункции + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index fd4ba526c..e63a925e3 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -165,9 +165,8 @@ Функция ЭтоАвтономноеРабочееМесто() Экспорт Возврат АвтономнаяРаботаПоддерживается() - И ПланыОбмена.ГлавныйУзел() <> Неопределено - И ПланыОбмена.ГлавныйУзел().Метаданные().Имя = ПланОбменаАвтономнойРаботы() - ; + И ОбменДаннымиСервер.ГлавныйУзел() <> Неопределено + И ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя = ПланОбменаАвтономнойРаботы(); КонецФункции @@ -422,7 +421,7 @@ // Возвращаемое значение: // Тип: Булево. Истина – узел принадлежит плану обмена РИБ; Ложь – нет. // -Функция ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Экспорт +Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт Возврат УзелИнформационнойБазы.Метаданные().РаспределеннаяИнформационнаяБаза; @@ -466,7 +465,7 @@ // Возвращаемое значение: // Тип: Булево. Истина – узел принадлежит плану обмена, использующего функционал БСП; Ложь – нет. // -Функция ЭтоУзелОбменаДаннымиБСП(УзелИнформационнойБазы) Экспорт +Функция ЭтоУзелОбменаДаннымиБСП(Знач УзелИнформационнойБазы) Экспорт Возврат ПланыОбменаБСП().Найти(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)) <> Неопределено; @@ -890,6 +889,13 @@ КонецЕсли; + // Если сервер 1С запущен на ОС Linux, то обмен через COM-соединение не поддерживается + Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); + + КонецЕсли; + Возврат Результат; КонецФункции @@ -930,9 +936,7 @@ Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой( РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта( - УзелИнформационнойБазы, Перечисления.ВидыТранспортаСообщенийОбмена.COM - ) - ); + УзелИнформационнойБазы, Перечисления.ВидыТранспортаСообщенийОбмена.COM)); КонецФункции @@ -942,9 +946,9 @@ // УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена // Пароль - Строка - Пароль для WS соединения // -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач Пароль = "") Экспорт +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт - Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); + Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); КонецФункции @@ -1203,8 +1207,7 @@ УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, - ИспользоватьНастройкиТранспорта - ); + ИспользоватьНастройкиТранспорта); КонецФункции // Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена @@ -1275,83 +1278,110 @@ // ВыборПериода: флаг того, что к объекту можно применить выбор по периода // Функция СсылочныеТаблицыСоставаУзла(УзелОбмена, Периодические=Истина, Справочные=Истина) Экспорт - - ТаблицаРезультата = Новый ТаблицаЗначений; - Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, ИндексКартинки, Тип, ВыборПериода")) Цикл - ТаблицаРезультата.Колонки.Добавить(КлючЗначение.Ключ); - КонецЦикла; - Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, Тип")) Цикл - ТаблицаРезультата.Индексы.Добавить(КлючЗначение.Ключ); - КонецЦикла; - - Если УзелОбмена=Неопределено Тогда - Возврат ТаблицаРезультата; - КонецЕсли; - - // Все регистрируемое на узле - Для Каждого ЭлементСостава Из УзелОбмена.Метаданные().Состав Цикл - Мета = ЭлементСостава.Метаданные; - Описание = ОписаниеОбъектаМетаданных(Мета); - Если Описание.ИндексКартинки>=0 Тогда - // Наш ссылочный тип - Если Не Периодические И Описание.Периодический Тогда - Продолжить; - ИначеЕсли Не Справочные И Описание.Справочный Тогда - Продолжить; - КонецЕсли; - - Строка = ТаблицаРезультата.Добавить(); - ЗаполнитьЗначенияСвойств(Строка, Описание); - Строка.ВыборПериода = Описание.Периодический; - Строка.ПолноеИмяМетаданных = Мета.ПолноеИмя(); - Строка.ПредставлениеСписка = ОбменДаннымиСервер.ПредставлениеСпискаОбъектов(Мета); - Строка.Представление = ОбменДаннымиСервер.ПредставлениеОбъекта(Мета); - КонецЕсли; - КонецЦикла; - - ТаблицаРезультата.Сортировать("ПредставлениеСписка"); - Возврат ТаблицаРезультата; + + ТаблицаРезультата = Новый ТаблицаЗначений; + Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, ИндексКартинки, Тип, ВыборПериода")) Цикл + ТаблицаРезультата.Колонки.Добавить(КлючЗначение.Ключ); + КонецЦикла; + Для Каждого КлючЗначение Из (Новый Структура("ПолноеИмяМетаданных, Представление, ПредставлениеСписка, Тип")) Цикл + ТаблицаРезультата.Индексы.Добавить(КлючЗначение.Ключ); + КонецЦикла; + + Если УзелОбмена=Неопределено Тогда + Возврат ТаблицаРезультата; + КонецЕсли; + + // Все регистрируемое на узле + Для Каждого ЭлементСостава Из УзелОбмена.Метаданные().Состав Цикл + Мета = ЭлементСостава.Метаданные; + Описание = ОписаниеОбъектаМетаданных(Мета); + Если Описание.ИндексКартинки>=0 Тогда + // Наш ссылочный тип + Если Не Периодические И Описание.Периодический Тогда + Продолжить; + ИначеЕсли Не Справочные И Описание.Справочный Тогда + Продолжить; + КонецЕсли; + + Строка = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Описание); + Строка.ВыборПериода = Описание.Периодический; + Строка.ПолноеИмяМетаданных = Мета.ПолноеИмя(); + Строка.ПредставлениеСписка = ОбменДаннымиСервер.ПредставлениеСпискаОбъектов(Мета); + Строка.Представление = ОбменДаннымиСервер.ПредставлениеОбъекта(Мета); + КонецЕсли; + КонецЦикла; + + ТаблицаРезультата.Сортировать("ПредставлениеСписка"); + Возврат ТаблицаРезультата; КонецФункции Функция ОписаниеОбъектаМетаданных(Мета) - Рез = Новый Структура("ИндексКартинки, Периодический, Справочный, Тип", -1, Ложь, Ложь); - - Если Метаданные.Справочники.Содержит(Мета) Тогда - Рез.ИндексКартинки = 3; - Рез.Справочный = Истина; - Рез.Тип = Тип("СправочникСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.Документы.Содержит(Мета) Тогда - Рез.ИндексКартинки = 7; - Рез.Периодический = Истина; - Рез.Тип = Тип("ДокументСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(Мета) Тогда - Рез.ИндексКартинки = 9; - Рез.Справочный = Истина; - Рез.Тип = Тип("ПланВидовХарактеристикСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(Мета) Тогда - Рез.ИндексКартинки = 11; - Рез.Справочный = Истина; - Рез.Тип = Тип("ПланСчетовСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(Мета) Тогда - Рез.ИндексКартинки = 13; - Рез.Справочный = Истина; - Рез.Тип = Тип("ПланВидовРасчетаСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.БизнесПроцессы.Содержит(Мета) Тогда - Рез.ИндексКартинки = 23; - Рез.Периодический = Истина; - Рез.Тип = Тип("БизнесПроцессСсылка." + Мета.Имя); - - ИначеЕсли Метаданные.Задачи.Содержит(Мета) Тогда - Рез.ИндексКартинки = 25; - Рез.Периодический = Истина; - Рез.Тип = Тип("ЗадачаСсылка." + Мета.Имя); - - КонецЕсли; - - Возврат Рез; -КонецФункции + Рез = Новый Структура("ИндексКартинки, Периодический, Справочный, Тип", -1, Ложь, Ложь); + + Если Метаданные.Справочники.Содержит(Мета) Тогда + Рез.ИндексКартинки = 3; + Рез.Справочный = Истина; + Рез.Тип = Тип("СправочникСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.Документы.Содержит(Мета) Тогда + Рез.ИндексКартинки = 7; + Рез.Периодический = Истина; + Рез.Тип = Тип("ДокументСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(Мета) Тогда + Рез.ИндексКартинки = 9; + Рез.Справочный = Истина; + Рез.Тип = Тип("ПланВидовХарактеристикСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.ПланыСчетов.Содержит(Мета) Тогда + Рез.ИндексКартинки = 11; + Рез.Справочный = Истина; + Рез.Тип = Тип("ПланСчетовСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(Мета) Тогда + Рез.ИндексКартинки = 13; + Рез.Справочный = Истина; + Рез.Тип = Тип("ПланВидовРасчетаСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.БизнесПроцессы.Содержит(Мета) Тогда + Рез.ИндексКартинки = 23; + Рез.Периодический = Истина; + Рез.Тип = Тип("БизнесПроцессСсылка." + Мета.Имя); + + ИначеЕсли Метаданные.Задачи.Содержит(Мета) Тогда + Рез.ИндексКартинки = 25; + Рез.Периодический = Истина; + Рез.Тип = Тип("ЗадачаСсылка." + Мета.Имя); + + КонецЕсли; + + Возврат Рез; +КонецФункции + +// Определяет используется ли версионирование +// +// Параметры: +// Отправитель - ПланОбменаСсылка - Если параметр передается, то определяет необходимо +// ли использовать создание версий объектов для переданного узла +// +Функция ИспользуетсяВерсионирование(Отправитель = Неопределено, ПроверятьПраваДоступа = Ложь) Экспорт + + Используется = Ложь; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + + Используется = ?(Отправитель <> Неопределено, ЭтоУзелОбменаДаннымиБСП(Отправитель), Истина); + + Если Используется И ПроверятьПраваДоступа Тогда + + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + Используется = МодульВерсионированиеОбъектов.ЕстьПравоНаЧтениеВерсийОбъектов(); + + КонецЕсли; + + КонецЕсли; + + Возврат Используется; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index d05b0c20a..d9e21fa75 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -289,11 +289,103 @@ КонецПроцедуры -// Возвращает количество проблем обмена данными +// Проверяет факт восстановления этой базы из резервной копии. +// Если база была восстановлена из резервной копии, то необходимо выполнить синхронизацию номеров отправленных и полученных сообщений +// для двух баз (номеру отправленного сообщения в этой базе присваивается значение номера принятого сообщения из базы-корреспондента). +// Если база была восстановлена из резервной копии, то рекомендуется не снимать с регистрации изменения данных на текущем узле, +// т.к. эти данные могли быть еще не отправлены. // -Функция КоличествоПроблем() Экспорт +// Параметры: +// Отправитель (обязательный). Тип: ПланОбменаСсылка. Узел, от имени которого было сформировано и отправлено сообщение обмена. +// +// НомерПринятого (обязательный). Тип: Число. Номер принятого сообщения в базе-корреспонденте. +// +// Возвращаемое значение: +// Тип: Фиксированная структура. Свойства структуры: +// "Отправитель" – см. выше параметр <Отправитель> +// "НомерПринятого" – см. выше параметр <НомерПринятого> +// "ВосстановленаРезервнаяКопия". Тип: Булево. Признак восстановления этой базы из резервной копии. +// Принимает значение Истина, если обнаружен факт восстановления этой базы из резервной копии. +// +Функция ПараметрыРезервнойКопии(Знач Отправитель, Знач НомерПринятого) Экспорт - Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(); + // Для базы, которая была поднята из резервной копии, номер отправленного сообщения + // будет меньше номера принятого сообщения в корреспонденте. + // Т.е. эта база получит номер принятого сообщения, + // который она еще не отправляла - "сообщение из будущего". + Результат = Новый Структура("Отправитель, НомерПринятого, ВосстановленаРезервнаяКопия"); + Результат.Отправитель = Отправитель; + Результат.НомерПринятого = НомерПринятого; + Результат.ВосстановленаРезервнаяКопия = (НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Отправитель, "НомерОтправленного")); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +// Выполняет синхронизацию номеров отправленных и полученных сообщений +// для двух баз (номеру отправленного сообщения в этой базе присваивается значение номера принятого сообщения из базы-корреспондента). +// +// Параметры: +// ПараметрыРезервнойКопии (обязательный). Тип: Фиксированная структура. Свойства структуры: +// "Отправитель". Тип: ПланОбменаСсылка. Узел, от имени которого было сформировано и отправлено сообщение обмена. +// "НомерПринятого". Тип: Число. Номер принятого сообщения в базе-корреспонденте. +// "ВосстановленаРезервнаяКопия". Тип: Булево. Признак восстановления этой базы из резервной копии. +// +Процедура ПриВосстановленииРезервнойКопии(Знач ПараметрыРезервнойКопии) Экспорт + + Если ПараметрыРезервнойКопии.ВосстановленаРезервнаяКопия Тогда + + // Устанавливаем в качестве номера отправленного сообщения в этой базе номер принятого сообщения в корреспонденте. + ОбъектУзла = ПараметрыРезервнойКопии.Отправитель.ПолучитьОбъект(); + ОбъектУзла.НомерОтправленного = ПараметрыРезервнойКопии.НомерПринятого; + ОбъектУзла.ДополнительныеСвойства.Вставить("Загрузка"); + ОбъектУзла.Записать(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с монитором проблем обмена данными + +// Возвращает количество нерассмотренных проблем обмена данными. Используется для отображения +// количества проблем обмена в пользовательском интерфейсе. Например, для использования в заголовке +// гиперссылки для перехода к монитору проблем обмена. +// +Функция КоличествоНерассмотренныхПроблем(Узлы = Неопределено) Экспорт + + Возврат КоличествоПроблемОбменаДанными(Узлы) + КоличествоПроблемВерсионирования(Узлы); + +КонецФункции + +// Возвращает структуру заголовка гиперссылки для перехода к монитору проблем обмена данными +// +// Возвращаемое значение: +// Тип Структура +// Заголовок - Строка - содержит заголовок гиперссылки +// Картинка - Картинка для гиперссылки +// +Функция СтруктураЗаголовкаГиперссылкиМонитораПроблем(Узлы = Неопределено) Экспорт + + Количество = КоличествоНерассмотренныхПроблем(Узлы); + + Если Количество > 0 Тогда + + Заголовок = Нстр("ru = 'Предупреждения (%1)'"); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Количество); + Картинка = БиблиотекаКартинок.Предупреждение; + + Иначе + + Заголовок = Нстр("ru = 'Предупреждений нет'"); + Картинка = Новый Картинка; + + КонецЕсли; + + СтруктураЗаголовка = Новый Структура; + СтруктураЗаголовка.Вставить("Заголовок", Заголовок); + СтруктураЗаголовка.Вставить("Картинка", Картинка); + + Возврат СтруктураЗаголовка; КонецФункции @@ -440,12 +532,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПередОбновлениемИнформационнойБазы"].Добавить( - "ОбменДаннымиСервер"); - - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПослеОбновленияИнформационнойБазы"].Добавить( - "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов"].Добавить( "ОбменДаннымиСервер"); @@ -470,27 +556,42 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "ОбменДаннымиСервер"); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииПоставляемыхПрофилейГруппДоступа"].Добавить( + "ОбменДаннымиСервер"); + + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов // Выполняет загрузку идентификаторов объектов метаданных, полученных из главного узла РИБ. -Процедура ПриОбновленииИдентификаторовОбъектовМетаданных(Отказ) Экспорт +Процедура ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(Отказ = Ложь) Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + + Если КонфигурацияИзменена() Тогда + Возврат; // Полученные изменения конфигурации еще не применены к информационной базе + КонецЕсли; + + Если ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить( + "ИдентификаторыОбъектовМетаданныхВПодчиненномУзлеУжеЗагружены") <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗагрузитьСообщениеОбменаДанными() + И НЕ ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + Возврат; + КонецЕсли; + + Попытка - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда - ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); - ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; - ИспользоватьСинхронизациюДанных.Значение = Истина; - ИспользоватьСинхронизациюДанных.Записать(); - - Иначе - - Если ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); @@ -498,6 +599,102 @@ ИспользоватьСинхронизациюДанных.Значение = Истина; ИспользоватьСинхронизациюДанных.Записать(); + Иначе + + Если ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда + + ИспользоватьСинхронизациюДанных = Константы.ИспользоватьСинхронизациюДанных.СоздатьМенеджерЗначения(); + ИспользоватьСинхронизациюДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ИспользоватьСинхронизациюДанных.ОбменДанными.Загрузка = Истина; + ИспользоватьСинхронизациюДанных.Значение = Истина; + ИспользоватьСинхронизациюДанных.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + // Загрузка только параметров работы программы + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта,,,,,, Истина); + + КонецЕсли; + + КонецЕсли; + + Исключение + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обмен данными.Загрузка справочника ""Идентификаторы объектов метаданных""'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"". + | + |Ошибка загрузки данных. См. подробности в журнале регистрации.'" + ); + КонецПопытки; + + Если Отказ Тогда + + Если КонфигурацияИзменена() Тогда + ВызватьИсключение + НСтр("ru = 'Загружены изменения программы, полученные из главного узла. + |Завершите работу программы. Откройте программу в конфигураторе и + |выполните команду ""Обновить конфигурацию базы данных (F7)"". + | + |После этого запустите программу.'"); + КонецЕсли; + + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ВызватьИсключение НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"". + | + |Ошибка загрузки данных. См. подробности в журнале регистрации.'" + ); + КонецЕсли; + +КонецПроцедуры + +// Выполняет загрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() Экспорт + + Если КонфигурацияИзменена() Тогда + Возврат; // Полученные изменения конфигурации еще не применены к информационной базе + КонецЕсли; + + Если НЕ ЗагрузитьСообщениеОбменаДанными() + И НЕ ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + Возврат; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + + КонецЕсли; + + Иначе + + Если ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда + + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + КонецЕсли; КонецЕсли; @@ -506,14 +703,25 @@ Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда - УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); + УзелИнформационнойБазы = ГлавныйУзел(); Если УзелИнформационнойБазы <> Неопределено Тогда + // Обновление правил регистрации объектов выполняем до загрузки данных + ВыполнитьОбновлениеПравилДляОбменаДанными(); + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - // Загрузка только параметров работы программы - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта,,,,,, Истина); + Отказ = Ложь; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); // только загрузка + + Если Отказ Тогда + + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + ВызватьИсключение НСтр("ru = 'Получение данных из главного узла завершилось с ошибками.'"); + КонецЕсли; КонецЕсли; @@ -521,25 +729,117 @@ КонецПроцедуры -// Устанавливает признак необходимости загрузки идентификаторов объектов метаданных из сообщения обмена. -// Очищает хранилище сообщения обмена, полученного из главного узла РИБ. +// Выполняет выгрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. // -Процедура ПриОшибкеПолученияИдентификаторовОбъектовМетаданных() Экспорт +Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() Экспорт - Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); + Если КонфигурацияИзменена() Тогда + Возврат; // Полученные изменения конфигурации еще не применены к информационной базе + КонецЕсли; - Константы.ВыполнитьЗагрузкуПараметровРаботыПрограммы.Установить(Истина); + Попытка + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВыполнитьВыгрузку = Истина; + + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); + + ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда + + ВыполнитьВыгрузку = Ложь; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); + + КонецЕсли; + + Если ВыполнитьВыгрузку Тогда + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); // только выгрузка + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ОбменДаннымиВызовСервера.ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; КонецПроцедуры -// Только для внутреннего использования. -Функция НеобходимоПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ() Экспорт +// Выполняет загрузку и выгрузку сообщения обмена, которое +// содержало изменения конфигурации, которые не потребовали +// обновления информационной базы. +// +Процедура ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы() Экспорт - УстановитьПривилегированныйРежим(Истина); + Если ЗагрузитьСообщениеОбменаДанными() Тогда + + // Если выполнен возврат к конфигурации базы данных, + // тогда загрузка и выгрузка не требуется. + Если НЕ КонфигурацияИзменена() + И НЕ ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); + Возврат; + КонецЕсли; + + ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); + + ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); + + КонецЕсли; - Возврат Константы.ВыполнитьЗагрузкуПараметровРаботыПрограммы.Получить() = Истина; +КонецПроцедуры + +// Устанавливает признак необходимости загрузки идентификаторов объектов метаданных из сообщения обмена. +// Очищает хранилище сообщения обмена, полученного из главного узла РИБ. +// Если указано, вызывает исключение с пояснением дальнейших действий. +// +Процедура ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(ВызыватьИсключение = Ложь) Экспорт -КонецФункции + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + Если ВызыватьИсключение Тогда + ТекстОшибки = + НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"". + | + |Если недоступно сообщение обмена данными, тогда перезапустите программу, + |настройте параметры подключения и повторите синхронизацию. + |Если из главного узла не получены все необходимые изменения, тогда + |в главном узле выполните обновление информационной базы, + |повторите синхронизацию данных в главном и подчиненном узлах. + | + |Чтобы выполнить обновление информационной базы в главном узле, один раз выполните + |запуск программы с параметром запуска ЗапуститьОбновлениеИнформационнойБазы. + |Чтобы при этом зарегистрировать изменения всего справочника, укажите дополнительный + |параметр запуска ЗарегистрироватьПолноеИзменениеИОМДляПодчиненныхУзловРИБ.'"); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обмен данными.Загрузка справочника Идентификаторы объектов метаданных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстОшибки); + + ВызватьИсключение ТекстОшибки; + КонецЕсли; + +КонецПроцедуры // Возвращает Истина, если настройка подчиненного узла РИБ не завершена и // требуется обновления параметров работы программы, которые не участвуют в РИБ. @@ -595,7 +895,6 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.1.5"; - Обработчик.Приоритет = 1; Обработчик.ОбщиеДанные = Истина; Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьПризнакСохраненияПароляДляОбменаЧерезИнтернет"; @@ -733,7 +1032,7 @@ ВызватьИсключение НСтр("ru = 'Ошибка при обновлении регламентного задания для сценария обмена данными.'"); КонецЕсли; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; @@ -745,7 +1044,7 @@ Процедура ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена() Экспорт Если ЭтоПодчиненныйУзелРИБ() - И РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаДляУзлаЗаданы(ПланыОбмена.ГлавныйУзел()) Тогда + И РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаДляУзлаЗаданы(ГлавныйУзел()) Тогда Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); @@ -852,6 +1151,19 @@ КонецФункции +// Формирует выборку измененных данных для передачи их в тот или иной узел плана обмена. +// Если обращение к методу выполняется в активной транзакции, то вызывает исключение. +// См. описание метода ПланыОбменаМенеджер.ВыбратьИзменения() в синтаксис-помощнике. +// +Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения, Знач ФильтрВыборки = Неопределено) Экспорт + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Выборка изменений данных запрещена в активной транзакции.'"); + КонецЕсли; + + Возврат ПланыОбмена.ВыбратьИзменения(Узел, НомерСообщения, ФильтрВыборки); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -867,110 +1179,8 @@ Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); Обработчики.Вставить("ЗагрузкаПараметровРаботыПрограммы", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); - -КонецПроцедуры - -// Обработчик события "перед обновлением информационной базы". Выполняет загрузку данных из главного узла. -Процедура ПередОбновлениемИнформационнойБазы() Экспорт - - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Ложь Тогда - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); - - КонецЕсли; - - Иначе - - Если ПолучитьИспользуемыеПланыОбмена().Количество() > 0 Тогда - - Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда - - УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); // только загрузка - - КонецЕсли; - - КонецЕсли; - - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - КонецПопытки; - -КонецПроцедуры - -// Вызывается после завершения монопольного обновления данных ИБ. -// -// Параметры: -// ПредыдущаяВерсия - Строка - версия подсистемы до обновления. "0.0.0.0" для "пустой" ИБ. -// ТекущаяВерсия - Строка - версия подсистемы после обновления. -// ВыполненныеОбработчики - ДеревоЗначений - список выполненных процедур-обработчиков обновления -// подсистемы, сгруппированных по номеру версии. -// Процедура обхода выполненных обработчиков: -// -// Для Каждого Версия Из ВыполненныеОбработчики.Строки Цикл -// -// Если Версия.Версия = "*" Тогда -// // Обработчик, который может выполнятся при каждой смене версии. -// Иначе -// // Обработчик, который выполняется для определенной версии. -// КонецЕсли; -// -// Для Каждого Обработчик Из Версия.Строки Цикл -// ... -// КонецЦикла; -// -// КонецЦикла; -// -// ВыводитьОписаниеОбновлений - Булево (возвращаемое значение)- если установить Истина, -// тогда выводить форму с описанием обновлений. -// МонопольныйРежим - Булево - признак выполнения обновления в монопольном режиме. -// Истина - обновление выполнялось в монопольном режиме. -// -Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, - Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт - - // Выгрузка данных в главный узел. - - Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") = Истина Тогда - - УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); // только выгрузка - - КонецЕсли; - - КонецЕсли; - - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - КонецПопытки; + Обработчики.Вставить("ПаролиСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПриоритетныеДанныеОбмена", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); КонецПроцедуры @@ -1008,19 +1218,17 @@ УстановитьПривилегированныйРежим(Истина); - Параметры.Вставить("ИмяПланаОбменаРИБ", ?(ЭтоПодчиненныйУзелРИБ(), ПланыОбмена.ГлавныйУзел().Метаданные().Имя, "")); - Параметры.Вставить("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); + Параметры.Вставить("ИмяПланаОбменаРИБ", ?(ЭтоПодчиненныйУзелРИБ(), ГлавныйУзел().Метаданные().Имя, "")); + Параметры.Вставить("ГлавныйУзел", ГлавныйУзел()); Параметры.Вставить("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла", Не ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() И ЭтоПодчиненныйУзелРИБ() - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() - ); + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить()); Параметры.Вставить("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла", Не Параметры.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла - И Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") - ); + И Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных")); КонецПроцедуры @@ -1082,8 +1290,9 @@ Если РаспределеннаяИнформационнаяБаза Тогда - Объекты.Добавить(Метаданные.Константы.ВыполнитьЗагрузкуПараметровРаботыПрограммы); + Объекты.Добавить(Метаданные.Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском); Объекты.Добавить(Метаданные.Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО); + Объекты.Добавить(Метаданные.Константы.ЗагрузитьСообщениеОбменаДанными); Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанных); Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВЛокальномРежиме); Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВМоделиСервиса); @@ -1131,6 +1340,29 @@ КонецПроцедуры +// Заполняет описания поставляемых профилей групп доступа и +// переопределяет параметры обновления профилей и групп доступа. +// Подробнее см. УправлениеДоступомПереопределяемый.ЗаполнитьПоставляемыеПрофилиГруппДоступа. +// +Процедура ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления) Экспорт + + // Профиль "Синхронизация данных с другими программами". + ОписаниеПрофиля = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом").НовоеОписаниеПрофиляГруппДоступа(); + ОписаниеПрофиля.Идентификатор = ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами(); + ОписаниеПрофиля.Наименование = НСтр("ru = 'Синхронизация данных с другими программами'"); + ОписаниеПрофиля.Описание = НСтр("ru = 'Дополнительно назначается тем пользователям, которым должны быть доступны средства + |для мониторинга и синхронизации данных с другими программами.'"); + + // Основные возможности профиля. + РолиПрофиля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами()); + Для Каждого Роль Из РолиПрофиля Цикл + ОписаниеПрофиля.Роли.Добавить(СокрЛП(Роль)); + КонецЦикла; + ОписанияПрофилей.Добавить(ОписаниеПрофиля); + +КонецПроцедуры + // Заполняет массив списком имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // @@ -1159,19 +1391,6 @@ КонецПроцедуры -// Определяет используется ли в конфигурации версионирование -// -// Параметры: -// Используется - Булево - Истина, если используется, Ложь - иначе. -// -Процедура ПриОпределенииИспользованияВерсионирования(Используется) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Используется = Истина; - КонецЕсли; - -КонецПроцедуры - // Определяет используется ли в конфигурации подсистема даты запрета изменения // // Параметры: @@ -1195,26 +1414,8 @@ Процедура ПриИгнорированииВерсииОбъекта(Ссылка, НомерВерсии, Игнорировать) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - Модуль.ИгнорироватьВерсиюОбъекта(Ссылка, НомерВерсии, Игнорировать); - КонецЕсли; - -КонецПроцедуры - -// Создает и записывает версию объекта в информационную базу. -// -// Параметры -// Объект - записываемый объект ИБ; -// АвторВерсии - Пользователь или Узел плана обмена - Источник версии; -// ТипВерсииОбъекта - Перечисление - Тип создаваемой версии; -// Комментарий - Строка - Комментарий к создаваемой версии; -// УникальныйИдентификаторСтрокой - Строка - Создает пустую ссылку из УИДа, если у переданного объекта ссылка отсутствует. -// -Процедура ПриСозданииВерсииОбъекта(Объект, АвторВерсии, Знач ТипВерсииОбъекта, Комментарий, УникальныйИдентификаторСтрокой = "", БезусловнаяЗапись = Ложь) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - Модуль.СоздатьВерсиюОбъекта(Объект, АвторВерсии, ТипВерсииОбъекта, Комментарий, УникальныйИдентификаторСтрокой, БезусловнаяЗапись); + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ИгнорироватьВерсиюОбъекта(Ссылка, НомерВерсии, Игнорировать); КонецЕсли; КонецПроцедуры @@ -1227,31 +1428,11 @@ // НомерИгнорируемойВерсии - Число - Номер версии, на которую необходимо проигнорировать // ПропуститьПроверкуЗапретаИзменения - Булево - Признак пропуска проверки даты запрета загрузки // -Процедура ПриПереходеНаВерсиюОбъекта(ОбъектСсылка, НомерВерсииДляПерехода, НомерИгнорируемойВерсии, ПропуститьПроверкуЗапретаИзменения = Ложь) Экспорт +Процедура ПриПереходеНаВерсиюОбъекта(ОбъектСсылка, НомерВерсии, ПринятьВерсию, ПропуститьПроверкуЗапретаИзменения = Ложь) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - Модуль.ПриПереходеНаВерсиюОбъекта(ОбъектСсылка, НомерВерсииДляПерехода, НомерИгнорируемойВерсии, ПропуститьПроверкуЗапретаИзменения); - КонецЕсли; - -КонецПроцедуры - -// Возвращает количество коллизий или непринятых объектов -// -// Параметры: -// ЭтоКоличествоКоллизий - Булево - Если Истина, то возвращает количество коллизий, иначе количество непринятых. -// ПоказыватьПроигнорированные - Булево - Признак необходимости учета проигнорированных. -// УзелИнформационнойБазы - ПланОбменаСсылка - Количество по конкретному узлу -// Период - Стандартный период - Количество за дату -// СтрокаПоиска - Строка - Количество объектов, содержащих в комментарии СтрокаПоиска -// -Процедура ПриОбновленииЗаголовковСтраницРезультатовОбменаДанными(Количество, ЭтоКоличествоКоллизий, ПоказыватьПроигнорированные = Ложь, - УзелИнформационнойБазы = Неопределено, Период = Неопределено, СтрокаПоиска = "") Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - Количество = Модуль.КоличествоКоллизийИлиНепринятых(ЭтоКоличествоКоллизий, - ПоказыватьПроигнорированные, УзелИнформационнойБазы, Период, СтрокаПоиска); + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриПереходеНаВерсиюОбъекта(ОбъектСсылка, НомерВерсии, ПринятьВерсию, ПропуститьПроверкуЗапретаИзменения); КонецЕсли; КонецПроцедуры @@ -1264,8 +1445,8 @@ Процедура ПриОбновленииЗаголовковКомандМонитораОбменаДанными(ДатаСобытия, ПолучитьДатуПоследнейКоллизии) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - ДатаСобытия = Модуль.ДатаПоследнейКоллизииИлиЗапретаЗагрузки(ПолучитьДатуПоследнейКоллизии); + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + ДатаСобытия = МодульВерсионированиеОбъектов.ДатаПоследнейКоллизииИлиЗапретаЗагрузки(ПолучитьДатуПоследнейКоллизии); КонецЕсли; КонецПроцедуры @@ -1289,29 +1470,8 @@ Процедура ПриОтключенииСинхронизацииДанных(Отказ) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриОтключенииСинхронизацииДанных(Отказ); - КонецЕсли; - -КонецПроцедуры - -// Обработчик вызывается перед записью данных в ИБ при загрузке из сообщения обмена -// Используется только для обменов не РИБ. -// -// Параметры: -// Данные – СправочникОбъект, ДокументОбъект, РегистСведенийНаборЗаписей и др. данные. -// Данные, которые были зачитаны из сообщения обмена, но еще не были записаны в ИБ. -// УзелПланаОбмена - ПланыОбменаСсылка. -// Отказ - Булево (возвращаемое значение). -// СообщениеОбОшибке - Строка (возвращаемое значение). -// -Процедура ПередЗаписьюДанныхИзСообщенияОбмена(Данные, УзелПланаОбмена, Отказ, СообщениеОбОшибке) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзменения"); - Если Модуль.ЗагрузкаЗапрещена(Данные, УзелПланаОбмена, СообщениеОбОшибке) = Истина Тогда - Отказ = Истина; - КонецЕсли; + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриОтключенииСинхронизацииДанных(Отказ); КонецЕсли; КонецПроцедуры @@ -1332,8 +1492,8 @@ Процедура ПослеОпределенияПолучателей(Данные, Получатели, Знач ИмяПланаОбмена) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена); КонецЕсли; КонецПроцедуры @@ -1354,15 +1514,15 @@ // если в РС значение не задано, то значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE // Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, - УзелИнформационнойБазы, - ВыполнятьЗагрузку = Истина, - ВыполнятьВыгрузку = Истина, - ВидТранспортаСообщенийОбмена = Неопределено, + Знач УзелИнформационнойБазы, + Знач ВыполнятьЗагрузку = Истина, + Знач ВыполнятьВыгрузку = Истина, + Знач ВидТранспортаСообщенийОбмена = Неопределено, ДлительнаяОперация = Ложь, ИдентификаторОперации = "", ИдентификаторФайла = "", - ДлительнаяОперацияРазрешена = Ложь, - Знач Пароль = "", + Знач ДлительнаяОперацияРазрешена = Ложь, + Знач ПараметрыАутентификации = Неопределено, Знач ТолькоПараметры = Ложь ) Экспорт @@ -1372,14 +1532,15 @@ Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда // Обмен через внешнее соединение + ПроверитьВозможностьВнешнегоСоединения(); + Если ВыполнятьЗагрузку Тогда // ЗАГРУЗКА ДАННЫХ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - Неопределено - ); + Неопределено); КонецЕсли; @@ -1389,8 +1550,7 @@ ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - Неопределено - ); + Неопределено); КонецЕсли; @@ -1406,9 +1566,8 @@ ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена, - Пароль, - ТолькоПараметры - ); + ПараметрыАутентификации, + ТолькоПараметры); КонецЕсли; @@ -1422,9 +1581,8 @@ ИдентификаторОперации, ИдентификаторФайла, ДлительнаяОперацияРазрешена, - Пароль, - ТолькоПараметры - ); + ПараметрыАутентификации, + ТолькоПараметры); КонецЕсли; @@ -1437,8 +1595,7 @@ УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ВидТранспортаСообщенийОбмена, - ТолькоПараметры - ); + ТолькоПараметры); КонецЕсли; @@ -1449,8 +1606,7 @@ УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ВидТранспортаСообщенийОбмена, - ТолькоПараметры - ); + ТолькоПараметры); КонецЕсли; @@ -1528,6 +1684,8 @@ Если Выборка.ОбменЧерезВнешнееСоединение Тогда + ПроверитьВозможностьВнешнегоСоединения(); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, Выборка.КоличествоЭлементовВТранзакции); ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда @@ -1725,16 +1883,16 @@ ИмяКаталогаСообщенияОбмена = ""; СтрокаСообщенияОбОшибке = ""; - Если Не СоздатьВременныйКаталогСообщенийОбмена(ИмяКаталогаСообщенияОбмена, СтрокаСообщенияОбОшибке) Тогда - + Попытка + ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); + Исключение Если ВыводитьСообщения Тогда Сообщение = НСтр("ru = 'Не удалось произвести обмен: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); КонецЕсли; - Возврат Результат; - КонецЕсли; + КонецПопытки; // получаем внешнее соединение для узла информационной базы ДанныеСоединения = ОбменДаннымиПовтИсп.ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы); @@ -1789,12 +1947,12 @@ // Получает сообщение обмена из информационной базы корреспондента через веб-сервис во временный каталог пользователя ОС // // Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла -// ДлительнаяОперация - Булево - Признак использования длительное операции -// ИдентификаторОперации - УникальныйИдентификатор - Уникальный идентификатор длительной операции -// Пароль - Строка - Пароль для WS соединения +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла +// ДлительнаяОперация - Булево - Признак использования длительное операции +// ИдентификаторОперации - УникальныйИдентификатор - Уникальный идентификатор длительной операции +// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: // Тип: Структура. Содержит ключи: @@ -1808,7 +1966,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Пароль = "" + ПараметрыАутентификации = Неопределено ) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -1834,7 +1992,7 @@ СтрокаСообщенияОбОшибке = ""; // получаем прокси веб-сервиса для узла информационной базы - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -1856,8 +2014,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Истина - ); + Истина); Исключение @@ -1880,7 +2037,7 @@ КонецЕсли; Попытка - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); Исключение Отказ = Истина; @@ -1893,17 +2050,18 @@ Возврат Результат; КонецПопытки; - Если Не СоздатьВременныйКаталогСообщенийОбмена(ИмяКаталогаСообщенияОбмена, СтрокаСообщенияОбОшибке) Тогда - + Попытка + ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); + Исключение Отказ = Истина; Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); Возврат Результат; - КонецЕсли; + КонецПопытки; ШаблонИмениФайлаСообщения = ПолучитьШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); @@ -1928,10 +2086,10 @@ // Используется в том случае, если получение сообщения обмена выполнялось в контексте фонового задания в базе-корреспонденте. // // Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла -// Пароль - Строка - Пароль для WS соединения +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла +// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // // Возвращаемое значение: // Тип: Структура. Содержит ключи: @@ -1943,7 +2101,7 @@ Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Знач Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт // возвращаемое значение функции @@ -1960,7 +2118,7 @@ Попытка - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); Исключение Отказ = Истина; @@ -1973,17 +2131,18 @@ Возврат Результат; КонецПопытки; - Если Не СоздатьВременныйКаталогСообщенийОбмена(ИмяКаталогаСообщенияОбмена, СтрокаСообщенияОбОшибке) Тогда - + Попытка + ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); + Исключение Отказ = Истина; Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); Возврат Результат; - КонецЕсли; + КонецПопытки; ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); @@ -2010,18 +2169,18 @@ // Выполняет загрузку полученного файла сообщения обмена в эту базу. // // Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена -// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла -// ДатаНачалаОперации - Дата - Дата начала загрузки -// Пароль - Строка - Пароль для WS соединения +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// ИдентификаторФайла - УникальныйИдентификатор - Идентификатор файла +// ДатаНачалаОперации - Дата - Дата начала загрузки +// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Отказ, Знач УзелИнформационнойБазы, Знач ИдентификаторФайла, Знач ДатаНачалаОперации, - Знач Пароль = "" + Знач ПараметрыАутентификации = Неопределено ) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -2031,13 +2190,12 @@ УстановитьПривилегированныйРежим(Истина); Попытка - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); Исключение ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ДатаНачалаОперации, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Отказ = Истина; Возврат; КонецПопытки; @@ -2047,14 +2205,12 @@ ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( УзелИнформационнойБазы, ФайлСообщенияОбмена, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных,,,, ДатаНачалаОперации - ); + Перечисления.ДействияПриОбмене.ЗагрузкаДанных,,,, ДатаНачалаОперации); Исключение ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ДатаНачалаОперации, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Отказ = Истина; КонецПопытки; @@ -2106,8 +2262,7 @@ УдалитьФайлы(ФайлСообщения.ПолноеИмя); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Продолжить; КонецПопытки; КонецЕсли; @@ -2121,8 +2276,8 @@ // Удаляем неактуальные сообщения обмена, отмеченные в РС.СообщенияОбменаДаннымиОбластейДанных Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриУдаленииНеактуальныхСообщенийОбмена(); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриУдаленииНеактуальныхСообщенийОбмена(); КонецЕсли; КонецПроцедуры @@ -2141,8 +2296,7 @@ ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ИмяПланаОбмена, - КодУзлаИнформационнойБазы - ); + КодУзлаИнформационнойБазы); Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); @@ -2163,16 +2317,14 @@ ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогВременногоХранилищаФайлов(), - УникальноеИмяФайлаСообщенияОбмена() - ); + УникальноеИмяФайлаСообщенияОбмена()); ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( Неопределено, ИмяФайлаСообщения, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ИмяПланаОбмена, - КодУзлаИнформационнойБазы - ); + КодУзлаИнформационнойБазы); ПоместитьФайлВХранилище(ИмяФайлаСообщения, ИдентификаторФайла); @@ -2189,8 +2341,7 @@ ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ИмяПланаОбмена, - КодУзлаИнформационнойБазы - ); + КодУзлаИнформационнойБазы); КонецПроцедуры @@ -2203,8 +2354,7 @@ Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ИмяПланаОбмена, КодУзлаИнформационнойБазы, - СообщениеОбмена - ); + СообщениеОбмена); КонецПроцедуры @@ -2217,8 +2367,7 @@ Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ИмяПланаОбмена, КодУзлаИнформационнойБазы, - СообщениеОбмена - ); + СообщениеОбмена); КонецПроцедуры @@ -2238,8 +2387,7 @@ ИмяВременногоФайла, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ИмяПланаОбмена, - КодУзлаИнформационнойБазы - ); + КодУзлаИнформационнойБазы); Исключение ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Попытка @@ -2305,6 +2453,16 @@ ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПолноеИмяФайлаСообщенияОбмена, СообщениеОбмена); + // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало + СтандартнаяОбработка = Истина; + + ПослеЧтенияСообщенияОбмена( + СтруктураНастроекОбмена.УзелИнформационнойБазы, + ПолноеИмяФайлаСообщенияОбмена, + РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), + СтандартнаяОбработка); + // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание + ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПолноеИмяФайлаСообщенияОбмена, СообщениеОбмена); @@ -2404,8 +2562,7 @@ // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена - ); + УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена); Если СтруктураНастроекОбмена.Отказ Тогда @@ -2446,9 +2603,8 @@ ИдентификаторОперации = "", ИдентификаторФайла = "", ДлительнаяОперацияРазрешена = Ложь, - Пароль = "", - Знач ТолькоПараметры = Ложь - ) + ПараметрыАутентификации = Неопределено, + Знач ТолькоПараметры = Ложь) УстановитьПривилегированныйРежим(Истина); @@ -2485,7 +2641,7 @@ СтрокаСообщенияОбОшибке = ""; // получаем прокси веб-сервиса для узла информационной базы - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -2508,8 +2664,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ); + ДлительнаяОперацияРазрешена); Если ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'", @@ -2517,7 +2672,7 @@ Возврат; КонецЕсли; - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); Исключение ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; @@ -2540,8 +2695,7 @@ ФайлСообщенияОбмена, РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), СтандартнаяОбработка, - Не ТолькоПараметры - ); + Не ТолькоПараметры); // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание Если СтандартнаяОбработка Тогда @@ -2552,8 +2706,7 @@ КонецЕсли; Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2563,7 +2716,7 @@ СтрокаСообщенияОбОшибке = ""; // получаем прокси веб-сервиса для узла информационной базы - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -2596,7 +2749,7 @@ СтрокаСообщенияОбОшибке = ""; // получаем прокси веб-сервиса для узла информационной базы - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, ПараметрыАутентификации); Если Прокси = Неопределено Тогда @@ -2621,7 +2774,7 @@ Попытка - ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы,, Пароль)); + ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы,, ПараметрыАутентификации)); Попытка УдалитьФайлы(ФайлСообщенияОбмена); @@ -2633,8 +2786,7 @@ ИдентификаторФайлаСтрокой, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ); + ДлительнаяОперацияРазрешена); Если ДлительнаяОперация Тогда ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'", @@ -2699,8 +2851,7 @@ СтруктураНастроекОбмена = ПолучитьСтруктуруНастроекОбменаДляВнешнегоСоединения( УзелИнформационнойБазы, ДействиеПриОбмене, - КоличествоЭлементовВТранзакции - ); + КоличествоЭлементовВТранзакции); СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); @@ -2719,8 +2870,7 @@ // получаем внешнее соединение для узла информационной базы ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы( УзелИнформационнойБазы, - СтрокаСообщенияОбОшибке - ); + СтрокаСообщенияОбОшибке); Если ВнешнееСоединение = Неопределено Тогда @@ -2799,7 +2949,21 @@ ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; ОбработкаОбменаДаннымиВнешнееСоединение.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата(); + + Попытка + ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Возникла ошибка во второй информационной базе: %1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), СтруктураНастроекОбмена, Истина + ); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецПопытки; // задаем узлы обмена ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляОбмена = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; @@ -2925,8 +3089,7 @@ СообщениеОбмена, РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), СтандартнаяОбработка, - Не ТолькоПараметры - ); + Не ТолькоПараметры); // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание Если СтандартнаяОбработка Тогда @@ -2964,7 +3127,7 @@ Процедура ПередЧтениемСообщенияОбмена(Знач Получатель, СообщениеОбмена, СтандартнаяОбработка) Если ЭтоПодчиненныйУзелРИБ() - И ТипЗнч(ПланыОбмена.ГлавныйУзел()) = ТипЗнч(Получатель) Тогда + И ТипЗнч(ГлавныйУзел()) = ТипЗнч(Получатель) Тогда СохраненноеСообщениеОбмена = Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить().Получить(); @@ -2976,6 +3139,8 @@ СохраненноеСообщениеОбмена.Записать(СообщениеОбмена); + ЗаписатьСобытиеПолученияДанных(Получатель, НСтр("ru = 'Сообщение обмена получено из кэша.'")); + КонецЕсли; КонецЕсли; @@ -2987,21 +3152,20 @@ Процедура ПослеЧтенияСообщенияОбмена(Знач Получатель, Знач СообщениеОбмена, Знач СообщениеПрочитано, СтандартнаяОбработка, Знач УдалитьСообщение = Истина) Если ЭтоПодчиненныйУзелРИБ() - И ТипЗнч(ПланыОбмена.ГлавныйУзел()) = ТипЗнч(Получатель) Тогда + И ТипЗнч(ГлавныйУзел()) = ТипЗнч(Получатель) Тогда + + СохранитьСообщениеВКэш = Ложь; Если КонфигурацияИзменена() Тогда - Если ТипЗнч(Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить().Получить()) <> Тип("ДвоичныеДанные") Тогда - - Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить( - Новый ХранилищеЗначения(Новый ДвоичныеДанные(СообщениеОбмена), Новый СжатиеДанных(9)) - ); - - КонецЕсли; + // Т.к. конфигурация может быть изменена повторно, требуется + // обновить кэш, если он содержит устаревшее сообщение, + // а не только при первой загрузке изменений конфигурации. + СохранитьСообщениеВКэш = Истина; Если Не СообщениеПрочитано Тогда - ОбновлениеИнформационнойБазы.УстановитьНеобходимостьОбновленияИнформационнойБазы(); + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); КонецЕсли; @@ -3011,10 +3175,49 @@ Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); + + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + // После выгрузки сообщения обмена повторение загрузки отключается. + // Однако, если в процессе обновления происходит ошибка, следует + // перейти в режим повторной загрузки, чтобы был выбор - загрузить + // новое сообщение или продолжить без загрузки. + ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + Иначе + // Т.к. чтение сообщение обмена может быть без загрузки метаданных, + // то нужно сохранить сообщение обмена после чтения параметров работы программы, + // чтобы не загружать его повторно для основного чтения. + СохранитьСообщениеВКэш = Истина; КонецЕсли; КонецЕсли; + Если СохранитьСообщениеВКэш Тогда + СтароеСообщение = Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить().Получить(); + НовоеСообщение = Новый ДвоичныеДанные(СообщениеОбмена); + ОбновитьКэш = Ложь; + + Если ТипЗнч(СтароеСообщение) <> Тип("ДвоичныеДанные") Тогда + ОбновитьКэш = Истина; + Иначе + Если СтароеСообщение.Размер() <> НовоеСообщение.Размер() Тогда + ОбновитьКэш = Истина; + ИначеЕсли НовоеСообщение <> СтароеСообщение Тогда + ОбновитьКэш = Истина; + КонецЕсли; + КонецЕсли; + + Если ОбновитьКэш Тогда + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить( + Новый ХранилищеЗначения(НовоеСообщение, Новый СжатиеДанных(9))); + + ЗаписатьСобытиеПолученияДанных( + Получатель, НСтр("ru = 'Сообщение обмена записано в кэш.'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -3057,8 +3260,7 @@ СообщениеОбмена, СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано - ); + КоличествоОбъектовОбработано); Если СтандартнаяОбработка = Истина Тогда @@ -3070,8 +3272,7 @@ СообщениеОбмена, СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано - ); + КоличествоОбъектовОбработано); КонецЕсли; @@ -3081,8 +3282,7 @@ ЗаписьЖурналаРегистрации(СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные(), - СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке - ); + СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = СтрокаСообщенияОбОшибке; Возврат; @@ -3121,8 +3321,7 @@ СообщениеОбмена, СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано - ); + КоличествоОбъектовОбработано); СтруктураНастроекОбмена.КоличествоОбъектовОбработано = КоличествоОбъектовОбработано; @@ -3176,8 +3375,7 @@ СообщениеОбмена, СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано - ); + КоличествоОбъектовОбработано); Если СтандартнаяОбработка = Истина Тогда @@ -3189,8 +3387,7 @@ СообщениеОбмена, СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - КоличествоОбъектовОбработано - ); + КоличествоОбъектовОбработано); КонецЕсли; @@ -3199,8 +3396,7 @@ ЗаписьЖурналаРегистрации(СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные(), - СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке - ); + СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = СтрокаСообщенияОбОшибке; Возврат; @@ -3264,8 +3460,7 @@ СообщениеОбмена, КоличествоЭлементовВТранзакции = 0, КлючСообщенияЖурналаРегистрации = "", - КоличествоОбъектовОбработано = 0 - ) + КоличествоОбъектовОбработано = 0) Если ПустаяСтрока(КлючСообщенияЖурналаРегистрации) Тогда КлючСообщенияЖурналаРегистрации = СобытиеЖурналаРегистрацииОбменДанными(); @@ -3301,7 +3496,7 @@ ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // Получаем выборку изменённых данных - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); + ВыборкаИзменений = ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); Если ИспользоватьТранзакции Тогда НачатьТранзакцию(); @@ -3458,10 +3653,18 @@ Возврат; КонецЕсли; - // Удаляем регистрацию изменений для узла отправителя сообщения - ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + ПараметрыРезервнойКопии = ПараметрыРезервнойКопии(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + УдалитьРегистрациюИзменений = Не ПараметрыРезервнойКопии.ВосстановленаРезервнаяКопия; + + Если УдалитьРегистрациюИзменений Тогда + + // Удаляем регистрацию изменений для узла отправителя сообщения + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + КонецЕсли; // считаем сколько объектов прочитали КоличествоЗаписанныхОбъектов = 0; @@ -3493,42 +3696,16 @@ ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; ОтправкаНазад = Ложь; - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Данные, ПолучениеЭлемента, ОтправкаНазад); + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Данные, ПолучениеЭлемента, ОтправкаНазад, ЧтениеСообщения.Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Продолжить; КонецЕсли; - + ЭтоУдалениеОбъекта = (ТипЗнч(Данные) = Тип("УдалениеОбъекта")); КоличествоОбъектовОбработано = КоличествоОбъектовОбработано + 1; - // Проверяем на наличие коллизии изменений - Если ПланыОбмена.ИзменениеЗарегистрировано(ЧтениеСообщения.Отправитель, Данные) Тогда - - ОбъектМетаданных = ?(ЭтоУдалениеОбъекта, Данные.Ссылка.Метаданные(), Данные.Метаданные()); - - РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями; - - ПрименятьИзменения = МенеджерПланаОбмена.ПрименитьОбъектПриКоллизииИзменений(ЧтениеСообщения.Отправитель, Данные); - - Если ПрименятьИзменения Тогда - - ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Предупреждение, - ОбъектМетаданных, Строка(Данные), НСтр("ru = 'Возникла коллизия изменений для объекта. Объект этой базы заменён версией объекта из сообщения обмена.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); - // - Иначе - - ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Предупреждение, - ОбъектМетаданных, Строка(Данные), НСтр("ru = 'Возникла коллизия изменений для объекта. Объект этой базы не был изменён.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); - // - Продолжить; - КонецЕсли; - - КонецЕсли; - Если Не ОтправкаНазад Тогда Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; КонецЕсли; @@ -3566,34 +3743,12 @@ КонецЕсли; - // Выполняем проверку на коллизии дат запрета загрузки. - Отказ = Ложь; - СообщениеОбОшибке = ""; - ПередЗаписьюДанныхИзСообщенияОбмена(Данные, УзелИнформационнойБазы, Отказ, СообщениеОбОшибке); - - Если Отказ Тогда - // Если загрузка запрещена регистрируется ошибка и загрузка продолжается. - ЗаписьЖурналаРегистрации( - КлючСообщенияЖурналаРегистрации, - УровеньЖурналаРегистрации.Предупреждение, - УзелИнформационнойБазы.Метаданные(), - УзелИнформационнойБазы, - СообщениеОбОшибке); - Продолжить; - КонецЕсли; - Если ЭтоУдалениеОбъекта И РазрешитьУдалениеОбъектов Тогда Данные = УдалениеОбъекта; КонецЕсли; - Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда - - Данные.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - КонецЕсли; - // Выполняем попытку записи объекта Попытка Данные.Записать(); @@ -3635,24 +3790,21 @@ Если РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка Тогда - Если ИспользоватьТранзакции Тогда - - ОтменитьТранзакцию(); - - КонецЕсли; - ЧтениеСообщения.ПрерватьЧтение(); + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; Иначе - Если ИспользоватьТранзакции Тогда - - ЗафиксироватьТранзакцию(); - - КонецЕсли; - ЧтениеСообщения.ЗакончитьЧтение(); + ПриВосстановленииРезервнойКопии(ПараметрыРезервнойКопии); + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + КонецЕсли; ЧтениеXML.Закрыть(); @@ -3783,14 +3935,14 @@ // Возвращаемое значение: // Строка - путь к полученному файлу. // -Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач Пароль = "") Экспорт +Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) Экспорт // возвращаемое значение функции ИмяФайлаРезультата = ""; - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); Если ОбменВыполняетсяВОднойСети Тогда @@ -3812,6 +3964,17 @@ ШаблонИмениФайла = "data.zip.[n]"; + // Протоколирование событий обмена + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), + Формат(КоличествоЧастей, "ЧН=0; ЧГ=0") + ); + ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + // + Для НомерЧасти = 1 По КоличествоЧастей Цикл ДанныеЧасти = Неопределено; @@ -3842,6 +4005,16 @@ ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; + // Протоколирование событий обмена + ФайлАрхива = Новый Файл(ИмяАрхива); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), + Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0") + ); + ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + // + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, Разархиватор.Элементы[0].Имя); Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); @@ -3874,14 +4047,14 @@ // Возвращаемое значение: // УникальныйИдентификатор - идентификатор файла в сервисе передачи файлов. // -Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач Пароль = "") Экспорт +Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) Экспорт // возвращаемое значение функции ИдентификаторФайла = Неопределено; - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, ПараметрыАутентификации); Если ОбменВыполняетсяВОднойСети Тогда @@ -3948,8 +4121,8 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла); Иначе @@ -3984,8 +4157,8 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриПомещенииФайлаВХранилище(СтруктураЗаписи); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриПомещенииФайлаВХранилище(СтруктураЗаписи); Иначе ПриПомещенииФайлаВХранилище(СтруктураЗаписи); @@ -3998,12 +4171,12 @@ // Определяет возможность передачи файлов между двумя базами через локальную сеть // // Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена -// Пароль - Строка - Пароль для WS соединения +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется получение сообщения обмена +// ПараметрыАутентификации - Структура. Содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). // -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач Пароль = "") Экспорт +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач ПараметрыАутентификации = Неопределено) Экспорт - Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, ПараметрыАутентификации); ИмяВременногоФайла = СтрЗаменить("test{GUID}.tmp", "GUID", Строка(Новый УникальныйИдентификатор)); @@ -4789,8 +4962,7 @@ Если Реквизит.Тип.Типы().Количество() <> 1 Тогда СтрокаСообщения = НСтр("ru = 'Составной тип данных для значений по умолчанию не поддерживается. - |Реквизит ""%1"".'" - ); + |Реквизит ""%1"".'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -4800,8 +4972,7 @@ Если Не ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда СтрокаСообщения = НСтр("ru = 'Выбор значений по умолчанию поддерживается только для справочников. - |Реквизит ""%1"".'" - ); + |Реквизит ""%1"".'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -5016,14 +5187,10 @@ Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") <> Истина Тогда - Сообщение = НСтр("ru = 'Выполнение обмена запрещено администратором.'"); - СообщениеДляЖурналаРегистрации = НСтр("ru = 'Выполнение обмена запрещено администратором.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, СообщениеДляЖурналаРегистрации); - - ВызватьИсключение Сообщение; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, + НСтр("ru = 'Выполнение обмена запрещено администратором.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ВызватьИсключение НСтр("ru = 'Выполнение обмена запрещено администратором.'"); КонецЕсли; КонецПроцедуры @@ -5052,6 +5219,51 @@ КонецПроцедуры +// Для внутреннего использования +// +Процедура ПроверитьВозможностьВнешнегоСоединения() + + Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда + + ВызватьИсключение НСтр("ru = 'Выполнение обмена данными через прямое подключение на сервере под управлением ОС Linux недоступно. + |Для выполнения обмена данными через прямое подключение требуется использовать ОС Windows.'"); + + КонецЕсли; + +КонецПроцедуры + +// Возвращает признак наличия у пользователя прав на выполнение синхронизации данных. +// Выполнять синхронизацию данных может, либо полноправный пользователь, +// либо пользователь с правами поставляемого профиля "Синхронизация данных с другими программами". +// +// Параметры: +// Пользователь (необязательный) – ПользовательИнформационнойБазы, Неопределено. +// Пользователь, для которого необходимо вычислить признак разрешения использования синхронизации данных. +// Если параметр не задан, то функция вычисляется для текущего пользователя информационной базы. +// +Функция СинхронизацияДанныхРазрешена(Знач Пользователь = Неопределено) Экспорт + + Если Пользователь = Неопределено Тогда + Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + КонецЕсли; + + Если Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + Возврат Истина; + КонецЕсли; + + РолиПрофиля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами()); + Для Каждого Роль Из РолиПрофиля Цикл + + Если Не Пользователь.Роли.Содержит(Метаданные.Роли.Найти(СокрЛП(Роль))) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; +КонецФункции + // // Заполняет список значений доступными видами транспорта для узла плана обмена @@ -5101,19 +5313,15 @@ СтрокаСообщения = НСтр("ru = '%1, %2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.РезультатВыполненияОбмена, - СтруктураНастроекОбмена.ДействиеПриОбмене - ); + СтруктураНастроекОбмена.ДействиеПриОбмене); Иначе СтрокаСообщения = НСтр("ru = '%1, %2; Объектов обработано: %3'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.РезультатВыполненияОбмена, СтруктураНастроекОбмена.ДействиеПриОбмене, - СтруктураНастроекОбмена.КоличествоОбъектовОбработано - ); + СтруктураНастроекОбмена.КоличествоОбъектовОбработано); КонецЕсли; - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - СтруктураНастроекОбмена.ДатаОкончания = ТекущаяДатаСеанса(); // фиксируем состояние обмена в РС @@ -5124,8 +5332,12 @@ ЗафиксироватьУспешныйОбменДаннымиВРегистреСведений(СтруктураНастроекОбмена); + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакОтправкиДанных(СтруктураНастроекОбмена.УзелИнформационнойБазы); + КонецЕсли; + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); + КонецПроцедуры // Фиксирует состояние обмена данными в регистре сведений СостоянияОбменовДанными @@ -5194,6 +5406,16 @@ КонецПроцедуры +Процедура ЗаписатьСобытиеПолученияДанных(Знач УзелИнформационнойБазы, Знач Комментарий, Знач ЭтоОшибка = Ложь) + + Уровень = ?(ЭтоОшибка, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация); + + КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, Уровень,,, Комментарий); + +КонецПроцедуры + // Для внутреннего использования // Процедура ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, ИмяРеквизитаФормы) @@ -5526,23 +5748,6 @@ Возврат ПараметрыПодключения; КонецФункции -// Для внутреннего использования -// -Функция СоздатьВременныйКаталогСообщенийОбмена(ИмяВременногоКаталога, СтрокаСообщенияОбОшибке = "") - - ИмяВременногоКаталога = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), ИмяВременногоКаталогаСообщенийОбмена()); - - // создаем временный каталог для сообщений обмена - Попытка - СоздатьКаталог(ИмяВременногоКаталога); - Исключение - СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Ложь; - КонецПопытки; - - Возврат Истина; -КонецФункции - // Для внутреннего использования // Функция ДобавитьЛитералКИмениФайла(Знач ПолноеИмяФайла, Знач Литерал) @@ -5651,8 +5856,7 @@ ДанныеСообщения, Знач КоличествоЭлементовВТранзакции, Знач ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ) + КоличествоОтправленныхОбъектов) ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.ОбменДанными\ПриВыгрузкеДанныхСлужебный"); @@ -5678,8 +5882,7 @@ ДанныеСообщения, Знач КоличествоЭлементовВТранзакции, Знач ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ) + КоличествоОтправленныхОбъектов) ОбменДаннымиПереопределяемый.ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, @@ -5687,8 +5890,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ); + КоличествоОтправленныхОбъектов); КонецПроцедуры @@ -5700,8 +5902,7 @@ ДанныеСообщения, Знач КоличествоЭлементовВТранзакции, Знач ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ) + КоличествоПолученныхОбъектов) ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.ОбменДанными\ПриЗагрузкеДанныхСлужебный"); @@ -5727,8 +5928,7 @@ ДанныеСообщения, Знач КоличествоЭлементовВТранзакции, Знач ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ) + КоличествоПолученныхОбъектов) ОбменДаннымиПереопределяемый.ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, @@ -5736,8 +5936,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ); + КоличествоПолученныхОбъектов); КонецПроцедуры @@ -6540,8 +6739,7 @@ УстановитьПривилегированныйРежим(Истина); Результат = Новый Структура("ПланОбменаСуществует, ПрефиксИнформационнойБазы, ПрефиксИнформационнойБазыПоУмолчанию, - |НаименованиеИнформационнойБазы, НаименованиеИнформационнойБазыПоУмолчанию, НастройкиПараметровУчетаЗаданы, КодЭтогоУзла" - ); + |НаименованиеИнформационнойБазы, НаименованиеИнформационнойБазыПоУмолчанию, НастройкиПараметровУчетаЗаданы, КодЭтогоУзла"); Результат.ПланОбменаСуществует = (Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) <> Неопределено); @@ -6691,7 +6889,7 @@ УстановитьПривилегированныйРежим(Истина); - Параметры.Вставить("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); + Параметры.Вставить("ГлавныйУзел", ГлавныйУзел()); КонецПроцедуры @@ -6742,8 +6940,7 @@ СтрокаСообщения = НСтр("ru = 'Для плана(ов) обмена %1 используются правила обмена, загруженные из файла. |Эти правила могут быть несовместимы с новой версией программы. |Для предупреждения возможного возникновения ошибок при работе с программой рекомендуется актуализировать правила обмена из файла.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка() - ); + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПланыОбменаМассив)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); @@ -6804,8 +7001,7 @@ Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт Результат = ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой( - ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек) - ); + ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек)); ВнешнееСоединение = Результат.Соединение; Если ВнешнееСоединение<>Неопределено Тогда @@ -6856,8 +7052,7 @@ СтруктураНастроек.WSИмяПользователя, СтруктураНастроек.WSПароль, СтруктураНастроек.WSТаймаут, - ДелатьКонтрольныйВызов - ); + ДелатьКонтрольныйВызов); Исключение СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -6921,17 +7116,16 @@ // Для внутреннего использования // -Функция ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", Пароль = "") +Функция ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", ПараметрыАутентификации = Неопределено) - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, Пароль); + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); Попытка ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); Исключение СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), - УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке - ); + УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); Возврат Неопределено; КонецПопытки; @@ -7006,9 +7200,9 @@ Попытка ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); Исключение + СброситьПарольСинхронизацииДанных(Корреспондент); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СообщениеПользователю = КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке()); Возврат Ложь; КонецПопытки; @@ -7021,21 +7215,26 @@ WSПрокси = ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек,, СообщениеПользователю, 5); Если WSПрокси = Неопределено Тогда + СброситьПарольСинхронизацииДанных(Корреспондент); Возврат Ложь; КонецЕсли; Попытка - Возврат WSПрокси.TestConnection( + ЕстьПодключение = WSПрокси.TestConnection( ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбменаПоСсылке(Корреспондент), "Код"), - СообщениеПользователю - ); + СообщениеПользователю); + Если ЕстьПодключение Тогда + УстановитьПарольСинхронизацииДанных(Корреспондент, СтруктураНастроек.WSПароль); + КонецЕсли; + + Возврат ЕстьПодключение; Исключение + СброситьПарольСинхронизацииДанных(Корреспондент); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СообщениеПользователю = КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке()); Возврат Ложь; КонецПопытки; @@ -7050,7 +7249,15 @@ КонецЕсли; - Возврат WSПрокси <> Неопределено; + ЕстьПодключение = (WSПрокси <> Неопределено); + + Если ЕстьПодключение Тогда + УстановитьПарольСинхронизацииДанных(Корреспондент, СтруктураНастроек.WSПароль); + Иначе + СброситьПарольСинхронизацииДанных(Корреспондент); + КонецЕсли; + + Возврат ЕстьПодключение; КонецФункции // Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". @@ -7162,8 +7369,7 @@ Процедура ЗагрузитьПравилаДляОбменаДанными(Отказ, Знач ИмяПланаОбмена, Знач ВидПравил, - Знач ИмяМакетаПравил - ) + Знач ИмяМакетаПравил) СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); @@ -7345,6 +7551,9 @@ УстановитьПривилегированныйРежим(Истина); + // обновляем повторно используемые значения Механизма регистрации объектов + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + СтандартнаяОбработка = Истина; ОбменДаннымиПереопределяемый.РегистрацияИзмененийНачальнойВыгрузкиДанных(УзелИнформационнойБазы, СтандартнаяОбработка, Данные); @@ -7383,6 +7592,17 @@ КонецПроцедуры +// Устанавливает признак повторения загрузки при ошибке загрузки или обновления. +// Очищает хранилище сообщения обмена, полученного из главного узла РИБ. +// +Процедура ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() + + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); + + Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Истина); + +КонецПроцедуры + // Для внутреннего использования // Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, @@ -7421,10 +7641,37 @@ // Функция ЭтоПодчиненныйУзелРИБ() Экспорт - Возврат ПланыОбмена.ГлавныйУзел() <> Неопределено; + Возврат ГлавныйУзел() <> Неопределено; КонецФункции +// Получает узел распределенной информационной базы, являющийся главным для текущей информационной базы при условии, +// что распределенная информационная база создана на базе плана обмена, обслуживаемым подсистемой обмена данными БСП. +// +// Возвращаемое значение: +// Тип: ПланОбменаСсылка.<Имя плана обмена>; Неопределено. +// Если текущая информационная база не является узлом распределенной информационной базы +// или главный узел для нее не определен (она сама является корневым узлом) +// или распределенная информационная база создана на базе плана обмена, который не обслуживается подсистемой обмена данными БСП, +// то метод возвращает Неопределено. +// +Функция ГлавныйУзел() Экспорт + + Результат = ПланыОбмена.ГлавныйУзел(); + + Если Результат <> Неопределено Тогда + + Если Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Результат) Тогда + + Результат = Неопределено; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + // Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. // // Параметры: @@ -7452,6 +7699,84 @@ Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); КонецФункции +// Создает временный каталог сообщений обмена. +// Фиксирует имя каталога в регистре для последующего его удаления. +// +Функция СоздатьВременныйКаталогСообщенийОбмена() Экспорт + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(), ИмяВременногоКаталогаСообщенийОбмена()); + + СоздатьКаталог(Результат); + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + УстановитьПривилегированныйРежим(Истина); + + ПоместитьФайлВХранилище(Результат); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает признак необходимости загрузки сообщения обмена данными +Функция ЗагрузитьСообщениеОбменаДанными() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.ЗагрузитьСообщениеОбменаДанными.Получить() = Истина; + +КонецФункции + +Функция ИнвертироватьПолучениеЭлементаДанныхПоУмолчанию(Знач ПолучениеОтГлавного) Экспорт + + Возврат ?(ПолучениеОтГлавного, ПолучениеЭлементаДанных.Игнорировать, ПолучениеЭлементаДанных.Принять); + +КонецФункции + +Функция ПолучитьКонтекстОбъекта(Знач Объект) Экспорт + + Результат = Новый Структура; + + Для Каждого Реквизит Из Объект.Метаданные().Реквизиты Цикл + + Результат.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]); + + КонецЦикла; + + Для Каждого ТабличнаяЧасть Из Объект.Метаданные().ТабличныеЧасти Цикл + + Результат.Вставить(ТабличнаяЧасть.Имя, Объект[ТабличнаяЧасть.Имя].Выгрузить()); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Процедура ЗагрузитьКонтекстОбъекта(Знач Контекст, Знач Объект) Экспорт + + Для Каждого Реквизит Из Объект.Метаданные().Реквизиты Цикл + + Если Контекст.Свойство(Реквизит.Имя) Тогда + + Объект[Реквизит.Имя] = Контекст[Реквизит.Имя]; + + КонецЕсли; + + КонецЦикла; + + Для Каждого ТабличнаяЧасть Из Объект.Метаданные().ТабличныеЧасти Цикл + + Если Контекст.Свойство(ТабличнаяЧасть.Имя) Тогда + + Объект[ТабличнаяЧасть.Имя].Загрузить(Контекст[ТабличнаяЧасть.Имя]); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + // // Для внутреннего использования @@ -7511,6 +7836,58 @@ Возврат ОбработкаОбменаДанными; КонецФункции +// Работа с паролями синхронизации данных + +// Возвращает значения пароля синхронизации данных для заданного узла. +// Если пароля нет, то возвращается Неопределено. +// +// Возвращаемое значение: +// Тип: Строка, Неопределено - значения пароля синхронизации данных. +// +Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); +КонецФункции + +// Возвращает признак того, что пароль синхронизации данных был задан пользователем. +// +Функция ПарольСинхронизацииДанныхЗадан(Знач УзелИнформационнойБазы) Экспорт + + Возврат ПарольСинхронизацииДанных(УзелИнформационнойБазы) <> Неопределено; + +КонецФункции + +// Устанавливает пароль синхронизации данных для заданного узла. +// Пароль сохраняется в параметре сеанса. +// +Процедура УстановитьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы, Знач Пароль) + + УстановитьПривилегированныйРежим(Истина); + + ПаролиСинхронизацииДанных = Новый Соответствие; + + Для Каждого Элемент Из ПараметрыСеанса.ПаролиСинхронизацииДанных Цикл + + ПаролиСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); + + КонецЦикла; + + ПаролиСинхронизацииДанных.Вставить(УзелИнформационнойБазы, Пароль); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(ПаролиСинхронизацииДанных); + +КонецПроцедуры + +// Сбрасывает пароль синхронизации данных для заданного узла. +// +Процедура СброситьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) + + УстановитьПарольСинхронизацииДанных(УзелИнформационнойБазы, Неопределено); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Контроль неразделенных данных @@ -7527,8 +7904,7 @@ ЗаписьЖурналаРегистрации( ПредставлениеИсключения, УровеньЖурналаРегистрации.Ошибка, - Данные.Метаданные() - ); + Данные.Метаданные()); ВызватьИсключение ПредставлениеИсключения; КонецЕсли; @@ -8252,8 +8628,7 @@ // Процедура ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы( СтруктураНастроекОбмена, - ИспользоватьНастройкиТранспорта - ) + ИспользоватьНастройкиТранспорта) СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); @@ -8285,8 +8660,7 @@ СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = ?(СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных, СтруктураНастроекОбмена.НастройкиТранспорта.КоличествоЭлементовВТранзакцииЗагрузкиДанных, - СтруктураНастроекОбмена.НастройкиТранспорта.КоличествоЭлементовВТранзакцииВыгрузкиДанных - ); + СтруктураНастроекОбмена.НастройкиТранспорта.КоличествоЭлементовВТранзакцииВыгрузкиДанных); Если СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("WSИспользоватьПередачуБольшогоОбъемаДанных") Тогда СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных = СтруктураНастроекОбмена.НастройкиТранспорта.WSИспользоватьПередачуБольшогоОбъемаДанных; @@ -8644,7 +9018,13 @@ ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); + Попытка + ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + Возврат; + КонецПопытки; КонецПроцедуры @@ -8725,20 +9105,27 @@ // Процедура УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена) - ЗаполнитьЗначенияСвойств(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - - РежимПротоколированияОбменаДанными = Неопределено; - - Если СтруктураНастроекОбмена.Свойство("РежимПротоколированияОбменаДанными", РежимПротоколированияОбменаДанными) - И РежимПротоколированияОбменаДанными Тогда + Если СтруктураНастроекОбмена.Свойство("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки") Тогда - Если СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = "" Тогда - ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Истина; - ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; - Иначе - ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; - ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Истина; - ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; + ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки; + ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки; + ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными = СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными; + ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; + ОбработкаОбменаДанными.ПродолжитьПриОшибке = СтруктураНастроекОбмена.ПродолжитьПриОшибке; + + Если СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными Тогда + + Если СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = "" Тогда + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; + Иначе + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; + + КонецЕсли; КонецЕсли; @@ -8840,6 +9227,141 @@ // КонецФункции +// Регистрирует ошибки при отложенном проведении документа в мониторе проблем обмена +// +// Параметры: +// Объект - ДокументОбъект - Документ при отложенном проведении которого возникли ошибки +// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен документ +// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации +// +// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. +// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). +// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые +// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова +// данного метода в буфере сообщений системы не содержалось сообщений. +// +// Пример вызова процедуры при загрузке документа в информационную базу: +// +// Процедура ПровестиДокументПриЗагрузке(Документ, УзелОбмена) +// Документ.ОбменДанными.Загрузка = Истина; +// Документ.Записать(); +// Документ.ОбменДанными.Загрузка = Ложь; +// Отказ = Ложь; +// +// Попытка +// Документ.Записать(РежимЗаписиДокумента.Проведение); +// Исключение +// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); +// Отказ = Истина; +// КонецПопытки; +// +// Если Отказ Тогда +// ЗарегистрироватьОшибкуПроведенияДокумента(Документ, УзелОбмена, СообщениеОбОшибке); +// КонецЕсли; +// +// КонецПроцедуры; +// +Процедура ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбмена, СообщениеОбОшибке) Экспорт + + СтрокаСообщения = НСтр("ru = 'Ошибка при отложенном проведении документа: %1. Описание ошибки: %2'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), СообщениеОбОшибке); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение, ,, СтрокаСообщения); + + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + ТекстОшибки = ""; + Для Каждого Сообщение Из СообщенияПользователю Цикл + ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; + КонецЦикла; + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, + ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + + +КонецПроцедуры + +// Регистрирует ошибки при отложенной записи объекта в мониторе проблем обмена +// +// Параметры: +// Объект - Объект ссылочного типа - Объект при отложенной записи которого возникли ошибки +// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект +// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации +// +// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. +// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). +// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые +// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова +// данного метода в буфере сообщений системы не содержалось сообщений. +// +// Пример вызова процедуры при записи объекта в информационную базу: +// +// Процедура ЗаписатьОбъектПриЗагрузке(Объект, УзелОбмена) +// Объект.ОбменДанными.Загрузка = Истина; +// Объект.Записать(); +// Объект.ОбменДанными.Загрузка = Ложь; +// Отказ = Ложь; +// +// Попытка +// Объект.Записать(); +// Исключение +// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); +// Отказ = Истина; +// КонецПопытки; +// +// Если Отказ Тогда +// ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, СообщениеОбОшибке); +// КонецЕсли; +// +// КонецПроцедуры; +// +Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, СообщениеОбОшибке) Экспорт + + СтрокаСообщения = НСтр("ru = 'Ошибка при отложенной запись объекта: %1. Описание ошибки: %2'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), СообщениеОбОшибке); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение, ,, СтрокаСообщения); + + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + ТекстОшибки = ""; + Для Каждого Сообщение Из СообщенияПользователю Цикл + ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; + КонецЦикла; + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, + ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с монитором проблем обмена данными + +// Для внутреннего использования +// +Функция КоличествоПроблемОбменаДанными(УзлыОбмена = Неопределено, ТипПроблемы = Неопределено, + УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт + + Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, + ТипПроблемы, УчитыватьПроигнорированные, Период, СтрокаПоиска); + +КонецФункции + +// Для внутреннего использования +// +Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, + УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, + ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); + КонецЕсли; + + Возврат 0; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ @@ -8911,8 +9433,7 @@ КонецЕсли; Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последняя синхронизация: %1'"), - ОтносительнаяДатаСинхронизации(ДатаСинхронизации) - ); + ОтносительнаяДатаСинхронизации(ДатаСинхронизации)); КонецФункции // Возвращает представление относительной даты синхронизации. @@ -9107,9 +9628,20 @@ // Для внутреннего использования // +Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт + + Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. +// В главном узле всегда - Ложь. +// +// Копия функции ОбщегоНазначения.ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ +// Функция ТребуетсяУстановкаОбновления() Экспорт - Возврат КонфигурацияИзменена() И ЭтоПодчиненныйУзелРИБ(); + Возврат ЭтоПодчиненныйУзелРИБ() И КонфигурацияИзменена(); КонецФункции @@ -9200,7 +9732,7 @@ // Обертки фоновых процедур интерактивного изменения выгрузки // Процедура ИнтерактивноеИзменениеВыгрузки_СформироватьТабличныйДокументПользователя(СтруктураОбработки, АдресРезультата, ПолноеИмяМетаданных, Представление) Экспорт - ОбъектОтчета = ОбъектОтчетаПоНастройкам(СтруктураОбработки); + ОбъектОтчета = ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(СтруктураОбработки); Результат = ОбъектОтчета.СформироватьТабличныйДокументПользователя(ПолноеИмяМетаданных, Представление); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); @@ -9209,7 +9741,7 @@ // Для внутреннего использования // Процедура ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений(СтруктураОбработки, АдресРезультата, СписокИменМетаданных) Экспорт - ОбъектОтчета = ОбъектОтчетаПоНастройкам(СтруктураОбработки); + ОбъектОтчета = ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(СтруктураОбработки); Результат = ОбъектОтчета.СформироватьДеревоЗначений(СписокИменМетаданных); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); @@ -9218,14 +9750,14 @@ // Для внутреннего использования // Процедура ИнтерактивноеИзменениеВыгрузки_ЗарегистрироватьДополнительныеИзменения(СтруктураОбработки) Экспорт - ОбъектОтчета = ОбъектОтчетаПоНастройкам(СтруктураОбработки); + ОбъектОтчета = ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(СтруктураОбработки); ОбъектОтчета.ЗарегистрироватьДополнительныеИзменения(); КонецПроцедуры // Для внутреннего использования // -Функция ОбъектОтчетаПоНастройкам(Знач Настройки) +Функция ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(Знач Настройки) ОбъектОтчета = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); ОбъектОтчета.КомпоновщикОтбораВсехДокументов = ОбъектОтчета.КомпоновщикНастроекОбщегоОтбора(); @@ -9234,13 +9766,13 @@ ЭлементыОтбора = ОбъектОтчета.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы; ЭлементыОтбора.Очистить(); ОбъектОтчета.ДобавитьЗначенияОтбораКомпоновки( - ЭлементыОтбора, Настройки.НастройкиКомпоновщикаОтбораВсехДокументов.Отбор.Элементы - ); + ЭлементыОтбора, Настройки.НастройкиКомпоновщикаОтбораВсехДокументов.Отбор.Элементы); Возврат ОбъектОтчета; КонецФункции -// Обслуживание фоновых заданий +// Для внутреннего использования +// Функция ЗапуститьФоновоеЗадание(ИмяМетода, ПараметрыМетода, ОписаниеМетода="") Экспорт Задание = ФоновыеЗадания.Выполнить(ИмяМетода, ПараметрыМетода, , ОписаниеМетода); @@ -9249,28 +9781,43 @@ Возврат Неопределено; Исключение Если Задание.Состояние=СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда - ВызватьИсключение; + ВызватьИсключениеАварийногоЗадания(Задание); КонецЕсли; КонецПопытки; Возврат Задание.УникальныйИдентификатор; - КонецФункции +// Для внутреннего использования +// +Процедура ВызватьИсключениеАварийногоЗадания(Знач Задание) + // Запись об аварийном завершении фонового задания уже сделана, пробрасываем исключение наверх + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Задание ""%1"" завершено аварийно. + | + |%2'"), + Задание.Наименование, КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке) + ); +КонецПроцедуры + // Для внутреннего использования // Функция ФоновоеЗаданиеЗавершено(ИдентификаторЗадания) Экспорт - Если ИдентификаторЗадания=Неопределено Тогда - Возврат Истина; // Файловая база + Результат = Истина; + Если ИдентификаторЗадания<>Неопределено Тогда + // Не файловая база + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если Задание<>Неопределено Тогда + // Все непонятное - завершено + Если Задание.Состояние=СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ВызватьИсключениеАварийногоЗадания(Задание); + КонецЕсли; + Результат = Задание.Состояние<>СостояниеФоновогоЗадания.Активно; + КонецЕсли; КонецЕсли; - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Если Задание=Неопределено Тогда - Возврат Истина; // Все непонятное - завершено - КонецЕсли; - - Возврат Задание.Состояние<>СостояниеФоновогоЗадания.Активно; + Возврат Результат; КонецФункции // Для внутреннего использования @@ -9286,11 +9833,25 @@ КонецПроцедуры -// Для внутреннего использования -// -Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт +// Возвращает идентификатор поставляемого профиля групп доступа "Синхронизация данных с другими программами" +// +// Возвращаемое значение: +// Тип: Строка. +// +Функция ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами() Экспорт - Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат "04937803-5dba-11df-a1d4-005056c00008"; КонецФункции +// Возвращает список ролей профиля групп доступа "Синхронизация данных с другими программами" +// +Функция РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами() + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + Возврат "ВыполнениеСинхронизацииДанных, УдаленныйДоступБазоваяФункциональность, ЧтениеИнформацииОВерсияхОбъектов"; + Иначе + Возврат "ВыполнениеСинхронизацииДанных, УдаленныйДоступБазоваяФункциональность"; + КонецЕсли; + +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 08c10e9f8..c2b2aea0d 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -6,51 +6,69 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Процедура предназначена для определения вида отправки выгружаемого элемента данных -// Вызывается из обработчиков планов обмена: ПриОтправкеДанныхГлавному(), ПриОтправкеДанныхПодчиненному() +// Процедура-обработчик события "ПередЗаписью" документов для механизма регистрации объектов на узлах // // Параметры: -// ЭлементДанных, ОтправкаЭлемента - см. описание параметров в синтаксис помощнике -// для методов ПриОтправкеДанныхГлавному() и ПриОтправкеДанныхПодчиненному() -// -Процедура ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) Экспорт +// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// Источник - ДокументОбъект - источник события +// Отказ - Булево - флаг отказа от выполнения обработчика +// +Процедура МеханизмРегистрацииОбъектовПередЗаписьюДокумента(ИмяПланаОбмена, Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - Если Получатель = Неопределено Тогда - - // - - ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить - ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - - // Стандартную обработку не переопределяем - - ИначеЕсли ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Получатель.Ссылка) Тогда - - ПриОтправкеДанных( - ЭлементДанных, - ОтправкаЭлемента, - Получатель.Ссылка, - ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель.Ссылка), - СозданиеНачальногоОбраза - ); - - КонецЕсли; + МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ, РежимЗаписи); КонецПроцедуры -// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// Процедура-обработчик события "ПередЗаписью" ссылочных типов данных (кроме документов) для механизма регистрации объектов на узлах // // Параметры: -// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// Источник - источник события, кроме типа ДокументОбъект +// Отказ - Булево - флаг отказа от выполнения обработчика // -Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт +Процедура МеханизмРегистрацииОбъектовПередЗаписью(ИмяПланаОбмена, Источник, Отказ) Экспорт - Если ОбменДаннымиВызовСервера.ЗагрузкаПараметровРаботыПрограммы() Тогда - - // В режиме загрузки параметров работы программы игнорируем получение всех данных. - ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - - КонецЕсли; + МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ); + +КонецПроцедуры + +// Процедура-обработчик события "ПередЗаписью" регистров для механизма регистрации объектов на узлах +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// Источник - НаборЗаписейРегистра - источник события +// Отказ - Булево - флаг отказа от выполнения обработчика +// Замещение - Булево - признак замещения существующего набора записей +// +Процедура МеханизмРегистрацииОбъектовПередЗаписьюРегистра(ИмяПланаОбмена, Источник, Отказ, Замещение) Экспорт + + МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,, Замещение, Истина); + +КонецПроцедуры + +// Процедура-обработчик события "ПередЗаписью" константы для механизма регистрации объектов на узлах +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// Источник - КонстантаМенеджерЗначения - источник события +// Отказ - Булево - флаг отказа от выполнения обработчика +// +Процедура МеханизмРегистрацииОбъектовПередЗаписьюКонстанты(ИмяПланаОбмена, Источник, Отказ) Экспорт + + МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,,,,, Истина); + +КонецПроцедуры + +// Процедура-обработчик события "ПередУдалением" ссылочных типов данных для механизма регистрации объектов на узлах +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации +// Источник - источник события +// Отказ - Булево - флаг отказа от выполнения обработчика +// +Процедура МеханизмРегистрацииОбъектовПередУдалением(ИмяПланаОбмена, Источник, Отказ) Экспорт + + МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,,,, Истина); КонецПроцедуры @@ -194,71 +212,117 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Механизм регистрации объектов (МРО) +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Процедура-обработчик события "ПередЗаписью" документов для механизма регистрации объектов на узлах +// Процедура предназначена для определения вида отправки выгружаемого элемента данных +// Вызывается из обработчиков планов обмена: ПриОтправкеДанныхГлавному(), ПриОтправкеДанныхПодчиненному() // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации -// Источник - ДокументОбъект - источник события -// Отказ - Булево - флаг отказа от выполнения обработчика -// -Процедура МеханизмРегистрацииОбъектовПередЗаписьюДокумента(ИмяПланаОбмена, Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт +// ЭлементДанных, ОтправкаЭлемента - см. описание параметров в синтаксис помощнике +// для методов ПриОтправкеДанныхГлавному() и ПриОтправкеДанныхПодчиненному() +// +Процедура ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) Экспорт - МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ, РежимЗаписи); + Если Получатель = Неопределено Тогда + + // + + ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Получатель.Ссылка) Тогда + + ПриОтправкеДанных( + ЭлементДанных, + ОтправкаЭлемента, + Получатель.Ссылка, + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель.Ссылка), + СозданиеНачальногоОбраза); + + КонецЕсли; + + // Фиксируем выгруженные предопределенные данные (только для РИБ) + Если Не СозданиеНачальногоОбраза + И ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() + И ОтправкаЭлемента <> ОтправкаЭлементаДанных.Игнорировать + И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) + И ТипЗнч(ЭлементДанных) <> Тип("УдалениеОбъекта") + Тогда + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ЭлементДанных.Метаданные()); + + Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыСчетов() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовРасчета() Тогда + + Если ЭлементДанных.Предопределенный Тогда + + ОбменДаннымиВызовСервера.ДополнитьПриоритетныеДанныеОбмена(ЭлементДанных.Ссылка); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; КонецПроцедуры -// Процедура-обработчик события "ПередЗаписью" ссылочных типов данных (кроме документов) для механизма регистрации объектов на узлах +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации -// Источник - источник события, кроме типа ДокументОбъект -// Отказ - Булево - флаг отказа от выполнения обработчика +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. // -Процедура МеханизмРегистрацииОбъектовПередЗаписью(ИмяПланаОбмена, Источник, Отказ) Экспорт +Процедура ПриПолученииДанныхОтГлавногоВНачале(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ); + Если ОбменДаннымиВызовСервера.ЗагрузкаПараметровРаботыПрограммы() Тогда + + // В режиме загрузки параметров работы программы игнорируем получение всех данных. + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + КонецЕсли; КонецПроцедуры -// Процедура-обработчик события "ПередЗаписью" регистров для механизма регистрации объектов на узлах +// Процедура предназначена для выполнения проверок на наличие коллизий запрета загрузки и изменения данных +// Вызывается из обработчика плана обмена: ПриПолученииДанныхОтГлавного // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации -// Источник - НаборЗаписейРегистра - источник события -// Отказ - Булево - флаг отказа от выполнения обработчика -// Замещение - Булево - признак замещения существующего набора записей +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. // -Процедура МеханизмРегистрацииОбъектовПередЗаписьюРегистра(ИмяПланаОбмена, Источник, Отказ, Замещение) Экспорт +Процедура ПриПолученииДанныхОтГлавногоВКонце(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) Экспорт - МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,, Замещение, Истина); + // Проверка на запрет загрузки по дате запрета + ПроверитьНаличиеЗапретаЗагрузкиПоДате(ЭлементДанных, ПолучениеЭлемента, Отправитель); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Возврат; + КонецЕсли; + + // Проверка на коллизию изменения данных + ПроверитьКоллизиюИзмененийДанных(ЭлементДанных, ПолучениеЭлемента, Отправитель, Истина); КонецПроцедуры -// Процедура-обработчик события "ПередЗаписью" константы для механизма регистрации объектов на узлах +// Процедура предназначена для выполнения проверок на наличие коллизий запрета загрузки и изменения данных +// Вызывается из обработчика плана обмена: ПриПолученииДанныхОтПодчиненного // // Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации -// Источник - КонстантаМенеджерЗначения - источник события -// Отказ - Булево - флаг отказа от выполнения обработчика +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. // -Процедура МеханизмРегистрацииОбъектовПередЗаписьюКонстанты(ИмяПланаОбмена, Источник, Отказ) Экспорт +Процедура ПриПолученииДанныхОтПодчиненногоВКонце(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) Экспорт - МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,,,,, Истина); + // Проверка на запрет загрузки по дате запрета + ПроверитьНаличиеЗапретаЗагрузкиПоДате(ЭлементДанных, ПолучениеЭлемента, Отправитель); -КонецПроцедуры - -// Процедура-обработчик события "ПередУдалением" ссылочных типов данных для механизма регистрации объектов на узлах -// -// Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации -// Источник - источник события -// Отказ - Булево - флаг отказа от выполнения обработчика -// -Процедура МеханизмРегистрацииОбъектовПередУдалением(ИмяПланаОбмена, Источник, Отказ) Экспорт + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Возврат; + КонецЕсли; - МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ,,,, Истина); + // Проверка на коллизию изменения данных + ПроверитьКоллизиюИзмененийДанных(ЭлементДанных, ПолучениеЭлемента, Отправитель, Ложь); КонецПроцедуры @@ -318,8 +382,24 @@ Возврат; КонецЕсли; - ТаблицаРеквизитовСсылочногоТипа = Неопределено; + ЗарегистрированныеКВыгрузкеОбъекты = Неопределено; + Если Источник.ДополнительныеСвойства.Свойство("ЗарегистрированныеКВыгрузкеОбъекты", ЗарегистрированныеКВыгрузкеОбъекты) Тогда + + ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + Для Каждого Объект Из ЗарегистрированныеКВыгрузкеОбъекты Цикл + + Если Не ВыгрузкаОбъектаРазрешена(Источник.Ссылка, Объект) Тогда + + ПланыОбмена.УдалитьРегистрациюИзменений(Источник.Ссылка, Объект); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + ТаблицаРеквизитовСсылочногоТипа = Неопределено; Если Источник.ДополнительныеСвойства.Свойство("ТаблицаРеквизитовУзла", ТаблицаРеквизитовСсылочногоТипа) Тогда // Выполняем регистрацию выбранных объектов ссылочного типа на текущем узле без использования ПРО @@ -374,27 +454,109 @@ И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда - КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); - - ПодробноеПредставлениеОшибки = НСтр("ru = 'Настройка обмена данными не может быть изменена. - |Существуют зарегистрированные изменения данных для обмена. - |Выполните обмен данными два раза и повторите попытку.'" - ); - - ПодробноеПредставлениеОшибкиДляЖурналаРегистрации = НСтр("ru = 'Настройка обмена данными не может быть изменена. - |Существуют зарегистрированные изменения данных для обмена. - |Выполните обмен данными два раза и повторите попытку.'", КодОсновногоЯзыка - ); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПодробноеПредставлениеОшибки,,,, Отказ); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,, - Источник.Ссылка, ПодробноеПредставлениеОшибкиДляЖурналаРегистрации); + СохранитьРазрешенныеКВыгрузкеОбъекты(Источник); КонецЕсли; КонецПроцедуры +Процедура СохранитьРазрешенныеКВыгрузкеОбъекты(УзелОбъект) + + ЗарегистрированныеДанные = Новый Массив; + СоставПланаОбмена = УзелОбъект.Метаданные().Состав; + + Запрос = Новый Запрос; + ТекстЗапроса = + "ВЫБРАТЬ + | * + |ИЗ + | [Таблица].Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &Узел"; + Запрос.УстановитьПараметр("Узел", УзелОбъект.Ссылка); + + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + Если ЭлементСостава.Авторегистрация = АвтоРегистрацияИзменений.Разрешить Тогда + Продолжить; + КонецЕсли; + + МетаданныеЭлемента = ЭлементСостава.Метаданные; + ПолноеИмяОбъектаМетаданных = МетаданныеЭлемента.ПолноеИмя(); + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ПолноеИмяОбъектаМетаданных); + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + ЗарегистрированныеДанныеОдногоТипа = Результат.Выгрузить(); + + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеЭлемента) Тогда + + Для Каждого Строка Из ЗарегистрированныеДанныеОдногоТипа Цикл + + Если ОбщегоНазначения.СсылкаСуществует(Строка.Ссылка) Тогда + + ОбъектСсылки = Строка.Ссылка.ПолучитьОбъект(); + + Если ВыгрузкаОбъектаРазрешена(УзелОбъект.Ссылка, ОбъектСсылки) Тогда + ЗарегистрированныеДанные.Добавить(ОбъектСсылки); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ОбщегоНазначения.ЭтоКонстанта(МетаданныеЭлемента) Тогда + + МенеджерЗначенияКонстанты = Константы[МетаданныеЭлемента.Имя].СоздатьМенеджерЗначения(); + Если ВыгрузкаОбъектаРазрешена(УзелОбъект.Ссылка, МенеджерЗначенияКонстанты) Тогда + ЗарегистрированныеДанные.Добавить(МенеджерЗначенияКонстанты); + КонецЕсли; + + Иначе //Регистр или последовательность + + Для Каждого Строка Из ЗарегистрированныеДанныеОдногоТипа Цикл + + НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных).СоздатьНаборЗаписей(); + + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + + Если ЗарегистрированныеДанныеОдногоТипа.Колонки.Найти(ЭлементОтбора.Имя) <> Неопределено Тогда + + НаборЗаписей.Отбор[ЭлементОтбора.Имя].Установить(Строка[ЭлементОтбора.Имя]); + + КонецЕсли; + + КонецЦикла; + + НаборЗаписей.Прочитать(); + + Если ВыгрузкаОбъектаРазрешена(УзелОбъект.Ссылка, НаборЗаписей) Тогда + ЗарегистрированныеДанные.Добавить(НаборЗаписей); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + УзелОбъект.ДополнительныеСвойства.Вставить("ЗарегистрированныеКВыгрузкеОбъекты", ЗарегистрированныеДанные); + +КонецПроцедуры + +Функция ВыгрузкаОбъектаРазрешена(УзелОбмена, Объект) + + Отправка = ОтправкаЭлементаДанных.Авто; + ПриОтправкеДанныхКорреспонденту(Объект, Отправка, , УзелОбмена); + Возврат Отправка <> ОтправкаЭлементаДанных.Удалить; + +КонецФункции + // Только для внутреннего использования // Процедура ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе(Источник, ЭлементДанных, Игнорировать) Экспорт @@ -451,6 +613,38 @@ КонецПроцедуры +// Получает текущее значение набора записей в информационной базе +// +// Параметры: +// Данные - Набор записей регистров +// +// Возвращаемое значение: +// НаборЗаписей, содержащий текущее значение в информационной базе +// +Функция ПолучитьНаборЗаписей(Знач Данные) Экспорт + + ОбъектМетаданных = Данные.Метаданные(); + + НаборЗаписей = НаборЗаписейПоТипу(ОбъектМетаданных); + + Для Каждого ЗначениеОтбора Из Данные.Отбор Цикл + + Если ЗначениеОтбора.Использование = Ложь Тогда + Продолжить; + КонецЕсли; + + СтрокаОтбора = НаборЗаписей.Отбор.Найти(ЗначениеОтбора.Имя); + СтрокаОтбора.Значение = ЗначениеОтбора.Значение; + СтрокаОтбора.Использование = Истина; + + КонецЦикла; + + НаборЗаписей.Прочитать(); + + Возврат НаборЗаписей; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов (МРО) @@ -474,8 +668,7 @@ Замещение = Ложь, ЭтоРегистр = Ложь, ЭтоУдалениеОбъекта = Ложь, - ЭтоКонстанта = Ложь - ) + ЭтоКонстанта = Ложь) Попытка @@ -588,8 +781,7 @@ МассивУзловРезультат = Новый Массив; ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, - ОбъектМетаданных, ПроверятьСсылку, ЭтоРегистр, ЭтоУдалениеОбъекта, Замещение, РежимЗаписи - ); + ОбъектМетаданных, ПроверятьСсылку, ЭтоРегистр, ЭтоУдалениеОбъекта, Замещение, РежимЗаписи); // обработчик "После определения получателей" ОбменДаннымиСервер.ПослеОпределенияПолучателей(Объект, МассивУзловРезультат, ИмяПланаОбмена); @@ -600,8 +792,7 @@ Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Отказ = Истина; КонецПопытки; @@ -617,8 +808,7 @@ Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка определения модифицированности объекта: %1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат ОбъектМодифицирован; @@ -822,8 +1012,7 @@ ЭтоУдалениеОбъекта = Ложь, Замещение = Ложь, РежимЗаписи = Неопределено, - Выгрузка = Ложь - ) + Выгрузка = Ложь) Попытка ВыполнитьПравилаРегистрацииОбъектовДляПланаОбменаПопыткаИсключение(МассивУзловРезультат, Объект, @@ -834,16 +1023,14 @@ ЭтоУдалениеОбъекта, Замещение, РежимЗаписи, - Выгрузка - ); + Выгрузка); Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка выполнения правил регистрации объектов для плана обмена %1. |Описание ошибки: |%2'"), ИмяПланаОбмена, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -857,8 +1044,7 @@ ЭтоУдалениеОбъекта, Замещение, РежимЗаписи, - Выгрузка - ) + Выгрузка) ПравилаРегистрацииОбъекта = Новый Массив; @@ -1041,65 +1227,20 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); КонецФункции -Функция НаборЗаписейПоТипу(ОбъектМетаданных) - - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); - - Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() Тогда - - Результат = РегистрыСведений[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда - - Результат = РегистрыНакопления[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда - - Результат = РегистрыБухгалтерии[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда - - Результат = РегистрыРасчета[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - Иначе - - СтрокаСообщения = НСтр("ru = 'Для объекта метаданных %1 не предусмотрено набора записей.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОбъектМетаданных.ПолноеИмя()); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - Возврат Результат; -КонецФункции - Процедура ВыполнитьПравилоРегистрацииОбъектаДляНабораЗаписей(МассивУзловРезультат, ПРО, Объект, ОбъектМетаданных, ИмяПланаОбмена, Замещение, - Выгрузка - ) + Выгрузка) // определяем массив узлов-получателей по текущему набору записей ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, Объект, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Ложь, Выгрузка); Если Замещение И Не Выгрузка Тогда - СтарыйНаборЗаписей = НаборЗаписейПоТипу(ОбъектМетаданных); - - Для Каждого ЗначениеОтбора Из Объект.Отбор Цикл - - Если ЗначениеОтбора.Использование = Ложь Тогда - Продолжить; - КонецЕсли; - - СтрокаОтбора = СтарыйНаборЗаписей.Отбор.Найти(ЗначениеОтбора.Имя); - СтрокаОтбора.Значение = ЗначениеОтбора.Значение; - СтрокаОтбора.Использование = Истина; - - КонецЦикла; - - СтарыйНаборЗаписей.Прочитать(); + СтарыйНаборЗаписей = ПолучитьНаборЗаписей(Объект); // определяем массив узлов-получателей по старому набору записей ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, СтарыйНаборЗаписей, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Истина, Ложь); @@ -1115,8 +1256,7 @@ ПроверятьСсылку, ЭтоУдалениеОбъекта, РежимЗаписи, - Выгрузка - ) + Выгрузка) // ПРОБ - Правила регистрации по свойствам Объекта // ПРОП - Правила регистрации по свойствам Плана обмена @@ -1144,8 +1284,7 @@ ПроверятьСсылку, ЭтоУдалениеОбъекта, РежимЗаписи, - Выгрузка - ) + Выгрузка) // {Обработчик: Перед обработкой} Начало Отказ = Ложь; @@ -1181,8 +1320,7 @@ ОбъектМетаданных, ИмяПланаОбмена, Замещение, - Выгрузка - ) + Выгрузка) // {Обработчик: Перед обработкой} Начало Отказ = Ложь; @@ -1218,8 +1356,7 @@ ПРО, ЭтоУдалениеОбъекта, ПроверятьСсылку, - Выгрузка - ) + Выгрузка) // получаем структуру значений свойств для объекта ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(Источник, ПРО); @@ -1261,8 +1398,7 @@ ОбъектМетаданных, ИмяПланаОбмена, ЭтоВерсияОбъектаДоИзменения, - Выгрузка - ) + Выгрузка) // получаем значение регистратора из отбора для набора записей Регистратор = Неопределено; @@ -1591,8 +1727,7 @@ Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( "ПланОбмена." + ИмяПланаОбмена, - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных() - ); + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); КонецФункции @@ -1600,8 +1735,48 @@ Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( ОбъектМетаданных.ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных() - ); + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + +КонецФункции + +// Создает набор записей для регистра +// +// Параметры: +// ОбъектМетаданных регистра - для получения набора записей +// +// Возвращаемое значение: +// НаборЗаписей. В случае если для объекта метаданных не предусмотрено набора записей +// вызывается исключение. +// +Функция НаборЗаписейПоТипу(ОбъектМетаданных) + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + + Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() Тогда + + Результат = РегистрыСведений[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда + + Результат = РегистрыНакопления[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда + + Результат = РегистрыБухгалтерии[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда + + Результат = РегистрыРасчета[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + Иначе + + СтрокаСообщения = НСтр("ru = 'Для объекта метаданных %1 не предусмотрено набора записей.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОбъектМетаданных.ПолноеИмя()); + ВызватьИсключение СтрокаСообщения; + + КонецЕсли; + + Возврат Результат; КонецФункции @@ -1695,8 +1870,7 @@ |// {Начало алгоритма} |[ЗначениеКонстанты] |// {Окончание алгоритма} - |'" - ); + |'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ИнформацияОбОшибке().Описание); @@ -1893,8 +2067,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; |План обмена: [ИмяПланаОбмена]; |Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'" - ); + |Описание ошибки: [Описание]'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'Перед обработкой'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); @@ -1914,8 +2087,7 @@ Выполнить(ПРО.ПриОбработке); Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'" - ); + |Описание ошибки: [Описание]'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); @@ -1935,8 +2107,7 @@ Выполнить(ПРО.ПриОбработкеДополнительный); Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'" - ); + |Описание ошибки: [Описание]'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке (дополнительный)'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); @@ -1956,8 +2127,7 @@ Выполнить(ПРО.ПослеОбработки); Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] - |Описание ошибки: [Описание]'" - ); + |Описание ошибки: [Описание]'"); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'После обработки'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); @@ -1977,8 +2147,7 @@ ОтправкаЭлемента, УзелИнформационнойБазы, Знач ИмяПланаОбмена, - Знач СозданиеНачальногоОбраза - ) + Знач СозданиеНачальногоОбраза) Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда Возврат; // удаление объекта отсылаем "как есть" @@ -1990,6 +2159,9 @@ Возврат; // фильтрацию не выполняем КонецЕсли; + // Актуализируем кэш + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() @@ -2059,8 +2231,7 @@ , , , - Истина - ); + Истина); // если в массиве нет текущего узла, то удаляем строку из набора Если МассивУзловДляРегистрацииОбъекта.Найти(УзелИнформационнойБазы) = Неопределено Тогда @@ -2644,4 +2815,293 @@ РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Источник, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с коллизиями изменений данных при обмене + +// Проверяет наличие коллизий при загрузке +// и выдает информацию есть ли коллизия при обмене +Процедура ПроверитьКоллизиюИзмененийДанных(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель, Знач ЭтоПолучениеОтГлавного) + + Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда + + Возврат; + + ИначеЕсли ЭлементДанных.ДополнительныеСвойства.Свойство("ОбменДанными") И ЭлементДанных.ДополнительныеСвойства.ОбменДанными.АнализДанных Тогда + + Возврат; + + КонецЕсли; + + Отправитель = Отправитель.Ссылка; + МетаданныеОбъекта = ЭлементДанных.Метаданные(); + ЭтоСсылочныйТип = ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта); + + ЕстьКоллизия = ПланыОбмена.ИзменениеЗарегистрировано(Отправитель, ЭлементДанных); + + // Выполняем дополнительную проверку на изменение объекта + // если объект до коллизии и после коллизии не изменен, + // то считаем, что коллизии нет + Если ЕстьКоллизия Тогда + + Если ЭтоСсылочныйТип Тогда + + ОбъектВБазе = ЭлементДанных.Ссылка.ПолучитьОбъект(); + СсылкаСуществует = (ОбъектВБазе <> Неопределено); + + Иначе + СсылкаСуществует = Ложь; + ОбъектВБазе = Неопределено; + КонецЕсли; + + СтрокаОбъектаДоИзменения = ПолучитьДанныеОбъектаСтрокойДоИзменения(ЭлементДанных, МетаданныеОбъекта, ЭтоСсылочныйТип, СсылкаСуществует, ОбъектВБазе); + СтрокаОбъектаПослеИзменения = ПолучитьДанныеОбъектаСтрокойПослеИзменения(ЭлементДанных, МетаданныеОбъекта); + + // Если значения совпадают, то коллизии нет + Если СтрокаОбъектаДоИзменения = СтрокаОбъектаПослеИзменения Тогда + + ЕстьКоллизия = Ложь; + + КонецЕсли; + + КонецЕсли; + + Если ЕстьКоллизия Тогда + + ОбменДаннымиПереопределяемый.ПриКоллизииИзмененийДанных(ЭлементДанных, ПолучениеЭлемента, Отправитель, ЭтоПолучениеОтГлавного); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто Тогда + ПолучениеЭлемента = ?(ЭтоПолучениеОтГлавного, ПолучениеЭлементаДанных.Принять, ПолучениеЭлементаДанных.Игнорировать); + КонецЕсли; + + ЗаписатьОбъект = (ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять); + + ЗарегистрироватьПредупреждениеОКоллизииВЖурналеРегистрации(ЭлементДанных, МетаданныеОбъекта, ЗаписатьОбъект, ЭтоСсылочныйТип); + + Если Не ЭтоСсылочныйТип Тогда + Возврат; + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(Отправитель) Тогда + + Если СсылкаСуществует Тогда + + Если ЗаписатьОбъект Тогда + Комментарий = НСтр("ru = 'Предыдущая версия (автоматическое разрешение конфликта).'"); + Иначе + Комментарий = НСтр("ru = 'Текущая версия (автоматическое разрешение конфликта).'"); + КонецЕсли; + + ПриСозданииВерсииОбъекта(ОбъектВБазе,,, Комментарий, СсылкаСуществует); + + КонецЕсли; + + Если ЗаписатьОбъект Тогда + + СведенияОВерсииОбъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру( + ЭлементДанных.ДополнительныеСвойства.СведенияОВерсииОбъекта); + + СведенияОВерсииОбъекта.ТипВерсииОбъекта = "ПринятыеДанныеПоКоллизии"; + СведенияОВерсииОбъекта.АвторВерсии = Отправитель; + СведенияОВерсииОбъекта.Комментарий = НСтр("ru = 'Принятая версия (автоматическое разрешение конфликта).'"); + + ЭлементДанных.ДополнительныеСвойства.СведенияОВерсииОбъекта = Новый ФиксированнаяСтруктура(СведенияОВерсииОбъекта); + + Иначе + + Комментарий = НСтр("ru = 'Отклоненная версия (автоматическое разрешение конфликта).'"); + ПриСозданииВерсииОбъекта(ЭлементДанных, Отправитель, "НепринятыеДанныеПоКоллизии", Комментарий, СсылкаСуществует); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку на наличие запрета загрузки по дате +// +// Параметры: +// ЭлементДанных – СправочникОбъект, ДокументОбъект, РегистСведенийНаборЗаписей и др. данные. +// Данные, которые были зачитаны из сообщения обмена, но еще не были записаны в ИБ. +// ПолучениеЭлемента - ПолучениеЭлементаДанных. +// Отправитель - ПланыОбменаСсылка. +// +Процедура ПроверитьНаличиеЗапретаЗагрузкиПоДате(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) + + Если Отправитель.Метаданные().РаспределеннаяИнформационнаяБаза Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоКонстанта(ЭлементДанных.Метаданные()) Тогда + Возврат; + КонецЕсли; + + СообщениеОбОшибке = ""; + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзменения"); + + Если МодульДатыЗапретаИзменения.ЗагрузкаЗапрещена(ЭлементДанных, Отправитель, СообщениеОбОшибке) = Истина Тогда + + ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, СообщениеОбОшибке); + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + КонецЕсли; + + КонецЕсли; + + ЭлементДанных.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + +КонецПроцедуры + +// Регистрирует запрет на загрузку данных по причине установленной даты запрета загрузки данных +// в журнале регистрации. Для ссылочных типов при наличии подсистемы ВерсионированиеОбъектов +// регистрирует его так же в мониторе проблем обмена. +// +// Параметры: +// Объект - Объект ссылочного типа для которого выполняется регистрация запрета +// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект +// СообщениеОбОшибке - Строка - Подробное описание причины отказа от загрузки +// +// Примечание: Для проверки наличия запрета загрузки по дате см. процедуру +// общего модуля ДатыЗапретаИзменения.ЗагрузкаЗапрещена +// +Процедура ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, СообщениеОбОшибке) + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Предупреждение, , ЭлементДанных, СообщениеОбОшибке); + + Если ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(Отправитель) И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементДанных.Метаданные()) Тогда + + СсылкаНаОбъект = ЭлементДанных.Ссылка; + + Если ОбщегоНазначения.СсылкаСуществует(СсылкаНаОбъект) Тогда + + ОбъектВБазе = СсылкаНаОбъект.ПолучитьОбъект(); + ПриСозданииВерсииОбъекта(ОбъектВБазе,,, НСтр("ru = 'Версия создана при синхронизации данных.'")); + СтрокаСообщенияОбОшибке = СообщениеОбОшибке; + ТипВерсииОбъекта = "НепринятыеДанныеПоДатеЗапретаОбъектСуществует"; + + Иначе + + СтрокаСообщенияОбОшибке = Нстр("ru = '%1 запрещено загружать в запрещенный период.%2%2%3'"); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, + Строка(ЭлементДанных), Символы.ПС, СообщениеОбОшибке); + ТипВерсииОбъекта = "НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует"; + + КонецЕсли; + + ПриСозданииВерсииОбъекта(ЭлементДанных, Отправитель, ТипВерсииОбъекта, СтрокаСообщенияОбОшибке); + + КонецЕсли; + +КонецПроцедуры + +// Создает и записывает версию объекта в информационную базу. +// +// Параметры +// Объект - записываемый объект ИБ; +// АвторВерсии - Пользователь или Узел плана обмена - Источник версии; +// ТипВерсииОбъекта - Перечисление - Тип создаваемой версии; +// Комментарий - Строка - Комментарий к создаваемой версии; +// УникальныйИдентификаторСтрокой - Строка - Создает пустую ссылку из УИДа, если у переданного объекта ссылка отсутствует. +// +Процедура ПриСозданииВерсииОбъекта(Объект, АвторВерсии = Неопределено, ТипВерсииОбъекта = "ИзмененоПользователем", + Комментарий = "", СсылкаСуществует = Неопределено) + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + + СведенияОВерсииОбъекта = Новый Структура; + + СведенияОВерсииОбъекта.Вставить("АвторВерсии", АвторВерсии); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", ТипВерсииОбъекта); + СведенияОВерсииОбъекта.Вставить("Комментарий", Комментарий); + + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОВерсииОбъекта, СсылкаСуществует); + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования +// +Процедура ЗарегистрироватьПредупреждениеОКоллизииВЖурналеРегистрации(Объект, МетаданныеОбъекта, ЗаписатьОбъект, ЭтоСсылочныйТип) + + Если ЗаписатьОбъект Тогда + + ТекстПредупрежденияЖР = НСтр("ru = 'Возник конфликт изменений объектов. + |Объект этой информационной базы был заменен версией объекта из второй информационной базы.'"); + + Иначе + + ТекстПредупрежденияЖР = НСтр("ru = 'Возник конфликт изменений объектов. + |Объект из второй информационной базы не принят. Объект этой информационной базы не изменен.'"); + + КонецЕсли; + + Данные = ?(ЭтоСсылочныйТип, Объект.Ссылка, Неопределено); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Предупреждение, МетаданныеОбъекта, Данные, ТекстПредупрежденияЖР); + +КонецПроцедуры + +// Только для внутреннего использования +// +Функция ПолучитьДанныеОбъектаСтрокойДоИзменения(Объект, МетаданныеОбъекта, ЭтоСсылочныйТип, СсылкаСуществует, ОбъектВБазе) + + // возвращаемое значение функции + СтрокаОбъекта = ""; + + Если ЭтоСсылочныйТип Тогда + + Если СсылкаСуществует Тогда + + // получаем представление объекта из ИБ по ссылке + СтрокаОбъекта = ОбщегоНазначения.ЗначениеВСтрокуXML(ОбъектВБазе); + + Иначе + + СтрокаОбъекта = "Объект удален"; + + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоКонстанта(МетаданныеОбъекта) Тогда + + // получаем значение константы из ИБ + СтрокаОбъекта = XMLСтрока(Константы[МетаданныеОбъекта.Имя].Получить()); + + Иначе // Набор записей + + СтарыйНаборЗаписей = ПолучитьНаборЗаписей(Объект); + СтрокаОбъекта = ОбщегоНазначения.ЗначениеВСтрокуXML(СтарыйНаборЗаписей); + + КонецЕсли; + + Возврат СтрокаОбъекта; + +КонецФункции + +// Только для внутреннего использования +// +Функция ПолучитьДанныеОбъектаСтрокойПослеИзменения(Объект, МетаданныеОбъекта) + + // возвращаемое значение функции + СтрокаОбъекта = ""; + + Если ОбщегоНазначения.ЭтоКонстанта(МетаданныеОбъекта) Тогда + + СтрокаОбъекта = XMLСтрока(Объект.Значение); + + Иначе + + СтрокаОбъекта = ОбщегоНазначения.ЗначениеВСтрокуXML(Объект); + + КонецЕсли; + + Возврат СтрокаОбъекта; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index 0d973eb7e..f9a0ad25f 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -113,7 +113,6 @@ КонецЕсли; - ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | ТаблицаИзменений.Узел КАК КонечнаяТочка, @@ -131,8 +130,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПОМЕСТИТЬ]", "ПОМЕСТИТЬ ВТ_Изменения"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПОМЕСТИТЬ]", ""); - КонецЕсли; - + КонецЕсли; КонецЦикла; ТекстЗапроса = ТекстЗапроса + " @@ -184,8 +182,7 @@ НедоступныеКонечныеТочки.Добавить(Группа.КонечнаяТочка); ЗаписьЖурналаРегистрации(ОбменСообщениямиВнутренний.СобытиеЖурналаРегистрацииЭтойПодсистемы(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЦикла; @@ -251,8 +248,7 @@ НастройкиПодключенияПолучателя, КонечнаяТочка, НаименованиеКонечнойТочкиПолучателя, - НаименованиеКонечнойТочкиОтправителя - ); + НаименованиеКонечнойТочкиОтправителя); КонецПроцедуры @@ -529,16 +525,15 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Попытка отправки сообщения заблокированной конечной точке ""%1"".'"), - Строка(Получатель) - ); + Строка(Получатель)); КонецЕсли; СправочникДляСообщения = Справочники.СообщенияСистемы; СтандартнаяОбработка = Истина; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); - ПереопределенныйСправочник = Модуль.ПриВыбореСправочникаДляСообщения(ТелоСообщения); + МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); + ПереопределенныйСправочник = МодульСообщенияВМоделиСервисаРазделениеДанных.ПриВыбореСправочникаДляСообщения(ТелоСообщения); Если ПереопределенныйСправочник <> Неопределено Тогда СправочникДляСообщения = ПереопределенныйСправочник; КонецЕсли; @@ -568,8 +563,8 @@ СтандартнаяОбработкаЗаписи = Истина; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); - Модуль.ПередЗаписьюСообщения(НовоеСообщение, СтандартнаяОбработкаЗаписи); + МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); + МодульСообщенияВМоделиСервисаРазделениеДанных.ПередЗаписьюСообщения(НовоеСообщение, СтандартнаяОбработкаЗаписи); КонецЕсли; Если СтандартнаяОбработкаЗаписи Тогда @@ -712,8 +707,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ); + КоличествоОтправленныхОбъектов); КонецПроцедуры @@ -773,8 +767,7 @@ ДанныеСообщения, КоличествоЭлементовВТранзакции, ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ); + КоличествоПолученныхОбъектов); КонецПроцедуры @@ -837,8 +830,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервиса"); - Модуль.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); + МодульСообщенияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервиса"); + МодульСообщенияВМоделиСервиса.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); КонецЕсли; @@ -856,8 +849,8 @@ Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервиса"); - Модуль.ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); + МодульСообщенияВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервиса"); + МодульСообщенияВМоделиСервиса.ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 7e7dec68e..8819a980a 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -57,7 +57,7 @@ ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; // Получаем выборку изменённых данных - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); Если ИспользоватьТранзакции Тогда НачатьТранзакцию(); @@ -200,8 +200,16 @@ ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML, ДопустимыйНомерСообщения.Больший); - // Удаляем регистрацию изменений для узла отправителя сообщения - ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + ПараметрыРезервнойКопии = ОбменДаннымиСервер.ПараметрыРезервнойКопии(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + УдалитьРегистрациюИзменений = Не ПараметрыРезервнойКопии.ВосстановленаРезервнаяКопия; + + Если УдалитьРегистрациюИзменений Тогда + + // Удаляем регистрацию изменений для узла отправителя сообщения + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + КонецЕсли; // считаем сколько объектов прочитали КоличествоЗаписанныхОбъектов = 0; @@ -319,8 +327,7 @@ Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось выполнить обмен сообщениями по причине: область данных %1 заблокирована!'"), - ОбластьДанных - ); + ОбластьДанных); КонецЕсли; КонецЕсли; @@ -370,6 +377,8 @@ ЧтениеСообщения.ЗакончитьЧтение(); КонецЕсли; + ОбменДаннымиСервер.ПриВосстановленииРезервнойКопии(ПараметрыРезервнойКопии); + ЧтениеXML.Закрыть(); Если ИспользоватьТранзакции Тогда @@ -381,6 +390,7 @@ ОтменитьТранзакцию(); КонецЕсли; ЧтениеСообщения.ПрерватьЧтение(); + ЧтениеXML.Закрыть(); ВызватьИсключение; КонецПопытки; @@ -459,6 +469,24 @@ УстановитьПривилегированныйРежим(Истина); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Информация,,, + НСтр("ru = 'Обработка очереди сообщений системы запущена из сеанса с установленными + |значениями разделителей. Обработка будет производиться только для сообщений, + |сохраненных в разделенном справочнике, в элементах со значениями разделителей, + |совпадающих со значениями разделителей сеанса.'") + ); + + ОбрабатыватьСообщенияВНеразделенныхДанных = Ложь; + + Иначе + + ОбрабатыватьСообщенияВНеразделенныхДанных = Истина; + + КонецЕсли; + МодульРаботаВМоделиСервиса = Неопределено; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); @@ -470,6 +498,14 @@ СправочникиСообщений = ОбменСообщениямиПовтИсп.ПолучитьСправочникиСообщений(); Для Каждого СправочникСообщений Из СправочникиСообщений Цикл + ПолноеИмяСправочника = СправочникСообщений.ПустаяСсылка().Метаданные().ПолноеИмя(); + ЭтоНеразделенныйСправочник = Не ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ + Не ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяСправочника, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); + + Если ЭтоНеразделенныйСправочник И Не ОбрабатыватьСообщенияВНеразделенныхДанных Тогда + Продолжить; + КонецЕсли; + Если Не ПустаяСтрока(ТекстЗапроса) Тогда ТекстЗапроса = ТекстЗапроса + " @@ -479,9 +515,7 @@ КонецЕсли; - ПолноеИмяСправочника = СправочникСообщений.ПустаяСсылка().Метаданные().ПолноеИмя(); - - Подзапрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Подзапрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "ВЫБРАТЬ | ТаблицаСообщений.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных, | ТаблицаСообщений.Ссылка КАК Ссылка, @@ -493,10 +527,9 @@ | ТаблицаСообщений.Получатель = &Получатель | И (НЕ ТаблицаСообщений.Заблокировано) | [Отбор]" - , ПолноеИмяСправочника - ); + , ПолноеИмяСправочника); - Если Не ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() ИЛИ Не ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ПолноеИмяСправочника, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если ЭтоНеразделенныйСправочник Тогда Подзапрос = СтрЗаменить(Подзапрос, "ТаблицаСообщений.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных", "-1 КАК ОбластьДанных"); КонецЕсли; @@ -540,6 +573,7 @@ Если МодульРаботаВМоделиСервиса <> Неопределено И Выборка.ОбластьДанных <> -1 И МодульРаботаВМоделиСервиса.ОбластьДанныхЗаблокирована(Выборка.ОбластьДанных) Тогда + // Область заблокирована, перейти к следующей записи Продолжить; КонецЕсли; @@ -578,6 +612,14 @@ СтрокаТаблицы.Обработчик.ОбработатьСообщение(ЗаголовокСообщения.КаналСообщений, ОбъектСообщения.ТелоСообщения.Получить(), ЗаголовокСообщения.Отправитель); + Если ТранзакцияАктивна() Тогда + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + ОбъектСообщения.Заблокировано = Истина; + ВызватьИсключение НСтр("ru = 'В обработчике сообщения не была зафиксирована транзакция.'"); + КонецЕсли; + КонецЦикла; Исключение @@ -592,8 +634,7 @@ УровеньЖурналаРегистрации.Ошибка,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обработки сообщения %1: %2'"), - ЗаголовокСообщения.КаналСообщений, ПодробноеПредставлениеОшибки) - ); + ЗаголовокСообщения.КаналСообщений, ПодробноеПредставлениеОшибки)); КонецПопытки; Если СообщениеОбработано Тогда @@ -624,20 +665,18 @@ КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбрабатыватьСообщенияВНеразделенныхДанных И ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'После обработки сообщения канала %1 не было выключено разделение сеанса!'"), - ЗаголовокСообщения.КаналСообщений - ); + ЗаголовокСообщения.КаналСообщений); ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрацииЭтойПодсистемы(), УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке - ); + ТекстСообщенияОбОшибке); ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); @@ -646,8 +685,7 @@ Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; РазблокироватьДанныеДляРедактирования(Выборка.Ссылка); @@ -699,8 +737,7 @@ ОтменитьТранзакцию(); Отказ = Истина; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -738,8 +775,7 @@ Исключение ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; @@ -793,8 +829,7 @@ ОтменитьТранзакцию(); Отказ = Истина; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; @@ -861,8 +896,7 @@ ОтменитьТранзакцию(); Отказ = Истина; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -1016,8 +1050,7 @@ Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось выполнить обмен сообщениями по причине: область данных %1 заблокирована!'"), - ОбластьДанных - ); + ОбластьДанных); КонецЕсли; КонецЕсли; @@ -1076,6 +1109,22 @@ Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); КонецФункции +// Проверяет поддержку информационной базой корреспондента частичного получения сообщений +// обмена данными при обмене сообщениями (если не поддерживает - частичное получение сообщений +// обмена на стороне этой информационной базы не должно использоваться). +// +// Параметры: +// Отправитель - ПланОбменаСсылка.ОбменСообщениями, +// +// Возвращаемое значение: Булево. +// +Функция КорреспондентПоддерживаетЧастичноеПолучениеСообщенийОбмена(Знач Корреспондент) + + ВерсииКорреспондента = ВерсииКорреспондента(Корреспондент); + Возврат (ВерсииКорреспондента.Найти("2.1.1.8") <> Неопределено); + +КонецФункции + // Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменСообщениями. // // Параметры: @@ -1100,22 +1149,6 @@ Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменСообщениями"); КонецФункции -// Проверяет поддержку информационной базой корреспондента частичного получения сообщений -// обмена данными при обмене сообщениями (если не поддерживает - частичное получение сообщений -// обмена на стороне этой информационной базы не должно использоваться). -// -// Параметры: -// Отправитель - ПланОбменаСсылка.ОбменСообщениями, -// -// Возвращаемое значение: Булево. -// -Функция КорреспондентПоддерживаетЧастичноеПолучениеСообщенийОбмена(Знач Корреспондент) - - ВерсииКорреспондента = ВерсииКорреспондента(Корреспондент); - Возврат (ВерсииКорреспондента.Найти("2.1.1.8") <> Неопределено); - -КонецФункции - // Только для внутреннего использования Функция СобытиеЖурналаРегистрацииПодключениеКонечнойТочки() Экспорт @@ -1367,8 +1400,7 @@ Отказ = Истина; КонечнаяТочка = Неопределено; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl index e04b4fa19..2a48bb7c9 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -11,8 +11,7 @@ Процедура ОтправитьИПолучитьСообщения() Экспорт Состояние(НСтр("ru = 'Выполняется отправка и получение сообщений.'"),, - НСтр("ru = 'Пожалуйста, подождите...'"), БиблиотекаКартинок.Информация32 - ); + НСтр("ru = 'Пожалуйста, подождите...'"), БиблиотекаКартинок.Информация32); Отказ = Ложь; @@ -21,8 +20,7 @@ Если Отказ Тогда Состояние(НСтр("ru = 'Возникли ошибки при отправке и получении сообщений!'"),, - НСтр("ru = 'Используйте журнал регистрации для диагностики ошибок.'"), БиблиотекаКартинок.Ошибка32 - ); + НСтр("ru = 'Используйте журнал регистрации для диагностики ошибок.'"), БиблиотекаКартинок.Ошибка32); Иначе diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index dba3d3d51..5b7f39387 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -34,8 +34,8 @@ МассивСправочников = Новый Массив(); Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); - Модуль.ПриЗаполненииСправочниковСообщений(МассивСправочников); + МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); + МодульСообщенияВМоделиСервисаРазделениеДанных.ПриЗаполненииСправочниковСообщений(МассивСправочников); КонецЕсли; МассивСправочников.Добавить(Справочники.СообщенияСистемы); diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 32cb3347e..165a92bd3 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -26,115 +26,101 @@ Возврат Истина; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Константы.ЗапуститьОбновлениеИнформационнойБазы.Получить() Тогда - - Возврат Истина; - КонецЕсли; - Возврат Ложь; КонецФункции -// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. -// В главном узле всегда - Ложь. -// -Функция ТребуетсяОбновлениеКонфигурацииУзлаРИБ() Экспорт - - Возврат КонфигурацияИзменена() И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - -КонецФункции - // Возвращает Истина, если выполняется обновление ИБ Функция ВыполняетсяОбновлениеИнформационнойБазы() Экспорт - Возврат НеобходимоОбновлениеИнформационнойБазы() И ЕстьПраваНаОбновлениеИнформационнойБазы(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат НеобходимоОбновлениеИнформационнойБазы(); + КонецЕсли; + + Возврат ПараметрыСеанса.ВыполняетсяОбновлениеИБ; КонецФункции -// Обновление ИБ будет выполнено вне зависимости от изменения версии конфигурации. -// -// Если версия конфигурации не изменилась, будут выполнены только обязательные -// обработчики обновления (у которых версия = "*"). -// -// Необходимость снимается автоматически после обновления ИБ. -// -// Не используется в модели сервиса. -// -Процедура УстановитьНеобходимостьОбновленияИнформационнойБазы() Экспорт - - Константы.ЗапуститьОбновлениеИнформационнойБазы.Установить(Истина); - -КонецПроцедуры - // Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. // // Возвращаемое значение: // ТаблицаЗначений – таблица с колонками: -// Версия - номер версии конфигурации, при переходе на которую должна -// быть выполнена процедура-обработчик обновления -// Процедура - полное имя процедуры-обработчика обновления. -// Должна быть обязательно экспортной. -// Опциональный - если Истина, то обработчик не должен срабатывать -// при первом запуске на "пустой" базе. -// Приоритет - Число. Для внутреннего использования. -// ОбщиеДанные - если Истина, то обработчик должен срабатывать до -// выполнения любых обработчиков, использующих разделенные -// данные. -// УправлениеОбработчиками - Булево. Если Истина обработчик должен иметь -// параметр типа структура в котором есть свойство -// РазделенныеОбработчики - таблица значений со структурой возвращаемой -// этой функцией. Используются только колонки Процедура, -// Приоритет и МонопольныйРежим. -// В случае необходимости выполнения разделенного обработчика, -// в данную таблицу необходимо добавить строку с описанием -// процедуры обработчика. -// Имеет смысл только для обязательных (Версия = *) -// обработчиков обновления с установленным флагом ОбщиеДанные -// ВыполнятьВГруппеОбязательных - Булево. Следует указывать если обработчик требуется -// выполнять в одной группе с обработчиками на версии "*". -// При этом, возможно менять порядок выполнения обработчика -// относительно других путем изменения приоритета. -// МонопольныйРежим - Неопределено, Булево. -// Неопределено - обработчик должен безусловно выполняться в -// монопольном режиме. -// Для обязательных обработчиков обновления (Версия = "*") -// Ложь - обработчик не требует монопольного режима -// Истина - обработчик может требовать монопольного режима -// для выполнения. -// В такие обработчики передается параметр типа структура -// со свойством МонопольныйРежим (типа булево). -// При запуске обработчика в монопольном режиме передается -// значение Истина. В этом случае обработчик должен выполнить -// требуемые действия по обновлению. Изменение параметра -// в теле обработчика игнорируется. -// При запуске обработчика в немонопольном режиме передается -// значение Ложь. В этом случае обработчик не должен вносить -// никакие изменения в ИБ. -// Если в результате анализа выясняется что обработчику требуется -// изменить данные ИБ следует установить значение параметра в -// Истина и прекратить выполнение обработчика. -// В этом случае оперативное (немонопольное обновление ИБ) будет -// отменено и выдана ошибка с требованием выполнить обновление -// в монопольном режиме. -// Для обработчиков перехода на конкретную версию (версия <> *) -// Ложь - обработчик не требует монопольного режима для выполнения -// Истина - обработчик требует монопольного режима для выполнения +// НачальноеЗаполнение - если Истина, то обработчик должен срабатывать при запуске +// на "пустой" базе. +// Версия - Строка, например, "2.1.3.39" - номер версии конфигурации, при переходе +// на которую должна быть выполнена процедура-обработчик обновления. +// - Пустая строка - значит обработчик только для начального заполнения +// (должно быть указано свойство НачальноеЗаполнение). +// Процедура - полное имя процедуры-обработчика обновления/начального заполнения. +// Обязательно должна быть экспортной. +// +// ВыполнятьВГруппеОбязательных - Булево. Следует указывать если обработчик требуется +// выполнять в одной группе с обработчиками на версии "*". +// При этом, возможно менять порядок выполнения обработчика +// относительно других путем изменения приоритета. +// Приоритет - Число. Для внутреннего использования. +// +// ОбщиеДанные - если Истина, то обработчик должен срабатывать до +// выполнения любых обработчиков, использующих разделенные +// данные. +// УправлениеОбработчиками - Булево. Если Истина обработчик должен иметь +// параметр типа структура в котором есть свойство +// РазделенныеОбработчики - таблица значений со структурой возвращаемой +// этой функцией. Колонка Версия игнорируется. +// В случае необходимости выполнения разделенного обработчика, +// в данную таблицу необходимо добавить строку с описанием +// процедуры обработчика. +// Имеет смысл только для обязательных (Версия = *) +// обработчиков обновления с установленным флагом ОбщиеДанные +// Комментарий - Строка, описание действий, выполняемых обработчиком обновления. +// РежимВыполнения - Строка, режим выполнения обработчика обновления. Допустимые значения: +// Монопольно, Отложенно, Оперативно. Если значение не было заполнено, +// обработчик считается монопольным. +// МонопольныйРежим - Неопределено, Булево. +// Неопределено - обработчик должен безусловно выполняться в монопольном режиме. +// Для обработчиков перехода на конкретную версию (версия <> *): +// Ложь - обработчик не требует монопольного режима для выполнения. +// Истина - обработчик требует монопольного режима для выполнения. +// Для обязательных обработчиков обновления (Версия = "*"): +// Ложь - обработчик не требует монопольного режима. +// Истина - обработчик может требовать монопольного режима для выполнения. +// В такие обработчики передается параметр типа структура +// со свойством МонопольныйРежим (типа булево). +// При запуске обработчика в монопольном режиме передается +// значение Истина. В этом случае обработчик должен выполнить +// требуемые действия по обновлению. Изменение параметра +// в теле обработчика игнорируется. +// При запуске обработчика в немонопольном режиме передается +// значение Ложь. В этом случае обработчик не должен вносить +// никакие изменения в ИБ. +// Если в результате анализа выясняется что обработчику требуется +// изменить данные ИБ следует установить значение параметра в +// Истина и прекратить выполнение обработчика. +// В этом случае оперативное (немонопольное обновление ИБ) будет +// отменено и выдана ошибка с требованием выполнить обновление +// в монопольном режиме. // Функция НоваяТаблицаОбработчиковОбновления() Экспорт Обработчики = Новый ТаблицаЗначений; - Обработчики.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + // Основные свойства. + Обработчики.Колонки.Добавить("НачальноеЗаполнение", Новый ОписаниеТипов("Булево")); + Обработчики.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); Обработчики.Колонки.Добавить("Процедура", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); - Обработчики.Колонки.Добавить("Опциональный"); - Обработчики.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2))); - Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); - Обработчики.Колонки.Добавить("УправлениеОбработчиками", Новый ОписаниеТипов("Булево")); + Обработчики.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Обработчики.Колонки.Добавить("РежимВыполнения", Новый ОписаниеТипов("Строка")); + // Дополнительные свойства (для библиотек). Обработчики.Колонки.Добавить("ВыполнятьВГруппеОбязательных", Новый ОписаниеТипов("Булево")); + Обработчики.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2))); + // Поддержка модели сервиса. + Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); + Обработчики.Колонки.Добавить("УправлениеОбработчиками", Новый ОписаниеТипов("Булево")); Обработчики.Колонки.Добавить("МонопольныйРежим"); + // Устарело. Обратная совместимость до редакции "2.2". + Обработчики.Колонки.Добавить("Опциональный"); + Возврат Обработчики; КонецФункции @@ -152,7 +138,7 @@ // ДеревоЗначений – выполненные обработчики обновления. // Функция ВыполнитьИтерациюОбновления(Знач ИдентификаторБиблиотеки, Знач ВерсияМетаданныхИБ, - Знач ОбработчикиОбновления, Знач ОперативноеОбновление = Ложь) Экспорт + Знач ОбработчикиОбновления, Знач ХодВыполненияОбработчиков, Знач ОперативноеОбновление = Ложь) Экспорт ТекущаяВерсияИБ = ВерсияИБ(ИдентификаторБиблиотеки); Если ПустаяСтрока(ТекущаяВерсияИБ) Тогда @@ -182,7 +168,7 @@ ВыполняемыеОбработчики = ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ТекущаяВерсияИБ, ВерсияМетаданных); КонецЕсли; - ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных); + ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков); ОбязательныеРазделенныеОбработчики = НоваяТаблицаОбработчиковОбновления(); @@ -234,7 +220,10 @@ КонецЕсли; КонецЕсли; - ВыполнитьОбработчикОбновления(ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, Обработчик, ПараметрыОбработчика) + ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков", + ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков); + + ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); КонецЦикла; Если Версия.Версия = "*" Тогда @@ -268,10 +257,9 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - Модуль.СформироватьПланОбновленияОбластиДанных(ИдентификаторБиблиотеки, ОбработчикиОбновления, - ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ - ); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.СформироватьПланОбновленияОбластиДанных(ИдентификаторБиблиотеки, ОбработчикиОбновления, + ОбязательныеРазделенныеОбработчики, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ); КонецЕсли; @@ -281,6 +269,44 @@ КонецФункции +// Записывает изменения в переданном объекте. +// +// Параметры: +// Данные - объект, который необходимо записать. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Записать(); + +КонецПроцедуры + +// Удаляет переданный объект. +// +// Параметры: +// Данные - объект, который необходимо удалить. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура УдалитьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Удалить(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -381,11 +407,36 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( "ОбновлениеИнформационнойБазы"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( + "ОбновлениеИнформационнойБазы"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( + "ОбновлениеИнформационнойБазы"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"].Добавить( + "ОбновлениеИнформационнойБазы"); + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( + "ОбновлениеИнформационнойБазы"); + КонецЕсли; + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( "ОбновлениеИнформационнойБазы"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ОбновлениеИнформационнойБазы"); +КонецПроцедуры + +// Инициализирует параметр сеанса ВыполняетсяОбновлениеИБ. +// +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра <> "ВыполняетсяОбновлениеИБ" Тогда + Возврат; + КонецЕсли; + + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = НеобходимоОбновлениеИнформационнойБазы(); + УстановленныеПараметры.Добавить("ВыполняетсяОбновлениеИБ"); КонецПроцедуры @@ -460,8 +511,8 @@ КонецЕсли; СообщениеАдминистраторуСистемы = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. - |Для завершения обновления конфигурации требуются административные права + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Для завершения обновления версии программы требуются административные права |(роли ""Администратор системы"" и ""Полные права"").'"); УстановитьПривилегированныйРежим(Истина); @@ -472,7 +523,7 @@ Если НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Тогда СообщениеАдминистраторуОбластиДанных = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. |Обратитесь к администратору сервиса за подробностями.'"); Если ДоступноИспользованиеРазделенныхДанных Тогда @@ -486,53 +537,62 @@ Сообщение = СообщениеАдминистраторуОбластиДанных; КонецЕсли; КонецЕсли; - - ИначеЕсли НЕ РазделениеВключено - ИЛИ ДоступноИспользованиеРазделенныхДанных Тогда - Если НеобходимоОбновлениеИнформационнойБазы() - И НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда - - ЭтоЗапускСПустымСпискомПользователей = ЭтоЗапускСПустымСпискомПользователей(); - - Если ПривилегированныйРежим() - И НЕ УчитыватьПривилегированныйРежим - И ЭтоЗапускСПустымСпискомПользователей Тогда - Возврат ""; // Возможно, использован параметр запуска UsePrivilegedMode. - КонецЕсли; - - Если ЭтоЗапускСПустымСпискомПользователей Тогда - Если ПриЗапускеКлиентскогоПриложения Тогда - // Проверка выполняется в подсистеме пользователи (с предложением добавить администратора). - Возврат ""; - КонецЕсли; - // Сообщение администратору системы при пустом списке пользователей. - Сообщение = - НСтр("ru = 'Для завершения обновления версии конфигурации требуются административные права. - |Необходимо добавить в список пользователей информационной базы учетную запись - |администратора с двумя ролями ""Администратор системы"" и ""Полные права"", - |и повторить запуск программы от его имени. - | - |Для перехода к списку пользователей информационной базы необходимо открыть Конфигуратор и - |воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); - Иначе - Если ЕстьПравоАдминистрирование Тогда - Сообщение = СообщениеАдминистраторуСистемы; - Иначе - Если РазделениеВключено Тогда - // Сообщение пользователю сервиса. - Сообщение = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. - |Обратитесь к администратору за подробностями.'"); - Иначе - // Сообщение пользователю локального режима. - Сообщение = - НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. - |Обратитесь к администратору за подробностями.'"); - КонецЕсли; - КонецЕсли; - КонецЕсли; + Возврат Сообщение; + КонецЕсли; + + // Сообщение администратору сервиса не выдается + Если РазделениеВключено И Не ДоступноИспользованиеРазделенныхДанных Тогда + Возврат ""; + КонецЕсли; + + Если ЕстьПраваНаОбновлениеИнформационнойБазы(УчитыватьПривилегированныйРежим, Истина) Тогда + Возврат ""; + КонецЕсли; + + Если Не НеобходимоОбновлениеИнформационнойБазы() И Не ТребуетсяПроверитьЛегальностьПолученияОбновления() Тогда + Возврат ""; + КонецЕсли; + + ЭтоЗапускСПустымСпискомПользователей = ЭтоЗапускСПустымСпискомПользователей(); + + Если ПривилегированныйРежим() И НЕ УчитыватьПривилегированныйРежим И ЭтоЗапускСПустымСпискомПользователей Тогда + Возврат ""; // Возможно, использован параметр запуска UsePrivilegedMode. + КонецЕсли; + + Если ЭтоЗапускСПустымСпискомПользователей Тогда + + Если ПриЗапускеКлиентскогоПриложения Тогда + // Проверка выполняется в подсистеме пользователи (с предложением добавить администратора). + Возврат ""; КонецЕсли; + + // Сообщение администратору системы при пустом списке пользователей. + Сообщение = + НСтр("ru = 'Для завершения обновления версии программы требуются административные права. + |Необходимо добавить в список пользователей информационной базы учетную запись + |администратора с двумя ролями ""Администратор системы"" и ""Полные права"", + |и повторить запуск программы от его имени. + | + |Для перехода к списку пользователей информационной базы необходимо открыть Конфигуратор и + |воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); + Возврат Сообщение; + КонецЕсли; + + Если ЕстьПравоАдминистрирование Тогда + Возврат СообщениеАдминистраторуСистемы; + КонецЕсли; + + Если РазделениеВключено Тогда + // Сообщение пользователю сервиса. + Сообщение = + НСтр("ru = 'Вход в приложение временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору сервиса за подробностями.'"); + Иначе + // Сообщение пользователю локального режима. + Сообщение = + НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением на новую версию. + |Обратитесь к администратору за подробностями.'"); КонецЕсли; Возврат Сообщение; @@ -571,6 +631,8 @@ КонецПопытки; КонецЕсли; + НачальноеЗаполнениеДанных = НачальноеЗаполнениеДанных(); + ВерсияМетаданных = Метаданные.Версия; Если ПустаяСтрока(ВерсияМетаданных) Тогда ВерсияМетаданных = "0.0.0.0"; @@ -591,9 +653,28 @@ КонецЕсли; Если НЕ НеобходимоОбновлениеИнформационнойБазы() Тогда + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + // Загрузка и выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы(); + + КонецЕсли; + Возврат "НеУспешно"; КонецЕсли; + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + // Загрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы(); + + КонецЕсли; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); Для каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы); @@ -627,8 +708,8 @@ КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - КлючЗаписи = Модуль.КлючЗаписиВерсийПодсистем(); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + КлючЗаписи = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.КлючЗаписиВерсийПодсистем(); КонецЕсли; КонецЕсли; @@ -702,15 +783,32 @@ КонецЕсли; Попытка + + ХодВыполненияОбработчиков = КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления); // Выполняем все обработчики обновления для подсистем конфигурации. - Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления( ИтерацияОбновления.Подсистема, ИтерацияОбновления.Версия, ИтерацияОбновления.Обработчики, + ХодВыполненияОбработчиков, ОперативноеОбновление); КонецЦикла; + // Для файловой базы отложенные обработчики выполняются в основном цикле обновления + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И + (Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()) Тогда + + ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных); + + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если Найти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда + ВыполнитьОтложенноеОбновлениеСейчас(); + КонецЕсли; + + КонецЕсли; + Исключение // Отключение монопольного режима. Если НЕ РежимОтладки Тогда @@ -731,7 +829,7 @@ КонецПопытки; Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ОбновитьРазделыОписанияИзменений(); КонецЕсли; @@ -750,6 +848,8 @@ ВыводитьОписаниеОбновлений = ВерсияДанных <> "0.0.0.0"; + ОбновитьПовторноИспользуемыеЗначения(); + Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл ИтерацияОбновления.ОсновнойСерверныйМодуль.ПослеОбновленияИнформационнойБазы( ИтерацияОбновления.ПредыдущаяВерсия, @@ -759,23 +859,45 @@ НЕ ОперативноеОбновление); КонецЦикла; - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Только для локального режима (не используется в модели сервиса). + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Если Константы.ЗапуститьОбновлениеИнформационнойБазы.Получить() Тогда - // Снятие признака необходимости обновления ИБ, если он использовался. - - Если НЕ ТребуетсяОбновлениеКонфигурацииУзлаРИБ() Тогда - // Для подчиненного узла РИБ признак снимается только в случае, - // когда запуск выполнен после обновления конфигурации базы данных. - - Константы.ЗапуститьОбновлениеИнформационнойБазы.Установить(Ложь); - КонецЕсли; + // Выгрузка сообщения обмена после перезапуска в связи с получением изменений конфигурации. + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); + + КонецЕсли; + + // Для клиент-серверной базы запланировать выполнение отложенных обработчиков обновления + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных); КонецЕсли; + + КонецЕсли; + + Если Не НачальноеЗаполнениеДанных И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", Истина, , ИмяПользователя()); + КонецЕсли; + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + + // Сброс неуспешного статуса обновления конфигурации + // при завершении обновления вручную (без скрипта). + МодульОбновлениеКонфигурации = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеКонфигурации"); + МодульОбновлениеКонфигурации.ПослеОбновленияИнформационнойБазы(); КонецЕсли; ОбновитьПовторноИспользуемыеЗначения(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = Ложь; + КонецЕсли; + Возврат "Успешно"; КонецФункции @@ -801,8 +923,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - Модуль.ПриОпределенииВерсииИБ(ИдентификаторБиблиотеки, ПолучитьВерсиюОбщихДанных, + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииВерсииИБ(ИдентификаторБиблиотеки, ПолучитьВерсиюОбщихДанных, СтандартнаяОбработка, Результат); КонецЕсли; @@ -870,8 +992,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - Модуль.ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОпределенииПервогоВходаВОбластьДанных(СтандартнаяОбработка, Результат); КонецЕсли; @@ -950,7 +1072,7 @@ // Для внутреннего использования Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, - Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач ОперативноеОбновление = Ложь) Экспорт + Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач Отбор = "Монопольно") Экспорт // Добавление номера в таблицу, для упорядочивания в порядке добавления ВсеОбработчики = ИсходнаяТаблицаОбработчиков.Скопировать(); @@ -985,7 +1107,8 @@ Схема.Параметры.Найти("ВерсияДо").Значение = ВерсияДо; Схема.Параметры.Найти("ВесВерсииОт").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияОт").Значение); Схема.Параметры.Найти("ВесВерсииДо").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияДо").Значение); - Схема.Параметры.Найти("ОперативноеОбновление").Значение = ОперативноеОбновление; + Схема.Параметры.Найти("ОперативноеОбновление").Значение = (Отбор = "Оперативно"); + Схема.Параметры.Найти("ОтложенноеОбновление").Значение = (Отбор = "Отложенно"); Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); @@ -1005,6 +1128,23 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистемы + +// Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). +Процедура ПослеЗавершенияОбновления() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении = Неопределено Тогда + Возврат; + КонецЕсли; + + СведенияОбОбновлении.ЛегальностьПолученияОбновленияПодтверждена = Истина; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры для установки/обновления/получения параметров работы программы (кэшей). @@ -1246,6 +1386,10 @@ // Функция ВесВерсии(Знач Версия) Экспорт + Если Версия = "" Тогда + Возврат 0; + КонецЕсли; + Возврат ВесВерсииИзМассиваСтрок(СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, ".")); КонецФункции @@ -1280,6 +1424,8 @@ Если ОписаниеПодсистемы.Имя = ИмяОсновнойПодсистемы Тогда ИтерацияОбновлениеОсновнойПодсистемы = ИтерацияОбновления; КонецЕсли; + + ПроверитьСвойстваОбработчиков(ИтерацияОбновления, ОписаниеПодсистемы.Имя = ИмяОсновнойПодсистемы); КонецЦикла; // Для обратной совместимости. @@ -1294,6 +1440,7 @@ ИтерацияОбновления.Вставить("ПредыдущаяВерсия", ВерсияИБ(ИмяОсновнойПодсистемы)); ИтерацииОбновления.Добавить(ИтерацияОбновления); + ПроверитьСвойстваОбработчиков(ИтерацияОбновления, Истина); КонецЕсли; Возврат ИтерацииОбновления; @@ -1430,6 +1577,213 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Механизм отложенного обновления + +// Удаляет отложенный обработчики из очереди выполняемых обработчиков на новую версию. +// +// Параметры: +// ИмяОбработчика - Строка - Строковый идентификатор отложенного обработчика. +// +Процедура УдалитьОтложенныйОбработчикИзОчереди(ИмяОбработчика) Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении = Неопределено Тогда + Возврат; + КонецЕсли; + + ОтобранныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.НайтиСтроки(Новый Структура("ИмяОбработчика", ИмяОбработчика)); + Если ОтобранныйОбработчик <> Неопределено И ОтобранныйОбработчик.Количество() > 0 Тогда + + Для Каждого СтрокаОбработчик Из ОтобранныйОбработчик Цикл + СтрокаОбработчик.Родитель.Удалить(СтрокаОбработчик); + КонецЦикла; + + КонецЕсли; + + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры + +// Формирует дерево отложенных обработчиков и активирует регламентное задание. +// +Процедура ЗапланироватьОтложенноеОбновление(ИтерацииОбновления, НачальноеЗаполнениеДанных) + + ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(НачальноеЗаполнениеДанных); + СведенияОбОбновлении = НовыеСведенияОбОбновлении(НачальноеЗаполнениеДанных); + + ИмяБиблиотеки = ""; + НомерВерсии = ""; + + Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + ИмяБиблиотеки = ИтерацияОбновления.Подсистема; + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, + ИтерацияОбновления.ПредыдущаяВерсия, + ИтерацияОбновления.Версия, + Истина, + "Отложенно"); + + Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + // Добавление строки библиотеки. + НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(ИмяБиблиотеки, "ИмяБиблиотеки"); + Если НайденнаяСтрока <> Неопределено Тогда + СтрокаДереваБиблиотека = НайденнаяСтрока; + Иначе + СтрокаДереваБиблиотека = ДеревоОбработчиков.Строки.Добавить(); + СтрокаДереваБиблиотека.ИмяБиблиотеки = ИмяБиблиотеки; + КонецЕсли; + СтрокаДереваБиблиотека.Статус = ""; + + Для каждого СтрокаВерсия Из ОбработчикиПоВерсиям.Строки Цикл + НайденнаяСтрока = СтрокаДереваБиблиотека.Строки.Найти(СтрокаВерсия.Версия, "НомерВерсии"); + Если НайденнаяСтрока <> Неопределено Тогда + НайденнаяСтрока.Статус = ""; + + Для Каждого НевыполненныйОбработчик Из НайденнаяСтрока.Строки Цикл + НевыполненныйОбработчик.ЧислоПопыток = 0; + КонецЦикла; + + Продолжить; + КонецЕсли; + СтрокаДереваВерсии = СтрокаДереваБиблиотека.Строки.Добавить(); + СтрокаДереваВерсии.НомерВерсии = СтрокаВерсия.Версия; + СтрокаДереваВерсии.Статус = ""; + + Для Каждого СтрокаОбработчики Из СтрокаВерсия.Строки Цикл + + Если СтрокаОбработчики.МонопольныйРежим = Истина Тогда + + ТекстОшибки = НСтр("ru = 'У отложенного обработчика ""%1"" + |не должен быть установлен признак ""МонопольныйРежим"".'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки, СтрокаОбработчики.Процедура); + ЗаписатьОшибку(ТекстОшибки); + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); + СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; + СтрокаДереваОбработчики.НомерВерсии = СтрокаОбработчики.Версия; + СтрокаДереваОбработчики.ВерсияРегистрации = СтрокаОбработчики.ВерсияРегистрации; + СтрокаДереваОбработчики.ИмяОбработчика = СтрокаОбработчики.Процедура; + СтрокаДереваОбработчики.Комментарий = СтрокаОбработчики.Комментарий; + СтрокаДереваОбработчики.Статус = "НеВыполнено"; + СтрокаДереваОбработчики.ЧислоПопыток = 0; + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков); + СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + // Планирование выполнения регламентного задания + // При работе в модели сервиса - добавляется регламентное задание в очередь + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПриВключенииОтложенногоОбновления(Истина); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Использование = Истина; + РегламентноеЗадание.Записать(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Управляет процессом выполнения отложенных обработчиков обновления. +// +Процедура ВыполнитьОтложенноеОбновление() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И СведенияОбОбновлении.ВремяОкончанияОбновления = Неопределено Тогда + Возврат; // Ожидаем, пока запишется вся информация об основном цикле обновления + КонецЕсли; + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + ОтключитьОтложенноеОбновление(); + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + Если Не ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении) Тогда + ОтключитьОтложенноеОбновление(); + КонецЕсли; + +КонецПроцедуры + +// Выполняет все процедуры отложенного обновления в цикле за один вызов. +// +Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда + СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса(); + КонецЕсли; + + Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда + СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений; + КонецЕсли; + СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ОбработчикиВыполнялись = Истина; + КоличествоЗапусков = 0; // защита от бесконечного зацикливания из-за возможных ошибок в обработчиках обновления + Пока ОбработчикиВыполнялись И КоличествоЗапусков < 10000 Цикл + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); + КоличествоЗапусков = КоличествоЗапусков + 1; + КонецЦикла; + +КонецПроцедуры + +// Получает сведения об обновлении информационной базы. +// +Функция СведенияОбОбновленииИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат НовыеСведенияОбОбновлении(Истина); + КонецЕсли; + + Возврат Константы.СведенияОбОбновленииИБ.Получить().Получить(); + +КонецФункции + +// Записывает данные по обновлению в константу "СведенияОбОбновлении". +// +Процедура ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении) Экспорт + + МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(СведенияОбОбновлении); + ЗаписатьДанные(МенеджерКонстанты); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -1464,6 +1818,29 @@ КонецПроцедуры +// Доопределяет структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации, т.е. в обработчиках событий +// - ПередНачаломРаботыСистемы, +// - ПриНачалеРаботыСистемы. +// +// Важно: при запуске недопустимо использовать команды сброса кэша +// повторно используемых модулей, иначе запуск может привести +// к непредсказуемым ошибкам или лишним серверным вызовам. +// +// Параметры: +// Параметры - Структура, в которую можно вставить параметры работы клиента при запуске. +// Ключ - имя параметра, +// Значение - значение параметра. +// +// Пример использования: +// Параметры.Вставить(<ИмяПараметра>, <Код получения значения параметра>); +// +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Параметры.Вставить("ПроверитьЛегальностьПолученияОбновления", ТребуетсяПроверитьЛегальностьПолученияОбновления()); + +КонецПроцедуры + // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // // Параметры: @@ -1493,6 +1870,22 @@ +КонецПроцедуры + +// Используется для получения объектов метаданных, которые должны входить в состав плана обмена +// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. +// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла +// и не мигрируют в процессе обмена. +// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты – Массив. Массив объектов метаданных конфигурации. +// +Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт + + Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); + КонецПроцедуры // Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. @@ -1509,25 +1902,32 @@ Если РаспределеннаяИнформационнаяБаза Тогда - Объекты.Добавить(Метаданные.Константы.ЗапуститьОбновлениеИнформационнойБазы); + Объекты.Добавить(Метаданные.Константы.РазделыОписанияИзмененийСистемы); КонецЕсли; КонецПроцедуры -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// Обработчик события ПриПолученииСпискаШаблонов. +// +// Формирует список шаблонов заданий очереди. // // Параметры: -// Объекты – Массив. Массив объектов метаданных конфигурации. +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. // -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт - Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); + Шаблоны.Добавить("ОтложенноеОбновлениеИБ"); + +КонецПроцедуры + +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазы.УстановкаПараметровСеанса"); КонецПроцедуры @@ -1553,8 +1953,22 @@ Процедура ПриСнятииБлокировкиФайловойБазы() Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБ"); - Модуль.ПриСнятииБлокировкиФайловойБазы(); + МодульСоединенияИБ = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.ПриСнятииБлокировкиФайловойБазы(); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает использование регламентного задания заполнения данных управления доступом. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура ПриВключенииОтложенногоОбновления(Знач Использование) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриВключенииОтложенногоОбновления(Использование); КонецЕсли; КонецПроцедуры @@ -1641,7 +2055,7 @@ ИтерацияОбновления.ПредыдущаяВерсия, ИтерацияОбновления.Версия, ФлагРазделенности, - Истина); + "Оперативно"); Если ДеревоОбработчиков.Строки.Количество() = 0 Тогда Продолжить; @@ -1680,7 +2094,10 @@ КонецЕсли; ПараметрыОбработчика.Вставить("МонопольныйРежим", Ложь); - ВыполнитьОбработчикОбновления(ЗаписыватьВЖурнал, ИтерацияОбновления.Подсистема, Обработчик, ПараметрыОбработчика); + ДополнительныеПараметры = Новый Структура("ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, ХодВыполненияОбработчиков", + ЗаписыватьВЖурнал, ИтерацияОбновления.Подсистема, Неопределено); + + ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); Если ПараметрыОбработчика.МонопольныйРежим = Истина Тогда Возврат Ложь; // Требуется обновление в монопольном режиме @@ -1720,8 +2137,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - Модуль.ПриУстановкеВерсииИБ(ИдентификаторБиблиотеки, НомерВерсии, СтандартнаяОбработка); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриУстановкеВерсииИБ(ИдентификаторБиблиотеки, НомерВерсии, СтандартнаяОбработка); КонецЕсли; @@ -1796,7 +2213,7 @@ // ВерсияМетаданныхИБ – Строка – версия метаданных. Отключаются только те обработчики // у которых версия совпадает с версией метаданных. // -Процедура ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных) +Процедура ОтключитьОбработчикиОбновления(ИдентификаторБиблиотеки, ВыполняемыеОбработчики, ВерсияМетаданных, ХодВыполненияОбработчиков) ОтключаемыеОбработчики = Новый ТаблицаЗначений; ОтключаемыеОбработчики.Колонки.Добавить("ИдентификаторБиблиотеки"); @@ -1819,6 +2236,7 @@ Если ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия = "*" И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда ОбработчикиБиблиотеки.Строки.Удалить(ВыполняемыйОбработчик); + ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию = ХодВыполненияОбработчиков.ВсегоОбработчиковНаВерсию - 1; ИначеЕсли ВыполняемыйОбработчик <> Неопределено И ВыполняемыйОбработчик.Версия <> "*" И ОтключаемыйОбработчик.Версия = ВерсияМетаданных Тогда ТекстИсключения = НСтр("ru='Обработчик обновления %1 не может быть отключен, @@ -1846,12 +2264,15 @@ Возврат ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки( Версия) + "." + Формат(Число(Массив[3]) + 1, "ЧГ="); - КонецФункции +КонецФункции -Процедура ВыполнитьОбработчикОбновления(ЗаписыватьВЖурнал, ИдентификаторБиблиотеки, Обработчик, Параметры = Неопределено) +Процедура ВыполнитьОбработчикОбновления(Обработчик, Параметры, ДополнительныеПараметры) - Если ЗаписыватьВЖурнал Тогда - ЗначениеНаНачало = Вычислить("ТекущаяУниверсальнаяДатаВМиллисекундах()"); // для возможности запуска на 8.2.16 + ЗаписатьИнформациюОХодеОбновления(Обработчик, ДополнительныеПараметры.ХодВыполненияОбработчиков); + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ОписаниеОбработчика = + ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ДополнительныеПараметры.ИдентификаторБиблиотеки); КонецЕсли; Если Параметры <> Неопределено Тогда @@ -1866,6 +2287,11 @@ Попытка ОбщегоНазначения.ВыполнитьБезопасно(Обработчик.Процедура, ПараметрыОбработчика); Исключение + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + ИмяОбработчика = Обработчик.Процедура + "(" + ?(ПараметрыОбработчика = Неопределено, "", "Параметры") + ")"; ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При вызове обработчика обновления: @@ -1878,64 +2304,36 @@ ВызватьИсключение; КонецПопытки; - Если ТранзакцияАктивнаНаНачалоВыполнения Тогда - Если ТранзакцияАктивна() Тогда - // Проверка поглощенных исключений в обработчиках - Попытка - Константы.ИспользоватьРазделениеПоОбластямДанных.Получить(); - Исключение - ШаблонКомментария = НСтр("ru = 'При выполнении обработчика обновления %1 - |было поглощено исключение в транзакции.'"); - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработчик.Процедура); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - Комментарий); - ВызватьИсключение(Комментарий); - КонецПопытки; - Иначе - ШаблонКомментария = НСтр("ru = 'При выполнении обработчика обновления %1 - |была завершена внешняя транзакция.'"); - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработчик.Процедура); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - Комментарий); - ВызватьИсключение(Комментарий); - КонецЕсли; - Иначе - Если ТранзакцияАктивна() Тогда - ШаблонКомментария = НСтр("ru = 'При выполнении обработчика обновления %1 - |открытая внутри транзакция не была завершена.'"); - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработчик.Процедура); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - Комментарий); - ВызватьИсключение(Комментарий); - КонецЕсли; + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, Обработчик.Процедура); + + Если ДополнительныеПараметры.ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); КонецЕсли; - Если НЕ ЗаписыватьВЖурнал Тогда - Возврат; - КонецЕсли; - - Длительность = Вычислить("ТекущаяУниверсальнаяДатаВМиллисекундах()") - ЗначениеНаНачало; // для возможности запуска на 8.2.16 +КонецПроцедуры + +Функция ПодготовитьДетальнуюИнформациюОХодеОбновления(Обработчик, Параметры, ИдентификаторБиблиотеки, ОбработчикОтложенный = Ложь) ОписаниеОбработчика = Новый Структура; ОписаниеОбработчика.Вставить("Библиотека", ИдентификаторБиблиотеки); - ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); + Если ОбработчикОтложенный Тогда + ОписаниеОбработчика.Вставить("Версия", Обработчик.НомерВерсии); + ОписаниеОбработчика.Вставить("Процедура", Обработчик.ИмяОбработчика); + Иначе + ОписаниеОбработчика.Вставить("Версия", Обработчик.Версия); + ОписаниеОбработчика.Вставить("Процедура", Обработчик.Процедура); + КонецЕсли; ОписаниеОбработчика.Вставить("ВерсияРегистрации", Обработчик.ВерсияРегистрации); - ОписаниеОбработчика.Вставить("Процедура", Обработчик.Процедура); - ОписаниеОбработчика.Вставить("Длительность", Длительность / 1000); // В секундах ОписаниеОбработчика.Вставить("Параметры", Параметры); + Если ОбработчикОтложенный Тогда + ОписаниеОбработчика.Вставить("РежимВыполнения", "Отложенно"); + ИначеЕсли ЗначениеЗаполнено(Обработчик.РежимВыполнения) Тогда + ОписаниеОбработчика.Вставить("РежимВыполнения", Обработчик.РежимВыполнения); + Иначе + ОписаниеОбработчика.Вставить("РежимВыполнения", "Монопольно"); + КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда @@ -1949,6 +2347,19 @@ КонецЕсли; + ОписаниеОбработчика.Вставить("ЗначениеНаНачало", Вычислить("ТекущаяУниверсальнаяДатаВМиллисекундах()")); + + Возврат ОписаниеОбработчика; + +КонецФункции + +Процедура ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика) + + Длительность = Вычислить("ТекущаяУниверсальнаяДатаВМиллисекундах()") - ОписаниеОбработчика.ЗначениеНаНачало; // для возможности запуска на 8.2.16 + + ОписаниеОбработчика.Вставить("Выполнен", Ложь); + ОписаниеОбработчика.Вставить("Длительность", Длительность / 1000); // В секундах + ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрацииПротокол(), УровеньЖурналаРегистрации.Информация, @@ -1958,6 +2369,174 @@ КонецПроцедуры +Процедура ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, НазваниеОбработчика) + + Если ТранзакцияАктивнаНаНачалоВыполнения Тогда + Если ТранзакцияАктивна() Тогда + // Проверка поглощенных исключений в обработчиках + Попытка + Константы.ИспользоватьРазделениеПоОбластямДанных.Получить(); + Исключение + ШаблонКомментария = НСтр("ru = 'Ошибка выполнения обработчика обновления %1: + |Обработчиком обновления было поглощено исключение при активной внешней транзакции. + |При активных транзакциях, открытых выше по стеку, исключение также необходимо пробрасывать выше по стеку.'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, НазваниеОбработчика); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ВызватьИсключение(Комментарий); + КонецПопытки; + Иначе + ШаблонКомментария = НСтр("ru = 'Ошибка выполнения обработчика обновления %1: + |Обработчиком обновления была закрыта лишняя транзакция, открытая ранее (выше по стеку).'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, НазваниеОбработчика); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ВызватьИсключение(Комментарий); + КонецЕсли; + Иначе + Если ТранзакцияАктивна() Тогда + ШаблонКомментария = НСтр("ru = 'Ошибка выполнения обработчика обновления %1: + |Открытая внутри обработчика обновления транзакция осталась активной (не была закрыта или отменена).'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, НазваниеОбработчика); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Выполнение обработчиков'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ВызватьИсключение(Комментарий); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьСвойстваОбработчиков(ИтерацияОбновления, ЭтоКонфигурация) + + Для каждого Обработчик Из ИтерацияОбновления.Обработчики Цикл + ОписаниеОшибки = ""; + + Если ПустаяСтрока(Обработчик.Версия) Тогда + + Если Обработчик.НачальноеЗаполнение <> Истина Тогда + ОписаниеОшибки = НСтр("ru = 'У обработчика не заполнено свойство Версия или + |свойство НачальноеЗаполнение.'"); + КонецЕсли; + + ИначеЕсли Обработчик.Версия <> "*" Тогда + + Попытка + НулеваяВерсия = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Обработчик.Версия, "0.0.0.0") = 0; + Исключение + НулеваяВерсия = Ложь; + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У обработчика не правильно заполнено свойство Версия: ""%1"". + |Правильный формат, например: ""2.1.3.70"".'"), + Метаданные.Версия); + КонецПопытки; + + Если НулеваяВерсия Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У обработчика не правильно заполнено свойство Версия: ""%1"". + |Версия не может быть нулевой.'"), + Метаданные.Версия); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) + И Обработчик.ВыполнятьВГруппеОбязательных <> Истина + И Обработчик.Приоритет <> 0 Тогда + + ОписаниеОшибки = НСтр("ru = 'У обработчика не правильно заполнено свойство Приоритет или + |свойство ВыполнятьВГруппеОбязательных.'"); + КонецЕсли; + КонецЕсли; + + Если Обработчик.РежимВыполнения <> "" + И Обработчик.РежимВыполнения <> "Монопольно" + И Обработчик.РежимВыполнения <> "Оперативно" + И Обработчик.РежимВыполнения <> "Отложенно" Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У обработчика ""%1"" не правильно заполнено свойство РежимВыполнения. + |Допустимое значение: ""Монопольно"", ""Отложенно"", ""Оперативно"".'"), + Обработчик.Процедура); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) + И Обработчик.Опциональный = Истина + И Обработчик.НачальноеЗаполнение = Истина Тогда + + ОписаниеОшибки = НСтр("ru = 'У обработчика не правильно заполнено свойство Опциональный или + |свойство НачальноеЗаполнение.'"); + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Если ЭтоКонфигурация Тогда + ЗаголовокОшибки = НСтр("ru = 'Ошибка в свойстве обработчика обновления конфигурации'"); + Иначе + ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в свойстве обработчика обновления библиотеки %1 версии %2'"), + ИтерацияОбновления.Подсистема, + ИтерацияОбновления.Версия); + КонецЕсли; + + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ЗаголовокОшибки + Символы.ПС + + НСтр("ru = '(%1).'") + Символы.ПС + + Символы.ПС + + ОписаниеОшибки, + Обработчик.Процедура); + + ЗаписатьОшибку(ОписаниеОшибки); + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования +// +Функция КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления) + + КоличествоОбработчиков = 0; + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале( + ИтерацияОбновления.Обработчики, ИтерацияОбновления.ПредыдущаяВерсия, ИтерацияОбновления.Версия); + Для Каждого СтрокаОбработчикиВерсия Из ОбработчикиПоВерсиям.Строки Цикл + КоличествоОбработчиков = КоличествоОбработчиков + СтрокаОбработчикиВерсия.Строки.Количество(); + КонецЦикла; + + КонецЦикла; + + Сообщение = НСтр("ru = 'Для обновления информационной базы на новую версию будут выполнены обработчики: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, КоличествоОбработчиков); + ЗаписатьИнформацию(Сообщение); + + Возврат Новый Структура("ВсегоОбработчиков, ВыполненоОбработчиков", КоличествоОбработчиков, 0); + +КонецФункции + +Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + ПроверитьЛегальностьПолученияОбновления = (Не НеобходимоОбновлениеИнформационнойБазы() И + СведенияОбОбновлении <> Неопределено И + Не СведенияОбОбновлении.ЛегальностьПолученияОбновленияПодтверждена); + Возврат ПроверитьЛегальностьПолученияОбновления; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Протоколирование хода обновления @@ -1967,12 +2546,25 @@ КонецПроцедуры -Процедура ЗаписатьОшибку(Знач Текст) +Процедура ЗаписатьОшибку(Знач Текст) ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Текст); КонецПроцедуры +Процедура ЗаписатьИнформациюОХодеОбновления(Обработчик, ХодВыполненияОбработчиков) + + Если ХодВыполненияОбработчиков <> Неопределено И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; + Сообщение = НСтр("ru = 'Выполняется обработчик обновления %1 (%2 из %3).'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение, Обработчик.Процедура, + ХодВыполненияОбработчиков.ВыполненоОбработчиков, ХодВыполненияОбработчиков.ВсегоОбработчиков); + ЗаписатьИнформацию(Сообщение); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Описание обновлений @@ -2009,6 +2601,12 @@ Возврат Ложь; КонецЕсли; + ВывестиОписаниеИзмененийДляАдминистратора = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора",,, ИмяПользователя()); + Если ВывестиОписаниеИзмененийДляАдминистратора = Истина Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора", ИмяПользователя()); + Возврат Истина; + КонецЕсли; + Если Не РольДоступна(Метаданные.Роли.ПросмотрОписанияИзмененийПрограммы) И Не РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда Возврат Ложь; @@ -2119,6 +2717,11 @@ Результат = Новый Массив; + Если Разделы = Неопределено Тогда + ОбновитьРазделыОписанияИзменений(); + Разделы = РазделыОписанияИзменений(); + КонецЕсли; + ВесВерсии = ВесВерсии(Версия); Для каждого ЭлементСписка Из Разделы Цикл Если ЭлементСписка.Значение <= ВесВерсии Тогда @@ -2131,3 +2734,238 @@ Возврат Результат; КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции отложенного обновления + +// Только для внутреннего использования. +// +Функция ВыполненныеОбработчикиПрошлыхВерсий(НачальноеЗаполнениеДанных) + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении <> Неопределено + И СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Ложь Тогда + + // Оставляем только не выполненные + НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Выполнено"), Истина); + Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл + СтрокаВерсии = ЭлементДерева.Родитель.Строки; + СтрокаВерсии.Удалить(ЭлементДерева); + КонецЦикла; + // Сбрасываем количество попыток у обработчиков со статусом "Ошибка". + НайденныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Новый Структура("Статус", "Ошибка"), Истина); + Для Каждого ЭлементДерева Из НайденныеОбработчики Цикл + ЭлементДерева.ЧислоПопыток = 0; + КонецЦикла; + + Возврат СведенияОбОбновлении.ДеревоОбработчиков; + + Иначе + Возврат НовыеСведенияОбОбработчикахОбновления(); + КонецЕсли; + +КонецФункции + +// Только для внутреннего использования. +// +Процедура ВыполнитьПроверкуДереваВыполненныхОбработчиков(ДеревоОбработчиков) + + Для Каждого СтрокаДереваБиблиотека Из ДеревоОбработчиков.Строки Цикл + + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + + Если СтрокаДереваВерсия.Строки.Количество() = 0 Тогда + СтрокаДереваВерсия.Статус = "Завершено"; + Иначе + СтрокаДереваВерсия.Статус = ""; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +// +Процедура ОтключитьОтложенноеОбновление() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПриВключенииОтложенногоОбновления(Ложь); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Использование = Ложь; + РегламентноеЗадание.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +// +Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ВыполнитьНеудачные = Ложь) + + ОбработчикиВыполнялись = Ложь; + ЕстьНеудачные = Ложь; + ЕстьПропущенныеОбработчики = Ложь; + ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + + Для Каждого ДеревоОбработчиковБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + + Если ДеревоОбработчиковБиблиотека.Статус = "Завершено" Тогда + Продолжить; + КонецЕсли; + + Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл + + Если ДеревоОбработчиковВерсия.Статус = "Завершено" Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбработчикОбновления Из ДеревоОбработчиковВерсия.Строки Цикл + + Если ОбработчикОбновления.Статус = "Выполнено" Тогда + Продолжить; + КонецЕсли; + + Если ОбработчикОбновления.ЧислоПопыток > 0 И Не ВыполнитьНеудачные Тогда + ЕстьНеудачные = Истина; + Продолжить; + КонецЕсли; + + Если ОбработчикОбновления.ЧислоПопыток >= 3 Тогда + ЕстьПропущенныеОбработчики = Истина; + Продолжить; + КонецЕсли; + + ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); + ОбработчикиВыполнялись = Истина; + ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; + Попытка + СообщениеОЗапущенномОбработчике = НСтр("ru = 'Выполняется процедура обновления ""%1"".'"); + СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОЗапущенномОбработчике, ИмяОбработчика); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); + + Параметры = Новый Структура("ОбработкаЗавершена", Истина); + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(Параметры); + + Если ЗаписыватьВЖурнал Тогда + ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); + КонецЕсли; + + ОбщегоНазначения.ВыполнитьБезопасно(ИмяОбработчика, ПараметрыОбработчика); + Если Параметры.ОбработкаЗавершена Тогда + ОбработчикОбновления.Статус = "Выполнено"; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + Исключение + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + ОбработчикОбновления.Статус = "Ошибка"; + ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОбработчикОбновления.ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + ВызватьИсключение; + КонецПопытки; + + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + Прервать; + КонецЦикла; + + Если Не ОбработчикиВыполнялись И ЕстьНеудачные И Не ВыполнитьНеудачные Тогда + Возврат ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, Истина); + КонецЕсли; + + Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда + Прервать; + Иначе + + Если ЕстьПропущенныеОбработчики Тогда + ДеревоОбработчиковВерсия.Статус = "ЕстьПропущенныеОбработчики"; + Иначе + ДеревоОбработчиковВерсия.Статус = "Завершено"; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда + Прервать; + Иначе + + Если ЕстьПропущенныеОбработчики Тогда + ДеревоОбработчиковБиблиотека.Статус = "ЕстьПропущенныеОбработчики"; + Прервать; + КонецЕсли; + + ДеревоОбработчиковБиблиотека.Статус = "Завершено"; + КонецЕсли; + + КонецЦикла; + + Если Не ОбработчикиВыполнялись Тогда + + СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Не ЕстьПропущенныеОбработчики; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + КонецЕсли; + Возврат ОбработчикиВыполнялись; + +КонецФункции + +// Только для внутреннего использования +// +Функция НовыеСведенияОбОбновлении(НачальноеЗаполнениеДанных) + + СведенияОбОбновлении = Новый Структура; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + ЛегальностьПолученияОбновленияПодтверждена = Истина; + Иначе + ЛегальностьПолученияОбновленияПодтверждена = НачальноеЗаполнениеДанных; + КонецЕсли; + + СведенияОбОбновлении.Вставить("ВремяНачалаОбновления"); + СведенияОбОбновлении.Вставить("ВремяОкончанияОбновления"); + СведенияОбОбновлении.Вставить("ПродолжительностьОбновления"); + СведенияОбОбновлении.Вставить("ВремяНачалаОтложенногоОбновления"); + СведенияОбОбновлении.Вставить("ВремяОкончаниеОтложенногоОбновления"); + СведенияОбОбновлении.Вставить("НомерСеанса"); + СведенияОбОбновлении.Вставить("ОтложенноеОбновлениеЗавершеноУспешно"); + СведенияОбОбновлении.Вставить("ЛегальностьПолученияОбновленияПодтверждена", ЛегальностьПолученияОбновленияПодтверждена); + СведенияОбОбновлении.Вставить("ДеревоОбработчиков"); + + Возврат СведенияОбОбновлении; + +КонецФункции + +// Только для внутреннего использования +// +Функция НовыеСведенияОбОбработчикахОбновления() + + ДеревоОбработчиков = Новый ДеревоЗначений; + ДеревоОбработчиков.Колонки.Добавить("ИмяБиблиотеки"); + ДеревоОбработчиков.Колонки.Добавить("НомерВерсии"); + ДеревоОбработчиков.Колонки.Добавить("ВерсияРегистрации"); + ДеревоОбработчиков.Колонки.Добавить("ИмяОбработчика"); + ДеревоОбработчиков.Колонки.Добавить("Статус"); + ДеревоОбработчиков.Колонки.Добавить("ЧислоПопыток"); + ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); + ДеревоОбработчиков.Колонки.Добавить("Комментарий"); + + Возврат ДеревоОбработчиков; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index ff424edcb..bdd9f173e 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -28,7 +28,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.1.3.51"; + Описание.Версия = "2.1.4.34"; КонецПроцедуры @@ -39,17 +39,15 @@ // для всех поддерживаемых версий библиотеки или конфигурации. // Вызывается перед началом обновления данных ИБ для построения плана обновления. // -// Параметры: -// Обработчики - ТаблицаЗначений - описание полей -// см. в процедуре ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления +// Обработчики - ТаблицаЗначений - описание полей, см. в процедуре +// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. // // Пример добавления процедуры-обработчика в список: // Обработчик = Обработчики.Добавить(); -// Обработчик.Версия = "1.0.0.0"; -// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_0_0_0"; +// Обработчик.Версия = "1.1.0.0"; +// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0"; // Обработчик.МонопольныйРежим = Ложь; -// Обработчик.Опциональный = Истина; -// +// Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт // Обработчики этого события для подсистем БСП добавляются через подписку на служебное событие: diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl index 4440167d2..d38c4a995 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl @@ -24,3 +24,69 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Записывает в константу продолжительность основного цикла обновления. +// +Процедура ЗаписатьВремяВыполненияОбновления(ВремяНачалаОбновления, ВремяОкончанияОбновления) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ВремяНачалаОбновления = ВремяНачалаОбновления; + СведенияОбОбновлении.ВремяОкончанияОбновления = ВремяОкончанияОбновления; + + ВремяВСекундах = ВремяОкончанияОбновления - ВремяНачалаОбновления; + + Часы = Цел(ВремяВСекундах/3600); + Минуты = Цел((ВремяВСекундах - Часы * 3600) / 60); + Секунды = ВремяВСекундах - Часы * 3600 - Минуты * 60; + + ПродолжительностьЧасы = ?(Часы = 0, "", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 час'"), Часы)); + ПродолжительностьМинуты = ?(Минуты = 0, "", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 мин'"), Минуты)); + ПродолжительностьСекунды = ?(Секунды = 0, "", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 сек'"), Секунды)); + + ПродолжительностьОбновления = ПродолжительностьЧасы + " " + ПродолжительностьМинуты + " " + ПродолжительностьСекунды; + + СведенияОбОбновлении.ПродолжительностьОбновления = СокрЛП(ПродолжительностьОбновления); + + МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(СведенияОбОбновлении); + МенеджерКонстанты.Записать(); + +КонецПроцедуры + +// Проверяет статус отложенных обработчиков обновления. +// +Функция ЕстьНеВыполненныеОбработчики() Экспорт + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат ""; + КонецЕсли; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении = Неопределено Тогда + Возврат ""; + КонецЕсли; + + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + Если Обработчик.Статус = "Ошибка" Тогда + Возврат "СтатусОшибка"; + ИначеЕсли Обработчик.Статус <> "Выполнено" Тогда + Возврат "СтатусНеВыполнено"; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Возврат ""; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl new file mode 100644 index 000000000..b62ff5822 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/Module.bsl @@ -0,0 +1,36 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Проверяет статус отложенного обновления. Если обновление завершилось +// с ошибками - информирует об этом пользователя и администратора. +// +Процедура ПроверитьСтатусОтложенногоОбновления() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + + Если ПараметрыРаботыКлиента.РазделениеВключено Тогда + Возврат; + КонецЕсли; + + Если ОбновлениеИнформационнойБазыВызовСервера.ЕстьНеВыполненныеОбработчики() <> "" Тогда + + Если ПараметрыРаботыКлиента.ЭтоПолноправныйПользователь Тогда + + Если ОбновлениеИнформационнойБазыВызовСервера.ЕстьНеВыполненныеОбработчики() = "СтатусОшибка" Тогда + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ"); + Иначе + ОбновлениеИнформационнойБазыКлиент.ОповеститьОтложенныеОбработчикиНеВыполнены(); + КонецЕсли; + + Иначе + ОбновлениеИнформационнойБазыКлиент.ОповеститьОтложенныеОбработчикиНеВыполнены(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/КонтактнаяИнформацияКлиент/КонтактнаяИнформацияКлиент.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/ОбновлениеИнформационнойБазыГлобальный.mdo similarity index 51% rename from SSL/src/CommonModules/КонтактнаяИнформацияКлиент/КонтактнаяИнформацияКлиент.mdo rename to SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/ОбновлениеИнформационнойБазыГлобальный.mdo index 2fbeaa6ac..b80585a92 100644 --- a/SSL/src/CommonModules/КонтактнаяИнформацияКлиент/КонтактнаяИнформацияКлиент.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыГлобальный/ОбновлениеИнформационнойБазыГлобальный.mdo @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="58351093-c827-48a1-b1a1-887d3f13b6df"> - <name>КонтактнаяИнформацияКлиент</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a2704bf4-3c9b-470d-8be2-ac1335667557"> + <name>ОбновлениеИнформационнойБазыГлобальный</name> <synonym> <key>ru</key> - <value>Контактная информация клиент</value> + <value>Обновление информационной базы глобальный</value> </synonym> + <global>true</global> <clientManagedApplication>true</clientManagedApplication> <clientOrdinaryApplication>true</clientOrdinaryApplication> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index a91a4b2dd..a3f22245d 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -4,19 +4,6 @@ // //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Проверить, есть ли необходимость выполнять обновление информационной базы, и -// если необходимо - выполняется обновление. -// Если обновление не удалось выполнить, то процедура предлагает завершить работу системы. -// -Процедура ВыполнитьОбновлениеИнформационнойБазы(Отказ = Ложь) Экспорт - - ОбновитьИнформационнуюБазу(Отказ); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -27,99 +14,20 @@ ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + СтандартныеПодсистемыКлиент.ЗавершающиеДействияПриНачалеРаботыСистемы(); Возврат; КонецЕсли; Если НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы Тогда + Если ПараметрыРаботыКлиента.ЗагрузитьСообщениеОбменаДанными Тогда + ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(, Истина); + КонецЕсли; + СтандартныеПодсистемыКлиент.ЗавершающиеДействияПриНачалеРаботыСистемы(); Возврат; КонецЕсли; - НачальноеЗаполнениеДанных = ПараметрыРаботыКлиента.НачальноеЗаполнениеДанных; - - ТекстСостояния = НСтр("ru = 'Пожалуйста, подождите, выполняется обновление информационной базы...'"); - Состояние(ТекстСостояния); - ДокументОписаниеОбновлений = Неопределено; - ИнформацияОбОшибке = Неопределено; - - ВремяНачалаОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); - - Попытка - ПризнакВыполненияОбработчиков = ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы( - Ложь, ПриЗапускеКлиентскогоПриложения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - - Если ИнформацияОбОшибке = Неопределено Тогда - ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); - - Пока ПризнакВыполненияОбработчиков = "ОшибкаУстановкиМонопольногоРежима" Цикл - // Открытие формы для отключения активных сеансов - ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ); - Если Не Отказ Тогда - Состояние(ТекстСостояния); - - Попытка - ПризнакВыполненияОбработчиков = ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы( - Ложь, ПриЗапускеКлиентскогоПриложения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - Прервать; - КонецПопытки; - - ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ПризнакВыполненияОбработчиков <> "ОшибкаУстановкиМонопольногоРежима" Тогда - ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); - КонецЕсли; - - Иначе - Возврат; - КонецЕсли; - - КонецЦикла; - КонецЕсли; - - Если ИнформацияОбОшибке <> Неопределено Тогда - ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При обновлении версии программы возникла ошибка: - | - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстСообщенияОбОшибке", ТекстСообщенияОбОшибке); - ПараметрыФормы.Вставить("ВремяНачалаОбновления", ВремяНачалаОбновления); - ПараметрыФормы.Вставить("ВремяОкончанияОбновления", ВремяОкончанияОбновления); - - ЗавершитьРаботу = ОткрытьФормуМодально("ОбщаяФорма.СообщениеОНеудачномОбновлении", ПараметрыФормы); - Если ЗавершитьРаботу = Неопределено - Или ЗавершитьРаботу Тогда - Отказ = Истина; - Возврат; - Иначе - ЗавершитьРаботуСистемы(Ложь, Истина); - Отказ = Истина; - Возврат; - КонецЕсли; - КонецЕсли; - - Состояние(НСтр("ru = 'Обновление информационной базы выполнено успешно.'")); - - Если ПризнакВыполненияОбработчиков = "Успешно" Тогда - ОбновитьИнтерфейс(); - КонецЕсли; - - ВывестиОписаниеИзмененийДляАдминистратора = - (ПризнакВыполненияОбработчиков = "Успешно" И Не НачальноеЗаполнениеДанных); - - Если ВывестиОписаниеИзмененийДляАдминистратора Тогда - Если ТипЗнч(ПараметрыРаботыКлиентаПриОбновлении) <> Тип("Структура") Тогда - ПараметрыРаботыКлиентаПриОбновлении = Новый Структура; - КонецЕсли; - ПараметрыРаботыКлиентаПриОбновлении.Вставить("ВремяНачалаОбновления", ВремяНачалаОбновления); - ПараметрыРаботыКлиентаПриОбновлении.Вставить("ВремяОкончанияОбновления", ВремяОкончанияОбновления); - КонецЕсли; + ПараметрыФормы = Новый Структура("ПриЗапускеКлиентскогоПриложения", ПриЗапускеКлиентскогоПриложения); + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОбновленияИБ", ПараметрыФормы); КонецПроцедуры @@ -129,39 +37,47 @@ Процедура ПоказатьОписаниеИзмененийСистемы() ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.ПоказатьОписаниеИзмененийСистемы Или ВывестиОписаниеИзмененийДляАдминистратора = Истина Тогда - ВывестиОписаниеИзмененийДляАдминистратора = Ложь; + Если ПараметрыРаботыКлиента.ПоказатьОписаниеИзмененийСистемы Тогда ПараметрыФормы = Новый Структура; - - Если ТипЗнч(ПараметрыРаботыКлиентаПриОбновлении) = Тип("Структура") - И ПараметрыРаботыКлиентаПриОбновлении.Свойство("ВремяНачалаОбновления") - И ПараметрыРаботыКлиентаПриОбновлении.Свойство("ВремяОкончанияОбновления") Тогда - - ПараметрыФормы.Вставить("ВремяНачалаОбновления", ПараметрыРаботыКлиентаПриОбновлении.ВремяНачалаОбновления); - ПараметрыФормы.Вставить("ВремяОкончанияОбновления", ПараметрыРаботыКлиентаПриОбновлении.ВремяОкончанияОбновления); - КонецЕсли; - ПараметрыФормы.Вставить("ПоказыватьТолькоИзменения", Истина); + ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы", ПараметрыФормы); КонецЕсли; КонецПроцедуры +// Выводит оповещение пользователю о том, что отложенная обработка данных +// не выполнена. +// +Процедура ОповеститьОтложенныеОбработчикиНеВыполнены() Экспорт + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Работа в программе временно ограничена'"), + НавигационнаяСсылкаОбработки(), + НСтр("ru = 'Не завершен переход на новую версию'"), + БиблиотекаКартинок.Предупреждение32); + +КонецПроцедуры + +// Возвращает навигационную ссылку обработки ОбновлениеИнформационнойБазы. +// +Функция НавигационнаяСсылкаОбработки() + Возврат "e1cib/app/Обработка.ОбновлениеИнформационнойБазы"; +КонецФункции + +// Подключает глобальный обработчик ожидания в форме. +Процедура ПодключитьОбработчикПроверкиСтатусаОтложенногоОбновления() Экспорт + ПодключитьОбработчикОжидания("ПроверитьСтатусОтложенногоОбновления", 2, Истина); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП // Вызывается при интерактивном начале работы пользователя с областью данных. // Соответствует событию ПриНачалеРаботыСистемы модулей приложения. // -// Параметры: -// ОбработкаПараметровЗапуска - Булево. -// Истина - обработчик вызван при обычном входе пользователя -// в систему и обработка параметров запуска будет выполнена. -// Ложь - обработчик вызван при входе неразделенного пользователя -// в область данных и обработка параметров запуска будет пропущена. -// -Процедура ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска) Экспорт +Процедура ПриНачалеРаботыСистемы() Экспорт ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда @@ -170,24 +86,4 @@ ПоказатьОписаниеИзмененийСистемы(); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы - -// Вызывается при неудачной попытке установить монопольный режим в файловой базе. -// -// Параметры: -// Отказ - булево - если Истина - завершает работу программы -// -Процедура ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБКлиент"); - Модуль.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ); - КонецЕсли; - -КонецПроцедуры - - - +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index 06d06f618..b3480980c 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -10,8 +10,8 @@ // // Пример добавления процедуры-обработчика в список: // Обработчик = Обработчики.Добавить(); -// Обработчик.Версия = "1.0.0.0"; -// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_0_0_0"; +// Обработчик.Версия = "1.1.0.0"; +// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0"; // // Вызывается перед началом обновления данных ИБ. // @@ -95,5 +95,4 @@ Процедура ДобавитьОтключаемыеОбработчикиОбновления(ОтключаемыеОбработчики) Экспорт - КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 5ba641499..614307322 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -203,6 +203,28 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему + +// Устанавливает в очереди заданий флаг использования того задания, которое +// соответствует регламентному заданию для выполнения отложенного обновления. +// +// Параметры: +// Использование - Булево - новое значения флага использования. +// +Процедура ПриВключенииОтложенногоОбновления(Знач Использование) Экспорт + + Шаблон = ОчередьЗаданий.ШаблонПоИмени("ОтложенноеОбновлениеИБ"); + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("Шаблон", Шаблон); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Использование); + ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -423,10 +445,10 @@ ВерсииПодсистемОбластейДанных = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьНаборЗаписей(); ВерсииПодсистемОбластейДанных.Загрузить(Запрос.Выполнить().Выгрузить()); - ВерсииПодсистемОбластейДанных.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВерсииПодсистемОбластейДанных); НаборУдалитьВерсииПодсистем = РегистрыСведений.УдалитьВерсииПодсистем.СоздатьНаборЗаписей(); - НаборУдалитьВерсииПодсистем.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборУдалитьВерсииПодсистем); ЗафиксироватьТранзакцию(); @@ -546,15 +568,12 @@ ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( - РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча - ); + РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); ОшибкаУстановкиБлокировки = Ложь; НачатьТранзакцию(); - Попытка - Попытка ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); // Будет снята при окончании транзакции Исключение @@ -629,7 +648,6 @@ Исключение ОтменитьТранзакцию(); - Если ОшибкаУстановкиБлокировки Тогда Продолжить; Иначе @@ -673,8 +691,7 @@ ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( - РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча - ); + РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); КонецЕсли; Возврат КлючЗаписи; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl index a7f5997b1..ad4149141 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl @@ -19,10 +19,10 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль( + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль( "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - МинимальнаяВерсияОбластейДанных = Модуль.МинимальнаяВерсияОбластейДанных(); + МинимальнаяВерсияОбластейДанных = МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.МинимальнаяВерсияОбластейДанных(); Иначе МинимальнаяВерсияОбластейДанных = Неопределено; КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 066b8c49c..9f0ee44c4 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -40,7 +40,8 @@ // Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда Возврат; КонецЕсли; @@ -56,8 +57,12 @@ // Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); - + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -97,15 +102,20 @@ // Функция ПолучитьНастройкиОбновления() Экспорт + ЕстьДоступДляОбновления = ПроверитьДоступДляОбновления(); + ЕстьДоступДляПроверкиОбновления = ПроверитьДоступДляПроверкиОбновления(); + + КонфигурацияИзменена = ?(ЕстьДоступДляОбновления Или ЕстьДоступДляПроверкиОбновления, КонфигурацияИзменена(), Ложь); + Настройки = Новый Структура; Настройки.Вставить("КороткоеИмяКонфигурации", КороткоеИмяКонфигурации()); Настройки.Вставить("АдресСервераДляПроверкиНаличияОбновления", АдресСервераДляПроверкиНаличияОбновления()); Настройки.Вставить("КаталогОбновлений", КаталогОбновлений()); Настройки.Вставить("АдресРесурсаДляПроверкиНаличияОбновления", АдресРесурсаДляПроверкиНаличияОбновления()); - Настройки.Вставить("КонфигурацияИзменена", КонфигурацияИзменена()); + Настройки.Вставить("КонфигурацияИзменена", КонфигурацияИзменена); Настройки.Вставить("ПроверитьПрошлыеОбновленияБазы", ОбновлениеКонфигурацииУспешно() <> Неопределено); - Настройки.Вставить("ЕстьДоступДляОбновления", ПроверитьДоступДляОбновления()); - Настройки.Вставить("ЕстьДоступДляПроверкиОбновления", ПроверитьДоступДляПроверкиОбновления()); + Настройки.Вставить("ЕстьДоступДляОбновления", ЕстьДоступДляОбновления); + Настройки.Вставить("ЕстьДоступДляПроверкиОбновления", ЕстьДоступДляПроверкиОбновления); Настройки.Вставить("НастройкиОбновленияКонфигурации", ПолучитьСтруктуруНастроекПомощника()); @@ -168,8 +178,7 @@ СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя ИспользоватьЗначениеНастройки = Ложь; @@ -204,8 +213,7 @@ СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя ИспользоватьЗначениеНастройки = Ложь; @@ -230,8 +238,7 @@ СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя ИспользоватьЗначениеНастройки = Ложь; @@ -256,8 +263,7 @@ СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда // Значение из настроек пользователя ИспользоватьЗначениеНастройки = Ложь; @@ -332,8 +338,7 @@ Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если Настройки = Неопределено Тогда КоличествоСтарыхНастроек = 0; @@ -367,8 +372,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ОбновлениеКонфигурации", "НастройкиОбновленияКонфигурации", - НастройкиОбновленияКонфигурации - ); + НастройкиОбновленияКонфигурации); КонецПроцедуры @@ -472,8 +476,7 @@ "НастройкиОбновленияКонфигурации", , , - ИмяПользователя - ); + ИмяПользователя); // Если в ранних версиях было сохранено расписание... Если Настройки <> Неопределено И Настройки.Свойство("РасписаниеПроверкиНаличияОбновления", Расписание) @@ -486,18 +489,42 @@ "НастройкиОбновленияКонфигурации", Настройки, , - ИмяПользователя - ); + ИмяПользователя); КонецЕсли; КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем + +// Вызывается не через событие, т.к. нужно сделать вызов самым последним. +Процедура ПослеОбновленияИнформационнойБазы() Экспорт + + ЗначениеХранилища = Константы.СтатусОбновленияКонфигурации.Получить(); + + Статус = Неопределено; + Если ЗначениеХранилища <> Неопределено Тогда + Статус = ЗначениеХранилища.Получить(); + КонецЕсли; + + Если Статус <> Неопределено И Статус.ОбновлениеВыполнено И Статус.РезультатОбновленияКонфигурации <> Неопределено + И Не Статус.РезультатОбновленияКонфигурации Тогда + + Статус.РезультатОбновленияКонфигурации = Истина; + Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы // Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). Процедура ПослеЗавершенияОбновления() Экспорт -КонецПроцедуры \ No newline at end of file + ОбновлениеИнформационнойБазы.ПослеЗавершенияОбновления(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 3c8924d92..f430278c6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -10,6 +10,10 @@ // Процедура ПроверитьОбновлениеКонфигурации() Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + #Если НЕ ВебКлиент Тогда ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда @@ -111,10 +115,15 @@ // Параметры: // СтандартнаяОбработка - Булево - если в процедуре установить данному параметру значение Ложь, то инструкция по // "ручному" обновлению показана не будет. -Процедура ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка) Экспорт +Процедура ПриВыполненииОбновленияИнформационнойБазы(СтандартнаяОбработка, ЗавершениеРаботыСистемы = Ложь) Экспорт СтандартнаяОбработка = Ложь; - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); + Если ЗавершениеРаботыСистемы Тогда + ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ПолученоОбновлениеКонфигурации", Истина, Истина); + ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.Форма", ПараметрыФормы); + Иначе + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); + КонецЕсли; КонецПроцедуры @@ -172,8 +181,7 @@ Неопределено, // ПараметрыФайлаПроверкиОбновления "", // ИмяСтраницы ОбщегоНазначенияКлиент.ДатаСеанса(), // ВремяПолученияОбновления - "" // ПоследняяВерсияКонфигурации - ); + ""); // ПоследняяВерсияКонфигурации КонецЕсли; Возврат ДоступноеОбновлениеКонфигурации; @@ -219,7 +227,14 @@ Функция АдресКаталогаШаблоновНаСервереОбновлений() Экспорт СерверОбновлений = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КаталогОбновлений; - СерверОбновлений = СтрЗаменить(СерверОбновлений, "http://", ""); + + Если Найти(СерверОбновлений, "ftp://") <> 0 Тогда + Протокол = "ftp://"; + Иначе + Протокол = "http://"; + КонецЕсли; + + СерверОбновлений = СтрЗаменить(СерверОбновлений, Протокол, ""); КаталогШаблоновНаСервере = ""; Позиция = Найти(СерверОбновлений, "/"); Если Позиция > 0 Тогда @@ -237,12 +252,20 @@ Функция АдресСервераОбновлений() Экспорт СерверОбновлений = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КаталогОбновлений; - СерверОбновлений = СтрЗаменить(СерверОбновлений, "http://", ""); + + Если Найти(СерверОбновлений, "ftp://") <> 0 Тогда + Протокол = "ftp://"; + Иначе + Протокол = "http://"; + КонецЕсли; + + СерверОбновлений = СтрЗаменить(СерверОбновлений, Протокол, ""); Позиция = Найти(СерверОбновлений, "/"); Если Позиция > 0 Тогда СерверОбновлений = Сред(СерверОбновлений, 1, Позиция - 1); КонецЕсли; - Возврат "http://" + СерверОбновлений; + + Возврат Протокол + СерверОбновлений; КонецФункции @@ -686,13 +709,37 @@ ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); ПараметрыПредупреждения.Вставить("ДействиеПриУстановленномФлажке", ДействиеПриУстановленномФлажке); ПараметрыПредупреждения.Вставить("Приоритет", 50); - ПараметрыПредупреждения.Вставить("ОчищатьПредупрежденияДругихОбработчиков", Истина); + ПараметрыПредупреждения.Вставить("ВывестиОдноПредупреждение", Истина); Предупреждения.Добавить(ПараметрыПредупреждения); КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы + +// Проверяет легальность получения обновления. При отсутствии подсистемы +// проверки легальности возвращает Истина +// +Функция ПроверитьЛегальностьПолученияОбновления() Экспорт + + ОбновлениеПолученоЛегально = Истина; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда + МодульПроверкаЛегальностиПолученияОбновленияКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПроверкаЛегальностиПолученияОбновленияКлиент"); + ОбновлениеПолученоЛегально = МодульПроверкаЛегальностиПолученияОбновленияКлиент.ПроверитьЛегальностьПолученияОбновления(); + + Если ОбновлениеПолученоЛегально = Неопределено Тогда + ОбновлениеПолученоЛегально = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат ОбновлениеПолученоЛегально; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -727,14 +774,7 @@ // Вызывается при интерактивном начале работы пользователя с областью данных. // Соответствует событию ПриНачалеРаботыСистемы модулей приложения. // -// Параметры: -// ОбработкаПараметровЗапуска - Булево. -// Истина - обработчик вызван при обычном входе пользователя -// в систему и обработка параметров запуска будет выполнена. -// Ложь - обработчик вызван при входе неразделенного пользователя -// в область данных и обработка параметров запуска будет пропущена. -// -Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт +Процедура ПриНачалеРаботыСистемы() Экспорт ПроверитьОбновлениеКонфигурации(); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl index 81455752b..ece8b4c4f 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl @@ -18,13 +18,6 @@ // Процедура ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ) Экспорт - // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - Если ПредыдущаяСтраница = "ФайлОбновления" И СледующаяСтраница <> "ФайлОбновления" - И НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПроверитьЛегальностьПолученияОбновления() Тогда - Отказ = Истина; - КонецЕсли; - // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - КонецПроцедуры // Обработчик вызывается перед завершением работы системы при обновлении конфигурации из помощника. diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 0f5db1440..a3b7f4a31 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -45,10 +45,15 @@ // // Возвращаемое значение: // Структура - содержит имена (ключи) и значения затребованных реквизитов. -// +// Если строка затребованных реквизитов пуста, то возвращается пустая структура +// Функция ЗначенияРеквизитовОбъекта(Ссылка, Реквизиты) Экспорт Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда + Если ПустаяСтрока(Реквизиты) Тогда + Возврат Новый Структура; + КонецЕсли; + СтруктураРеквизитов = Новый Структура(Реквизиты); ИначеЕсли ТипЗнч(Реквизиты) = Тип("Структура") @@ -213,7 +218,7 @@ Результат = Новый Массив; - ШаблонЗапроса = + ШаблонЗапроса = "ВЫБРАТЬ | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка |ИЗ @@ -231,10 +236,11 @@ ИменаДокументов = Новый Массив; Для Каждого Документ Из Документы Цикл - ИмяДокумента = Документ.Метаданные().ПолноеИмя(); - Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено - и Метаданные.Документы.Содержит(Метаданные.НайтиПоПолномуИмени(ИмяДокумента)) Тогда - ИменаДокументов.Добавить(ИмяДокумента); + МетаданныеДокумента = Документ.Метаданные(); + Если ИменаДокументов.Найти(МетаданныеДокумента.ПолноеИмя()) = Неопределено + И Метаданные.Документы.Содержит(МетаданныеДокумента) + И МетаданныеДокумента.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда + ИменаДокументов.Добавить(МетаданныеДокумента.ПолноеИмя()); КонецЕсли; КонецЦикла; @@ -620,178 +626,6 @@ КонецФункции // ПрочитатьXMLВТаблицу() -// Читает из строки XML или ЧтенияXML и возвращает структуру с описанием и данными таблицы значений. -// -// Параметры: -// Текст - строка, или ЧтениеXML с данными. -// -// Ожидаемый XML: -// - типовая сериализация таблицы значений ( {http://v8.1c.ru/8.1/data/core}, ValueTable ) -// -// - старый формат: -// <Items Description="<Описание>" Columns="<ИмяКолонки1>, <ИмяКолонки2>... <ИмяКолонки3>" > -// <Item <ИмяКолонки1>="<Значение1>" <ИмяКолонки2>="<Значение2>" ... /> -// ... -// </Items> -// -// - новый, упрощенный формат: -// <ТегКорня <ПервыйАтрибут>="<ОписаниеКолонок" Description="<Описание>"> -// <ТегСтроки <ИмяКолонки1>="<Значение1>" <ИмяКолонки2>="<Значение2>" ... /> -// ... -// </ТегКорня> -// При этом ТегКорня и ТегСтроки могут быть произвольными, Описание таблицы считывается из необязательного -// атрибута Description корня, описание колонок - из первого атрибута корня. Описание колонок состоит из -// разделенных запятыми данных одиночной колонки. Для одиночной колонки указывается имя, необязательный тип -// и необязательные квалификаторы. Например, описание колонок может быть таким: -// "Код (Строка, 3, Фиксированная), Наименование (Строка), Порядок(Число, 10, 0, Неотрицательный), Данные" -// Подробно описание типов см в функции ОписаниеТипаИзСтроки. -// -Функция ТаблицаЗначенийИзXML(Текст) Экспорт - - Если ТипЗнч(Текст)=Тип("ЧтениеXML") Тогда - Чтение = Текст; - Иначе - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(Текст); - КонецЕсли; - - // Пытаемся читать как стандартную сериализацию - ТипДанных = СериализаторXDTO.ПолучитьXMLТип(Чтение); - Если ТипДанных=СериализаторXDTO.XMLТип(Тип("ТаблицаЗначений")) Тогда - Возврат Новый Структура("Данные, Описание", СериализаторXDTO.ПрочитатьXML(Чтение) ); - КонецЕсли; - - // Разбираем формат вручную (стоим на корневом узле - результат попытки чтения) - ТипУзла = Чтение.ТипУзла; - Пока Истина Цикл - Если ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда - Прервать; - ИначеЕсли ТипУзла=ТипУзлаXML.Ничего Тогда - ВызватьИсключение НСтр("ru='Не найден корневой узел XML'"); - КонецЕсли; - Чтение.Прочитать(); - КонецЦикла; - - ИмяКорня = Чтение.Имя; - - ИмяАтрибутаОписания = "Description"; - Описание = Чтение.ПолучитьАтрибут(ИмяАтрибутаОписания); - - ИменаКолонок = Чтение.ПолучитьАтрибут("Columns"); - Если ИменаКолонок=Неопределено Тогда - // Читаем из первого подходящего атрибута - не описания - Пока Чтение.СледующийАтрибут() Цикл - Если Описание=Неопределено Или Чтение.Имя<>ИмяАтрибутаОписания Тогда - ИменаКолонок = Чтение.Значение; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Формируем колонки с типом - ИменаКолонок = СтрЗаменить(СтрЗаменить(ИменаКолонок, " ", "") + ",", "),", Символы.ПС); - Результат = Новый ТаблицаЗначений; - Колонки = Результат.Колонки; - - Для Индекс=1 По СтрЧислоСтрок(ИменаКолонок) Цикл - СтрокаИмени = СтрПолучитьСтроку(ИменаКолонок, Индекс); - Поз = Найти(СтрокаИмени, "("); - Если Поз>0 Тогда - // Нашли описание типа - Результат.Колонки.Добавить(Лев(СтрокаИмени, Поз-1), ОписаниеТипаИзСтроки( Сред(СтрокаИмени, Поз+1) )); - Иначе - Для Каждого КлючЗначение Из Новый Структура(СтрокаИмени) Цикл - Колонки.Добавить(КлючЗначение.Ключ); - КонецЦикла - КонецЕсли; - КонецЦикла; - - // Собственно чтение - Пока Чтение.Прочитать() Цикл - ТипУзла = Чтение.ТипУзла; - Если ТипУзла=ТипУзлаXML.КонецЭлемента И Чтение.Имя=ИмяКорня Тогда - Прервать; - ИначеЕсли ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда - СтрокаТаблицы = Результат.Добавить(); - Для Каждого Колонка Из Колонки Цикл - Имя = Колонка.Имя; - СтрокаТаблицы[Имя] = Чтение.ПолучитьАтрибут(Имя); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Возврат Новый Структура("Описание, Данные", Описание, Результат); -КонецФункции - -// Возвращает объект ОписаниеТипов, построенный по строке текста -// -// Параметры: -// Текст - строка, описывающая тип. Состоит из обязательного имени типа и необязательных квалификаторов, -// разделенных запятыми. -// -// Для типа "Строка" распознаются необязательные квалификаторы: -// - максимальная длина (число, по умолчанию 0 - без ограничений) -// - допустимая длина (строка "Переменная" или "Фиксированная", по умолчанию - переменная) -// -// Для типа "Число" распознаются необязательные квалификаторы: -// - число разрядов (число, по умолчанию 0 - без ограничений) -// - число разрядов дробной части (число, по умолчанию 0) -// - допустимый знак (строка "Любой" или "Неотрицательный", по умолчанию - любой) -// -// Для типа "Дата" распознается необязательный квалификатор части даты (строка "Время" или "Дата" или "ДатаВремя", -// по умолчанию "ДатаВремя") -// -// Для типа "ДвоичныеДанные" распознаются необязательные квалификаторы: -// - максимальная длина (число, по умолчанию 0 - без ограничений) -// - допустимая длина (строка "Переменная" или "Фиксированная", по умолчанию - переменная) -// -// Для остальных типов обрабатывается только имя типа -// -Функция ОписаниеТипаИзСтроки(Текст) Экспорт - ЧастиОписания = СтрЗаменить(СтрЗаменить(Текст, Символы.ПС, ""), ",", Символы.ПС); - КоличествоЧастей = СтрЧислоСтрок(ЧастиОписания); - - ИмяИсходногоТипа = СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 1)); - Если КоличествоЧастей=1 Тогда - Возврат Новый ОписаниеТипов(ИмяИсходногоТипа); - КонецЕсли; - - ИсходныйТип = Тип(ИмяИсходногоТипа); - Если ИсходныйТип=Тип("Строка") Или ИсходныйТип=Тип("ДвоичныеДанные") Тогда - МаксимальнаяДлинаСтроки = "0" + СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 2)); - ДопустимаяДлинаСтроки = СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 3)); - Если ПустаяСтрока(ДопустимаяДлинаСтроки) Тогда - ДопустимаяДлинаСтроки = "Переменная"; - КонецЕсли; - Возврат Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки( - Число(МаксимальнаяДлинаСтроки), ДопустимаяДлина[ДопустимаяДлинаСтроки] - )); - - ИначеЕсли ИсходныйТип=Тип("Число") Тогда - ДлинаЧисла = "0" + СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 2)); - ДлинаДробнойЧасти = "0" + СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 3)); - ДопустимыйЗнакЧисла = СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 4)); - Если ПустаяСтрока(ДопустимыйЗнакЧисла) Тогда - ДопустимыйЗнакЧисла = "Любой"; - КонецЕсли; - Возврат Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла( - Число(ДлинаЧисла), Число(ДлинаДробнойЧасти), ДопустимыйЗнак[ДопустимыйЗнакЧисла] - )); - - ИначеЕсли ИсходныйТип=Тип("Дата") Тогда - СоставДаты = СокрЛП(СтрПолучитьСтроку(ЧастиОписания, 2)); - Если ПустаяСтрока(СоставДаты) Тогда - СоставДаты = "ДатаВремя"; - КонецЕсли; - Возврат Новый ОписаниеТипов("Дата", Новый КвалификаторыДаты( - ЧастиДаты[СоставДаты] - )); - - КонецЕсли; - - Возврат Новый ОписаниеТипов(ИмяИсходногоТипа); -КонецФункции - // Функция выполняет сравнение двух коллекций строк, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. // Сравниваемые коллекции должны отвечать следующим требованиям: @@ -1368,8 +1202,14 @@ Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт Результат = Новый Структура("Соединение, КраткоеОписаниеОшибки, ПодробноеОписаниеОшибки, ОшибкаПодключенияКомпоненты", - Неопределено, "", "", Ложь - ); + Неопределено, "", "", Ложь); + + Если ЭтоLinuxСервер() Тогда + Результат.Соединение = Неопределено; + Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux.'"); + Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки; + Возврат Результат; + КонецЕсли; Попытка COMConnector = Новый COMObject(ИмяCOMСоединителя()); // "V82.COMConnector" @@ -1814,15 +1654,13 @@ ИмяТочкиПодключения, ИмяПользователя, Пароль, - 3 - ); + 3); Попытка WSПроксиPing.Ping(); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -1835,8 +1673,7 @@ ИмяТочкиПодключения, ИмяПользователя, Пароль, - Таймаут - ); + Таймаут); КонецФункции @@ -1949,6 +1786,7 @@ ОбщиеПараметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", "8.2.17.153"); ОбщиеПараметры.Вставить("РаботаВПрограммеЗапрещена", Ложь); ОбщиеПараметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Истина); + ОбщиеПараметры.Вставить("ОтключитьСправочникИдентификаторыОбъектовМетаданных", Ложь); ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры); @@ -1969,6 +1807,56 @@ КонецФункции +// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. +// В главном узле всегда - Ложь. +// +Функция ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ() Экспорт + + Возврат ЭтоПодчиненныйУзелРИБ() И КонфигурацияИзменена(); + +КонецФункции + +// Возвращает Истина, если текущий сеанс выполняется на сервере, работающим под управлением ОС Linux. +// +// Возвращаемое значение: +// (Булево) Истина, если сервер работает под управлением ОС Linux. +// +Функция ЭтоLinuxСервер() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; + +КонецФункции + +// Выполняет проверки перед запуском переданной формы. +// +Функция ПриСозданииФормыНаСервере(Форма, СтандартнаяОбработка, Отказ) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Отказ = Истина; + Возврат Истина; + КонецЕсли; + + Если Форма.Параметры.Свойство("АвтоТест") И ПравоДоступа("Администрирование", Метаданные) Тогда + // Возврат при получении формы для анализа. + Возврат Истина; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеВерсииИБ") Тогда + + МодульОбновлениеИнформационнойБазы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазы"); + Если МодульОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда + Отказ = Истина; + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с формами @@ -2279,73 +2167,97 @@ // СправочникМенеджер, ДокументМенеджер, ... // Функция МенеджерОбъектаПоПолномуИмени(ПолноеИмя) Экспорт + Перем КлассОМ, ИмяОМ, Менеджер; ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); - КлассОМ = ЧастиИмени[0]; - ИмяОМ = ЧастиИмени[1]; - - Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда - Возврат ПланыОбмена[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда - Возврат Справочники[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда - Возврат Документы[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда - Возврат ЖурналыДокументов[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда - Возврат Перечисления[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда - Возврат Отчеты[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда - Возврат Обработки[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда - Возврат ПланыВидовХарактеристик[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда - Возврат ПланыСчетов[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда - Возврат ПланЫВидовРасчета[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда - Возврат РегистрыСведений[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда - Возврат РегистрыНакопления[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда - Возврат РегистрыБухгалтерии[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда - Возврат РегистрыРасчета[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда - Возврат БизнесПроцессы[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда - Возврат Задачи[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда - Возврат Константы[ИмяОМ]; - - ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда - Возврат Последовательности[ИмяОМ]; - - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неизвестный тип объекта метаданных (%1)'"), КлассОМ); + Если ЧастиИмени.Количество() = 2 Тогда + КлассОМ = ЧастиИмени[0]; + ИмяОМ = ЧастиИмени[1]; КонецЕсли; + Если ВРег(КлассОМ) = "ПЛАНОБМЕНА" Тогда + Менеджер = ПланыОбмена; + + ИначеЕсли ВРег(КлассОМ) = "СПРАВОЧНИК" Тогда + Менеджер = Справочники; + + ИначеЕсли ВРег(КлассОМ) = "ДОКУМЕНТ" Тогда + Менеджер = Документы; + + ИначеЕсли ВРег(КлассОМ) = "ЖУРНАЛДОКУМЕНТОВ" Тогда + Менеджер = ЖурналыДокументов; + + ИначеЕсли ВРег(КлассОМ) = "ПЕРЕЧИСЛЕНИЕ" Тогда + Менеджер = Перечисления; + + ИначеЕсли ВРег(КлассОМ) = "ОТЧЕТ" Тогда + Менеджер = Отчеты; + + ИначеЕсли ВРег(КлассОМ) = "ОБРАБОТКА" Тогда + Менеджер = Обработки; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + Менеджер = ПланыВидовХарактеристик; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНСЧЕТОВ" Тогда + Менеджер = ПланыСчетов; + + ИначеЕсли ВРег(КлассОМ) = "ПЛАНВИДОВРАСЧЕТА" Тогда + Менеджер = ПланыВидовРасчета; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРСВЕДЕНИЙ" Тогда + Менеджер = РегистрыСведений; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРНАКОПЛЕНИЯ" Тогда + Менеджер = РегистрыНакопления; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРБУХГАЛТЕРИИ" Тогда + Менеджер = РегистрыБухгалтерии; + + ИначеЕсли ВРег(КлассОМ) = "РЕГИСТРРАСЧЕТА" Тогда + Если ЧастиИмени.Количество() = 2 Тогда + // Регистр расчета + Менеджер = РегистрыРасчета; + Иначе + КлассПодчиненногоОМ = ЧастиИмени[2]; + ИмяПодчиненногоОМ = ЧастиИмени[3]; + Если ВРег(КлассПодчиненногоОМ) = "ПЕРЕРАСЧЕТ" Тогда + // Перерасчет + Менеджер = РегистрыРасчета[ИмяОМ].Перерасчеты; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ВРег(КлассОМ) = "БИЗНЕСПРОЦЕСС" Тогда + Менеджер = БизнесПроцессы; + + ИначеЕсли ВРег(КлассОМ) = "ЗАДАЧА" Тогда + Менеджер = Задачи; + + ИначеЕсли ВРег(КлассОМ) = "КОНСТАНТА" Тогда + Менеджер = Константы; + + ИначеЕсли ВРег(КлассОМ) = "ПОСЛЕДОВАТЕЛЬНОСТЬ" Тогда + Менеджер = Последовательности; + КонецЕсли; + + Если Менеджер <> Неопределено Тогда + Попытка + Возврат Менеджер[ИмяОМ]; + Исключение + Менеджер = Неопределено; + КонецПопытки; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестный тип объекта метаданных ""%1""'"), ПолноеИмя); + КонецФункции + // Возвращает менеджер объекта по ссылке на объект // // Не обрабатываются точки маршрутов бизнес-процессов @@ -2664,6 +2576,8 @@ // Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + Кэш = СтандартныеПодсистемыПовтИсп.ПараметрыБазовойФункциональности( ).ИдентификаторыОбъектовМетаданных; @@ -2734,12 +2648,8 @@ | |Для объекта метаданных ""%1"" |не найден идентификатор - |в справочнике ""Идентификаторы объектов метаданных"". - | - |Если справочник не был обновлен при обновлении информационной базы, - |следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |в справочнике ""Идентификаторы объектов метаданных"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Таблица); ИначеЕсли Выгрузка.Количество() > 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2747,12 +2657,8 @@ | |Для объекта метаданных ""%1"" |найдено несколько идентификаторов - |в справочнике ""Идентификаторы объектов метаданных"". - | - |Данные справочника некорректны. Если справочник не был обновлен - |при обновлении информационной базы, следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |в справочнике ""Идентификаторы объектов метаданных"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Таблица); КонецЕсли; @@ -2765,12 +2671,8 @@ | |Для объекта метаданных ""%1"" |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", - |которому соответствует удаленный объект метаданных. - | - |Данные справочника некорректны. Если справочник не был обновлен - |при обновлении информационной базы, следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |которому соответствует удаленный объект метаданных.'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Таблица); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2778,12 +2680,8 @@ | |Для объекта метаданных ""%1"" |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", - |который соответствует другому объекту метаданных ""%2"". - | - |Данные справочника некорректны. Если справочник не был обновлен - |при обновлении информационной базы, следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |который соответствует другому объекту метаданных ""%2"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Таблица, РезультатПроверки.ОбъектМетаданных); КонецЕсли; @@ -2803,6 +2701,8 @@ // Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + Кэш = СтандартныеПодсистемыПовтИсп.ПараметрыБазовойФункциональности( ).ИдентификаторыОбъектовМетаданных; @@ -2846,12 +2746,8 @@ НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). | |Идентификатор ""%1"" - |не найден в справочнике ""Идентификаторы объектов метаданных"". - | - |Если справочник не был обновлен при обновлении информационной базы, - |следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |не найден в справочнике ""Идентификаторы объектов метаданных"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Строка(Идентификатор)); КонецЕсли; @@ -2866,12 +2762,8 @@ |Идентификатору ""%1"" |найденому в справочнике ""Идентификаторы объектов метаданных"", |соответствует несуществующий объект метаданных - |""%2"". - | - |Если справочник не был обновлен при обновлении информационной базы, - |следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |""%2"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Строка(Идентификатор), Выгрузка[0].ПолноеИмя); Иначе @@ -2880,12 +2772,8 @@ | |Идентификатору ""%1"" |найденому в справочнике ""Идентификаторы объектов метаданных"", - |соответствует удаленный объект метаданных. - | - |Данные справочника некорректны. Если справочник не был обновлен - |при обновлении информационной базы, следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |соответствует удаленный объект метаданных.'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Строка(Идентификатор)); КонецЕсли; Иначе @@ -2895,12 +2783,8 @@ |Идентификатору ""%1"" |найденому в справочнике ""Идентификаторы объектов метаданных"", |соответствует объект метаданных ""%2"", - |полное имя которого отличается от заданного в идентификаторе. - | - |Если справочник не был обновлен при обновлении информационной базы, - |следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |полное имя которого отличается от заданного в идентификаторе.'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Строка(Идентификатор), РезультатПроверки.ОбъектМетаданных.ПолноеИмя()); КонецЕсли; @@ -2912,12 +2796,8 @@ | |Идентификатор ""%1"" |найден в справочнике ""Идентификаторы объектов метаданных"", - |но значение реквизита ""Пометка удаления"" установлено Истина. - | - |Если справочник не был обновлен при обновлении информационной базы, - |следует выполнить обновление вручную: - |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"".'"), + |но значение реквизита ""Пометка удаления"" установлено Истина.'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), Строка(Идентификатор)); КонецЕсли; @@ -2938,6 +2818,8 @@ // Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + СтароеИмяКоллекции = ВРег(ИмяКоллекции(СтароеПолноеИмя)); НовоеИмяКоллекции = ВРег(ИмяКоллекции(НовоеПолноеИмя)); @@ -3179,8 +3061,7 @@ ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта), ?(ПустаяСтрока(ОбъектМетаданных.Синоним), ОбъектМетаданных.Имя, ОбъектМетаданных.Синоним ), - ОбъектМетаданных.ПредставлениеОбъекта - ); + ОбъектМетаданных.ПредставлениеОбъекта); Результат = "[ПредставлениеОбъекта] [Код], [Наименование]"; Результат = СтрЗаменить(Результат, "[ПредставлениеОбъекта]", ПредставлениеОбъекта); @@ -3305,6 +3186,26 @@ КонецФункции +// Возвращает имя предопределенного элемента по указанной ссылке. +// Рекомендуется использовать вместо метода ПолучитьИмяПредопределенного для +// конфигураций рассчитанных для платформ версий 8.2 и 8.3 одновременно. +// +// Параметры: +// Ссылка - ссылка на предопределенный элемент. +// +// Возвращаемое значение: +// Строка - имя предопределенного элемента. +// +Функция ИмяПредопределенного(Знач Ссылка) Экспорт + + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат ЗначениеРеквизитаОбъекта(Ссылка, "ИмяПредопределенныхДанных"); + Иначе + Возврат МенеджерОбъектаПоСсылке(Ссылка).ПолучитьИмяПредопределенного(Ссылка); + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функции определения типов объектов метаданных @@ -3815,8 +3716,7 @@ Значение, ОписаниеНастроек, ИмяПользователя, - НужноОбновитьПовторноИспользуемыеЗначения - ); + НужноОбновитьПовторноИспользуемыеЗначения); КонецПроцедуры @@ -3835,8 +3735,7 @@ КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецФункции @@ -3852,8 +3751,7 @@ ХранилищеОбщихНастроек, КлючОбъекта, КлючНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецПроцедуры @@ -3923,8 +3821,7 @@ Значение, ОписаниеНастроек, ИмяПользователя, - НужноОбновитьПовторноИспользуемыеЗначения - ); + НужноОбновитьПовторноИспользуемыеЗначения); КонецПроцедуры @@ -3943,8 +3840,7 @@ КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецФункции @@ -3960,8 +3856,7 @@ ХранилищеСистемныхНастроек, КлючОбъекта, КлючНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецПроцедуры @@ -3982,8 +3877,7 @@ Значение, ОписаниеНастроек, ИмяПользователя, - НужноОбновитьПовторноИспользуемыеЗначения - ); + НужноОбновитьПовторноИспользуемыеЗначения); КонецПроцедуры @@ -4002,8 +3896,7 @@ КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецФункции @@ -4019,8 +3912,7 @@ ХранилищеНастроекДанныхФорм, КлючОбъекта, КлючНастроек, - ИмяПользователя - ); + ИмяПользователя); КонецПроцедуры @@ -4134,8 +4026,7 @@ // Процедура пакетной записи сообщений в журнал регистрации // -// Параметры: СобытияДляЖурналаРегистрации - массив структур, клиентская глобальная переменная -// Каждая структура - сообщение для журнала регистрации. +// Параметры: СобытияДляЖурналаРегистрации - СписокЗначений, клиентская глобальная переменная // После записи переменная очищается. Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт @@ -4249,9 +4140,11 @@ КонецЕсли; Иначе Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - НачатьТранзакцию(); - Модуль.ЗаблокироватьТекущуюОбластьДанных(ПроверитьОтсутствиеДругихСеансов); + Если НЕ СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + НачатьТранзакцию(); + КонецЕсли; + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(ПроверитьОтсутствиеДругихСеансов); Иначе ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); КонецЕсли; @@ -4278,11 +4171,16 @@ КонецЕсли; Иначе Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Попытка - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - КонецПопытки; + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.РазблокироватьТекущуюОбластьДанных(); + + Если НЕ СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Попытка + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + КонецПопытки; + КонецЕсли; Иначе ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); КонецЕсли; @@ -4402,8 +4300,8 @@ Процедура ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных); Иначе ОбъектВспомогательныхДанных.Записать(); КонецЕсли; @@ -4419,8 +4317,8 @@ Процедура УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных); Иначе ОбъектВспомогательныхДанных.Удалить(); КонецЕсли; @@ -5130,20 +5028,13 @@ РодительМетаданные = ЭлементМетаданные.Родитель(); + // Регистрация исключаемого объекта метаданных целиком (всех ссылок, которые он может содержать). Если ТипЗнч(РодительМетаданные) = Тип("ОбъектМетаданныхКонфигурация") Тогда - // Если указан корневой объект метаданных (справочник, документ, регистр и т.п.): - // - Добавление в исключения объекта метаданных целиком (всех ссылок, которые он может содержать). ИсключенияПоискаСсылок.Вставить(ЭлементМетаданные, "*"); Продолжить; КонецЕсли; - // Если указан конкретный реквизит объекта метаданных: - ПутиКРеквизитам = ИсключенияПоискаСсылок[ЭлементМетаданные]; - Если ПутиКРеквизитам = "*" Тогда - Продолжить; // - Пропуск, если весь объект метаданных уже исключен. - КонецЕсли; - - // - Регистрация исключаемого реквизита объекта метаданных. + // Регистрация исключаемого реквизита объекта метаданных. ОтносительныйПутьКРеквизиту = ЭлементМетаданные.Имя; РодительРодителя = РодительМетаданные.Родитель(); Пока ТипЗнч(РодительРодителя) <> Тип("ОбъектМетаданныхКонфигурация") Цикл @@ -5152,10 +5043,12 @@ РодительРодителя = РодительМетаданные.Родитель(); КонецЦикла; + ПутиКРеквизитам = ИсключенияПоискаСсылок.Получить(РодительМетаданные); Если ПутиКРеквизитам = Неопределено Тогда ПутиКРеквизитам = Новый Массив; + ИначеЕсли ПутиКРеквизитам = "*" Тогда + Продолжить; // - Пропуск, если весь объект метаданных уже исключен. КонецЕсли; - ПутиКРеквизитам.Добавить(ОтносительныйПутьКРеквизиту); ИсключенияПоискаСсылок.Вставить(РодительМетаданные, ПутиКРеквизитам); @@ -5191,8 +5084,8 @@ Процедура ПриСкачиванииФайлаНаСервере(Знач Адрес, Знач ПараметрыПолучения, ВозвращаемоеЗначение) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - ВозвращаемоеЗначение = Модуль.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + ВозвращаемоеЗначение = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); КонецЕсли; КонецПроцедуры @@ -5206,8 +5099,8 @@ Процедура ПриУстановкеРазделенияСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.УстановитьРазделениеСеанса(Использование, ОбластьДанных); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); КонецЕсли; КонецПроцедуры @@ -5221,8 +5114,8 @@ Процедура ПриПолученииЗначенияРазделителяСеанса(ЗначениеРазделителя) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - ЗначениеРазделителя = Модуль.ЗначениеРазделителяСеанса(); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + ЗначениеРазделителя = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); Иначе ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); КонецЕсли; @@ -5237,8 +5130,8 @@ Процедура ПриПолученииИспользованияРазделителяСеанса(ИспользованиеРазделителя) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - ИспользованиеРазделителя = Модуль.ИспользованиеРазделителяСеанса(); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + ИспользованиеРазделителя = МодульРаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(); Иначе ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 6653aa187..4112b71f7 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -10,8 +10,7 @@ // Процедура пакетной записи сообщений в журнал регистрации // -// Параметры: СобытияДляЖурналаРегистрации - массив структур, клиентская глобальная переменная -// Каждая структура - сообщение для журнала регистрации. +// Параметры: СобытияДляЖурналаРегистрации - СписокЗначений, клиентская глобальная переменная // После записи переменная очищается. Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index 7bded60de..aa8b6f2e6 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -10,6 +10,14 @@ // Возвращает Истина, если этот веб клиент не поддерживает расширение работы с файлами. Функция ЭтоВебКлиентБезПоддержкиРасширенияРаботыСФайлами() Экспорт + #Если Не ВебКлиент Тогда + Возврат Ложь; + #КонецЕсли + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83() Тогда + Возврат Ложь; + КонецЕсли; + СистемнаяИнфо = Новый СистемнаяИнформация; Если Найти(СистемнаяИнфо.ИнформацияПрограммыПросмотра, "Safari") <> 0 Тогда @@ -73,5 +81,3 @@ Возврат ОбщегоНазначенияВызовСервера.ШрифтСтиля(ИмяШрифтаСтиля); КонецФункции - - diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 1b0752319..ce9fa82cd 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -1587,6 +1587,11 @@ Элемент.Использование = Использование; КонецЕсли; + // Важно: установка идентификатора должна выполняться + // в конце настройки элемента, иначе он будет скопирован + // в пользовательские настройки частично заполненным. + Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля; + Возврат Элемент; КонецФункции @@ -1653,9 +1658,7 @@ // Представление - представление поля компоновки // Примечание: поиск может осуществляться или по ЛевомуЗначению, или по Представлению // -Процедура УдалитьЭлементыГруппыОтбора(знач ОбластьУдаления, - знач ИмяПоля = Неопределено, - знач Представление = Неопределено) Экспорт +Процедура УдалитьЭлементыГруппыОтбора(знач ОбластьУдаления, знач ИмяПоля = Неопределено, знач Представление = Неопределено) Экспорт Если ЗначениеЗаполнено(ИмяПоля) Тогда ЗначениеПоиска = Новый ПолеКомпоновкиДанных(ИмяПоля); @@ -1707,6 +1710,9 @@ Если ВидСравнения = Неопределено Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; + Если РежимОтображения = Неопределено Тогда + РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; ДобавитьЭлементКомпоновки(ОбластьПоискаДобавления, ИмяПоля, ВидСравнения, ПравоеЗначение, Представление, Использование, РежимОтображения); КонецЕсли; @@ -1727,8 +1733,16 @@ Использование = Неопределено, РежимОтображения = Неопределено) Экспорт - Если Платформа83БезИспользованияРежимаСовместимости() Тогда - ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор; + Если РежимОтображения = Неопределено Тогда + РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + Иначе + ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор; + КонецЕсли; Иначе ОтборДинамическогоСписка = ДинамическийСписок.Отбор; КонецЕсли; @@ -1740,27 +1754,43 @@ ВидСравнения, Представление, Использование, - РежимОтображения - ); + РежимОтображения); КонецПроцедуры -// Устанавливает значение Значение параметра ИмяПараметра динамического списка Список -// или отключает его использование в зависимости от признака Использование. +// Удаляет элементы группы отбора динамического списка. +// Работает для платформы версии 8.3. // +// Параметры: +// ДинамическийСписок (ДинамическийСписок) Реквизит формы, для которого требуется установить отбор. +// Остальные параметры - см. УдалитьЭлементыГруппыОтбора() +// +Процедура УдалитьЭлементыГруппыОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля = Неопределено, Представление = Неопределено) Экспорт + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; + Иначе + ОтборДинамическогоСписка = ДинамическийСписок.Отбор; + КонецЕсли; + + УдалитьЭлементыГруппыОтбора(ОтборДинамическогоСписка, ИмяПоля, Представление); + +КонецПроцедуры + +// Устанавливает / обновляет значение параметра динамического списка. Процедура УстановитьПараметрДинамическогоСписка(Список, ИмяПараметра, Значение, Использование = Истина) Экспорт - Если Использование Тогда - Список.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, Значение); - Иначе - ЗначениеПараметра = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); - Если ЗначениеПараметра <> Неопределено Тогда - ЗначениеПараметра.Значение = Значение; - ЗначениеПараметра.Использование = Ложь; + ЗначениеПараметраКомпоновкиДанных = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); + Если ЗначениеПараметраКомпоновкиДанных <> Неопределено Тогда + Если Использование И ЗначениеПараметраКомпоновкиДанных.Значение <> Значение Тогда + ЗначениеПараметраКомпоновкиДанных.Значение = Значение; + КонецЕсли; + Если ЗначениеПараметраКомпоновкиДанных.Использование <> Использование Тогда + ЗначениеПараметраКомпоновкиДанных.Использование = Использование; КонецЕсли; КонецЕсли; -КонецПроцедуры +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Функции для работы с управляемыми формами @@ -1866,6 +1896,84 @@ КонецФункции +// Возвращает значение свойства Линия системного перечисления ОтображениеОбычнойГруппы. +// +// Возвращаемое значение: +// ОтображениеОбычнойГруппы - Линия для 8.2 и СлабоеВыделение для 8.3. +// +Функция ОтображениеОбычнойГруппыЛиния() Экспорт + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат ОтображениеОбычнойГруппы["СлабоеВыделение"]; + Иначе + Возврат ОтображениеОбычнойГруппы["Линия"]; + КонецЕсли; + +КонецФункции + +// Возвращает значение свойства Отступ системного перечисления ОтображениеОбычнойГруппы. +// +// Возвращаемое значение: +// ОтображениеОбычнойГруппы - Отступ для 8.2 и ОбычноеВыделение для 8.3. +// +Функция ОтображениеОбычнойГруппыОтступ() Экспорт + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат ОтображениеОбычнойГруппы["ОбычноеВыделение"]; + Иначе + Возврат ОтображениеОбычнойГруппы["Отступ"]; + КонецЕсли; + +КонецФункции + +// Возвращает значение свойства РамкаГруппы системного перечисления ОтображениеОбычнойГруппы. +// +// Возвращаемое значение: +// ОтображениеОбычнойГруппы - РамкаГруппы для 8.2 и СильноеВыделение для 8.3. +// +Функция ОтображениеОбычнойГруппыРамкаГруппы() Экспорт + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат ОтображениеОбычнойГруппы["СильноеВыделение"]; + Иначе + Возврат ОтображениеОбычнойГруппы["РамкаГруппы"]; + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с предопределенными данными +// + +// Получает ссылку предопределенного элемента по его полному имени. +// Поддерживаются только те таблицы, которые могут содержать предопределенные элементы: +// справочники, планы видов характеристик, планы счетов и планы видов расчета. +// +// Параметры: +// ПолноеИмяПредопределенного (Строка) Полный путь к предопределенному элементу, включая его имя. +// Формат полностью аналогичен функции глобального контекста ПредопределенноеЗначение(). +// Например: +// "Справочник.ВидыКонтактнойИнформации.EmailПользователя" +// "ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи" +// "ПланСчетов.Хозрасчетный.Материалы" +// "ПланВидовРасчета.Начисления.ОплатаПоОкладу" +// +// Возвращаемое значение: +// Ссылка предопределенного элемента или Неопределено если элемент не найден. +// +Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт + Если ВРег(Прав(ПолноеИмяПредопределенного, 13)) = ".ПУСТАЯССЫЛКА" // Для получения пустых ссылок. + ИЛИ НЕ ЭтоПлатформа83БезРежимаСовместимости() Тогда // А также в версии 8.2 или 8.3 в режиме совместимости с 8.2. + Возврат ПредопределенноеЗначение(ПолноеИмяПредопределенного); // Используется стандартная функция платформы. + КонецЕсли; + + #Если Клиент Тогда + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + #Иначе + Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + #КонецЕсли +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Прочие функции // @@ -2056,16 +2164,25 @@ КонецФункции // Возвращает Истина если конфигурация запущена под управлением платформы 8.3 без использования режима совместимости. -Функция Платформа83БезИспользованияРежимаСовместимости() Экспорт - #Если Клиент Тогда - Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().Платформа83БезИспользованияРежимаСовместимости; +Функция ЭтоПлатформа83БезРежимаСовместимости() Экспорт + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости(); #Иначе - Возврат СтандартныеПодсистемыСервер.Платформа83БезИспользованияРежимаСовместимости(); + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоПлатформа83БезРежимаСовместимости; #КонецЕсли КонецФункции +// Возвращает Истина если конфигурация запущена под управлением платформы 8.3. +// +Функция ЭтоПлатформа83() Экспорт + + Информация = Новый СистемнаяИнформация; + Возврат Лев(Информация.ВерсияПриложения, 3) = "8.3"; + +КонецФункции + // Возвращает Истина, если клиентское приложение подключено к базе через веб-сервер. -// Если подключение не клиентское возвращает Ложь. +// Если нет клиентского приложения, возвращается Ложь. // Функция КлиентПодключенЧерезВебСервер() Экспорт @@ -2078,7 +2195,7 @@ ).Получить("СтрокаСоединенияИнформационнойБазы"); Если СтрокаСоединенияИнформационнойБазы = Неопределено Тогда - Возврат Ложь; + Возврат Ложь; // Нет клиентского приложения. КонецЕсли; #КонецЕсли @@ -2086,6 +2203,57 @@ КонецФункции +// Возвращает Истина, если клиентское приложение запущено под управлением ОС Linux. +// +// Возвращаемое значение: +// Булево. Если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоLinuxКлиент() Экспорт + +#Если Клиент Или ВнешнееСоединение Тогда + СистемнаяИнформация = Новый СистемнаяИнформация; + + ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; +#Иначе + УстановитьПривилегированныйРежим(Истина); + + ЭтоLinuxКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоLinuxКлиент"); + + Если ЭтоLinuxКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; +#КонецЕсли + + Возврат ЭтоLinuxКлиент; + +КонецФункции + +// Возвращает Истина, если клиентское приложение является Веб-клиентом. +// +// Возвращаемое значение: +// Булево. Если нет клиентского приложения, возвращается Ложь. +// +Функция ЭтоВебКлиент() Экспорт + +#Если ВебКлиент Тогда + Возврат Истина; +#ИначеЕсли Клиент Или ВнешнееСоединение Тогда + Возврат Ложь; +#Иначе + УстановитьПривилегированныйРежим(Истина); + + ЭтоВебКлиент = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере().Получить("ЭтоВебКлиент"); + + Если ЭтоВебКлиент = Неопределено Тогда + Возврат Ложь; // Нет клиентского приложения. + КонецЕсли; + + Возврат ЭтоВебКлиент; +#КонецЕсли + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Устаревшие процедуры и функции diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 24238e500..359426135 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -24,25 +24,33 @@ КонецФункции -// Возвращает список имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, -// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. +// Объекты метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. // -// Пример: -// Для документ "Реализация товаров и услуг" настроена подсистема версионирования объектов, -// и подсистема свойств. При этом на экземпляр документа может быть множество ссылок -// в информационной базе (из других документов, регистров). Часть ссылок имеют значение для бизнес-логики -// (например движения по регистрам). Другая часть ссылок - "техногенные" ссылки на объект из объектов ИБ, -// которые относятся к подсистеме версионирования объектов и подсистеме свойств. Такие "техногенные" -// ссылки должны быть отфильтрованы, например, в обработке удаления помеченных и при поиске ссылок на объект -// в подсистеме запрета редактирования ключевых реквизитов. -// Список таких "техногенных" объектов нужно перечислить в этой функции. +// Описание: +// Для документа "Реализация товаров и услуг" настроены подсистемы "Версионирование объектов" и "Свойства". +// При этом документ может быть указан в других объектах метаданных - документах или регистрах. +// Часть ссылок имеют значение для бизнес-логики (например движения по регистрам) и должны выводиться пользователю. +// Другая часть ссылок - "техногенные" ссылки на документ из данных подсистем "Версионирование объектов" и "Свойства", +// должны скрываться от пользователя при поиске ссылок на объект. +// Например, в обработке удаления помеченных или в подсистеме запрета редактирования ключевых реквизитов. +// Список таких "техногенных" объектов нужно перечислить в этой функции. // -// При этом необходимо позаботиться об удалении "техногенных" данных или очистке ссылок на удаленные объекты. -// Это может быть реализовано с помощью подписки на событие ПередУдалением, -// или с помощью установки признака Ведущее для измерений регистров сведений. +// Важно: +// Для избежания появления пустых "битых" ссылок рекомендуется предусмотреть процедуру очистки указанных объектов метаданных. +// Для измерений регистров сведений - с помощью установки флажка "Ведущее", +// тогда запись регистра сведений будет удалена вместе с удалением ссылки, указанной в измерении. +// Для других реквизитов указанных объектов - с помощью подписки на событие ПередУдалением всех типов объектов метаданных, +// которые могут быть записаны в реквизиты указанных объектов метаданных. +// В обработчике необходимо найти "техногенные" объекты, в реквизитах которых указана ссылка удаляемого объекта, +// и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. // // Возвращаемое значение: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// (Массив) из +// |- (ОбъектМетаданных) Объект метаданных или его реквизит, например: +// Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов); +// Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Реквизиты.АвторВерсии); +// |- (Строка) Полное имя объекта метаданных, например: +// Массив.Добавить("РегистрСведений.ВерсииОбъектов"); // Функция ПолучитьИсключенияПоискаСсылок() Экспорт @@ -50,7 +58,7 @@ Возврат Массив; -КонецФункции +КонецФункции // Устанавливает текстовое описание предмета // @@ -153,6 +161,9 @@ // "Больше не задавать этот вопрос" диалога "Завершить работу с программой?". // Значение по умолчанию Истина. // Если установить Ложь, то пользователь не увидит диалог, пока явно не включит его отображение через свои настройки. +// |- ОтключитьСправочникИдентификаторыОбъектовМетаданных (Булево) - отключает заполнение справочника +// ИдентификаторыОбъектовМетаданных, процедуры выгрузки и загрузки элементов справочника в узлах РИБ. +// Востребовано при частичном встраивании БСП в конфигурации на платформе 8.1 // Процедура ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index bb956e16d..bfb75e706 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -26,135 +26,6 @@ КонецФункции -// Возвращает список полных имен всех объектов метаданных, использующихся в общем реквизите-разделителе, -// имя которого передано в качестве значения параметра Разделитель, и значения свойств объекта метаданных, -// которые могут потребоваться для дальнейшей его обработки в универсальных алгоритмах. -// Для последовательностей и журналов документов определяет разделенность по входящим документам: любому из. -// -// Параметры: -// Разделитель - Строка, имя общего реквизита. -// -// Возвращаемое значение: -// ФиксированноеСоответствие, -// Ключ - Строка, полное имя объекта метаданных, -// Значение - ФиксированнаяСтруктура, -// Имя - Строка, имя объекта метаданных, -// Разделитель - Строка, имя разделителя, которым разделен объект метаданных, -// УсловноеРазделение - Строка, полное имя объекта метаданных, выступающего в качестве условия использования -// разделения объекта метаданных данным разделителем. -// -Функция РазделенныеОбъектыМетаданных(Знач Разделитель) Экспорт - - Результат = Новый Соответствие; - - // I. Перебрать состав всех общих реквизитов. - - МетаданныеОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.Найти(Разделитель); - Если МетаданныеОбщегоРеквизита = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Общий реквизит %1 не обнаружен в конфигурации!'"), Разделитель); - КонецЕсли; - - Если МетаданныеОбщегоРеквизита.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда - - СоставОбщегоРеквизита = ОбщегоНазначенияПовтИсп.СоставОбщегоРеквизита(МетаданныеОбщегоРеквизита.Имя); - - ИспользоватьОбщийРеквизит = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать; - АвтоИспользоватьОбщийРеквизит = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Авто; - АвтоИспользованиеОбщегоРеквизита = - (МетаданныеОбщегоРеквизита.АвтоИспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать); - - Для Каждого ЭлементСостава Из СоставОбщегоРеквизита Цикл - - Если (АвтоИспользованиеОбщегоРеквизита И ЭлементСостава.Использование = АвтоИспользоватьОбщийРеквизит) - ИЛИ ЭлементСостава.Использование = ИспользоватьОбщийРеквизит Тогда - - ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", ЭлементСостава.Метаданные.Имя, Разделитель, Неопределено); - Если ЭлементСостава.УсловноеРазделение <> Неопределено Тогда - ДополнительныеДанные.УсловноеРазделение = ЭлементСостава.УсловноеРазделение.ПолноеИмя(); - КонецЕсли; - - Результат.Вставить(ЭлементСостава.Метаданные.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); - - КонецЕсли; - - КонецЦикла; - - Иначе - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для общего реквизита %1 не используется разделение данных!'"), Разделитель); - - КонецЕсли; - - // II. Для последовательностей и журналов определять разделенность по входящим документам. - - // 1) Последовательности. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенной. - Для Каждого МетаданныеПоследовательности Из Метаданные.Последовательности Цикл - - ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", МетаданныеПоследовательности.Имя, Разделитель, Неопределено); - - Если МетаданныеПоследовательности.Документы.Количество() = 0 Тогда - ШаблонСообщения = НСтр("ru = 'В последовательность %1 не включено ни одного документа.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеПоследовательности.Имя); - ЗаписьЖурналаРегистрации("ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных", УровеньЖурналаРегистрации.Ошибка, - МетаданныеПоследовательности, , ТекстСообщения); - - Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); - - Иначе - - Для Каждого МетаданныеДокумента Из МетаданныеПоследовательности.Документы Цикл - - ДополнительныеДанныеОтДокумента = Результат.Получить(МетаданныеДокумента.ПолноеИмя()); - - Если ДополнительныеДанныеОтДокумента <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ДополнительныеДанные, ДополнительныеДанныеОтДокумента, "Разделитель,УсловноеРазделение"); - Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); - КонецЕсли; - Прервать; - - КонецЦикла; - КонецЕсли; - - КонецЦикла; - - // 2) Журналы. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенным. - Для Каждого МетаданныеЖурналаДокументов Из Метаданные.ЖурналыДокументов Цикл - - ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", МетаданныеЖурналаДокументов.Имя, Разделитель, Неопределено); - - Если МетаданныеЖурналаДокументов.РегистрируемыеДокументы.Количество() = 0 Тогда - - ШаблонСообщения = НСтр("ru = 'В журнал %1 не включено ни одного документа.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеЖурналаДокументов.Имя); - ЗаписьЖурналаРегистрации("ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных", УровеньЖурналаРегистрации.Ошибка, - МетаданныеЖурналаДокументов, , ТекстСообщения); - - Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); - - Иначе - - Для Каждого МетаданныеДокумента Из МетаданныеЖурналаДокументов.РегистрируемыеДокументы Цикл - - ДополнительныеДанныеОтДокумента = Результат.Получить(МетаданныеДокумента.ПолноеИмя()); - - Если ДополнительныеДанныеОтДокумента <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ДополнительныеДанные, ДополнительныеДанныеОтДокумента, "Разделитель,УсловноеРазделение"); - Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); - КонецЕсли; - Прервать; - - КонецЦикла; - - КонецЕсли; - - КонецЦикла; - - Возврат Новый ФиксированноеСоответствие(Результат); - -КонецФункции - // Возвращает состав общего реквизита с заданным именем. // // Параметры: @@ -192,8 +63,8 @@ Результат = ""; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Результат = Модуль.РазделительОсновныхДанных(); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + Результат = МодульРаботаВМоделиСервиса.РазделительОсновныхДанных(); КонецЕсли; Возврат Результат; @@ -208,8 +79,8 @@ Результат = ""; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Результат = Модуль.РазделительВспомогательныхДанных(); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + Результат = МодульРаботаВМоделиСервиса.РазделительВспомогательныхДанных(); КонецЕсли; Возврат Результат; @@ -330,11 +201,12 @@ // Определение режима работы для панелей настроек программы. // -// В панелях настроек включены 4 интерфейса: +// В панелях настроек включены 5 интерфейсов: // - Для администратора сервиса в области данных абонента (АС) // - Для администратора абонента (АА) // - Для администратора локального решения в клиент-серверном режиме (ЛКС) // - Для администратора локального решения в файловом режиме (ЛФ) +// - Для администратора автономного рабочего места (АРМ) // // Интерфейсы АС и АА разрезаются при помощи скрытия групп и элементов формы // для всех ролей, кроме роли "АдминистраторСистемы". @@ -351,17 +223,12 @@ РежимРаботы.Вставить("ЭтоАдминистраторСистемы", Пользователи.ЭтоПолноправныйПользователь(, Истина)); // АС, ЛКС, ЛФ // Общие настройки - РежимРаботы.Вставить("МодельСервиса", Ложь); // АС, АА - РежимРаботы.Вставить("Локальный", Ложь); // ЛКС, ЛФ - РежимРаботы.Вставить("Файловый", Ложь); // АС, АА, ЛФ + РежимРаботы.Вставить("МодельСервиса", РазделениеВключено()); // АС, АА + РежимРаботы.Вставить("Локальный", ПолучитьФункциональнуюОпцию("РаботаВЛокальномРежиме")); // ЛКС, ЛФ + РежимРаботы.Вставить("Автономный", ПолучитьФункциональнуюОпцию("РаботаВАвтономномРежиме")); // АРМ + РежимРаботы.Вставить("Файловый", Ложь); // АС, АА, ЛФ РежимРаботы.Вставить("КлиентСерверный", Ложь); // АС, АА, ЛКС - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - РежимРаботы.МодельСервиса = Истина; - Иначе - РежимРаботы.Локальный = Истина; - КонецЕсли; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда РежимРаботы.Файловый = Истина; Иначе @@ -370,24 +237,21 @@ // Точные настройки РежимРаботы.Вставить("АдминистраторСервиса", - РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы - ); // АС + РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы); // АС РежимРаботы.Вставить("АдминистраторАбонента", - РежимРаботы.МодельСервиса И НЕ РежимРаботы.ЭтоАдминистраторСистемы И РежимРаботы.ЭтоАдминистраторПрограммы - ); // АА + РежимРаботы.МодельСервиса И НЕ РежимРаботы.ЭтоАдминистраторСистемы И РежимРаботы.ЭтоАдминистраторПрограммы); // АА РежимРаботы.Вставить("ЛокальныйФайловый", - РежимРаботы.Локальный И РежимРаботы.Файловый - ); // ЛФ + РежимРаботы.Локальный И РежимРаботы.Файловый); // ЛФ РежимРаботы.Вставить("ЛокальныйКлиентСерверный", - РежимРаботы.Локальный И РежимРаботы.КлиентСерверный - ); // ЛКС + РежимРаботы.Локальный И РежимРаботы.КлиентСерверный); // ЛКС + + // Другие настройки + РежимРаботы.Вставить("ЭтоLinuxКлиент", ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент()); + РежимРаботы.Вставить("ЭтоВебКлиент", ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент()); Возврат РежимРаботы; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - // Функция возвращает имя каталога временных файлов. // // Возвращаемое значение: @@ -404,6 +268,8 @@ ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); + УстановитьПривилегированныйРежим(Истина); + Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда @@ -421,6 +287,8 @@ КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + ПредставлениеКонстанты = ?(ОбщийТипПлатформы = "Linux", Метаданные.Константы.КаталогВременныхФайловДляLinux.Представление(), Метаданные.Константы.КаталогВременныхФайловДляWindows.Представление()); @@ -451,6 +319,160 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает список полных имен всех объектов метаданных, использующихся в общем реквизите-разделителе, +// имя которого передано в качестве значения параметра Разделитель, и значения свойств объекта метаданных, +// которые могут потребоваться для дальнейшей его обработки в универсальных алгоритмах. +// Для последовательностей и журналов документов определяет разделенность по входящим документам: любому из. +// +// Параметры: +// Разделитель - Строка, имя общего реквизита. +// +// Возвращаемое значение: +// ФиксированноеСоответствие, +// Ключ - Строка, полное имя объекта метаданных, +// Значение - ФиксированнаяСтруктура, +// Имя - Строка, имя объекта метаданных, +// Разделитель - Строка, имя разделителя, которым разделен объект метаданных, +// УсловноеРазделение - Строка, полное имя объекта метаданных, выступающего в качестве условия использования +// разделения объекта метаданных данным разделителем. +// +Функция РазделенныеОбъектыМетаданных(Знач Разделитель) Экспорт + + Результат = Новый Соответствие; + + // I. Перебрать состав всех общих реквизитов. + + МетаданныеОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.Найти(Разделитель); + Если МетаданныеОбщегоРеквизита = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Общий реквизит %1 не обнаружен в конфигурации!'"), Разделитель); + КонецЕсли; + + Если МетаданныеОбщегоРеквизита.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда + + СоставОбщегоРеквизита = ОбщегоНазначенияПовтИсп.СоставОбщегоРеквизита(МетаданныеОбщегоРеквизита.Имя); + + ИспользоватьОбщийРеквизит = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать; + АвтоИспользоватьОбщийРеквизит = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Авто; + АвтоИспользованиеОбщегоРеквизита = + (МетаданныеОбщегоРеквизита.АвтоИспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать); + + Для Каждого ЭлементСостава Из СоставОбщегоРеквизита Цикл + + Если (АвтоИспользованиеОбщегоРеквизита И ЭлементСостава.Использование = АвтоИспользоватьОбщийРеквизит) + ИЛИ ЭлементСостава.Использование = ИспользоватьОбщийРеквизит Тогда + + ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", ЭлементСостава.Метаданные.Имя, Разделитель, Неопределено); + Если ЭлементСостава.УсловноеРазделение <> Неопределено Тогда + ДополнительныеДанные.УсловноеРазделение = ЭлементСостава.УсловноеРазделение.ПолноеИмя(); + КонецЕсли; + + Результат.Вставить(ЭлементСостава.Метаданные.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + + // По регистрам расчета дополнительно определяется разделенность подчиненных им перерасчетов + Если ОбщегоНазначения.ЭтоРегистрРасчета(ЭлементСостава.Метаданные) Тогда + + Перерасчеты = ЭлементСостава.Метаданные.Перерасчеты; + Для Каждого Перерасчет Из Перерасчеты Цикл + + ДополнительныеДанные.Имя = Перерасчет.Имя; + Результат.Вставить(Перерасчет.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для общего реквизита %1 не используется разделение данных!'"), Разделитель); + + КонецЕсли; + + // II. Для последовательностей и журналов определять разделенность по входящим документам. + + // 1) Последовательности. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенной. + Для Каждого МетаданныеПоследовательности Из Метаданные.Последовательности Цикл + + ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", МетаданныеПоследовательности.Имя, Разделитель, Неопределено); + + Если МетаданныеПоследовательности.Документы.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'В последовательность %1 не включено ни одного документа.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеПоследовательности.Имя); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение разделенных объектов метаданных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, + МетаданныеПоследовательности, , ТекстСообщения); + + Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + + Иначе + + Для Каждого МетаданныеДокумента Из МетаданныеПоследовательности.Документы Цикл + + ДополнительныеДанныеОтДокумента = Результат.Получить(МетаданныеДокумента.ПолноеИмя()); + + Если ДополнительныеДанныеОтДокумента <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ДополнительныеДанные, ДополнительныеДанныеОтДокумента, "Разделитель,УсловноеРазделение"); + Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + КонецЕсли; + + Прервать; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + // 2) Журналы. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенным. + Для Каждого МетаданныеЖурналаДокументов Из Метаданные.ЖурналыДокументов Цикл + + ДополнительныеДанные = Новый Структура("Имя,Разделитель,УсловноеРазделение", МетаданныеЖурналаДокументов.Имя, Разделитель, Неопределено); + + Если МетаданныеЖурналаДокументов.РегистрируемыеДокументы.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'В журнал %1 не включено ни одного документа.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеЖурналаДокументов.Имя); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение разделенных объектов метаданных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, + МетаданныеЖурналаДокументов, , ТекстСообщения); + + Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + + Иначе + + Для Каждого МетаданныеДокумента Из МетаданныеЖурналаДокументов.РегистрируемыеДокументы Цикл + + ДополнительныеДанныеОтДокумента = Результат.Получить(МетаданныеДокумента.ПолноеИмя()); + + Если ДополнительныеДанныеОтДокумента <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ДополнительныеДанные, ДополнительныеДанныеОтДокумента, "Разделитель,УсловноеРазделение"); + Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Новый ФиксированнаяСтруктура(ДополнительныеДанные)); + КонецЕсли; + + Прервать; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Функция получает данные кеша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. // // Параметры: @@ -639,4 +661,3 @@ ИмяТочкиПодключения, ИмяПользователя, Пароль, Таймаут); КонецФункции - diff --git a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl index 9b2c5839f..d56fae645 100644 --- a/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСлужебный/Module.bsl @@ -26,7 +26,6 @@ КонецПроцедуры - // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // // Параметры: @@ -37,6 +36,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.16"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ОрганизацииСлужебный.ОбновитьПредопределенныеВидыКонтактнойИнформацииОрганизаций"; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl index 2732ff9ce..4973f5d13 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезБилайн/Module.bsl @@ -75,7 +75,7 @@ СтруктураОтвета.Прочитать(); ОписаниеОшибки = ОписаниеОшибки + СтруктураОтвета.Значение + Символы.ПС; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЦикла; СтруктураОтвета.Закрыть(); УдалитьФайлы(ИмяФайлаОтвета); @@ -128,7 +128,7 @@ СтруктураОтвета.Прочитать(); SMSSTS_CODE = СтруктураОтвета.Значение; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЦикла; СтруктураОтвета.Закрыть(); УдалитьФайлы(ИмяФайлаОтвета); @@ -257,10 +257,7 @@ БинарныйМассивВЧисло( ПобитовоеИли( ЧислоВБинарныйМассив(192,8), - ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,6)),8) - ) - ) - ); // 0xc0 | (ch >> 6) + ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,6)),8)))); // 0xc0 | (ch >> 6) Результат = Результат + ПредставлениеБайта( БинарныйМассивВЧисло( @@ -268,21 +265,14 @@ ЧислоВБинарныйМассив(128,8), ПобитовоеИ( ЧислоВБинарныйМассив(КодСимвола,8), - ЧислоВБинарныйМассив(63,8) - ) - ) - ) - ); //0x80 | (ch & 0x3F) + ЧислоВБинарныйМассив(63,8))))); //0x80 | (ch & 0x3F) Иначе // 0x7FF < ch <= 0xFFFF Результат = Результат + ПредставлениеБайта ( БинарныйМассивВЧисло( ПобитовоеИли( ЧислоВБинарныйМассив(224,8), - ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,12)),8) - ) - ) - ); // 0xe0 | (ch >> 12) + ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,12)),8)))); // 0xe0 | (ch >> 12) Результат = Результат + ПредставлениеБайта( @@ -291,11 +281,7 @@ ЧислоВБинарныйМассив(128,8), ПобитовоеИ( ЧислоВБинарныйМассив(Цел(КодСимвола / Pow(2,6)),8), - ЧислоВБинарныйМассив(63,8) - ) - ) - ) - ); //0x80 | ((ch >> 6) & 0x3F) + ЧислоВБинарныйМассив(63,8))))); //0x80 | ((ch >> 6) & 0x3F) Результат = Результат + ПредставлениеБайта( @@ -304,11 +290,7 @@ ЧислоВБинарныйМассив(128,8), ПобитовоеИ( ЧислоВБинарныйМассив(КодСимвола,8), - ЧислоВБинарныйМассив(63,8) - ) - ) - ) - ); //0x80 | (ch & 0x3F) + ЧислоВБинарныйМассив(63,8))))); //0x80 | (ch & 0x3F) КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl index b689ed6dc..c575ee133 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезМТС/Module.bsl @@ -101,3 +101,4 @@ Функция ПодключитьВебСервис() Возврат WSСсылки.ОтправкаSMSЧерезМТС.СоздатьWSПрокси("http://mcommunicator.ru/M2M", "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_API", "MTS_x0020_Communicator_x0020_M2M_x0020_XML_x0020_APISoap12"); КонецФункции + diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl index 39989e115..0107a1903 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl @@ -30,8 +30,7 @@ КлючеваяОперацияСсылка, Длительность, ДатаДанные.Ключ, - Данные["ДатаОкончания"] - ); + Данные["ДатаОкончания"]); КонецЦикла; КонецЦикла; Возврат ПериодЗаписи(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 52c113717..2a4582071 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -36,8 +36,7 @@ ДатаИВремяНаКлиенте = ТекущаяДата(); ОценкаПроизводительностиЗамерВремени.Вставить( "СмещениеДатыКлиента", - ДатаИВремяНаСервере - ДатаИВремяНаКлиенте - ); + ДатаИВремяНаСервере - ДатаИВремяНаКлиенте); ПодключитьОбработчикОжидания("ЗаписатьРезультатыАвто", ТекущийПериодЗаписи, Истина); КонецЕсли; @@ -82,8 +81,7 @@ КлючеваяОперацияСсылка, Длительность, ДатаНачала, - ЗначениеТаймера(Ложь) - ); + ЗначениеТаймера(Ложь)); КонецПроцедуры // Функция вызывается при старте замера времени и его завершении. diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index 97cf38bbf..76169c6fb 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -109,8 +109,7 @@ ОписаниеОтбора.Значение, ОписаниеПараметра, ПолучатьРазделенные, - ПолучатьНеразделенные - ); + ПолучатьНеразделенные); КонецЕсли; @@ -128,8 +127,7 @@ КлючИЗначение.Значение, ОписаниеПараметра, ПолучатьРазделенные, - ПолучатьНеразделенные - ); + ПолучатьНеразделенные); КонецЕсли; КонецЕсли; @@ -339,12 +337,11 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - Модуль.ПриОпределенииЗапланированногоМоментаЗапуска( + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриОпределенииЗапланированногоМоментаЗапуска( ПараметрыЗадания, ПланируемыйМоментЗапуска, - СтандартнаяОбработка - ); + СтандартнаяОбработка); КонецЕсли; @@ -354,9 +351,12 @@ ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ПланируемыйМоментЗапуска); + УказанМоментЗапуска = Истина; + Иначе ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ТекущаяУниверсальнаяДата()); + УказанМоментЗапуска = Ложь; КонецЕсли; @@ -381,8 +381,8 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - ПереопределенныйСправочник = Модуль.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); Если ПереопределенныйСправочник <> Неопределено Тогда СправочникДляЗадания = ПереопределенныйСправочник; КонецЕсли; @@ -400,7 +400,9 @@ КонецЕсли; КонецЦикла; - Если Задание.Использование Тогда + Если Задание.Использование + И (УказанМоментЗапуска ИЛИ ПараметрыЗадания.Расписание = Неопределено) Тогда + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; Иначе Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; @@ -502,12 +504,11 @@ СтандартнаяОбработка = Истина; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - Модуль.ПриОпределенииЗапланированногоМоментаЗапуска( + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриОпределенииЗапланированногоМоментаЗапуска( ПараметрыЗадания, ЗапланированныйМоментЗапуска, - СтандартнаяОбработка - ); + СтандартнаяОбработка); КонецЕсли; @@ -517,6 +518,9 @@ ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ЗапланированныйМоментЗапуска); + УказанМоментЗапуска = Истина; + Иначе + УказанМоментЗапуска = Ложь; КонецЕсли; // Типы сохраняемые в хранилище значения @@ -530,6 +534,13 @@ ПараметрыЗадания.Вставить("Расписание", Новый ХранилищеЗначения(ПараметрыЗадания.Расписание)); КонецЕсли; + // Перепланирование задания с расписанием + Если НЕ ПараметрыЗадания.Свойство("ЗапланированныйМоментЗапуска", ЗапланированныйМоментЗапуска) + И ПараметрыЗадания.Свойство("Расписание") Тогда + + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ЗапланированныйМоментЗапуска); + КонецЕсли; + // Блокировка записи задания ЗаблокироватьДанныеДляРедактирования(Идентификатор); @@ -556,7 +567,11 @@ КонецЕсли; КонецЦикла; - Если Задание.Использование Тогда + Если Задание.Использование + И (УказанМоментЗапуска + ИЛИ НЕ ПараметрыЗадания.Свойство("Расписание") + ИЛИ ПараметрыЗадания.Расписание = Неопределено) Тогда + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; Иначе Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index f81361c56..a0b2d836d 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -32,6 +32,28 @@ +КонецПроцедуры + +// Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении +// ошибок в которых они вызываются. +// +// Параметры: +// ОбработчикиОшибок - Соответствие +// Ключ - Псевдоним метода, например ОчиститьОбластьДанных +// Значение - Имя метода - обработчика ошибок, для вызова при возникновении ошибки. +// Обработчик ошибок вызывается в случае завершения выполнения исходного задания +// с ошибкой. Обработчик ошибок вызывается в той же области данных, что и исходное +// задание. +// Метод обработчика ошибок считается разрешенным к вызову механизмами очереди. +// Параметры обработчика ошибок: +// ПараметрыЗадания - Структура - параметры задания очереди +// Параметры +// НомерПопытки +// КоличествоПовторовПриАварийномЗавершении +// ДатаНачалаПоследнегоЗапуска +// +Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт + КонецПроцедуры // Формирует таблицу регламентных заданий diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index 041553977..bc26c9f26 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -56,6 +56,7 @@ // Серверные события: // ПриПолученииСпискаШаблонов // ПриОпределенииПсевдонимовОбработчиков +// ПриОпределенииОбработчиковОшибок // ПриОпределенииИспользованияРегламентныхЗаданий // // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. @@ -92,6 +93,33 @@ // (То же, что ОчередьЗаданийПереопределяемый.ПолучитьРазрешенныеМетодыОчередиЗаданий). СерверныеСобытия.Добавить( "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков"); + + // Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении + // ошибок в которых они вызываются. + // + // Параметры: + // ОбработчикиОшибок - Соответствие + // Ключ - Псевдоним метода, например ОчиститьОбластьДанных + // Значение - Имя метода - обработчика ошибок, для вызова при возникновении ошибки. + // Обработчик ошибок вызывается в случае завершения выполнения исходного задания + // с ошибкой. Обработчик ошибок вызывается в той же области данных, что и исходное + // задание. + // Метод обработчика ошибок считается разрешенным к вызову механизмами очереди. + // Параметры обработчика ошибок: + // ПараметрыЗадания - Структура - параметры задания очереди + // Параметры + // НомерПопытки + // КоличествоПовторовПриАварийномЗавершении + // ДатаНачалаПоследнегоЗапуска + // ИнформацияОбОшибке - ИнформацияОбОшибке - описание ошибки, произошедшей при + // выполнении задания + // + // Синтаксис: + // Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт + // + // (То же, что ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок). + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииОбработчиковОшибок"); // Формирует таблицу регламентных заданий с признаком использования в модели сервиса // @@ -342,15 +370,24 @@ | Очередь.НомерПопытки, | Очередь.Шаблон КАК Шаблон, | ЕСТЬNULL(Очередь.Шаблон.Ссылка, НЕОПРЕДЕЛЕНО) КАК СсылкаШаблона, + | ЕСТЬNULL(ЧасовыеПояса.Значение, """") КАК ЧасовойПояс, + | ВЫБОР + | КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка) + | ТОГДА Очередь.Расписание + | ИНАЧЕ Очередь.Шаблон.Расписание + | КОНЕЦ КАК Расписание, | ВЫБОР | КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка) | ТОГДА Очередь.ИмяМетода | ИНАЧЕ Очередь.Шаблон.ИмяМетода | КОНЕЦ КАК ИмяМетода, | Очередь.Параметры, - | Очередь.ДатаНачалаПоследнегоЗапуска + | Очередь.ДатаНачалаПоследнегоЗапуска, + | Очередь.ДатаЗавершенияПоследнегоЗапуска |ИЗ %1 КАК ОЧЕРЕДЬ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСеансовОбластейДанных КАК Блокировки | ПО Очередь.ОбластьДанныхВспомогательныеДанные = Блокировки.ОбластьДанныхВспомогательныеДанные + | ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса + | ПО Очередь.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные |ГДЕ | Очередь.Использование | И Очередь.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата @@ -375,9 +412,12 @@ | Очередь.НомерПопытки, | НЕОПРЕДЕЛЕНО КАК Шаблон, | НЕОПРЕДЕЛЕНО КАК СсылкаШаблона, + | """" КАК ЧасовойПояс, + | Очередь.Расписание КАК Расписание, | Очередь.ИмяМетода КАК ИмяМетода, | Очередь.Параметры, - | Очередь.ДатаНачалаПоследнегоЗапуска + | Очередь.ДатаНачалаПоследнегоЗапуска, + | Очередь.ДатаЗавершенияПоследнегоЗапуска |ИЗ %1 КАК ОЧЕРЕДЬ |ГДЕ | Очередь.Использование @@ -399,9 +439,12 @@ | ВложенныйЗапрос.НомерПопытки, | ВложенныйЗапрос.Шаблон, | ВложенныйЗапрос.СсылкаШаблона, + | ВложенныйЗапрос.ЧасовойПояс, + | ВложенныйЗапрос.Расписание, | ВложенныйЗапрос.ИмяМетода, | ВложенныйЗапрос.Параметры, - | ВложенныйЗапрос.ДатаНачалаПоследнегоЗапуска + | ВложенныйЗапрос.ДатаНачалаПоследнегоЗапуска, + | ВложенныйЗапрос.ДатаЗавершенияПоследнегоЗапуска |ИЗ | (" + ТекстЗапроса + ") КАК ВложенныйЗапрос | @@ -436,17 +479,20 @@ И Выборка.ОбластьДанных <> -1 И МодульРаботаВМоделиСервиса.ОбластьДанныхЗаблокирована(Выборка.ОбластьДанных) Тогда + РазблокироватьДанныеДляРедактирования(Выборка.Идентификатор); + // Область заблокирована, перейти к следующей записи Продолжить; КонецЕсли; Если ЗначениеЗаполнено(Выборка.Шаблон) - И Выборка.СсылкаШаблона = Неопределено Тогда + И Выборка.СсылкаШаблона = Неопределено Тогда ШаблонСообщения = НСтр("ru = 'На найден шаблон задания очереди с идентификатором %1'", Метаданные.ОсновнойЯзык.КодЯзыка); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Выборка.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Выполнение'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -467,7 +513,47 @@ Возврат; КонецЕсли; - ВыполнитьЗаданиеОчереди(Выборка.Идентификатор, ИсполняющееФоновоеЗадание, Выборка.Шаблон, Выборка.ИмяМетода); + Расписание = Выборка.Расписание.Получить(); + Если Расписание <> Неопределено Тогда + // Проверка попадания в допустимые интервалы очереди + ЧасовойПояс = Выборка.ЧасовойПояс; + + Если ПустаяСтрока(ЧасовойПояс) Тогда + ЧасовойПояс = Неопределено; + КонецЕсли; + + ВремяОбласти = МестноеВремя(ТекущаяУниверсальнаяДата(), ЧасовойПояс); + Просрочено = НЕ Расписание.ТребуетсяВыполнение(ВремяОбласти); + Иначе + Просрочено = Ложь; + КонецЕсли; + + Если Просрочено Тогда + // Требуется перепланировать задание + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Выборка.Идентификатор.Метаданные().ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Идентификатор); + + Если Выборка.ОбластьДанных <> -1 Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + КонецЕсли; + Блокировка.Заблокировать(); + + Задание = Выборка.Идентификатор.ПолучитьОбъект(); + Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; + Задание.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Иначе + ВыполнитьЗаданиеОчереди(Выборка.Идентификатор, ИсполняющееФоновоеЗадание, Выборка.Шаблон, Выборка.ИмяМетода); + КонецЕсли; РазблокироватьДанныеДляРедактирования(Выборка.Идентификатор); @@ -572,7 +658,9 @@ ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , Строка(ЗаписьЗадания.УникальныйИдентификатор()), Комментарий + ЗаписьЗадания.ИмяМетода + ";" + - ?(ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЗаписьЗадания.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()), Формат(ЗаписьЗадания.ОбластьДанныхВспомогательныеДанные, "ЧН=0; ЧГ="), "-1")); + ?(ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЗаписьЗадания.Метаданные().ПолноеИмя(), + ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()), + Формат(ЗаписьЗадания.ОбластьДанныхВспомогательныеДанные, "ЧН=0; ЧГ="), "-1")); КонецПроцедуры @@ -933,7 +1021,7 @@ Блокировка.Заблокировать(); Если НЕ ОбщегоНазначения.СсылкаСуществует(Выборка.Идентификатор) Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Блокировка.Заблокировать(); РазблокироватьДанныеДляРедактирования(Выборка.Идентификатор); ОтменитьТранзакцию(); Возврат; @@ -943,7 +1031,8 @@ // Если состояние задания Выполняется, но данные не заблокированы для редактирования - значит оно уже не выполняется Если Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется Тогда - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'"), Выборка.Идентификатор, + ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.Идентификатор, НСтр("ru = 'Исполняющее задание было принудительно завершено'")); КонецЕсли; @@ -956,12 +1045,12 @@ Метаданные.ОсновнойЯзык.КодЯзыка); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщения - ); + ТекстСообщения); ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); РазблокироватьДанныеДляРедактирования(Выборка.Идентификатор); @@ -1014,12 +1103,12 @@ ШаблонСообщения = НСтр("ru = 'Для шаблон заданий очереди %1 не найдено расписание'", Метаданные.ОсновнойЯзык.КодЯзыка); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.Шаблон); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь заданий. Планирование'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщения - ); + ТекстСообщения); ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); ОтменитьТранзакцию(); @@ -1056,8 +1145,8 @@ ОбластьДанных = Неопределено; Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - ПереопределеннаяОбластьДанных = Модуль.ОпределитьОбластьДанныхДляЗадания(Ссылка); + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + ПереопределеннаяОбластьДанных = МодульОчередьЗаданийСлужебныйРазделениеДанных.ОпределитьОбластьДанныхДляЗадания(Ссылка); Если ПереопределеннаяОбластьДанных <> Неопределено Тогда ОбластьДанных = ПереопределеннаяОбластьДанных; КонецЕсли; @@ -1111,8 +1200,10 @@ // Выполнение задания ВыполненоУспешно = Ложь; + ИнформацияОбОшибкеВыполненияЗадания = Неопределено; Попытка - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Старт'"), Ссылка); + ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Старт'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); Если ЗначениеЗаполнено(Шаблон) Тогда ОбщегоНазначения.ВыполнитьБезопасно(ИмяМетода); @@ -1130,16 +1221,17 @@ ШаблонСообщения = НСтр("ru = 'По завершении выполнения обработчика %1 не была закрыта транзакция'", Метаданные.ОсновнойЯзык.КодЯзыка); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание.ИмяМетода); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий. Выполнение'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий. Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ИсполняющееФоновоеЗадание, - ТекстСообщения - ); + ТекстСообщения); КонецЕсли; - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено успешно'"), Ссылка); + ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено успешно'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка); Исключение @@ -1147,16 +1239,66 @@ ОтменитьТранзакцию(); КонецЦикла; - ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'"), Ссылка, + ЗаписьКонтроляВыполнения(НСтр("ru = 'Очередь регламентных заданий.Завершено с ошибками'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий. Выполнение'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очередь регламентных заданий. Выполнение'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ИсполняющееФоновоеЗадание, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ИнформацияОбОшибкеВыполненияЗадания = ИнформацияОбОшибке(); КонецПопытки; + + Если НЕ ВыполненоУспешно Тогда + // Вызов обработчиков ошибок + ОбработчикОшибок = + ОчередьЗаданийСлужебныйПовтИсп.СоответствиеОбработчиковОшибокПсевдонимам().Получить(ВРег(ИмяМетода)); + + Если ОбработчикОшибок <> Неопределено Тогда + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Параметры", Задание.Параметры.Получить()); + ПараметрыЗадания.Вставить("НомерПопытки", Задание.НомерПопытки); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", Задание.КоличествоПовторовПриАварийномЗавершении); + ПараметрыЗадания.Вставить("ДатаНачалаПоследнегоЗапуска", Задание.ДатаНачалаПоследнегоЗапуска); + + ПараметрыОбработчикаОшибок = Новый Массив; + ПараметрыОбработчикаОшибок.Добавить(ПараметрыЗадания); + ПараметрыОбработчикаОшибок.Добавить(ИнформацияОбОшибкеВыполненияЗадания); + + Попытка + ОбщегоНазначения.ВыполнитьБезопасно(ОбработчикОшибок, ПараметрыОбработчикаОшибок); + Исключение + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + ШаблонКомментария = НСтр("ru = 'Ошибка при выполнении обработчика ошибок + |Псевдоним метода: %1 + |Метод обработчика ошибок: %2 + |По причине: + |%3'"); + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКомментария, + ИмяМетода, + ОбработчикОшибок, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Очередь регламентных заданий. Ошибка обработчика ошибок'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстКомментария); + КонецПопытки; + КонецЕсли; + КонецЕсли; НачатьТранзакцию(); Попытка @@ -1170,6 +1312,7 @@ Задание = Ссылка.ПолучитьОбъект(); Задание.ДатаЗавершенияПоследнегоЗапуска = ТекущаяУниверсальнаяДата(); + Если ВыполненоУспешно Тогда Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено; Иначе @@ -1226,6 +1369,8 @@ // Процедура УстановитьИспользованиеРегламентныхЗаданий() Экспорт + ИнвертироватьИспользование = Не ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ТаблицаИспользованияРегламентныхЗаданий = ПолучитьТаблицуИспользованияРегламентныхЗаданий(); Для Каждого Строка Из ТаблицаИспользованияРегламентныхЗаданий Цикл @@ -1233,9 +1378,17 @@ Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания[Строка.РегламентноеЗадание]); НайденныеРегламентныеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); - Для каждого РегламентноеЗадание Из НайденныеРегламентныеЗадания Цикл - РегламентноеЗадание.Использование = Строка.Использование; - РегламентноеЗадание.Записать(); + Для Каждого РегламентноеЗадание Из НайденныеРегламентныеЗадания Цикл + Если ИнвертироватьИспользование Тогда + ТребуемоеИспользование = Не Строка.Использование; + Иначе + ТребуемоеИспользование = Строка.Использование; + КонецЕсли; + + Если РегламентноеЗадание.Использование <> ТребуемоеИспользование Тогда + РегламентноеЗадание.Использование = ТребуемоеИспользование; + РегламентноеЗадание.Записать(); + КонецЕсли; КонецЦикла; КонецЦикла; @@ -1303,4 +1456,4 @@ КонецПопытки; -КонецПроцедуры +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl index 38aa0b462..52f074bb6 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйПовтИсп/Module.bsl @@ -44,6 +44,35 @@ КонецФункции +// Возвращает соответствие обработчиков ошибок псевдонимам методов, для которых они вызываются +// (в верхнем регистре) +// +// Возвращаемое значение: +// ФиксированноеСоответствие +// Ключ - Псевдоним метода +// Значение - Полное имя метода обработчика +// +Функция СоответствиеОбработчиковОшибокПсевдонимам() Экспорт + + ОбработчикиОшибок = Новый Соответствие; + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииОбработчиковОшибок"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + КонецЦикла; + + ОчередьЗаданийПереопределяемый.ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок); + + Результат = Новый Соответствие; + Для каждого КлючИЗначение Из ОбработчикиОшибок Цикл + Результат.Вставить(ВРег(КлючИЗначение.Ключ), КлючИЗначение.Значение); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + // Возвращает описание параметров заданий очереди // // Возвращаемое значение: @@ -250,8 +279,8 @@ МассивСправочников.Добавить(Справочники.ОчередьЗаданий); Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - Модуль.ПриЗаполненииСправочниковЗаданий(МассивСправочников); + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриЗаполненииСправочниковЗаданий(МассивСправочников); КонецЕсли; Возврат МассивСправочников; diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl index cf7100648..1049ab97a 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебныйРазделениеДанных/Module.bsl @@ -79,7 +79,7 @@ // ИнтервалПовтораПриАварийномЗавершении // Расписание // КоличествоПовторовПриАварийномЗавершении -// Результат - Дата (дата и время), запланированный момент запуска для задания. +// Результат = Дата (дата и время), запланированный момент запуска для задания. // СтандартнаяОбработка - Булево, признак необходимости приведения времени задания к часовому // поясу сервера // @@ -397,9 +397,8 @@ Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.0.0"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ОчередьЗаданийСлужебныйРазделениеДанных.СоздатьЗаданияОчередиПоШаблонамВТекущейОбласти"; - Обработчик.Приоритет = 75; Обработчик.МонопольныйРежим = Истина; Обработчик = Обработчики.Добавить(); diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl index 5ab034c90..f01173d60 100644 --- a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl @@ -125,8 +125,7 @@ Знач НовыйПрефикс, Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - СчетчикОбработанныхОбъектов = 0 - ) + СчетчикОбработанныхОбъектов = 0) Если ТранзакцияАктивна() Тогда @@ -164,8 +163,7 @@ Знач НовыйПрефикс, Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - СчетчикОбработанныхОбъектов = 0 - ) + СчетчикОбработанныхОбъектов = 0) Если ТранзакцияАктивна() Тогда @@ -203,8 +201,7 @@ Знач НовыйПрефикс, Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - СчетчикОбработанныхОбъектов = 0 - ) + СчетчикОбработанныхОбъектов = 0) СчетчикОбработанныхОбъектов = 0; @@ -216,8 +213,7 @@ Знач НовыйПрефикс, Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, - СчетчикОбработанныхОбъектов = 0 - ) + СчетчикОбработанныхОбъектов = 0) СчетчикОбработанныхОбъектов = 0; @@ -232,8 +228,7 @@ Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, Знач ОбрабатыватьВсеДанные = Ложь, - СчетчикОбработанныхОбъектов - ) + СчетчикОбработанныхОбъектов) ПроверитьВозможностьУстановкиПрефикса(); @@ -261,8 +256,7 @@ ОписаниеОбъекта.ЭтоДокумент, СтандартныйПрефикс, ПредыдущийПрефиксИнформационнойБазы, - ОбрабатыватьВсеДанные - ); + ОбрабатыватьВсеДанные); Если Выборка.Пустой() Тогда Продолжить; @@ -351,8 +345,7 @@ УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПерепрефиксацияОбъектов(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -363,8 +356,7 @@ Знач СДаты = Неопределено, Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, Знач ОбрабатыватьВсеДанные = Ложь, - СчетчикОбработанныхОбъектов - ) + СчетчикОбработанныхОбъектов) ПроверитьВозможностьУстановкиПрефикса(); @@ -397,8 +389,7 @@ ПредыдущийПрефиксИнформационнойБазы, ОбрабатыватьВсеДанные, НовыйПрефиксПолный, - СчетчикОбработанныхОбъектов - ); + СчетчикОбработанныхОбъектов); КонецЦикла; @@ -413,8 +404,7 @@ ПредыдущийПрефиксИнформационнойБазы, ОбрабатыватьВсеДанные, НовыйПрефиксПолный, - СчетчикОбработанныхОбъектов - ); + СчетчикОбработанныхОбъектов); КонецЦикла; @@ -427,8 +417,7 @@ УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПерепрефиксацияОбъектов(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -489,8 +478,7 @@ ОписаниеОбъекта.ЭтоДокумент, СтандартныйПрефикс, ПредыдущийПрефиксИнформационнойБазы, - ОбрабатыватьВсеДанные - ); + ОбрабатыватьВсеДанные); Если Выборка.Пустой() Тогда Продолжить; @@ -649,8 +637,7 @@ СтандартныйПрефикс, ПредыдущийПрефиксИнформационнойБазы, ОбрабатыватьВсеДанные, - Истина - ); + Истина); Если Выборка.Пустой() Тогда Продолжить; @@ -855,8 +842,7 @@ УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПерепрефиксацияОбъектов(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -869,8 +855,7 @@ Знач СтандартныйПрефикс, Знач ПредыдущийПрефикс, Знач ОбрабатыватьВсеДанные, - Знач ВыбиратьОрганизацию = Ложь - ) + Знач ВыбиратьОрганизацию = Ложь) Запрос = Новый Запрос; @@ -999,8 +984,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПрефиксОрганизацииЗадан]", ?(ВыбиратьОрганизацию, "ВЫБОР КОГДА Таблица.Организация.Префикс = """" ТОГДА Ложь ИНАЧЕ Истина КОНЕЦ КАК ПрефиксОрганизацииЗадан,", - "Ложь КАК ПрефиксОрганизацииЗадан,") - ); + "Ложь КАК ПрефиксОрганизацииЗадан,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ВыборкаДаты]", ?(ЭтоДокумент, "Таблица.Дата КАК Дата,", "Неопределено КАК Дата,")); Запрос.Текст = ТекстЗапроса; @@ -1031,13 +1015,11 @@ Если КоличествоЛидирующихНулей < 0 Тогда СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. - |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'" - ); + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), Строка(Объект), - Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(КодСтрокой)) - ); + Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(КодСтрокой))); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -1071,13 +1053,11 @@ Если КоличествоЛидирующихНулей < 0 Тогда СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. - |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'" - ); + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), Строка(Объект), - Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(БазовыйКод)) - ); + Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(БазовыйКод))); ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -1410,8 +1390,7 @@ Знач ПредыдущийПрефиксИнформационнойБазы, Знач ОбрабатыватьВсеДанные, Знач НовыйПрефиксПолный, - СчетчикОбработанныхОбъектов - ) + СчетчикОбработанныхОбъектов) Выборка = ВыборкаДанных( ИмяОбъекта, @@ -1419,8 +1398,7 @@ ЭтоДокумент, Истина, ПредыдущийПрефиксИнформационнойБазы, - ОбрабатыватьВсеДанные - ); + ОбрабатыватьВсеДанные); Если Выборка.Пустой() Тогда Возврат; @@ -1523,8 +1501,8 @@ Процедура ПриОпределенииПрефиксаИнформационнойБазы(ПрефиксИнформационнойБазы) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - ПрефиксИнформационнойБазы = Модуль.ПрефиксИнформационнойБазы(); + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + ПрефиксИнформационнойБазы = МодульОбменДаннымиСервер.ПрефиксИнформационнойБазы(); Иначе ПрефиксИнформационнойБазы = ""; КонецЕсли; @@ -1553,8 +1531,8 @@ Процедура УстановитьПрефиксИнформационнойБазы(Знач Префикс) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Модуль.УстановитьПрефиксИнформационнойБазы(Префикс); + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(Префикс); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl index be5c75136..8dda3782a 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиент/Module.bsl @@ -32,8 +32,8 @@ Процедура ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиКлиент"); - Модуль.ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка); + МодульБизнесПроцессыИЗадачиКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиКлиент"); + МодульБизнесПроцессыИЗадачиКлиент.ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index 3193be3f5..b1ef68b1e 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -33,8 +33,7 @@ // или индекс обновлялся менее 5 минут назад. НЕ ОперацииРазрешены() ИЛИ ПолнотекстовыйПоиск.ИндексАктуален() - ИЛИ ТекущаяДата() < ПолнотекстовыйПоиск.ДатаАктуальности() + 300 // Исключение из правила ТекущаяДатаСеанса(). - ); + ИЛИ ТекущаяДата() < ПолнотекстовыйПоиск.ДатаАктуальности() + 300); // Исключение из правила ТекущаяДатаСеанса(). КонецФункции @@ -66,7 +65,7 @@ Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.0.0"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ПолнотекстовыйПоискСервер.ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск"; Обработчик.ОбщиеДанные = Истина; @@ -155,8 +154,7 @@ ТекстДляЖурнала = КомментарийСПараметрами; Если Параметр1 <> Неопределено Тогда ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстДляЖурнала, Параметр1, Параметр2, Параметр3 - ); + ТекстДляЖурнала, Параметр1, Параметр2, Параметр3); КонецЕсли; Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); @@ -167,10 +165,9 @@ // Запись в журнал регистрации ЗаписьЖурналаРегистрации( - НСтр("ru = 'Полнотекстовое индексирование'"), + НСтр("ru = 'Полнотекстовое индексирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурнала, , , - ТекстДляЖурнала - ); + ТекстДляЖурнала); КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index b865cef14..43bc78e3f 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -67,8 +67,7 @@ Таймаут, ЗащищенноеСоединение, ПассивноеСоединение, - НастройкаСохранения - ); + НастройкаСохранения); Возврат Результат; diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 32912d5ea..236ba1324 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -483,14 +483,19 @@ #Если Сервер ИЛИ ВнешнееСоединение Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Получение файлов из Интернета'"), + СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , - СообщениеОбОшибке - ); + СообщениеОбОшибке); #Иначе - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Получение файлов из Интернета'"), + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", СообщениеОбОшибке,,Истина); #КонецЕсли КонецПроцедуры +Функция СобытиеЖурналаРегистрации() + + Возврат НСтр("ru = 'Получение файлов из Интернета'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 2b93614bc..8059634f5 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -45,7 +45,6 @@ // // ПроверятьПраваАдминистрированияСистемы - Булево - если задано Истина, тогда // проверяется наличие роли для администрирования системы. -// У пустого пользователя - роль ПолныеПрава для базовых конфигураций. // Начальное значение: Ложь. // // УчитыватьПривилегированныйРежим - Булево - если задано Истина, тогда @@ -1542,7 +1541,8 @@ Если ЗаписатьВЖурнал Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка записи пользователя ИБ'"), + НСтр("ru = 'Пользователи.Ошибка записи пользователя ИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index 3a80eb8d9..969c96de6 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -125,7 +125,10 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "ПользователиСлужебный"); - + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( + "ПользователиСлужебный"); + КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// @@ -187,6 +190,7 @@ ТекущийПользователь = СвойстваНеуказанногоПользователя.Ссылка; КонецЕсли; Иначе + ИмяПользователя = ТекущийПользовательИБ.Имя; ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ); @@ -231,7 +235,6 @@ Если ЭтоНеразделенныйПользователь ИЛИ Пользователи.ЭтоПолноправныйПользователь( , , Ложь) Тогда - ИмяПользователя = ТекущийПользовательИБ.Имя; ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; Если ЭтоНеразделенныйПользователь Тогда @@ -465,7 +468,8 @@ ПослеЗаписиАдминистратораПриАвторизации(Комментарий); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'"), + НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.Пользователи, Пользователь, @@ -531,8 +535,13 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.16"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ПользователиСлужебный.ОбновитьПредопределенныеВидыКонтактнойИнформацииПользователей"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.19"; + Обработчик.Процедура = "ПользователиСлужебный.ПеренестиГруппыВнешнихПользователейВКорень"; + КонецПроцедуры // Определяет, что используется нестандартный способ установки ролей пользователям ИБ. @@ -563,24 +572,37 @@ СистемнаяИнформация = Новый СистемнаяИнформация; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.2.17.0") > 0 Тогда - НастройкиКлиента = Новый НастройкиКлиентскогоПриложения(); - НастройкиКлиента.ОтображатьПанелиНавигацииИДействий = Ложь; - НастройкиКлиента.ОтображатьПанельРазделов = Истина; - НастройкиКлиента.РежимОткрытияФормПриложения = Вычислить("РежимОткрытияФормПриложения.Закладки"); + Такси = Ложь; + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.3.0") > 0 Тогда + ИмяСвойства = "РежимСовместимостиИнтерфейса"; + ТекущийРежим = Метаданные[ИмяСвойства]; + Если ТекущийРежим = Метаданные.СвойстваОбъектов[ИмяСвойства].Такси + ИЛИ ТекущийРежим = Метаданные.СвойстваОбъектов[ИмяСвойства].ТаксиРазрешитьВерсия8_2 Тогда + + Такси = Истина; + КонецЕсли; + КонецЕсли; - НастройкиИнтерфейса = Новый НастройкиКомандногоИнтерфейса(); - НастройкиИнтерфейса.ОтображениеПанелиРазделов = Вычислить("ОтображениеПанелиРазделов.Текст"); + Если Не Такси Тогда - ПользователиПереопределяемый.ПриУстановкеНачальныхНастроек( - НастройкиКлиента, - НастройкиИнтерфейса - ); - - ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиКлиентскогоПриложения", "", - НастройкиКлиента, , ИмяПользователя); - - ХранилищеСистемныхНастроек.Сохранить("Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса", "", - НастройкиИнтерфейса, , ИмяПользователя); + НастройкиКлиента = Новый НастройкиКлиентскогоПриложения(); + НастройкиКлиента.ОтображатьПанелиНавигацииИДействий = Ложь; + НастройкиКлиента.ОтображатьПанельРазделов = Истина; + НастройкиКлиента.РежимОткрытияФормПриложения = Вычислить("РежимОткрытияФормПриложения.Закладки"); + + НастройкиИнтерфейса = Новый НастройкиКомандногоИнтерфейса(); + НастройкиИнтерфейса.ОтображениеПанелиРазделов = Вычислить("ОтображениеПанелиРазделов.Текст"); + + ПользователиПереопределяемый.ПриУстановкеНачальныхНастроек( + НастройкиКлиента, + НастройкиИнтерфейса); + + ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиКлиентскогоПриложения", "", + НастройкиКлиента, , ИмяПользователя); + + ХранилищеСистемныхНастроек.Сохранить("Общее/ПанельРазделов/НастройкиКомандногоИнтерфейса", "", + НастройкиИнтерфейса, , ИмяПользователя); + КонецЕсли; КонецЕсли; @@ -869,6 +891,23 @@ КонецПроцедуры +// Доопределяет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура, в которую можно вставить параметры работы клиента при запуске. +// Ключ - имя параметра, +// Значение - значение параметра. +// +// Пример использования: +// Параметры.Вставить(<ИмяПараметра>, <Код получения значения параметра>); +// +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события @@ -1571,7 +1610,8 @@ УстановитьПривилегированныйРежим(Истина); ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - Если НЕ ЗначениеЗаполнено(ТекущийПользовательИБ.Имя) Тогда + Если НЕ ЗначениеЗаполнено(ТекущийПользовательИБ.Имя) + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда Если ТипЗнч(ОписаниеПользователяИБ) = Тип("Структура") Тогда // Проверка перед записью обычного пользователя или пользователя ИБ. @@ -1700,6 +1740,7 @@ Имя = ОписаниеПользователяИБ.Имя; Если ПустаяСтрока(Имя) Тогда + // Хранилище настроек использует только первые 64 символа имени пользователя ИБ. ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не заполнено Имя (для входа).'"), , @@ -1708,7 +1749,8 @@ Отказ); ИначеЕсли СтрДлина(Имя) > 64 Тогда - // Хранилище настроек использует только первые 64 символа имени пользователя ИБ. + // Аутентификация через web использует символ ":", + // как разделитель имени и пароля пользователя. ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Имя (для входа) превышает 64 символа.'"), , @@ -1717,8 +1759,6 @@ Отказ); ИначеЕсли Найти(Имя, ":") > 0 Тогда - // Аутентификация через web использует символ ":", - // как разделитель имени и пароля пользователя. ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Имя (для входа) содержит запрещенный символ "":"".'"), , @@ -2256,7 +2296,7 @@ Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ВнешниеПользователи", МассивВнешнихПользователей); - Запрос.УстановитьПараметр("ВсеРоли", ПользователиСлужебный.ВсеРоли().Таблица); + Запрос.УстановитьПараметр("ВсеРоли", ВсеРоли().Таблица); Запрос.УстановитьПараметр("СтарыеРолиВнешнихПользователей", СтарыеРолиВнешнихПользователей); Запрос.УстановитьПараметр("ИспользоватьВнешнихПользователей", ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей")); @@ -2356,7 +2396,8 @@ Строка(Выборка.ГруппаВнешнихПользователей)); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Роль не найдена в метаданных'"), + НСтр("ru = 'Пользователи.Роль не найдена в метаданных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -3019,11 +3060,9 @@ ОписаниеПользователя = СвободныеПользователи.Найти(ПолноеИмяПользователя, "Наименование"); Если ОписаниеПользователя <> Неопределено Тогда - ОбъектПользователь = ОписаниеПользователя.Ссылка.ПолучитьОбъект(); - ОбъектПользователь.ОбменДанными.Загрузка = Истина; ОбъектПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - ОбъектПользователь.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ОбъектПользователь); КонецЕсли; КонецЦикла; @@ -3067,9 +3106,8 @@ Пока Выборка.Следующий() Цикл ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ПользовательОбъект.ОбменДанными.Загрузка = Истина; ПользовательОбъект.Служебный = Истина; - ПользовательОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПользовательОбъект); КонецЦикла; КонецПроцедуры @@ -3112,8 +3150,7 @@ КонецЕсли; Индекс = Индекс-1; КонецЦикла; - Объект.ОбменДанными.Загрузка = Истина; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; КонецПроцедуры @@ -3132,7 +3169,7 @@ НачатьТранзакцию(); Попытка - + ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); Для Каждого Пользователь Из ТаблицаПользователей Цикл @@ -3142,7 +3179,7 @@ МенеджерЗаписи.ИдентификаторПользователяИБ = Пользователь.ИдентификаторПользователяИБ; МенеджерЗаписи.ПорядковыйНомер = НовыйПорядковыйНомер; МенеджерЗаписи.Записать(); - + КонецЦикла; ЗафиксироватьТранзакцию(); @@ -3174,9 +3211,8 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ПользовательОбъект.ОбменДанными.Загрузка = Истина; ПользовательОбъект.Наименование = Пользователи.ПолноеИмяСлужебногоПользователя(Выборка.ИдентификаторПользователяИБ); - ПользовательОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПользовательОбъект); КонецЦикла; КонецПроцедуры @@ -3191,6 +3227,28 @@ КонецПроцедуры +// Вызывается при переходе на версию конфигурации 2.1.4.19 +Процедура ПеренестиГруппыВнешнихПользователейВКорень() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыВнешнихПользователей.Ссылка + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + |ГДЕ + | ГруппыВнешнихПользователей.Родитель.ВсеОбъектыАвторизации = ИСТИНА"; + + Результат = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаГруппаПользователей Из Результат Цикл + ГруппаПользователей = СтрокаГруппаПользователей.Ссылка.ПолучитьОбъект(); + ГруппаПользователей.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГруппаПользователей); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -3205,8 +3263,8 @@ Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); КонецЕсли; КонецПроцедуры @@ -3232,8 +3290,8 @@ ДополнительныеПараметрыКоманднойСтроки) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРаботаСлужебный"); - Модуль.ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы(Перезапустить); + МодульАвтономнаяРаботаСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АвтономнаяРаботаСлужебный"); + МодульАвтономнаяРаботаСлужебный.ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы(Перезапустить); КонецЕсли; КонецПроцедуры @@ -3244,8 +3302,8 @@ Процедура ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор); КонецЕсли; КонецПроцедуры @@ -3261,8 +3319,8 @@ Процедура ПриСозданииЗапросаНаСменуПочты(Знач НоваяПочта, Знач Пользователь, Знач ПарольПользователяСервиса) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.СоздатьЗапросНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.СоздатьЗапросНаСменуПочты(НоваяПочта, Пользователь, ПарольПользователяСервиса); КонецЕсли; КонецПроцедуры @@ -3279,8 +3337,8 @@ Процедура ПриПолученииДействийСПользователемСервиса(ДоступныеДействия, Знач Пользователь = Неопределено) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступныеДействия = Модуль.ПолучитьДействияСПользователемСервиса(Пользователь); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДоступныеДействия = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(Пользователь); КонецЕсли; КонецПроцедуры @@ -3304,11 +3362,11 @@ Процедура ПослеОбновленияСоставовГруппПользователейПереопределяемый(УчастникиИзменений, ИзмененныеГруппы) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеОбновленияСоставовГруппПользователей(УчастникиИзменений, ИзмененныеГруппы); - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); - Модуль.ОбновитьРолиПользователей(УчастникиИзменений); + МодульУправлениеДоступом = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ОбновитьРолиПользователей(УчастникиИзменений); КонецЕсли; КонецПроцедуры @@ -3326,8 +3384,8 @@ НовыйОбъектАвторизации) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( ВнешнийПользователь, СтарыйОбъектАвторизации, НовыйОбъектАвторизации); КонецЕсли; @@ -3347,8 +3405,8 @@ Процедура ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецЕсли; КонецПроцедуры @@ -3366,8 +3424,8 @@ Процедура ПослеУстановкиПользователяИБ(Ссылка, ПарольПользователяСервиса) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); - Модуль.ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); + МодульУправлениеДоступом = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ОбновитьРолиПользователей(Ссылка, ПарольПользователяСервиса); КонецЕсли; КонецПроцедуры @@ -3378,8 +3436,8 @@ Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.ОбновитьОписаниеWebСервисаМенеджераСервиса(); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ОбновитьОписаниеWebСервисаМенеджераСервиса(); КонецЕсли; КонецПроцедуры @@ -3388,8 +3446,8 @@ Процедура ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса); КонецЕсли; КонецПроцедуры @@ -3404,8 +3462,8 @@ Процедура АннулироватьДоступПользователяСервиса(ПользовательОбъект) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.АннулироватьДоступПользователяСервиса(ПользовательОбъект); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.АннулироватьДоступПользователяСервиса(ПользовательОбъект); КонецЕсли; КонецПроцедуры @@ -3422,8 +3480,8 @@ СтандартнаяОбработка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.ОбработкаПолученияФормыПользователя( + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ОбработкаПолученияФормыПользователя( ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка); КонецЕсли; @@ -3441,8 +3499,8 @@ Процедура ЭтоНеразделенныйПользовательИБ(Знач ИдентификаторПользователяИБ, ПользовательНеразделенный) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ПользовательНеразделенный = Модуль.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ПользовательНеразделенный = МодульПользователиСлужебныйВМоделиСервиса.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ); Иначе ПользовательНеразделенный = Ложь; КонецЕсли; @@ -3455,8 +3513,8 @@ Процедура ЗарегистрироватьНеразделенногоПользователя() Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.ЗарегистрироватьНеразделенногоПользователя(); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ЗарегистрироватьНеразделенногоПользователя(); КонецЕсли; КонецПроцедуры @@ -3469,8 +3527,8 @@ Процедура ПриОпределенииДоступностиИзмененияПользователей(ДоступноИзменениеПользователей) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступноИзменениеПользователей = Модуль.ДоступноИзменениеПользователей(); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДоступноИзменениеПользователей = МодульПользователиСлужебныйВМоделиСервиса.ДоступноИзменениеПользователей(); Иначе ДоступноИзменениеПользователей = Истина; КонецЕсли; @@ -3494,8 +3552,8 @@ Процедура ПриПолученииПользовательскихВариантовОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); - Модуль.ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, + МодульВариантыОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПользовательскиеВариантыОтчетов(ОтчетМетаданные, ПользовательИнформационнойБазы, СведенияОВариантахОтчетов, СтандартнаяОбработка); КонецЕсли; @@ -3515,8 +3573,8 @@ Процедура ПриУдаленииПользовательскихВариантовОтчета(СведенияОВариантеОтчета, ПользовательИнформационнойБазы, СтандартнаяОбработка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); - Модуль.УдалитьПользовательскийВариантОтчета(СведенияОВариантеОтчета, + МодульВариантыОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УдалитьПользовательскийВариантОтчета(СведенияОВариантеОтчета, ПользовательИнформационнойБазы, СтандартнаяОбработка); КонецЕсли; @@ -3536,8 +3594,8 @@ Процедура ПриПолученииПрочихПользовательскихНастроек(ПользовательСсылка, Настройки) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПолучитьНастройкиДополнительныхОтчетовИОбработок(ПользовательСсылка, Настройки); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПолучитьНастройкиДополнительныхОтчетовИОбработок(ПользовательСсылка, Настройки); КонецЕсли; КонецПроцедуры @@ -3552,8 +3610,8 @@ Процедура ПриСохраненииПрочихПользовательскихНастроек(Настройки, ПользователиПолучатели) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользователиПолучатели); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ДобавитьКомандыВСписокБыстрогоДоступа(Настройки, ПользователиПолучатели); КонецЕсли; КонецПроцедуры @@ -3568,8 +3626,8 @@ Процедура ПриУдаленииПрочихПользовательскихНастроек(Настройки, ОчищаемыйПользователь) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.УдалитьКомандыИзСпискаБыстрогоДоступа(Настройки, ОчищаемыйПользователь); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.УдалитьКомандыИзСпискаБыстрогоДоступа(Настройки, ОчищаемыйПользователь); КонецЕсли; КонецПроцедуры @@ -4158,7 +4216,8 @@ ТаблицаСтрокой = Запись.Закрыть(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'"), + НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ПользовательИБ, @@ -4175,7 +4234,8 @@ Для каждого Право Из СвойстваНедоступнойРоли.Права Цикл ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'"), + НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , ПользовательИБ, diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 696a5fcab..526a97ff9 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -147,7 +147,7 @@ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяСервиса"), НоваяПочта, ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); КонецПроцедуры @@ -226,7 +226,7 @@ Иначе Прокси.UpdateUser(ПользовательСервиса, ИнформацияОбОшибке); КонецЕсли; - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); КонецПроцедуры @@ -314,7 +314,7 @@ ИнформацияОбОшибке = Неопределено; ПраваДоступаXDTO = Прокси.GetAccessRights(ОбластьДанных, ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); Для каждого ЭлементСпискаПрав Из ПраваДоступаXDTO.Item Цикл Если ЭлементСпискаПрав.AccessRight = "CreateUser" Тогда @@ -357,7 +357,7 @@ ИнформацияОбОшибке = Неопределено; ПраваДоступаОбъектовXDTO = Прокси.GetObjectsAccessRights(ОбъектыДоступа, ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); Возврат ПраваДоступаОбъектовXDTOВДействияСПользователемСервиса(Прокси.ФабрикаXDTO, ПраваДоступаОбъектовXDTO); @@ -372,7 +372,7 @@ ИнформацияОбОшибке = Неопределено; СписокПользователей = Прокси.GetUsersList(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), ); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); @@ -404,7 +404,7 @@ ОбщегоНазначения.ЗначениеРазделителяСеанса(), ИдентификаторПользователяСервиса, ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке) + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); КонецПроцедуры @@ -545,21 +545,3 @@ КонецЕсли; КонецФункции - -Процедура ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке) - - Если ИнформацияОбОшибке = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка вызова операции web-сервиса'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - ИнформацияОбОшибке.DetailErrorDescription); - - ВызватьИсключение ИнформацияОбОшибке.BriefErrorDescription; - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl index e4ee002d9..b32063c2d 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервисаКлиент/Module.bsl @@ -9,21 +9,18 @@ // Открывает форму ввода пароля пользователя сервиса // // Параметры: +// ВладелецФормы - УправляемаяФорма, которую нужно оповестить о выборе. // ПарольПользователяСервиса - Строка - пароль пользователя сервиса -// Отказ - Булево - флаг отказа от выполнения действия +// ПарольЕщёНеВведен - Булево // -Процедура ЗапроситьПарольДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ) Экспорт +Процедура ЗапроситьПарольДляАутентификацииВСервисе(ВладелецФормы, ПарольПользователяСервиса, ПарольЕщёНеВведен) Экспорт Если ПарольПользователяСервиса <> Неопределено Тогда Возврат; КонецЕсли; - Результат = ОткрытьФормуМодально("ОбщаяФорма.АутентификацияВСервисе"); + ОткрытьФорму("ОбщаяФорма.АутентификацияВСервисе", , ВладелецФормы); + + ПарольЕщёНеВведен = Истина; - Если ТипЗнч(Результат) = Тип("Строка") Тогда - ПарольПользователяСервиса = Результат; - Иначе - Отказ = Истина; - КонецЕсли; - КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 1127d7033..81a7594cf 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -30,7 +30,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обновления информационной базы. |Не заполнен параметр работы пользователей: - |""%1"".'"), + |""%1"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), ПредставлениеПараметра); КонецЕсли; diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index b6ed8db01..911be8599 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -312,7 +312,8 @@ // Запись в журнал регистрации. СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), СсылкаИлиИдентификатор); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Поставляемые данные.Получение файла из тома'"), + НСтр("ru = 'Поставляемые данные.Получение файла из тома'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ПоставляемыеДанные, СсылкаИлиИдентификатор, diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index 19eab1f84..2ea32f813 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -152,8 +152,7 @@ Если РеквизитОрганизацияДоступен(Источник) Тогда ПерепрефиксацияОбъектов.ПриОпределенииПрефиксаОрганизации( - Источник[ИмяРеквизитаОрганизация(Источник.Метаданные())], ПрефиксОрганизации - ); + Источник[ИмяРеквизитаОрганизация(Источник.Метаданные())], ПрефиксОрганизации); // если задана пустая ссылка на организацию Если ПрефиксОрганизации = Ложь Тогда diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 1deb4f5eb..3ebf03453 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -49,7 +49,8 @@ // Запись в журнал регистрации. СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Получение файла из тома'"), + НСтр("ru = 'Файлы.Получение файла из тома'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], ПрисоединенныйФайл, @@ -139,7 +140,8 @@ Исключение СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'"), + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], ПрисоединенныйФайл, @@ -341,7 +343,8 @@ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Добавление присоединенного файла'"), + НСтр("ru = 'Файлы.Добавление присоединенного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index 2af57d749..c456a6231 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -535,7 +535,13 @@ Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные); ТабличныйДокумент = ФайловыеФункцииСлужебныйВызовСервера.ТабличныйДокументИзВременногоХранилища(Адрес); - ТабличныйДокумент.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла); + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяДокумента", ЗаголовокСтрока); + ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяОткрываемогоФайла); + ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия); + Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl index cfcb85b25..45d9edb4a 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl @@ -482,7 +482,6 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.2.11"; Обработчик.Процедура = "ПрисоединенныеФайлыСлужебный.ОчиститьНекорректныеЗаписиРегистраСведенийНаличиеПрисоединенныхФайлов"; - Обработчик.Опциональный = Истина; КонецПроцедуры @@ -522,8 +521,7 @@ НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( ИмяКаталогаФайлов, - Строка(УникальныйИдентификатор) + "CatalogRef_" + ЭлементДанных.Метаданные().Имя - ); + Строка(УникальныйИдентификатор) + "CatalogRef_" + ЭлементДанных.Метаданные().Имя); ФайловыеФункцииСлужебный.СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); @@ -552,7 +550,8 @@ Исключение // Возможно, файл не был найден. Отправку данных не прерываем. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'"), + НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -867,7 +866,8 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Запись файла на диск'"), + НСтр("ru = 'Файлы.Запись файла на диск'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], ФайлСсылка, @@ -896,7 +896,8 @@ ОтменитьТранзакцию(); КонецЕсли; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Обновление данных присоединенного файла в хранилище файлов'"), + НСтр("ru = 'Файлы.Обновление данных присоединенного файла в хранилище файлов'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1151,7 +1152,8 @@ УдалитьФайлы(ИмяВременногоФайла); Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1190,7 +1192,7 @@ Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.ОбъектСФайлами.Установить(Выборка.ОбъектСФайлами); НаборЗаписей.Очистить(); - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); КонецЦикла; КонецПроцедуры @@ -1554,8 +1556,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); - Модуль.ОбновитьСостояниеОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста); + МодульФайловыеФункцииСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); + МодульФайловыеФункцииСлужебныйВМоделиСервиса.ОбновитьСостояниеОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста); КонецЕсли; КонецЕсли; @@ -1581,7 +1583,8 @@ Исключение // Возможно, файл не был найден. Отправку данных не прерываем. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'"), + НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/Module.bsl new file mode 100644 index 000000000..9a252afed --- /dev/null +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/Module.bsl @@ -0,0 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Проверка легальности получения обновления". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет обработчик проверки легальности получения обновления. +// +Процедура ОбработчикПроверкиЛегальностиПолученияОбновленияВ83() Экспорт + + ПроверкаЛегальностиПолученияОбновленияКлиент.ПроверитьЛегальностьПолученияОбновленияВ83(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/ПроверкаЛегальностиПолученияОбновленияГлобальный.mdo b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/ПроверкаЛегальностиПолученияОбновленияГлобальный.mdo new file mode 100644 index 000000000..150dce4f0 --- /dev/null +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияГлобальный/ПроверкаЛегальностиПолученияОбновленияГлобальный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a2b2f025-3108-4f13-9440-8909b5e685f5"> + <name>ПроверкаЛегальностиПолученияОбновленияГлобальный</name> + <synonym> + <key>ru</key> + <value>Проверка легальности получения обновления глобальный</value> + </synonym> + <global>true</global> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index 9b355f1f4..a1a60944d 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -13,12 +13,15 @@ // Параметры: // ЗавершатьРаботуСистемы - Булево - завершать работу системы, если пользователь // указал что обновление получено не легально. +// ОткрыватьСЗадержкой - Булево - если Истина, то окно проверки легальности откроется +// с задержкой в 2 секунды. Необходимо для проверки +// легальности при запуске программы. // // Возвращаемое значение: // Булево - Истина, если проверка завершилась успешно (пользователь // подтвердил, что обновление получено легально). // -Функция ПроверитьЛегальностьПолученияОбновления(ЗавершатьРаботуСистемы = Ложь) Экспорт +Функция ПроверитьЛегальностьПолученияОбновления(ЗавершатьРаботуСистемы = Ложь, ОткрыватьСЗадержкой = Ложь) Экспорт Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда Возврат Истина; @@ -28,18 +31,20 @@ ПараметрыФормы.Вставить("ПоказыватьПредупреждениеОПерезапуске", ЗавершатьРаботуСистемы); ПараметрыФормы.Вставить("ПринудительныйЗапуск", Истина); - Результат = ОткрытьФормуМодально("Обработка.ЛегальностьПолученияОбновлений.Форма", ПараметрыФормы); - - Если Результат <> Истина Тогда - Если ЗавершатьРаботуСистемы Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + + Если ОткрыватьСЗадержкой Тогда + ПараметрыРаботыКлиентаПриОбновлении.Вставить("ПараметрыЛегальностиПолученияОбновлений", ПараметрыФормы); + ПодключитьОбработчикОжидания("ОбработчикПроверкиЛегальностиПолученияОбновленияВ83", 2, Истина); + Иначе + ОткрытьФорму("Обработка.ЛегальностьПолученияОбновлений.Форма", ПараметрыФормы); КонецЕсли; - Возврат Ложь; + + Иначе + Результат = ОткрытьФормуМодально("Обработка.ЛегальностьПолученияОбновлений.Форма", ПараметрыФормы); + Возврат (Результат = Истина); КонецЕсли; - Возврат Истина; - КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -55,12 +60,23 @@ Возврат Истина; КонецЕсли; - Если ПараметрыКлиента.НачальноеЗаполнениеДанных - Или Не ПараметрыКлиента.НеобходимоОбновлениеИнформационнойБазы + Если ПараметрыКлиента.ПроверитьЛегальностьПолученияОбновления = Ложь Или Не ПараметрыКлиента.ЭтоГлавныйУзел Тогда Возврат Истина; КонецЕсли; - Возврат ПроверитьЛегальностьПолученияОбновления(Истина); + Возврат ПроверитьЛегальностьПолученияОбновления(Истина, Истина); КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Только для внутреннего использования. +// +Процедура ПроверитьЛегальностьПолученияОбновленияВ83() Экспорт + + ПараметрыФормы = ПараметрыРаботыКлиентаПриОбновлении.ПараметрыЛегальностиПолученияОбновлений; + ОткрытьФорму("Обработка.ЛегальностьПолученияОбновлений.Форма", ПараметрыФормы); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index 3d4c8f650..e35bfa1e3 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -35,14 +35,7 @@ КонецПроцедуры -// Устанавливает управляемую блокировку на пространства блокировок всех -// объектов, входящих в состав разделителя и неразделенные регистры сведений -// хранящие разделенные данные (по текущему значению разделителя). -// Опционально проверяется наличие других пользовательских сеансов -// в текущей области данных. -// Может использоваться только в транзакции. -// Может использоваться только при включенном разделении и установленном -// значении разделителя. +// Устанавливает блокировку области данных // // Параметры: // ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других @@ -59,8 +52,7 @@ Ключ = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( РегистрыСведений.ОбластиДанных, - Новый Структура(РазделительВспомогательныхДанных(), ОбщегоНазначения.ЗначениеРазделителяСеанса()) - ); + Новый Структура(РазделительВспомогательныхДанных(), ОбщегоНазначения.ЗначениеРазделителяСеанса())); КоличествоПопыток = 5; ТекущаяПопытка = 0; @@ -93,6 +85,11 @@ КонецПопытки; КонецЦикла; + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() И НЕ РазделяемаяБлокировка Тогда + УстановитьМонопольныйРежим(Истина); + Возврат; + КонецЕсли; + МодельДанных = РаботаВМоделиСервисаПовтИсп.ПолучитьМодельДанныхОбласти(); Если РазделяемаяБлокировка Тогда @@ -128,6 +125,10 @@ ПространствоБлокировки = ПространствоБлокировки + ".Записи"; + ИначеЕсли ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда + + ПространствоБлокировки = "Перерасчет." + ОписаниеОбъектаМетаданных.Имя + ".НаборЗаписей"; + ИначеЕсли ЭтоПолноеИмяЖурналаДокументов(ПолноеИмяОбъектаМетаданных) ИЛИ ЭтоПолноеИмяПеречисления(ПолноеИмяОбъектаМетаданных) ИЛИ ЭтоПолноеИмяПоследовательности(ПолноеИмяОбъектаМетаданных) ИЛИ @@ -168,8 +169,23 @@ КонецПроцедуры +// Снимает исключительную блокировку области с текущей области данных +// +Процедура РазблокироватьТекущуюОбластьДанных() Экспорт + + Ключ = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( + РегистрыСведений.ОбластиДанных, + Новый Структура(РазделительВспомогательныхДанных(), ОбщегоНазначения.ЗначениеРазделителяСеанса())); + + РазблокироватьДанныеДляРедактирования(Ключ); + + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + // Проверяет блокировку области данных. -// Не может использоваться в транзакции. // // Параметры: // ОбластьДанных - Число - значение разделителя области данных, @@ -182,8 +198,7 @@ Ключ = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( РегистрыСведений.ОбластиДанных, - Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных) - ); + Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных)); Попытка ЗаблокироватьДанныеДляРедактирования(Ключ); @@ -216,8 +231,7 @@ КлючОбласти = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( РегистрыСведений.ОбластиДанных, - Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных) - ); + Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных)); ЗаблокироватьДанныеДляРедактирования(КлючОбласти); Попытка @@ -276,7 +290,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если ИмяФайлаВыгрузки <> Неопределено Тогда Попытка @@ -289,14 +303,13 @@ ОбщегоНазначения.УстановитьРазделениеСеанса(, ОбластьПриемник); - НачатьТранзакцию(); Попытка - ЗаблокироватьТекущуюОбластьДанных(); + ОбщегоНазначения.ЗаблокироватьИБ(); ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяФайлаВыгрузки); - ЗафиксироватьТранзакцию(); + ОбщегоНазначения.РазблокироватьИБ(); Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'"), + ОбщегоНазначения.РазблокироватьИБ(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка УдалитьФайлы(ИмяФайлаВыгрузки); @@ -335,8 +348,7 @@ КлючОбласти = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( РегистрыСведений.ОбластиДанных, - Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных) - ); + Новый Структура(РазделительВспомогательныхДанных(), ОбластьДанных)); ЗаблокироватьДанныеДляРедактирования(КлючОбласти); Попытка @@ -433,10 +445,10 @@ Удаление.Записать(); КонецЦикла; - ИначеЕсли ЭтоПолноеИмяРегистра(ПолноеИмяОбъектаМетаданных) Тогда + ИначеЕсли ЭтоПолноеИмяРегистра(ПолноеИмяОбъектаМетаданных) + ИЛИ ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда ЭтоРегистрСведений = ЭтоПолноеИмяРегистраСведений(ПолноеИмяОбъектаМетаданных); - Если ЭтоРегистрСведений Тогда ОбъектМетаданныхОбласти = Метаданные.РегистрыСведений.Найти(ОписаниеОбъектаМетаданных.Имя); ЭтоНезависимыйРегистрСведений = (ОбъектМетаданныхОбласти.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); @@ -446,29 +458,35 @@ Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - Если Не ЭтоНезависимыйРегистрСведений Тогда + Если ЭтоНезависимыйРегистрСведений Тогда + + НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + + Иначе + + ПараметрыВыборки = ПараметрыВыборки(ПолноеИмяОбъектаМетаданных); + ИмяПоляРегистратор = ПараметрыВыборки.ИмяПоляРегистратор; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | _XMLВыгрузка_Таблица.Регистратор КАК Регистратор |ИЗ - | " + ПолноеИмяОбъектаМетаданных + " КАК _XMLВыгрузка_Таблица"; + | " + ПараметрыВыборки.Таблица + " КАК _XMLВыгрузка_Таблица"; + Если ИмяПоляРегистратор <> "Регистратор" Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Регистратор", ИмяПоляРегистратор); + КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); + НаборЗаписей.Отбор[ИмяПоляРегистратор].Установить(Выборка[ИмяПоляРегистратор]); НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); КонецЦикла; - Иначе - - НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.Записать(); - КонецЕсли; КонецЕсли; @@ -560,8 +578,7 @@ Ключ = СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( РегистрыСведений.ОбластиДанных, - Новый Структура(РазделительВспомогательныхДанных(), Выборка.ОбластьДанных) - ); + Новый Структура(РазделительВспомогательныхДанных(), Выборка.ОбластьДанных)); Попытка ЗаблокироватьДанныеДляРедактирования(Ключ); @@ -595,6 +612,11 @@ КонецЕсли; Менеджер.Повтор = Менеджер.Повтор + 1; + + КопияМенеджера = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(КопияМенеджера, Менеджер); + Менеджер = КопияМенеджера; + Менеджер.Записать(); ПараметрыМетода = Новый Массив; @@ -910,6 +932,62 @@ КонецФункции +// Возвращает внутренний адрес менеджера сервиса +// +// Возвращаемое значение: +// Строка - внутренний адрес менеджера сервиса +// +Функция ВнутреннийАдресМенеджераСервиса() Экспорт + + Возврат Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + +КонецФункции + +// Возвращает имя служебного пользователя менеджера сервиса +// +// Возвращаемое значение: +// Строка - имя служебного пользователя менеджера сервиса +// +Функция ИмяСлужебногоПользователяМенеджераСервиса() Экспорт + + Возврат Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + +КонецФункции + +// Возвращает пароль служебного пользователя менеджера сервиса +// +// Возвращаемое значение: +// Строка - пароль служебного пользователя менеджера сервиса +// +Функция ПарольСлужебногоПользователяМенеджераСервиса() Экспорт + + Возврат Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + +КонецФункции + +// Обрабатывает информация об ошибке полученную из web-сервиса. +// В случае если передана не пустая информация об ошибке, записывает +// подробное представление ошибки в журнал регистрации и вызывает +// исключение с текстом краткого представления об ошибке. +// +Процедура ОбработатьИнформациюОбОшибкеWebСервиса(Знач ИнформацияОбОшибке) Экспорт + + Если ИнформацияОбОшибке = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Резервное копирование приложений.Ошибка вызова операции web-сервиса'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ИнформацияОбОшибке.DetailErrorDescription); + + ВызватьИсключение ИнформацияОбОшибке.BriefErrorDescription; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Работа с файлами @@ -1217,7 +1295,7 @@ Если РазделениеПереключено Тогда // Не установлен режим безопасного разделения данных - ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка публикации'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка публикации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1255,15 +1333,14 @@ // с переключением разделения сеанса на время записи. // // Параметры: -// ОбъектВспомогательныхДанных - значение ссылочного типа или УдалениеОбъекта, +// ОбъектВспомогательныхДанных - значение ссылочного типа или УдалениеОбъекта. // Процедура ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт ОбработатьВспомогательныеДанные( ОбъектВспомогательныхДанных, Истина, - Ложь - ); + Ложь); КонецПроцедуры @@ -1271,15 +1348,14 @@ // с переключением разделения сеанса на время записи. // // Параметры: -// ОбъектВспомогательныхДанных - значение ссылочного типа, +// ОбъектВспомогательныхДанных - значение ссылочного типа. // Процедура УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт ОбработатьВспомогательныеДанные( ОбъектВспомогательныхДанных, Ложь, - Истина - ); + Истина); КонецПроцедуры @@ -1528,7 +1604,26 @@ // Функция ЭтоПолноеИмяРегистраРасчета(Знач ПолноеИмя) Экспорт - Возврат ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(ПолноеИмя, "РегистрРасчета", "CalculationRegister"); + Возврат ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(ПолноеИмя, "РегистрРасчета", "CalculationRegister") + И Не ЭтоПолноеИмяПерерасчета(ПолноеИмя); + +КонецФункции + +// Перерасчеты + +// Определяет принадлежность объекта метаданных к типу "Перерасчет" по полному имени +// объекта метаданных +// +// Параметры: +// ПолноеИмя – Строка, полное имя объекта метаданных, для которого необходимо определить +// принадлежность к заданному типу +// +// Возвращаемое значение: +// Тип: Булево. Истина – объект метаданных принадлежит заданному типу; Ложь – нет. +// +Функция ЭтоПолноеИмяПерерасчета(Знач ПолноеИмя) Экспорт + + Возврат ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(ПолноеИмя, "Перерасчет", "Recalculation", 2); КонецФункции @@ -1648,6 +1743,36 @@ КонецФункции +// Для внутреннего использования. +// +Функция ПараметрыВыборки(Знач ПолноеИмяОбъектаМетаданных) Экспорт + + Результат = Новый Структура("Таблица,ИмяПоляРегистратор"); + + Если ЭтоПолноеИмяРегистра(ПолноеИмяОбъектаМетаданных) + ИЛИ ЭтоПолноеИмяПоследовательности(ПолноеИмяОбъектаМетаданных) Тогда + + Результат.Таблица = ПолноеИмяОбъектаМетаданных; + Результат.ИмяПоляРегистратор = "Регистратор"; + + ИначеЕсли ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда + + Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОбъектаМетаданных, "."); + Результат.Таблица = Подстроки[0] + "." + Подстроки[1] + "." + Подстроки[3]; + Результат.ИмяПоляРегистратор = "ОбъектПерерасчета"; + + Иначе + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Функция ПараметрыВыборки() не должна использоваться для объекта %1.'"), + ПолноеИмяОбъектаМетаданных); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -1725,7 +1850,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -1744,6 +1869,10 @@ // Процедура СменитьСтатусОбластиИУведомитьМенеджер(Знач МенеджерЗаписи, Знач РезультатПодготовки, Знач СообщениеОбОшибке) + КопияМенеджера = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(КопияМенеджера, МенеджерЗаписи); + МенеджерЗаписи = КопияМенеджера; + ВключатьСообщениеОбОшибке = Ложь; Если РезультатПодготовки = "Успех" Тогда МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; @@ -1755,7 +1884,7 @@ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена; ТипСообщения = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОбластьДанныхУдалена(); ИначеЕсли РезультатПодготовки = "ФатальнаяОшибка" Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); МенеджерЗаписи.ОшибкаОбработки = Истина; ТипСообщения = СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс.СообщениеОшибкаПодготовкиОбластиДанных(); @@ -1855,7 +1984,7 @@ Попытка УдалитьФайлы(ИмяФайлаВыгрузки); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Результат; @@ -1866,10 +1995,15 @@ // Функции определения типов объектов метаданных по полному имени объекта // метаданных -Функция ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(Знач ПолноеИмя, Знач РусскаяЛокализация, Знач АнглийскаяЛокализация) +Функция ПроверкаТипаОбъектаМетаданныхПоПолномуИмени(Знач ПолноеИмя, Знач РусскаяЛокализация, Знач АнглийскаяЛокализация, Знач ПозицияПодстроки = 0) - ИмяТипа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".").Получить(0); - Возврат ИмяТипа = РусскаяЛокализация ИЛИ ИмяТипа = АнглийскаяЛокализация; + Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + Если Подстроки.Количество() > ПозицияПодстроки Тогда + ИмяТипа = Подстроки.Получить(ПозицияПодстроки); + Возврат ИмяТипа = РусскаяЛокализация ИЛИ ИмяТипа = АнглийскаяЛокализация; + Иначе + Возврат Ложь; + КонецЕсли; КонецФункции @@ -2170,6 +2304,8 @@ Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, Знач ПутьВместоДанных = Ложь, Знач ПроверятьСуществование = Ложь) Экспорт + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); ОбменЧерезФС = МожноПередаватьЧерезФСССервера(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); @@ -2192,6 +2328,8 @@ ОписаниеФайла = СоздатьОписаниеФайла(); ОписаниеФайла.Имя = СвойстваФайла.Имя; + РазмерПолученногоФайла = СвойстваФайла.Размер(); + Если ПутьВместоДанных Тогда ОписаниеФайла.Данные = Неопределено; ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; @@ -2204,12 +2342,19 @@ КонецПопытки; КонецЕсли; + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ИдентификаторФайла, + РазмерПолученногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + Возврат ОписаниеФайла; Иначе ОбменЧерезФС = Ложь; КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменЧерезФС = Ложь; КонецПопытки; @@ -2273,6 +2418,7 @@ ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); + РазмерПолученногоФайла = ФайлРезультата.Размер(); ОписаниеФайла = СоздатьОписаниеФайла(); ОписаниеФайла.Имя = ФайлРезультата.Имя; @@ -2295,6 +2441,13 @@ Исключение КонецПопытки; + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ИдентификаторФайла, + РазмерПолученногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + Возврат ОписаниеФайла; КонецФункции @@ -2314,6 +2467,8 @@ // Функция ПоместитьФайлВХранилище(Знач АдресДанныеФайл, Знач ПараметрыПодключения, Знач ИмяФайла = "") + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); Описание = ПолучитьИмяФайлаСДанными(АдресДанныеФайл, ИмяФайла); @@ -2327,7 +2482,15 @@ ЦелевойФайл = Новый Файл(ОбщийКаталог + СвойстваФайла.Имя); Если ЦелевойФайл.Существует() Тогда Если СвойстваФайла.ПолноеИмя = ЦелевойФайл.ПолноеИмя Тогда // Это один и тот же файл. Его можно, не передавая, сразу читать на сервере. - Возврат ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); + Результат = ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); + РазмерИсходногоФайла = ЦелевойФайл.Размер(); + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Результат, + РазмерИсходногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + Возврат Результат; // Нельзя удалять, поскольку он является и источником. КонецЕсли; // Источник и приемник - разные файлы. Чтобы не затереть чужой файл, делаем приемнику уникальное имя. @@ -2336,14 +2499,21 @@ КонецЕсли; Попытка - Если Описание.Данные = Неопределено тогда + Если Описание.Данные = Неопределено Тогда КопироватьФайл(СвойстваФайла.ПолноеИмя, ЦелевойФайл.ПолноеИмя); Иначе Описание.Данные.Записать(ЦелевойФайл.ПолноеИмя); КонецЕсли; Результат = ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); + РазмерИсходногоФайла = ЦелевойФайл.Размер(); + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Результат, + РазмерИсходногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла. Обмен через ФС'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла. Обмен через ФС'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбменЧерезФС = Ложь; КонецПопытки; @@ -2372,6 +2542,9 @@ Описание.Данные.Записать(ПолноеИмяФайла); КонецЕсли; + ЦелевойФайл = Новый Файл(ПолноеИмяФайла); + РазмерИсходногоФайла = ЦелевойФайл.Размер(); + // Архивировать файл. ИмяНеразделенногоФайла = ПолучитьИмяВременногоФайла("zip"); Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла, , , , УровеньСжатияZIP.Минимальный); @@ -2422,6 +2595,13 @@ ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей, Результат); КонецЕсли; + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Помещение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + Результат, + РазмерИсходногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + КонецЕсли; // Не ОбменЧерезФС Возврат Результат; @@ -2650,6 +2830,30 @@ КонецФункции +Процедура ЗаписатьВЖурналСобытиеФайловогоХранилища(Знач Событие, + Знач ИдФайла, Знач Размер, Знач Длительность, Знач ПередачаЧерезФайловуюСистему) + + ДанныеСобытия = Новый Структура; + ДанныеСобытия.Вставить("ИдФайла", ИдФайла); + ДанныеСобытия.Вставить("Размер", Размер); + ДанныеСобытия.Вставить("Длительность", Длительность); + + Если ПередачаЧерезФайловуюСистему Тогда + ДанныеСобытия.Вставить("Транспорт", "file"); + Иначе + ДанныеСобытия.Вставить("Транспорт", "ws"); + КонецЕсли; + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Хранилище файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()) + "." + Событие, + УровеньЖурналаРегистрации.Информация, + , + , + ОбщегоНазначения.ЗначениеВСтрокуXML(ДанныеСобытия)); + + +КонецПроцедуры + ///////////////////////////////////////////////////////////////////////////////// // Временные файлы @@ -2677,7 +2881,8 @@ КонецЕсли; КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -3099,14 +3304,13 @@ УстановитьПривилегированныйРежим(Истина); - НачатьТранзакцию(); Попытка - ЗаблокироватьТекущуюОбластьДанных(); + ОбщегоНазначения.ЗаблокироватьИБ(); ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяФайлаВыгрузки); - ЗафиксироватьТранзакцию(); + ОбщегоНазначения.РазблокироватьИБ(); Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'"), + ОбщегоНазначения.РазблокироватьИБ(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка УдалитьФайлы(ИмяФайлаВыгрузки); @@ -3134,13 +3338,12 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа!'"); + ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа!'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации( ПредставлениеИсключения, УровеньЖурналаРегистрации.Ошибка, - Источник.Метаданные() - ); + Источник.Метаданные()); ВызватьИсключение ПредставлениеИсключения; @@ -3157,7 +3360,7 @@ // Параметры: // ОбъектВспомогательныхДанных - значение ссылочного типа или УдалениеОбъекта, // Записать - Булево, признак выполнения записи значения ссылочного типа, -// Удалить - Булево, признак выполнения удаления значения ссылочного типа, +// Удалить - Булево, признак выполнения удаления значения ссылочного типа. // Процедура ОбработатьВспомогательныеДанные(ОбъектВспомогательныхДанных, Знач Записать, Знач Удалить) @@ -3334,10 +3537,6 @@ Попытка - Блокировка = Новый БлокировкаДанных(); - БлокировкаРегистра = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - БлокировкаРегистра.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); ТекстЗапроса = "ВЫБРАТЬ @@ -3474,9 +3673,16 @@ СтандартныеРазделители.Добавить(Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные); СтандартныеРазделители.Добавить(Метаданные.ОбщиеРеквизиты.ОбластьДанныхВспомогательныеДанные); + КонтрольныеПроцедуры = Новый Массив; + КонтрольныеПроцедуры.Добавить(Метаданные.ПодпискиНаСобытия.КонтрольНеразделенныхНаборовЗаписейПриЗаписи.Обработчик); + КонтрольныеПроцедуры.Добавить(Метаданные.ПодпискиНаСобытия.КонтрольНеразделенныхОбъектовПриЗаписи.Обработчик); + КонтролирующиеПодписки = Новый Массив; - КонтролирующиеПодписки.Добавить(Метаданные.ПодпискиНаСобытия.КонтрольНеразделенныхНаборовЗаписейПриЗаписи); - КонтролирующиеПодписки.Добавить(Метаданные.ПодпискиНаСобытия.КонтрольНеразделенныхОбъектовПриЗаписи); + Для Каждого ПодпискаНаСобытие Из Метаданные.ПодпискиНаСобытия Цикл + Если КонтрольныеПроцедуры.Найти(ПодпискаНаСобытие.Обработчик) <> Неопределено Тогда + КонтролирующиеПодписки.Добавить(ПодпискаНаСобытие); + КонецЕсли; + КонецЦикла; НарушенияКонтроляВключенияНеразделенныхДанныхВКонтролирующиеПодписки = Новый Массив(); НарушенияКонтроляРазделенияОбъектовНесколькимиРазделителями = Новый Массив(); @@ -3589,8 +3795,7 @@ |должны быть включены в состав подписок на события (%2), контролирующих |невозможность записи неразделенных данных в разделенных сеансах. |Следующие объекты метаданных не удовлетворяют этому критерию: %3.'"), - ТекстРазделителей, ТекстПодписок, ТекстИсключения) - ); + ТекстРазделителей, ТекстПодписок, ТекстИсключения)); КонецЕсли; @@ -3611,8 +3816,7 @@ ВызываемыеИсключения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Все объекты метаданных конфигурации должны быть разделены не более чем одним разделителем БСП (%1). |Следующие объекты не удовлетворяют этому критерию: %2'"), - ТекстРазделителей, ТекстИсключения) - ); + ТекстРазделителей, ТекстИсключения)); КонецЕсли; @@ -3670,8 +3874,7 @@ |быть расположен в дереве метаданных конфигурации до общего реквизита |%2 по порядку!'"), РазделительВнутренний.Имя, - РазделительПрикладной.Имя - ); + РазделительПрикладной.Имя); КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl index 28ca64a7b..206e62c71 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -105,16 +105,14 @@ РазделительОсновныхДанных = ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных(); ОсновныеДанныеОбласти = ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных( - РазделительОсновныхДанных - ); + РазделительОсновныхДанных); Для Каждого ЭлементОсновныхДанныхОбласти Из ОсновныеДанныеОбласти Цикл Результат.Вставить(ЭлементОсновныхДанныхОбласти.Ключ, ЭлементОсновныхДанныхОбласти.Значение); КонецЦикла; РазделительВспомогательныхДанных = ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных(); ВспомогательныеДанныеОбласти = ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных( - РазделительВспомогательныхДанных - ); + РазделительВспомогательныхДанных); Для Каждого ЭлементВспомогательныхДанныхОбласти Из ВспомогательныеДанныеОбласти Цикл Результат.Вставить(ЭлементВспомогательныхДанныхОбласти.Ключ, ЭлементВспомогательныхДанныхОбласти.Значение); КонецЦикла; diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 44d997e22..869ff735c 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -56,12 +56,12 @@ СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( "РаботаСБанками"); КонецЕсли; - + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных\ПриОпределенииСтандартныхТиповОбщихДанных"].Добавить( "РаботаСБанками"); КонецЕсли; - + КонецПроцедуры // Заполняет параметры, которые используется клиентским кодом на запуске конфигурации. @@ -75,9 +75,7 @@ Не ОбщегоНазначенияПовтИсп.РазделениеВключено() // В модели сервиса обновляется автоматически. И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() // В узле РИБ обновляется автоматически. И ПравоДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ) // Пользователь с необходимыми правами. - И ОбщегоНазначения.ИнформационнаяБазаФайловая() // Классификатор не обновляется автоматически. - И Не КлассификаторАктуален() // Классификатор уже обновлен. - ); + И Не КлассификаторАктуален()); // Классификатор уже обновлен. Параметры.Вставить("Банки", Новый ФиксированнаяСтруктура("ВыводитьОповещениеОНеактуальности", ВыводитьОповещениеОНеактуальности)); @@ -111,6 +109,7 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -139,8 +138,8 @@ ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru =' |Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); - - КонецЕсли; + + КонецЕсли; Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда @@ -290,6 +289,14 @@ УстановитьПривилегированныйРежим(Истина); КонецЕсли; + ИмяСобытия = НСтр("ru ='Загрузка классификатора банков. Сайт РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + УровеньСобытия = УровеньЖурналаРегистрации.Информация; + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньСобытия, , , НСтр("ru = 'Загрузка в подчиненном узле РИБ не предусмотрена'")); + Возврат; + КонецЕсли; + ПараметрыЗагрузкиКлассификатора = Новый Соответствие; ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); @@ -298,10 +305,6 @@ ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); - ИмяСобытия = НСтр("ru ='Загрузка классификатора банков. Сайт РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - - УровеньСобытия = УровеньЖурналаРегистрации.Информация; - Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); @@ -313,7 +316,7 @@ ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньСобытия, , , ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); КонецПроцедуры - + // Сортирует, записывает данные классификатора БИК РФ с сайта РБК // // Параметры @@ -849,11 +852,11 @@ Если Регион.Модифицированность() Тогда Регион.Записать(); КонецЕсли; - КонецЕсли; + КонецЕсли; ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ = Справочники.КлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.БИК); - + Если ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ.Пустая() Тогда КлассификаторБанковОбъект = Справочники.КлассификаторБанковРФ.СоздатьЭлемент(); ФлагНовый = Истина; diff --git a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl index 607bf3dbb..3aafeaec1 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиКлиент/Module.bsl @@ -8,7 +8,7 @@ // Вызывается при запуске конфигурации, подключает обработчик ожидания. // -Процедура ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска) Экспорт +Процедура ПриНачалеРаботыСистемы() Экспорт Параметры = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если Параметры.Свойство("Банки") И Параметры.Банки.ВыводитьОповещениеОНеактуальности Тогда ПодключитьОбработчикОжидания("РаботаСБанкамиВывестиОповещениеОНеактуальности", 45, Истина); @@ -29,8 +29,7 @@ НСтр("ru = 'Классификатор банков устарел'"), НавигационнаяСсылкаФормыЗагрузки(), НСтр("ru = 'Обновить классификатор банков'"), - БиблиотекаКартинок.Предупреждение32 - ); + БиблиотекаКартинок.Предупреждение32); КонецПроцедуры @@ -42,8 +41,7 @@ НСтр("ru = 'Классификатор банков успешно обновлен'"), НавигационнаяСсылкаФормыЗагрузки(), НСтр("ru = 'Классификатор банков обновлен'"), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); КонецПроцедуры @@ -55,8 +53,7 @@ НСтр("ru = 'Классификатор банков уже обновлен'"), НавигационнаяСсылкаФормыЗагрузки(), НСтр("ru = 'Классификатор банков актуален'"), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index d488201a0..8cc0ed62d 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -137,8 +137,6 @@ КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически. ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют. - ИначеЕсли Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - КурсыОбновляютсяОтветственными = Ложь; // Курсы загружаются автоматически. Иначе КурсыОбновляютсяОтветственными = КурсыЗагружаютсяИзИнтернета(); // Есть валюты, для которых можно загружать курсы. КонецЕсли; @@ -199,8 +197,7 @@ УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начата регламентная загрузка курсов валют'") - ); + НСтр("ru = 'Начата регламентная загрузка курсов валют'")); ТекущаяДата = ТекущаяДатаСеанса(); @@ -219,16 +216,14 @@ УровеньЖурналаРегистрации.Ошибка, , , - НСтр("ru = 'Во время регламентного задания загрузки курсов валют возникли ошибки'") - ); + НСтр("ru = 'Во время регламентного задания загрузки курсов валют возникли ошибки'")); Иначе ЗаписьЖурналаРегистрации( ИмяСобытия, УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Завершена регламентная загрузка курсов валют.'") - ); + НСтр("ru = 'Завершена регламентная загрузка курсов валют.'")); КонецЕсли; КонецПроцедуры @@ -503,10 +498,9 @@ Обработчик.Процедура = "РаботаСКурсамиВалют.ОбновитьФорматХраненияПрописиНаРусскомЯзыке"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.41"; + Обработчик.Версия = "2.1.4.4"; Обработчик.Процедура = "РаботаСКурсамиВалют.ОбновитьСведенияОВалюте937"; - Обработчик.Опциональный = Истина; - Обработчик.МонопольныйРежим = Ложь; + Обработчик.РежимВыполнения = "Монопольно"; КонецПроцедуры @@ -531,7 +525,7 @@ + СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 7)) + ", " + Род2 + ", " + СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 9)); - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; КонецПроцедуры @@ -545,7 +539,7 @@ Валюта = Валюта.ПолучитьОбъект(); Валюта.Наименование = "VEF"; Валюта.НаименованиеПолное = НСтр("ru = 'Боливар'"); - Валюта.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Валюта); КонецЕсли; КонецПроцедуры @@ -640,8 +634,8 @@ Функция ПриОбновленииКурсовВалютВМоделиСервиса(Валюта) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); - Модуль.ЗапланироватьКопированиеКурсовВалюты(Валюта); + МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); + МодульКурсыВалютСлужебныйВМоделиСервиса.ЗапланироватьКопированиеКурсовВалюты(Валюта); КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl index 63b19b0cb..dc4127fe6 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl @@ -8,7 +8,7 @@ // Вызывается при запуске конфигурации, подключает обработчик ожидания. // -Процедура ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска) Экспорт +Процедура ПриНачалеРаботыСистемы() Экспорт Параметры = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если Параметры.Свойство("Валюты") И Параметры.Валюты.КурсыОбновляютсяОтветственными Тогда ПодключитьОбработчикОжидания("РаботаСКурсамиВалютВывестиОповещениеОНеактуальности", 15, Истина); @@ -29,8 +29,7 @@ НСтр("ru = 'Курсы валют устарели'"), НавигационнаяСсылкаОбработки(), НСтр("ru = 'Обновить курсы валют'"), - БиблиотекаКартинок.Предупреждение32 - ); + БиблиотекаКартинок.Предупреждение32); КонецПроцедуры @@ -42,8 +41,7 @@ НСтр("ru = 'Курсы валют успешно обновлены'"), НавигационнаяСсылкаОбработки(), НСтр("ru = 'Курсы валют обновлены'"), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); КонецПроцедуры @@ -55,8 +53,7 @@ НСтр("ru = 'Курсы валют уже обновлены'"), НавигационнаяСсылкаОбработки(), НСтр("ru = 'Курсы валют актуальны'"), - БиблиотекаКартинок.Информация32 - ); + БиблиотекаКартинок.Информация32); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index 2cf1be60a..11996746f 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -44,9 +44,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"), ПараметрыНовогоКурса.Валюта, - Формат(Сумма, "ЧДЦ=2; ЧН=0") - ) - ); + Формат(Сумма, "ЧДЦ=2; ЧН=0"))); Возврат 0; @@ -78,8 +76,7 @@ Возврат ПересчитатьПоКурсу( Сумма, Новый Структура("Валюта, Курс, Кратность", ВалютаНач, ПоКурсуНач, ПоКратностьНач), - Новый Структура("Валюта, Курс, Кратность", ВалютаКон, ПоКурсуКон, ПоКратностьКон) - ); + Новый Структура("Валюта, Курс, Кратность", ВалютаКон, ПоКурсуКон, ПоКратностьКон)); КонецФункции @@ -144,8 +141,7 @@ |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), Валюта.КодВалюты, Валюта.Валюта, - Результат.СообщениеОбОшибке - ); + Результат.СообщениеОбОшибке); СтатусОперации = Ложь; ПриЗагрузкеВозниклиОшибки = Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 310e25adb..1217d66d3 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -50,8 +50,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВзаимодействияКлиент"); - Модуль.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, + МодульВзаимодействияКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВзаимодействияКлиент"); + МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, Тема, Текст, СписокФайлов); Иначе ОткрытьПростуюФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, @@ -98,15 +98,22 @@ Состояние(НСтр("ru = 'Проверка учетной записи'"),,НСтр("ru = 'Выполняется проверка учетной записи. Подождите...'")); Если ЭлектроннаяПочтаВызовСервера.ПарольЗадан(УчетнаяЗапись) Тогда - ПарольПараметр = Неопределено; + ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, Неопределено); Иначе - ПараметрУчетнаяЗапись = Новый Структура("УчетнаяЗапись", УчетнаяЗапись); - ПарольПараметр = ОткрытьФормуМодально("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", ПараметрУчетнаяЗапись); - Если ТипЗнч(ПарольПараметр) <> Тип("Строка") Тогда - Возврат - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УчетнаяЗапись", УчетнаяЗапись); + ПараметрыФормы.Вставить("ПроверитьВозможностьОтправкиИПолучения", Истина); + ОткрытьФорму("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", ПараметрыФормы); КонецЕсли; +КонецПроцедуры + +// Проверка учетной записи электронной почты. +// +// см. описание процедуры ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. +// +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр) Экспорт + СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; ЭлектроннаяПочтаВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); @@ -124,4 +131,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 93ca59f48..8f97b78b8 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -10,7 +10,13 @@ // Процедуры и функция для работы со сканером // Открывает форму настройки сканирования. -Процедура ОткрытьФормуНастройкиСканирования(Модально = Ложь) Экспорт +Процедура ОткрытьФормуНастройкиСканирования() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + ТекстСообщения = НСтр("ru = 'Сканирование не поддерживается в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + Возврат; + КонецЕсли; КомпонентаУстановлена = РаботаСФайламиСлужебныйКлиент.ПроинициализироватьКомпоненту(); @@ -21,11 +27,7 @@ ПараметрыФормы.Вставить("КомпонентаУстановлена", КомпонентаУстановлена); ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); - Если Модально Тогда - ОткрытьФормуМодально("Справочник.Файлы.Форма.НастройкаСканирования", ПараметрыФормы); - Иначе - ОткрытьФорму("Справочник.Файлы.Форма.НастройкаСканирования", ПараметрыФормы); - КонецЕсли; + ОткрытьФорму("Справочник.Файлы.Форма.НастройкаСканирования", ПараметрыФормы); КонецПроцедуры @@ -436,13 +438,9 @@ // Дополнительные процедуры и функции для работы с файлами // Открывает форму для настройки рабочего каталога. -Процедура ОткрытьФормуНастройкиРабочегоКаталога(Модально = Ложь) Экспорт +Процедура ОткрытьФормуНастройкиРабочегоКаталога() Экспорт - Если Модально Тогда - ОткрытьФормуМодально("ОбщаяФорма.НастройкаОсновногоРабочегоКаталога"); - Иначе - ОткрытьФорму("ОбщаяФорма.НастройкаОсновногоРабочегоКаталога"); - КонецЕсли; + ОткрытьФорму("ОбщаяФорма.НастройкаОсновногоРабочегоКаталога"); КонецПроцедуры @@ -543,8 +541,7 @@ Ложь, // Это не Веб-клиент. Неопределено, // Пользователь. "", // Комментарий. - Истина // ЗаписатьВИсторию. - ); + Истина); // ЗаписатьВИсторию. Состояние(); @@ -1040,8 +1037,7 @@ Размер, АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, - Истина // Это Веб-клиент. - ); + Истина); // Это Веб-клиент. ПараметрыОповещения = Новый Структура; ПараметрыОповещения.Вставить("Владелец", ВладелецФайла); @@ -1328,16 +1324,3 @@ Возврат ВозвратМассив; КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Открывает форму папки со списком файлов. -// -Процедура РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка) Экспорт - - СтандартнаяОбработка = Ложь; - ПараметрыФормы = Новый Структура("Папка", Папка); - ОткрытьФорму("Справочник.Файлы.Форма.ХранилищеФайлов", ПараметрыФормы, , Папка); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index 5bd860518..0990f5e84 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -32,7 +32,7 @@ |""%2"" с %3.'"), Строка(ДанныеФайла.Ссылка), Строка(ДанныеФайла.Редактирует), - Формат(ДанныеФайла.ДатаЗаема, "ДФ='dd.MM.yyyy hh:mm'")); + Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ")); Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index 4cbf792fa..cd2ac358a 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -144,8 +144,7 @@ НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( ИмяКаталогаФайлов, - УникальныйИдентификатор - ); + УникальныйИдентификатор); ФайловыеФункцииСлужебный.СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); @@ -174,7 +173,8 @@ Исключение // Возможно, файл не был найден. Отправку данных не прерываем. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'"), + НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -368,8 +368,7 @@ Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Рассылка отчетов %1 от %2'"), "'"+ ПараметрыДоставки.Рассылка +"'", - Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT") - ); + Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT")); ХранитьВерсии = Истина; ЭтоВебКлиент = Ложь; АдресВременногоХранилищаТекста = ""; @@ -398,8 +397,7 @@ АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, ЭтоВебКлиент, - Пользователь - ); + Пользователь); Иначе Вложение.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией( ВладелецФайла, @@ -413,8 +411,7 @@ ЭтоВебКлиент, Пользователь, Комментарий, - ЗаписатьВИсторию - ); + ЗаписатьВИсторию); КонецЕсли; // Заполнение ссылки на файл @@ -422,8 +419,7 @@ ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Вложение.ПолныйПутьКФайлу, - ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(Вложение.ФайлСсылка) - ); + ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(Вложение.ФайлСсылка)); КонецЕсли; // Очистка @@ -906,8 +902,8 @@ Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ПапкиФайлов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); - Если НЕ Модуль.ЕстьПравоПоЗначениюДоступа("ПометкаУдаленияПапокИФайлов", Ссылка) Тогда + МодульУправлениеДоступом = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); + Если НЕ МодульУправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ПометкаУдаленияПапокИФайлов", Ссылка) Тогда ПометкаНаУдалениеРазрешена = Ложь; КонецЕсли; @@ -931,8 +927,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); - Модуль.ОбновитьСостояниеОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста); + МодульФайловыеФункцииСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); + МодульФайловыеФункцииСлужебныйВМоделиСервиса.ОбновитьСостояниеОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста); КонецЕсли; КонецЕсли; @@ -986,7 +982,8 @@ Исключение // Возможно, файл не был найден. Отправку данных не прерываем. ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'"), + НСтр("ru = 'Файлы.Не удалось отправить файл при обмене данными'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index f5fdae198..782000377 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -289,8 +289,7 @@ Неопределено, // НоваяВерсияДатаСоздания Пользователь, Неопределено, // НоваяВерсияКомментарий - Неопределено // НоваяВерсияНомерВерсии - ); + Неопределено); // НоваяВерсияНомерВерсии ОбновитьВерсиюВФайле(ДокСсылка, ВерсияСсылка, АдресВременногоХранилищаТекста); @@ -1646,7 +1645,8 @@ ИнформацияОбОшибке(), ВерсияСсылка.Владелец); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'"), + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ВерсияСсылка.Владелец, @@ -1817,7 +1817,8 @@ ИнформацияОбОшибке(), ФайлСсылка); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'"), + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ФайлСсылка, @@ -3188,7 +3189,14 @@ // Процедура ЗаполнитьУсловноеОформлениеСпискаФайлов(Список) Экспорт - Элемент = Список.УсловноеОформление.Элементы.Добавить(); + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + УсловноеОформлениеКД = Список.КомпоновщикНастроек.Настройки.УсловноеОформление; + УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + Иначе + УсловноеОформлениеКД = Список.УсловноеОформление; + КонецЕсли; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); Элемент.Использование = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйДругимПользователем); @@ -3198,11 +3206,11 @@ Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); Отбор.ПравоеЗначение = Справочники.Пользователи.ПустаяСсылка(); - Если ЕстьДублирующийсяЭлемент(Список.УсловноеОформление.Элементы, Элемент) Тогда - Список.УсловноеОформление.Элементы.Удалить(Элемент); + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); КонецЕсли; - Элемент = Список.УсловноеОформление.Элементы.Добавить(); + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); Элемент.Использование = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем); @@ -3212,8 +3220,8 @@ Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); Отбор.ПравоеЗначение = Пользователи.ТекущийПользователь(); - Если ЕстьДублирующийсяЭлемент(Список.УсловноеОформление.Элементы, Элемент) Тогда - Список.УсловноеОформление.Элементы.Удалить(Элемент); + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); КонецЕсли; КонецПроцедуры @@ -3858,7 +3866,8 @@ ИнформацияОбОшибке(), ВерсияСсылка.Владелец); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'"), + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ВерсияСсылка.Владелец, @@ -3964,7 +3973,8 @@ ИнформацияОбОшибке(), ВерсияСсылка.Владелец); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Открытие файла'"), + НСтр("ru = 'Файлы.Открытие файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ВерсияСсылка.Владелец, @@ -4541,7 +4551,7 @@ Попытка Объект.НомерВерсии = Число(Объект.Код); - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); Исключение // код например с префиксом базы - не используем. Это не ошибка - т.к. только в старых версиях конфигурации КонецПопытки; @@ -4569,7 +4579,7 @@ Если Объект.ТипХраненияФайла.Пустая() Тогда Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; КонецЦикла; @@ -4593,7 +4603,7 @@ Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.ОбменДанными.Загрузка = Истина; Объект.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Объект.Расширение); - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; Запрос = Новый Запрос; @@ -4629,7 +4639,7 @@ Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.ПолныйПутьLinux = Объект.ПолныйПутьWindows; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; КонецПроцедуры @@ -4801,7 +4811,7 @@ Если ТипЗнч(ДанныеВХранилище) = Тип("ДвоичныеДанные") Тогда ЗаписатьФайлВИнформационнуюБазу(Выборка.Ссылка, Объект.ФайлХранилище); Объект.ФайлХранилище = Новый ХранилищеЗначения(""); // очищаем значение - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; КонецЦикла; @@ -4828,7 +4838,7 @@ Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта Объект.ДатаЗаема = ДатаЗаема; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 34e8d85df..73fff20be 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -6,6 +6,15 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Открывает форму папки со списком файлов. +Процедура РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка) Экспорт + + СтандартнаяОбработка = Ложь; + ПараметрыФормы = Новый Структура("Папка", Папка); + ОткрытьФорму("Справочник.Файлы.Форма.ХранилищеФайлов", ПараметрыФормы, , Папка); + +КонецПроцедуры + // Добавляет предупреждения пользователю при завершении работы программы. Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт Ответ = ПроверитьЗанятыеФайлыПриЗавершенииРаботы(); @@ -2012,9 +2021,7 @@ МаксимальнаяДлинаПолногоПути, ИмяФайлаСПутем); - Оболочка = Новый COMОбъект("WScript.Shell"); - ПутьКаталогаПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); - ПутьКаталогаПользователя = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКаталогаПользователя = КаталогДанныхПользователя(); МаксимальнаяДлинаИмениФайла = МаксимальнаяДлинаПолногоПути - СтрДлина(ПутьКаталогаПользователя); // если имя файла плюс 5 превышает 260 - пишем "Измените имя файла на более короткое. ОК" и выходим. @@ -2430,8 +2437,14 @@ ЗаголовокСтрока = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением( ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ИмяДокумента", ЗаголовокСтрока); + ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяОткрываемогоФайла); + ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент); + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия); - ТабличныйДокумент.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла); Возврат; КонецЕсли; @@ -2503,25 +2516,16 @@ ПутьВыбора = ДанныеФайла.ПапкаДляСохранитьКак; Если ПутьВыбора = Неопределено ИЛИ ПутьВыбора = "" Тогда - ПутьВыбора = ""; - #Если НЕ ВебКлиент Тогда - - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Данная команда не поддерживается в базовой версии.'")); - Возврат ""; - КонецЕсли; + #Если НЕ ВебКлиент Тогда + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Данная команда не поддерживается в базовой версии.'")); + Возврат ""; + КонецЕсли; + #КонецЕсли + + ПутьВыбора = ФайловыеФункцииСлужебныйКлиент.КаталогМоиДокументы(); - Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl"); - Оболочка.Language = "vbscript"; - Оболочка.AddCode(" - |Function SpecialFoldersName(Name) - |set Shell=CreateObject(""WScript.Shell"") - |SpecialFoldersName=Shell.SpecialFolders(Name) - |End Function"); - ПутьВыбора = Оболочка.Run("SpecialFoldersName", "MyDocuments"); - #КонецЕсли - КонецЕсли; Пароль = ""; @@ -3104,24 +3108,15 @@ Если ПутьВыбора = Неопределено ИЛИ ПутьВыбора = "" Тогда #Если НЕ ВебКлиент Тогда - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Данная команда не поддерживается в базовой версии.'")); Возврат Ложь; КонецЕсли; - - Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl"); - Оболочка.Language = "vbscript"; - Оболочка.AddCode(" - |Function SpecialFoldersName(Name) - |set Shell=CreateObject(""WScript.Shell"") - |SpecialFoldersName=Shell.SpecialFolders(Name) - |End Function"); - ПутьВыбора = Оболочка.Run("SpecialFoldersName", "MyDocuments"); - #Иначе - ПутьВыбора = ""; #КонецЕсли + + ПутьВыбора = ФайловыеФункцииСлужебныйКлиент.КаталогМоиДокументы(); + КонецЕсли; Диалог.Заголовок = НСтр("ru = 'Выбор файла'"); @@ -3810,6 +3805,10 @@ // Инициализация компоненты сканирования. Функция ПроинициализироватьКомпоненту() Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат Ложь; + КонецЕсли; + Если КомпонентаTwain = Неопределено Тогда КодВозврата = ПодключитьВнешнююКомпоненту( @@ -3829,6 +3828,10 @@ // Установка компоненты сканирования. Процедура УстановитьКомпоненту() Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + ТекстСостояния = НСтр("ru = 'Компонента сканирования уже установлена.'"); Если КомпонентаTwain = Неопределено Тогда @@ -3857,7 +3860,6 @@ КонецПроцедуры - // Возвращает версию компоненты сканирования. Функция ВерсияКомпонентыСканирования() Экспорт @@ -3889,7 +3891,6 @@ КонецФункции - // Открывает диалог сканирования и просмотра картинки. Процедура СканироватьИПоказатьДиалогПросмотра( ВладелецФайла, @@ -3897,6 +3898,10 @@ ЭтаФорма, НеОткрыватьКарточкуПослеСозданияИзФайла = Неопределено) Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + СистемнаяИнформация = Новый СистемнаяИнформация(); ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; @@ -3907,13 +3912,17 @@ ПараметрыФормы.Вставить( "НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); - ОткрытьФормуМодально("Справочник.Файлы.Форма.РезультатСканирования", ПараметрыФормы); + ОткрытьФорму("Справочник.Файлы.Форма.РезультатСканирования", ПараметрыФормы); КонецПроцедуры // Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. Функция ДоступнаКомандаСканировать() Экспорт - + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат Ложь; + КонецЕсли; + Если Не ПроинициализироватьКомпоненту() Тогда Возврат Ложь; КонецЕсли; @@ -3926,7 +3935,6 @@ КонецФункции - // Возвращает настройку сканера по имени. // // Параметры: @@ -3940,6 +3948,10 @@ // Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат -1; + КонецЕсли; + Попытка Возврат КомпонентаTwain.ПолучитьНастройку(ИмяУстройства, ИмяНастройки); Исключение @@ -4075,13 +4087,13 @@ Если ИмяФайлаСПутем <> "" Тогда // Тут надо еще на наличие на диске проверять ФайлНаДиске = Новый Файл(ИмяФайлаСПутем); - Если ФайлНаДиске.Существует() Тогда + Если ФайлНаДиске.Существует() Тогда Возврат Истина; Иначе ИмяФайлаСПутем = ""; // Тут же удалим из регистра - т.к. в регистре есть, а на диске нет РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(ТекущаяВерсия); - КонецЕсли; + КонецЕсли; КонецЕсли; Возврат Ложь; @@ -4438,9 +4450,7 @@ МаксимальнаяДлинаПолногоПути, ИмяФайлаСПутем); - Оболочка = Новый COMОбъект("WScript.Shell"); - ПутьКаталогаПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); - ПутьКаталогаПользователя = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКаталогаПользователя = КаталогДанныхПользователя(); МаксимальнаяДлинаИмениФайла = МаксимальнаяДлинаПолногоПути - СтрДлина(ПутьКаталогаПользователя); // если имя файла плюс 5 превышает 260 - пишем "Измените имя файла на более короткое. ОК" и выходим. @@ -5230,3 +5240,26 @@ Возврат Свойства; КонецФункции +// Возвращает каталог данных пользователя внутри стандартного каталога данных приложения. +// Этот каталог может использоваться для хранения файлов, захваченных текущим пользователем. +// Для работы метода на веб-клиенте под 8.3 необходимо предварительно подключить расширение работы с файлами. +// +Функция КаталогДанныхПользователя() + + #Если ВебКлиент Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат Вычислить("РабочийКаталогДанныхПользователя()"); + Иначе + Возврат ""; + КонецЕсли; + #Иначе + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат Вычислить("РабочийКаталогДанныхПользователя()"); + Иначе + Оболочка = Новый COMОбъект("WScript.Shell"); + КаталогДанныхПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогДанныхПользователя); + КонецЕсли; + #КонецЕсли + +КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 3a2ba4451..5059c5005 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -31,7 +31,7 @@ КонецЕсли; Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'")); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецЕсли; Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда @@ -60,8 +60,7 @@ КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Завершение'"), СокрЛП(Причина) - ); + НСтр("ru = 'Завершение'"), СокрЛП(Причина)); Возврат Ложь; КонецЕсли; @@ -145,8 +144,7 @@ И НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Не выбран способ доставки.'") - ); + НСтр("ru = 'Не выбран способ доставки.'")); Возврат Ложь; КонецЕсли; @@ -186,9 +184,7 @@ ?( Рассылка.ПисьмоВФорматеHTML, Рассылка.ТекстПисьмаВФорматеHTML, - Рассылка.ТекстПисьма - ) - ); + Рассылка.ТекстПисьма)); // Получатели Если ПредварительныеНастройки <> Неопределено И ПредварительныеНастройки.Свойство("Получатели") Тогда @@ -367,8 +363,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), , "'"+ Строка(Рассылка) +"'", - "'"+ Строка(ПараметрыДоставки.Автор) +"'" - ); + "'"+ Строка(ПараметрыДоставки.Автор) +"'"); // Формирование и сохранение отчетов НомерОтчета = 1; @@ -379,8 +374,7 @@ КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, ТекстЖурнала, , - "'"+ Строка(СтрокаОтчет.Отчет) +"'" - ); + "'"+ Строка(СтрокаОтчет.Отчет) +"'"); // Инициализация отчета ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); @@ -399,8 +393,7 @@ ПараметрыОтчета, ДеревоОтчетов, ПараметрыДоставки, - КлючИЗначение.Ключ // Получатель - ); + КлючИЗначение.Ключ); // Получатель КонецЦикла; Иначе // Без персонализации @@ -409,27 +402,23 @@ ПараметрыОтчета, ДеревоОтчетов, ПараметрыДоставки, - Неопределено // Получатель - ); + Неопределено); // Получатель КонецЕсли; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, НСтр("ru = 'Отчет %1 успешно сформирован'"), , - "'"+ Строка(СтрокаОтчет.Отчет) +"'" - ); + "'"+ Строка(СтрокаОтчет.Отчет) +"'"); НомерОтчета = НомерОтчета + 1; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Отчет %1 не сформирован:'"), ИнформацияОбОшибке(), - "'"+ Строка(СтрокаОтчет.Отчет) +"'" - ); + "'"+ Строка(СтрокаОтчет.Отчет) +"'"); КонецПопытки; КонецЦикла; // Проверка на количество сохраненных отчетов Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Не сохранено ни одного отчета'"), , - ); + НСтр("ru = 'Не сохранено ни одного отчета'"), ,); УдалитьВременныеФайлы(ПараметрыЖурнала, ПараметрыДоставки); Возврат Ложь; КонецЕсли; @@ -466,15 +455,13 @@ ОтправитьОтчетыПолучателю( ВложенияПолучателя, ПараметрыДоставки, - СтрокаПолучатель - ); + СтрокаПолучатель); РассылкаВыполнена = Истина; ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Ошибка отправки отчетов получателю %1:'"), ИнформацияОбОшибке(), - "'"+ Строка(СтрокаПолучатель.Ключ) +"'" - ); + "'"+ Строка(СтрокаПолучатель.Ключ) +"'"); КонецПопытки; // @@ -665,8 +652,7 @@ СтрокаТаблицы.Выполнена = ПодготовитьПараметрыИВыполнитьРассылку( СтрокаТаблицы.Рассылка, ПараметрыЖурнала, - ПредварительныеНастройки - ); + ПредварительныеНастройки); СтрокаТаблицы.СОшибками = (ПараметрыЖурнала.МассивОшибок.Количество() > 0); Если СтрокаТаблицы.СОшибками Тогда @@ -709,8 +695,7 @@ + ?(Результат.Текст= "", "", Символы.ПС + Символы.ПС) + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонСообщения, - "'"+ СтрокаТаблицы.Представление +"'" - ); + "'"+ СтрокаТаблицы.Представление +"'"); КонецЦикла; Иначе Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -721,8 +706,7 @@ Формат(Подготовлено, "ЧН=0; ЧГ=0"), Формат(Всего, "ЧН=0; ЧГ=0"), Формат(Выполнено, "ЧН=0; ЧГ=0"), Формат(СОшибками, "ЧН=0; ЧГ=0"), - Формат(НеВыполнено, "ЧН=0; ЧГ=0") - ); + Формат(НеВыполнено, "ЧН=0; ЧГ=0")); КонецЕсли; Результат.Оповестить = Ложь; @@ -809,13 +793,12 @@ Если НЕ Рассылка.ВыполнятьПоРасписанию Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У рассылки отчетов ""%1"" отключен флажок ""Выполнять по расписанию""'"), - Строка(Рассылка) - ); + Строка(Рассылка)); КонецЕсли; // Параметры записи в журнал регистрации ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные"); - ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Запуск по расписанию'"); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Запуск по расписанию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); ПараметрыЖурнала.Метаданные = Рассылка.Метаданные(); ПараметрыЖурнала.Данные = Рассылка; @@ -983,8 +966,7 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - Строка(ТипПолучателей) - ); + Строка(ТипПолучателей)); Возврат СписокПолучателей; КонецПопытки; @@ -994,8 +976,7 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - Строка(ТипПолучателей) - ); + Строка(ТипПолучателей)); Возврат СписокПолучателей; КонецПопытки; @@ -1026,8 +1007,7 @@ ТекстОшибок, "", "'"+ Строка(ТипПолучателей) +"'", "'"+ Строка(ПараметрыЖурнала.Данные) +"'", - "'"+ Строка(ВидКИ) +"'" - ); + "'"+ Строка(ВидКИ) +"'"); КонецЕсли; Возврат СписокПолучателей; @@ -1091,8 +1071,7 @@ МассивРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( "Имя, ЭтоВариант, СКД, Метаданные, Объект, " + // общие параметры "СхемаКД, КомпоновщикНастроекКД, АдресСхемыКД, НастройкиКД, " + // параметры СКД отчетов - "ДоступныеРеквизиты", // параметры произвольных отчетов - ); + "ДоступныеРеквизиты",); // параметры произвольных отчетов Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл ИмяРеквизита = СокрЛП(ИмяРеквизита); Если НЕ ПараметрыОтчета.Свойство(ИмяРеквизита) Тогда @@ -1104,14 +1083,20 @@ ПараметрыОтчета.ЭтоВариант = (ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); Если ПараметрыОтчета.ЭтоВариант Тогда + Если ПараметрыОтчета.Отчет.Отчет = Неопределено Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Варианта отчета %1 не найден в программе'"), , + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + ПараметрыОтчета.Имя = ПараметрыОтчета.Отчет.Отчет.Имя; ПараметрыОтчета.Метаданные = Метаданные.Отчеты.Найти(ПараметрыОтчета.Имя); Если ПараметрыОтчета.Метаданные = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Для варианта %1 отчет %2 не найден в системе'"), , + НСтр("ru = 'Для варианта %1 отчет %2 не найден в программе'"), , "'"+ Строка(ПараметрыОтчета.Отчет) +"'", - "'"+ ПараметрыОтчета.Имя +"'" - ); + "'"+ ПараметрыОтчета.Имя +"'"); Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; @@ -1129,16 +1114,14 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , ЗаголовокСообщенияОбОшибке, ИнформацияОбОшибке(), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'" - ); + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); КонецПопытки; Если Результат <> Истина Тогда Если Результат = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Подсистема ''Дополнительные отчеты и обработки'' недоступна.'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'" - ); + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); КонецЕсли; Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; @@ -1147,16 +1130,14 @@ Если ТипЗнч(СведенияОВнешнейОбработке) <> Тип("Структура") Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Неверно заполнены сведения о внешней обработке.'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'" - ); + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; Если НЕ СведенияОВнешнейОбработке.Свойство("РассылкаОтчетов") ИЛИ СведенияОВнешнейОбработке.РассылкаОтчетов <> Истина Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Не указаны сведения о внешней обработке, необходимые для рассылки.'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'" - ); + "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; @@ -1185,8 +1166,7 @@ Если ОпределенИдентификаторФормы Тогда ПараметрыОтчета.АдресСхемыКД = ПоместитьВоВременноеХранилище( ПараметрыОтчета.Объект.СхемаКомпоновкиДанных, - УникальныйИдентификаторФормы - ); + УникальныйИдентификаторФормы); КонецЕсли; // Описывает связь настроек компоновки данных и схемы компоновки данных. @@ -1198,9 +1178,7 @@ // Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек. КомпоновщикНастроекКД.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных( - ?(ОпределенИдентификаторФормы, ПараметрыОтчета.АдресСхемыКД, ПараметрыОтчета.СхемаКД) - ) - ); + ?(ОпределенИдентификаторФормы, ПараметрыОтчета.АдресСхемыКД, ПараметрыОтчета.СхемаКД))); // Настройка компоновки данных в целом. Если ПараметрыОтчета.ЭтоВариант Тогда @@ -1213,8 +1191,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"), , Строка(ПараметрыОтчета.Отчет), - ПараметрыОтчета.Имя - ); + ПараметрыОтчета.Имя); Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; ПараметрыОтчета.НастройкиКД = ВариантНастроекКД.Настройки; @@ -1269,8 +1246,7 @@ ПараметрыОтчета.ДоступныеРеквизиты = Новый Структура; Для Каждого Реквизит Из ПараметрыОтчета.Метаданные.Реквизиты Цикл ПараметрыОтчета.ДоступныеРеквизиты.Вставить(Реквизит.Имя, - Новый Структура("Представление, Тип", Реквизит.Представление(), Реквизит.Тип) - ); + Новый Структура("Представление, Тип", Реквизит.Представление(), Реквизит.Тип)); КонецЦикла; Если ЗначениеЗаполнено(ПараметрыОтчета.Настройки) Тогда @@ -1326,8 +1302,7 @@ Если НЕ ПараметрыОтчета.Свойство("Инициализирован") Тогда ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Отчет ''%1'' не инициализирован'"), , - Строка(ПараметрыОтчета.Отчет) - ); + Строка(ПараметрыОтчета.Отчет)); Возврат Результат; КонецЕсли; @@ -1364,8 +1339,7 @@ КонецЦикла; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Отчет ''%1'' не прошел проверку заполнения:'"), СокрЛ(ТекстИсключения), - Строка(ПараметрыОтчета.Отчет) - ); + Строка(ПараметрыОтчета.Отчет)); Результат.ТабДок = Неопределено; Возврат Результат; КонецЕсли; @@ -1504,16 +1478,14 @@ ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Вложение.Значение, - ПараметрыДоставки.СетевойКаталогWindows + Вложение.Ключ - ); + ПараметрыДоставки.СетевойКаталогWindows + Вложение.Ключ); КонецЕсли; КонецЦикла; Результат = Истина; ПараметрыДоставки.ВыполненаВСетевойКаталог = Истина; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() - ); + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; // ПараметрыДоставки.ИспользоватьСетевойКаталог @@ -1532,8 +1504,7 @@ ПараметрыДоставки.Пароль, Прокси, ПараметрыДоставки.ПассивноеСоединение, - 15 - ); + 15); Соединение.УстановитьТекущийКаталог(ПараметрыДоставки.Каталог); Для Каждого Вложение Из Вложения Цикл Соединение.Записать(Вложение.Значение, ПараметрыДоставки.Каталог + Вложение.Ключ); @@ -1541,8 +1512,7 @@ ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Вложение.Значение, - Цель + Вложение.Ключ - ); + Цель + Вложение.Ключ); КонецЕсли; КонецЦикла; @@ -1550,8 +1520,7 @@ ПараметрыДоставки.ВыполненаНаFTP = Истина; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - ); + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(),); КонецПопытки; КонецЕсли; // ПараметрыДоставки.ИспользоватьFTPРесурс @@ -1564,8 +1533,7 @@ ПараметрыДоставки.ВыполненаВПапку = Истина; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() - ); + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; // ПараметрыДоставки.ИспользоватьПапку @@ -1590,8 +1558,7 @@ КонецЕсли; Исключение ЗаписьЖурнала(ПараметрыЖурнала, , - ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() - ); + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); КонецПопытки; КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту @@ -1615,8 +1582,7 @@ УстановитьПривилегированныйРежим(Истина); ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ") - ); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ")); Если ПользовательИБ = Неопределено Тогда Возврат Неопределено; КонецЕсли; @@ -1666,14 +1632,12 @@ ЗаписатьВЖурнал = ЗначениеЗаполнено(ПараметрыЖурнала.Данные); СообщитьПользователю = ПараметрыЖурнала.Свойство("МассивОшибок") И ( УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка - ИЛИ УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение - ); + ИЛИ УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение); // Комментарий для журнала регистрации и пользователя Если Параметр1 <> Неопределено Тогда КомментарийСПараметрами = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - КомментарийСПараметрами, Параметр1, Параметр2, Параметр3, Параметр4 - ); + КомментарийСПараметрами, Параметр1, Параметр2, Параметр3, Параметр4); КонецЕсли; ТекстДляЖурнала = КомментарийСПараметрами; @@ -1696,8 +1660,7 @@ УровеньЖурнала, ПараметрыЖурнала.Метаданные, ПараметрыЖурнала.Данные, - ТекстДляЖурнала - ); + ТекстДляЖурнала); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -1784,8 +1747,7 @@ + " (" + ПараметрыФормата.Имя + ")" - + ?(ПараметрыФормата.Расширение = Неопределено, "", ПараметрыФормата.Расширение) - ); + + ?(ПараметрыФормата.Расширение = Неопределено, "", ПараметрыФормата.Расширение)); НайтиСвободноеИмяФайла(ПолноеИмяФайла); @@ -1796,8 +1758,7 @@ СтандартнаяОбработка, СтрокаОтчет.Значение, Формат, - ПолноеИмяФайла - ); + ПолноеИмяФайла); // Сохранение отчета встроенными средствами подсистемы Если СтандартнаяОбработка = Истина Тогда @@ -1807,8 +1768,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокОшибки, НСтр("ru = 'Формат не поддерживается'"), "'"+ СтрокаОтчет.Ключ +"'", - "'"+ ПараметрыФормата.Имя +"'" - ); + "'"+ ПараметрыФормата.Имя +"'"); Продолжить; КонецЕсли; @@ -1818,8 +1778,7 @@ ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокОшибки, ИнформацияОбОшибке(), "'"+ СтрокаОтчет.Ключ +"'", - "'"+ ПараметрыФормата.Имя +"'" - ); + "'"+ ПараметрыФормата.Имя +"'"); Продолжить; КонецПопытки; КонецЕсли; // СтандартнаяОбработка @@ -1831,8 +1790,7 @@ ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), , "'"+ СтрокаОтчет.Ключ +"'", "'"+ ПараметрыФормата.Имя +"'", - "'"+ ВременныйФайл.ПолноеИмя +"'" - ); + "'"+ ВременныйФайл.ПолноеИмя +"'"); Продолжить; КонецЕсли; @@ -1918,7 +1876,7 @@ КонецЕсли; Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'")); + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецЕсли; Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда @@ -1948,8 +1906,7 @@ Если НЕ ЗначениеЗаполнено(ПараметрыДоставки.Папка) Тогда ПараметрыДоставки.ИспользоватьПапку = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Папка не заполнена, доставка в папку отключена'"), , - ); + НСтр("ru = 'Папка не заполнена, доставка в папку отключена'"), ,); Иначе ПравоДоступа = Истина; ПриОпределенииПраваИзмененияПапкиИФайлов(ПараметрыДоставки.Папка, ПравоДоступа); @@ -1960,8 +1917,7 @@ УстановитьПривилегированныйРежим(Ложь); ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Недостаточно прав на изменение файлов папки %1, доставка в папку отключена'"), , - "'"+ ПредставлениеПапки +"'" - ); + "'"+ ПредставлениеПапки +"'"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -1981,17 +1937,14 @@ ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Сетевой каталог %1 не выбран, доставка в сетевой каталог отключена'"), , - ЗначениеПодстановки - ); + ЗначениеПодстановки); Иначе ПараметрыДоставки.СетевойКаталогWindows = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - ПараметрыДоставки.СетевойКаталогWindows - ); + ПараметрыДоставки.СетевойКаталогWindows); ПараметрыДоставки.СетевойКаталогLinux = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - ПараметрыДоставки.СетевойКаталогLinux - ); + ПараметрыДоставки.СетевойКаталогLinux); КонецЕсли; КонецЕсли; @@ -1999,15 +1952,13 @@ Если ПараметрыДоставки.ИспользоватьFTPРесурс И НЕ ЗначениеЗаполнено(ПараметрыДоставки.Сервер) Тогда ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'FTP сервер не заполнен, доставка в папку на FTP ресурс отключена'") - ); + НСтр("ru = 'FTP сервер не заполнен, доставка в папку на FTP ресурс отключена'")); КонецЕсли; Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И НЕ ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Учетная запись не выбрана, доставка по электронной почте отключена'") - ); + НСтр("ru = 'Учетная запись не выбрана, доставка по электронной почте отключена'")); КонецЕсли; Если НЕ ПараметрыДоставки.Свойство("Персонализирована") Тогда @@ -2017,8 +1968,7 @@ Если ПараметрыДоставки.Персонализирована Тогда Если НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - НСтр("ru = 'Персонализированная рассылка может быть отправлена только по электронной почте'") - ); + НСтр("ru = 'Персонализированная рассылка может быть отправлена только по электронной почте'")); Возврат Ложь; КонецЕсли; ПараметрыДоставки.ИспользоватьПапку = Ложь; @@ -2044,8 +1994,7 @@ ИЛИ ПараметрыДоставки.ИспользоватьFTPРесурс) Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, - НСтр("ru = 'Использование уведомлений по электронной почте возможно только совместно с другими способами доставки'") - ); + НСтр("ru = 'Использование уведомлений по электронной почте возможно только совместно с другими способами доставки'")); Возврат Ложь; КонецЕсли; @@ -2084,8 +2033,7 @@ ПараметрыДоставки.ШаблонТекста = СтрЗаменить( ПараметрыДоставки.ШаблонТекста, "<img src='"+ КлючИЗначение.Ключ +"' width='", - "<img src='"+ НовыйКлюч +"' width='" - ); + "<img src='"+ НовыйКлюч +"' width='"); КонецЕсли; КонецЕсли; // КонецЦикла; // КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения @@ -2129,32 +2077,26 @@ // Шаблон темы ПараметрыДоставки.ШаблонТемы = РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон( ПараметрыДоставки.ШаблонТемы, - СтруктураЗаполненияШаблонов - ); + СтруктураЗаполненияШаблонов); // Шаблон сообщения ПараметрыДоставки.ШаблонТекста = РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон( ПараметрыДоставки.ШаблонТекста, - СтруктураЗаполненияШаблонов - ); + СтруктураЗаполненияШаблонов); // Признаки необходимости заполнения шаблонов (кэш проверок) ПараметрыДоставки.Вставить( "ЗаполнитьПолучателяВШаблонеТемы", - Найти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0 - ); + Найти(ПараметрыДоставки.ШаблонТемы, "[Получатель]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьПолучателяВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0 - ); + Найти(ПараметрыДоставки.ШаблонТекста, "[Получатель]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьСформированныеОтчетыВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0 - ); + Найти(ПараметрыДоставки.ШаблонТекста, "[СформированныеОтчеты]") <> 0); ПараметрыДоставки.Вставить( "ЗаполнитьСпособДоставкиВШаблонеСообщения", - Найти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0 - ); + Найти(ПараметрыДоставки.ШаблонТекста, "[СпособДоставки]") <> 0); // ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", ""); @@ -2163,9 +2105,7 @@ // Каталог временных файлов ПараметрыДоставки.Вставить("КаталогВременныхФайлов", ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - ПолучитьИмяВременногоФайла(".RP") // RP = report publishing, RD = report distribution - ) - ); + ПолучитьИмяВременногоФайла(".RP"))); // RP = report publishing, RD = report distribution СоздатьКаталог(ПараметрыДоставки.КаталогВременныхФайлов); // Соответствие каталогов временных файлов получателей @@ -2190,10 +2130,7 @@ РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(ПараметрыДоставки.ИмяАрхива, Новый Структура("НаименованиеРассылки, ДатаВыполнения", ПараметрыДоставки.Рассылка, - ТекущаяДатаСеанса() - ) - ) - ); + ТекущаяДатаСеанса()))); // Расширение Если НРег(Прав(ПараметрыДоставки.ИмяАрхива, 4)) <> ".zip" Тогда @@ -2268,8 +2205,7 @@ ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Символы.ПС, - Символы.ПС + "<br>" - ); + Символы.ПС + "<br>"); КонецЕсли; ШаблонТекста = СтрЗаменить(ШаблонТекста, "[СформированныеОтчеты]", ПараметрыДоставки.ПредставлениеОтчетовПолучателя); КонецЕсли; @@ -2400,20 +2336,17 @@ Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +"<a href = '"+ ПолноеИмяФайла +"'>"+ ПараметрыДоставки.ИмяАрхива +"</a>" - ); + +"<a href = '"+ ПолноеИмяФайла +"'>"+ ПараметрыДоставки.ИмяАрхива +"</a>"); Иначе ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +""""+ ПараметрыДоставки.ИмяАрхива +""":"+ Символы.ПС +"<"+ ПолноеИмяФайла +">" - ); + +""""+ ПараметрыДоставки.ИмяАрхива +""":"+ Символы.ПС +"<"+ ПолноеИмяФайла +">"); КонецЕсли; ИначеЕсли ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда // Доставка только по почте ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( ПараметрыДоставки.ПредставлениеОтчетовПолучателя - +""""+ ПараметрыДоставки.ИмяАрхива +"""" - ); + +""""+ ПараметрыДоставки.ИмяАрхива +""""); КонецЕсли; КонецПроцедуры @@ -2490,8 +2423,7 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Ошибка очистки каталога временных файлов %1:'"), ИнформацияОбОшибке(), - "'"+ ПараметрыДоставки.КаталогВременныхФайлов +"'" - ); + "'"+ ПараметрыДоставки.КаталогВременныхФайлов +"'"); КонецПопытки; КонецПроцедуры @@ -2572,8 +2504,7 @@ Если НЕ ПравоВывода Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), , - "'"+ Строка(Пользователи.ТекущийПользователь()) +"'" - ); + "'"+ Строка(Пользователи.ТекущийПользователь()) +"'"); КонецЕсли; Возврат ПравоВывода; КонецФункции @@ -2853,8 +2784,8 @@ Процедура ПриПодключенииДопОтчета(ДопОтчет, ПараметрыОтчета, Результат) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриПодключенииДопОтчета(ДопОтчет, ПараметрыОтчета, Результат); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПодключенииДопОтчета(ДопОтчет, ПараметрыОтчета, Результат); КонецЕсли; КонецПроцедуры @@ -2862,8 +2793,8 @@ Процедура ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); - Модуль.ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения); + МодульРаботаСФайламиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения); КонецЕсли; КонецПроцедуры @@ -2877,8 +2808,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); - Результат = Модуль.ЕстьПравоПоЗначениюДоступа("ИзменениеПапокИФайлов", Папка); + МодульУправлениеДоступом = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); + Результат = МодульУправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ИзменениеПапокИФайлов", Папка); КонецЕсли; КонецЕсли; @@ -2890,8 +2821,8 @@ Процедура ПриОпределенииНастроекПрокси(Прокси) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - Модуль.ПриОпределенииНастроекПрокси(Прокси); + МодульПолучениеФайловИзИнтернета = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + МодульПолучениеФайловИзИнтернета.ПриОпределенииНастроекПрокси(Прокси); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 0df973e93..7010892b0 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -11,7 +11,7 @@ // Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); - ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'"); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); ПараметрыЖурнала.МассивОшибок = Новый Массив; ПараметрыЖурнала.БылиОшибки = Ложь; ПараметрыЖурнала.Данные = Параметры.Ссылка; @@ -30,9 +30,7 @@ "Использование, Текст, ТекстОшибок", Истина, НСтр("ru = 'Не удалось сформировать список получателей'"), - ТекстОшибок - ) - ); + ТекстОшибок)); КонецЕсли; Возврат РезультатВыполнения; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index a83d24720..fad1343cf 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -122,8 +122,7 @@ ИначеЕсли Результат.Статус = "Исключение" Тогда Предупреждение( НСтр("ru = 'Рассылки не выполнены из-за ошибки, - |Подробности см. в журнале регистрации.'") - ); + |Подробности см. в журнале регистрации.'")); ИначеЕсли Результат.Статус = "Выполняется" Тогда ЭтаФорма.ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ЭтаФорма.ПараметрыФоновогоЗадания[2].Значение); @@ -220,8 +219,8 @@ Процедура РассылкаОтчетовПодборДопОтчета(ЭлементФормы) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); - Модуль.РассылкаОтчетовПодборДопОтчета(ЭлементФормы); + МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); + МодульДополнительныеОтчетыИОбработкиКлиент.РассылкаОтчетовПодборДопОтчета(ЭлементФормы); КонецЕсли; КонецПроцедуры @@ -231,8 +230,8 @@ Процедура РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиКлиент"); - Модуль.РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка); + МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); + МодульРаботаСФайламиСлужебныйКлиент.РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index 03fe2d76b..a84fa9e27 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -81,15 +81,20 @@ // Возвращаемое значение: // Результат (Строка) - Результат заполнения // -Функция ЗаполнитьШаблон(Шаблон, Параметры, Левый = "[", Правый = "]", ФорматЛевый = "(", ФорматПравый = ")", ВырезатьОбрамление = Истина) Экспорт +Функция ЗаполнитьШаблон(Шаблон, Параметры) Экспорт + Левый = "["; + Правый = "]"; + ФорматЛевый = "("; + ФорматПравый = ")"; + ВырезатьОбрамление = Истина; + Результат = Шаблон; Для Каждого КлючИЗначение Из Параметры Цикл // Замена [ключ] на [значение] Результат = СтрЗаменить( Результат, Левый + КлючИЗначение.Ключ + Правый, - ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый) - ); + ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый)); ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый); // Замена [ключ(формат)] на [значение] в формате Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); @@ -107,8 +112,7 @@ Результат = СтрЗаменить( Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый + ФорматнаяСтрока + ФорматПравый + Правый, - НаЧтоЗаменить - ); + НаЧтоЗаменить); Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); КонецЦикла; КонецЦикла; @@ -132,8 +136,7 @@ |[СпособДоставки] | |[ЗаголовокСистемы] - |[ДатаВыполнения(ДЛФ=''DD'')]'" - ); + |[ДатаВыполнения(ДЛФ=''DD'')]'"); КонецФункции // Возвращает шаблон наименования архива по умолчанию diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index 18500d883..9a60e3c13 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -79,9 +79,7 @@ РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, Новый Структура("ОсновнойТип, ДополнительныйТип", Тип("СправочникСсылка.Пользователи"), - Тип("СправочникСсылка.ГруппыПользователей") - ) - ); + Тип("СправочникСсылка.ГруппыПользователей"))); // Механизм расширения РассылкаОтчетовПереопределяемый.ПереопределитьТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы); @@ -90,8 +88,7 @@ ПустойМассив = Новый Массив; Для Каждого НеиспользованныйТип Из ДоступныеТипы Цикл РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ПустойМассив, - Новый Структура("ОсновнойТип", НеиспользованныйТип) - ); + Новый Структура("ОсновнойТип", НеиспользованныйТип)); КонецЦикла; Возврат ТаблицаТипов; diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 103b0b261..7b83af0ad 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -51,7 +51,7 @@ // Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", Новый ФиксированнаяСтруктура(ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); КонецЕсли; @@ -66,7 +66,7 @@ // Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", Новый ФиксированнаяСтруктура(ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); КонецЕсли; @@ -85,6 +85,13 @@ КонецПроцедуры +Функция ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Экспорт + + Возврат ОбщегоНазначения.ИнформационнаяБазаФайловая() + И НЕ ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -97,9 +104,9 @@ Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальноеКоличествоИсполняющихФоновыхЗаданий"); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальноеКоличествоИсполняющихФоновыхЗаданий"); КонецЕсли; КонецПроцедуры @@ -151,7 +158,7 @@ Знач УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания = Ложь, ОписаниеОшибки = "") Экспорт - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если НЕ ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда ЗаданияВыполняютсяНормально = Истина; ОписаниеОшибки = НСтр("ru = 'Задания выполняются на сервере.'"); Возврат Ложь; @@ -254,27 +261,34 @@ // Булево. // Функция РодительскийСеансЗаданИЗавершен(Знач ПараметрЗапуска) Экспорт - + + УстановитьПривилегированныйРежим(Истина); + РодительскийСеансЗадан = Ложь; Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда ИндексНомераСеанса = Найти(ПараметрЗапуска, "SessionNumber="); ИндексНачалаСеанса = Найти(ПараметрЗапуска, "SessionStarted="); + Если ИндексНомераСеанса <> 0 И ИндексНачалаСеанса <> 0 И ИндексНомераСеанса < ИндексНачалаСеанса Тогда + РодительскийСеансЗадан = Истина; - Сеансы = ПолучитьСеансыИнформационнойБазы(); + + Сеансы = ПолучитьСеансыИнформационнойБазы(); Для каждого Сеанс Из Сеансы Цикл Если Найти(ПараметрЗапуска, "SessionNumber=" + Сеанс.НомерСеанса) <> 0 И Найти(ПараметрЗапуска, "SessionStarted=" + Сеанс.НачалоСеанса) <> 0 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; + Возврат Истина; КонецЕсли; КонецЕсли; + Возврат Ложь; - + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -347,7 +361,7 @@ // Процедура ВыполнитьРегламентныеЗадания(ВремяВыполнения = 0) Экспорт - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если НЕ ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Возврат; КонецЕсли; @@ -476,7 +490,7 @@ Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Задание); Запуск = Ложь; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Запуск = ВыполнитьРегламентноеЗадание(Задание, Истина, МоментЗапуска, МоментОкончания, НомерСеанса, НачалоСеанса); Иначе СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); @@ -561,7 +575,7 @@ УведомлятьОНекорректномСостоянии = Ложь; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() И НЕ СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); @@ -640,7 +654,7 @@ Возврат Результат; КонецЕсли; - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если НЕ ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Если ПоНастройкеАвтоОткрытия Тогда Возврат Результат; @@ -705,7 +719,7 @@ // Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда ВызватьИсключение( НСтр("ru ='Фоновые задания не используются |в файловой информационной базе.'")); КонецЕсли; @@ -759,7 +773,7 @@ РегламентноеЗадание = Неопределено; // Добавление истории фоновых заданий, полученных с сервера. - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если НЕ ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Если Отбор <> Неопределено И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда МассивФоновыхЗаданий = Новый Массив; Если Отбор.ИдентификаторРегламентногоЗадания <> "" Тогда @@ -1318,4 +1332,3 @@ ХранилищеОбщихНастроек.Удалить("НастройкиВыполненияРегламентныхЗаданий", Неопределено, ""); КонецПроцедуры - diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/Module.bsl index be210287a..2569c154c 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/Module.bsl @@ -15,7 +15,7 @@ ОбработатьПараметрыЗапуска(); - ИначеЕсли ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + ИначеЕсли ПараметрыРаботыКлиента.ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий Тогда ПараметрыТолькоЧтение = ПараметрыРаботыКлиента.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий; @@ -44,26 +44,33 @@ #КонецЕсли // Для клиент-серверной базы. - Если Не ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + Если Не ПараметрыРаботыКлиента.ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий Тогда Если Предупреждать Тогда - Предупреждение(НСтр("ru = 'Регламентные задания выполняются на сервере.'")); + Если ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + Предупреждение(НСтр("ru = 'Регламентные задания выполняются платформой в скрытом сеансе.'")); + Иначе + Предупреждение(НСтр("ru = 'Регламентные задания выполняются на сервере.'")); + КонецЕсли; КонецЕсли; Если ОтдельныйСеанс Тогда ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; ЗавершитьРаботуСистемы(Ложь); КонецЕсли; Возврат; - КонецЕсли; + КонецЕсли; // Для файл-серверной базы. ЗаданияВыполняютсяНормально = Неопределено; ОписаниеОшибки = ""; - Если РегламентныеЗаданияСлужебныйВызовСервера.ТекущийСеансВыполняетРегламентныеЗадания( - ЗаданияВыполняютсяНормально, Истина, ОписаниеОшибки) Тогда + Если РегламентныеЗаданияСлужебныйВызовСервера.ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально, Истина, ОписаниеОшибки) Тогда - УстановитьЗаголовокПриложения(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнение регламентных заданий: %1'"), - ПолучитьЗаголовокПриложения() )); + Префикс = НСтр("ru = 'Выполнение регламентных заданий'"); + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Выполнить("УстановитьЗаголовокКлиентскогоПриложения(Префикс +"": ""+ + ПолучитьЗаголовокКлиентскогоПриложения());"); + Иначе + Выполнить("УстановитьЗаголовокПриложения(Префикс +"": ""+ ПолучитьЗаголовокПриложения());"); + КонецЕсли; Если ОтдельныйСеанс Тогда // Выполнять в отдельном сеансе. @@ -86,16 +93,7 @@ ОсновноеОкно); КонецЕсли; - Результат = ОткрытьФормуМодально( - "Обработка.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий"); - - Если Результат = "Перезапустить" Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь, Истина, " /C""" + ПараметрЗапуска + """"); - КонецЕсли; - - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); + ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий"); Иначе // Выполнять в этом сеансе. ПодключитьОбработчикОжидания("ВыполнениеРегламентныхЗаданийВОсновномСеансе", 1, Истина); diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index be3875124..06b78994d 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -12,23 +12,22 @@ // ИмяЭлемента - Строка - имя параметра. // ЗначениеЭлемента - Произвольный тип - значение параметра. // -Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте = Неопределено) Экспорт +Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента) Экспорт - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте); + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента); КонецПроцедуры -// Устанавливает значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. +// Формирует значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. // // Параметры: // НачальнаяНастройка - Булево - признак начальной настройки. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. // -Процедура УстановитьДатуСледующегоАвтоматическогоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте, НачальнаяНастройка = Ложь) Экспорт +Функция СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь) Экспорт - РезервноеКопированиеИБСервер.УстановитьДатуСледующегоАвтоматическогоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте, НачальнаяНастройка); + Возврат РезервноеКопированиеИБСервер.СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка); -КонецПроцедуры +КонецФункции // Устанавливает дату последнего оповещения пользователя. // @@ -41,9 +40,9 @@ КонецПроцедуры -// Возвращает признак доступности роли "ПолучениеНапоминанийОРезервномКопировании". +// Возвращает признак наличия у пользователя полных прав. // -// Возвращаемое значение - Булево - доступность роли. +// Возвращаемое значение - Булево - Истина, если это полноправный пользователь. // Функция ПолучитьДоступностьРолейОповещения() Экспорт @@ -64,42 +63,6 @@ КонецФункции -// Останавливает механизм автоматического резервного копирования. -// Устанавливает пустое расписание и минимальную дату копирования в будущее время. -// -// Параметры: -// ПроводитьПриЗавершении - Булево - признак проведения резервного копирования при завершении работы. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура ОстановитьАвтоматическоеРезервноеКопирование(ПараметрыРезервногоКопированияИБНаКлиенте, ПроводитьПриЗавершении = Ложь) Экспорт - - РезервноеКопированиеИБСервер.ОстановитьАвтоматическоеРезервноеКопирование(ПараметрыРезервногоКопированияИБНаКлиенте, ПроводитьПриЗавершении); - -КонецПроцедуры - -// Устанавливает элемент "Код выбора" настроек резервного копирования. -// -// Параметры: -// КодПереключателя - Число - код переключателя. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт - - РезервноеКопированиеИБСервер.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте); - -КонецПроцедуры - -// Останавливает оповещения о резервном копировании. -// -// Параметры: -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт - - РезервноеКопированиеИБСервер.ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте); - -КонецПроцедуры - // Сохраняет параметры резервного копирования. // // Параметры: diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 9b693b117..72e4788e1 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -10,61 +10,158 @@ // или показа пользователю необходимого информационного сообщения. Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыРаботы.РазделениеВключено Тогда Возврат; КонецЕсли; - ПараметрыНастроек = ПараметрыРаботы.ПараметрыРезервногоКопированияИБ; - - // настройки не определены только в том случае, если у пользователя нет доступа к подсистеме - Если ПараметрыНастроек = Неопределено Тогда + ФиксированныеПараметрыРезервногоКопированияИБ = Неопределено; + Если НЕ ПараметрыРаботы.Свойство("РезервноеКопированиеИБ", ФиксированныеПараметрыРезервногоКопированияИБ) Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(ФиксированныеПараметрыРезервногоКопированияИБ) <> Тип("ФиксированнаяСтруктура") Тогда Возврат; КонецЕсли; - // Настройки резервного копирования присваиваем глобальной переменной. - ПараметрыРезервногоКопированияИБ = ПараметрыНастроек; - Если ПараметрыРезервногоКопированияИБ.ПроцессВыполняется Тогда - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь, ПараметрыРезервногоКопированияИБ); - КонецЕсли; + // Заполнение глобальных переменных. + ЗаполнитьЗначенияГлобальныхПеременных(ФиксированныеПараметрыРезервногоКопированияИБ); - ОповещатьОРезервномКопированииПриЗавершенииСеанса = Ложь; - ДатаОтложенногоРезервногоКопирования = Дата('00010101'); + // Подключение глобального обработчика ожидания. ПодключитьОбработчикОжидания("ОбработчикДействийРезервногоКопирования", 60); - ВариантОповещения = ПараметрыНастроек.ПараметрОповещения; + // Интерактивные действия, выполняемые при запуске. + ВариантОповещения = ФиксированныеПараметрыРезервногоКопированияИБ.ПараметрОповещения; Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда ОповеститьПользователяОРезервномКопировании(ВариантОповещения); КонецЕсли; - ПроверитьРезервноеКопированиеИБ(ПараметрыНастроек); + ПроверитьРезервноеКопированиеИБ(ФиксированныеПараметрыРезервногоКопированияИБ); - Если ПараметрыНастроек.ПроведеноВосстановление Тогда + Если ФиксированныеПараметрыРезервногоКопированияИБ.ПроведеноВосстановление Тогда ТекстОповещения = НСтр("ru = 'Восстановление данных проведено успешно.'"); ПоказатьОповещениеПользователя(НСтр("ru = 'Данные восстановлены.'"), , ТекстОповещения); КонецЕсли; КонецПроцедуры -// Подключает обработчик ожидания начала резервного копирования. -Процедура ПодключитьОжиданиеРезервногоКопирования() Экспорт +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Заполнение глобальных переменных. +Процедура ЗаполнитьЗначенияГлобальныхПеременных(ФиксированныеПараметрыРезервногоКопированияИБ) Экспорт - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина, ПараметрыРезервногоКопированияИБ); + ПараметрыРезервногоКопированияИБ = Новый Структура("ПроцессВыполняется, МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования, ДатаПоследнегоРезервногоКопирования, ОтложенноеРезервноеКопирование, ПараметрОповещения"); + ЗаполнитьЗначенияСвойств(ПараметрыРезервногоКопированияИБ, ФиксированныеПараметрыРезервногоКопированияИБ); + ПараметрыРезервногоКопированияИБ.Вставить("РасписаниеЗначение", ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(ФиксированныеПараметрыРезервногоКопированияИБ.РасписаниеКопирования)); + + ОповещатьОРезервномКопированииПриЗавершенииСеанса = Ложь; + ДатаОтложенногоРезервногоКопирования = Дата('00010101'); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Обработчики служебных событий подсистем БСП + +// Доопределяет список предупреждений пользователю перед завершением работы системы. +// +// Параметры: +// Предупреждения - Массив, в который можно добавить элементы типа Структура с полями: +// ТекстФлажка - Строка - текст флажка. +// ПоясняющийТекст - Строка - текст, выводимый в форме сверху +// управляющего элемента (флажок или гиперссылка). +// ТекстГиперссылки - Строка - текст гиперссылки. +// ДействиеПриУстановленномФлажке - Структура с полями: +// Форма - путь к открываемой форме. +// ПараметрыФормы - произвольная структура параметров формы Форма. +// ДействиеПриНажатииГиперссылки - Структура с полями: +// Форма - Строка - путь к форме, которая должна открываться по нажатию на гиперссылку. +// ПараметрыФормы - Структура - произвольная структура параметров для вышеописанной формы. +// ПрикладнаяФормаПредупреждения - Строка - путь к форме, которая должна открываться сразу +// вместо универсальной формы в случае, когда в списке +// предупреждений оказывается только одно данное предупреждение. +// ПараметрыПрикладнойФормыПредупреждения - Структура - произвольная структура +// параметров для вышеописанной формы. +// +Процедура ПриПолученииСпискаПредупрежденийЗавершенияРаботы(Предупреждения) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + + ПриЗавершенииРаботыСистемы(Предупреждения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Проверяет необходимость запуска автоматического резервного копирования +// в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального. +// +Процедура ОбработчикОжиданияЗапуска() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; + КонецЕсли; + + Если НеобходимостьАвтоматическогоРезервногоКопирования() Тогда + ПровестиРезервноеКопирование(); + КонецЕсли; + + Если ПараметрыРезервногоКопированияИБ.ОтложенноеРезервноеКопирование Тогда + ОтложенноеИнтерактивноеРезервноеКопирование(); + КонецЕсли; + + ВариантОповещения = ПараметрыРезервногоКопированияИБ.ПараметрОповещения; + Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда + ОповеститьПользователяОРезервномКопировании(ВариантОповещения); + КонецЕсли; + +КонецПроцедуры + +// Проверяет необходимость проведения автоматического резервного копирования. +// +// Возвращаемое значение - Булево - Истина, если необходима, Ложь - иначе. +// +Функция НеобходимостьАвтоматическогоРезервногоКопирования() Экспорт + Перем РасписаниеЗначение; + + Если ТипЗнч(ПараметрыРезервногоКопированияИБ) <> Тип("Структура") Тогда + Возврат Ложь; + КонецЕсли; + + Если ПараметрыРезервногоКопированияИБ.ПроцессВыполняется + ИЛИ НЕ ПараметрыРезервногоКопированияИБ.Свойство("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования") + ИЛИ НЕ ПараметрыРезервногоКопированияИБ.Свойство("РасписаниеЗначение", РасписаниеЗначение) + ИЛИ НЕ ПараметрыРезервногоКопированияИБ.Свойство("ДатаПоследнегоРезервногоКопирования") Тогда + Возврат Ложь; + КонецЕсли; + + Если РасписаниеЗначение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования > ДатаПроверки Тогда + Возврат Ложь; + КонецЕсли; + + Возврат РасписаниеЗначение.ТребуетсяВыполнение(ДатаПроверки, ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования); +КонецФункции // Запускает резервное копирование по расписанию. // Состоит из двух этапов: 1 - очистка каталога с копиями, 2 - непосредственно резервное копирование. Процедура ПровестиРезервноеКопирование() Экспорт // Очистка архива с копиями. - НастройкиУдаления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыРезервногоКопированияИБ; - КаталогХранения = НастройкиУдаления.КаталогХраненияРезервныхКопий; + ФиксированныеПараметрыРезервногоКопированияИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РезервноеКопированиеИБ; + КаталогХранения = ФиксированныеПараметрыРезервногоКопированияИБ.КаталогХраненияРезервныхКопий; - Если НастройкиУдаления.ПроизводитьУдаление И КаталогХранения <> Неопределено Тогда + Если ФиксированныеПараметрыРезервногоКопированияИБ.ПроизводитьУдаление И КаталогХранения <> Неопределено Тогда Попытка Файл = Новый Файл(КаталогХранения); @@ -72,20 +169,20 @@ Возврат; КонецЕсли; - МассивФайлов = НайтиФайлы(КаталогХранения, "*", Истина); + МассивФайлов = НайтиФайлы(КаталогХранения, "backup*.zip", Истина); СписокУдаляемыхФайлов = Новый СписокЗначений; // Удаление резервных копий. - Если НастройкиУдаления.УдалятьПоПериоду Тогда + Если ФиксированныеПараметрыРезервногоКопированияИБ.УдалятьПоПериоду Тогда Для Каждого ЭлементФайл Из МассивФайлов Цикл ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - ПараметрУдаления = ?((ТекущаяДата - НастройкиУдаления.ЗначениеПараметра) > ЭлементФайл.ПолучитьВремяИзменения(), Истина, Ложь); + ПараметрУдаления = ?((ТекущаяДата - ФиксированныеПараметрыРезервногоКопированияИБ.ЗначениеПараметра) > ЭлементФайл.ПолучитьВремяИзменения(), Истина, Ложь); Если ПараметрУдаления Тогда СписокУдаляемыхФайлов.Добавить(ЭлементФайл); КонецЕсли; КонецЦикла; - ИначеЕсли МассивФайлов.Количество() >= НастройкиУдаления.ЗначениеПараметра Тогда + ИначеЕсли МассивФайлов.Количество() >= ФиксированныеПараметрыРезервногоКопированияИБ.ЗначениеПараметра Тогда СписокФайлов = Новый СписокЗначений; СписокФайлов.ЗагрузитьЗначения(МассивФайлов); @@ -94,7 +191,7 @@ КонецЦикла; СписокФайлов.СортироватьПоЗначению(НаправлениеСортировки.Убыв); - Индекс = НастройкиУдаления.ЗначениеПараметра; + Индекс = ФиксированныеПараметрыРезервногоКопированияИБ.ЗначениеПараметра; ДатаПоследнегоАрхива = СписокФайлов[Индекс-1].Значение; Для Каждого ЭлементФайл Из МассивФайлов Цикл @@ -103,7 +200,7 @@ СписокУдаляемыхФайлов.Добавить(ЭлементФайл); КонецЕсли; - КонецЦикла; + КонецЦикла; КонецЕсли; @@ -121,7 +218,9 @@ КонецЕсли; // резервное копирование - РезервноеКопированиеИБВызовСервера.УстановитьДатуСледующегоАвтоматическогоКопирования(ПараметрыРезервногоКопированияИБ); + ДатыСледующегоАвтоматическогоКопирования = РезервноеКопированиеИБВызовСервера.СформироватьДатыСледующегоАвтоматическогоКопирования(); + ЗаполнитьЗначенияСвойств(ПараметрыРезервногоКопированияИБ, ДатыСледующегоАвтоматическогоКопирования); + ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница", 2, "СтраницаИнформацииИВыполненияРезервногоКопирования"); ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); @@ -133,29 +232,28 @@ // Параметры: // ПараметрыРезервногоКопирования - Структура - параметры резервного копирования. // -Процедура ПроверитьРезервноеКопированиеИБ(ПараметрыРезервногоКопирования) Экспорт +Процедура ПроверитьРезервноеКопированиеИБ(ФиксированныеПараметрыРезервногоКопированияИБ) Экспорт - ЗначениеНастройкиРезервногоКопирования = ПараметрыРезервногоКопирования; - - Если ЗначениеНастройкиРезервногоКопирования.ПроведеноКопирование Тогда + Если ФиксированныеПараметрыРезервногоКопированияИБ.ПроведеноКопирование Тогда ПараметрыФормы = Новый Структура("ТипВызова", 2); НазваниеТекущейСтраницы = ""; - Если ЗначениеНастройкиРезервногоКопирования.РезультатКопирования Тогда + Если ФиксированныеПараметрыРезервногоКопированияИБ.РезультатКопирования Тогда НазваниеТекущейСтраницы = "СтраницаУспешногоВыполненияКопирования"; Иначе НазваниеТекущейСтраницы = "СтраницаОшибокПриКопировании"; КонецЕсли; ПараметрыФормы.Вставить("ТекущаяСтраница", НазваниеТекущейСтраницы); - ПараметрыФормы.Вставить("ТекстПути", ЗначениеНастройкиРезервногоКопирования.ИмяФайлаРезервнойКопии); + ПараметрыФормы.Вставить("ТекстПути", ФиксированныеПараметрыРезервногоКопированияИБ.ИмяФайлаРезервнойКопии); ФормаОповещения = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); КонецЕсли; + КонецПроцедуры - // По результатам анализа параметров резервного копирования выдает соответствующее оповещение. +// По результатам анализа параметров резервного копирования выдает соответствующее оповещение. // // Параметры: // ВариантОповещения - Строка - результат проверки на посылку оповещения @@ -207,45 +305,13 @@ КонецЕсли; КонецФункции -// Возвращает позицию последнего передаваемого символа. -// -// Параметры: -// ИсходнаяСтрока - Строка - строка, в которой осуществляется поиск. -// СимволПоиска - Строка - символ поиска. -// -// Возвращаемое значение - Число - позиция символа. -// -Функция ПолучитьНомерПоследнегоСимвола(Знач ИсходнаяСтрока, Знач СимволПоиска) - ПозицияСимвола = СтрДлина(ИсходнаяСтрока); - Пока ПозицияСимвола >= 1 Цикл - - Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда - Возврат ПозицияСимвола; - КонецЕсли; - - ПозицияСимвола = ПозицияСимвола - 1; - КонецЦикла; - Возврат 0; -КонецФункции - -// Возвращает значение глобальной переменной модуля приложения. -// Используется для обработчиков ожидания из глобального клиентского модуля. -// -// Возвращаемое значение - Дата - дата отложенного резервного копирования. -// -Функция ПолучитьДатуКопирования() Экспорт - - Возврат ДатаОтложенногоРезервногоКопирования; - -КонецФункции - // Возвращает тип события журнала регистрации для данной подсистемы. // // Возвращаемое значение - Строка - тип события журнала регистрации. // Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Резервное копирование информационной базы'"); + Возврат НСтр("ru = 'Резервное копирование информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции @@ -282,96 +348,6 @@ #КонецЕсли КонецФункции -// Возвращает параметры резервного копирования -// из глобальной переменной "ПараметрыРезервногоКопированияИБ". -// -// Возвращаемое значение - Структура - параметры резервного копирования ИБ. -// -Функция ПолучитьПараметрыРезервногоКопированияИБ() Экспорт - - Возврат ПараметрыРезервногоКопированияИБ; - -КонецФункции - -// Проверяет необходимость проведения автоматического резервного копирования. -// -// Возвращаемое значение - Булево - Истина, если необходима, Ложь - иначе. -// -Функция НеобходимостьАвтоматическогоРезервногоКопирования() Экспорт - Параметры = ПолучитьПараметрыРезервногоКопированияИБ(); - Если Параметры = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Расписание = Параметры.РасписаниеКопирования; - Если Расписание = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Если Параметры.Свойство("ПроцессВыполняется") Тогда - Если Параметры.ПроцессВыполняется Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования > ДатаПроверки Тогда - Возврат Ложь; - КонецЕсли; - - ДатаНачалаПроверки = Параметры.ДатаПоследнегоРезервногоКопирования; - РасписаниеЗначение = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); - Возврат РасписаниеЗначение.ТребуетсяВыполнение(ДатаПроверки, ДатаНачалаПроверки); -КонецФункции - -// Устанавливает передаваемое значение клиентской глобальной переменной "ПараметрыРезервногоКопированияИБ". -// -// Параметры: -// Параметры - Структура - передаваемое значение. -// -Процедура УстановитьПараметрыРезервногоКопирования(Параметры) Экспорт - - ПараметрыРезервногоКопированияИБ = Параметры; - -КонецПроцедуры - -// Функция проверяет настройки резервного копирования. -// -// Возвращаемое значение: -// Неопределено - если нет резервного копирования, -// Дата - если имеется отложенное резервное копирование, -// Булево - если имеется резервное копирование при завершении работы. -// -Функция ПроверитьНаличиеРезервногоКопирования() -#Если ВебКлиент Тогда - Возврат Неопределено; -#КонецЕсли - - Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыРезервногоКопированияИБ.ДоступностьРолейОповещения Тогда - Возврат Неопределено; - КонецЕсли; - - ОповещатьПостоянно = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыРезервногоКопированияИБ.ПроводитьРезервноеКопированиеПриЗавершенииРаботы; - ОповещатьПостоянно = ?(ОповещатьПостоянно = Неопределено, Ложь, ОповещатьПостоянно); - КоличествоАктивныхАдминистраторов = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().ПараметрыРезервногоКопированияИБ.КоличествоАктивныхПользователей; - // Переменная ОповещатьОРезервномКопированииПриЗавершенииСеанса сравнивается явно с Истина, - // так как может быть не проинициализирована при аварийном завершении. - Если ОповещатьОРезервномКопированииПриЗавершенииСеанса = Истина ИЛИ (ОповещатьПостоянно И КоличествоАктивныхАдминистраторов = 1) Тогда - Возврат Истина; - Иначе // Если нет резервного копирования при завершении работы системы. - // Переменная ДатаОтложенногоРезервногоКопирования может быть не проинициализирована при аварийном завершении. - Если ДатаОтложенногоРезервногоКопирования = Неопределено Тогда - ДатаОтложенногоРезервногоКопирования = Дата('00010101'); - КонецЕсли; - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ДатаОтложенногоРезервногоКопирования > ТекущаяДата Тогда - Возврат ДатаОтложенногоРезервногоКопирования; - КонецЕсли; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - // Формирует вопросы при завершении работы системы. // // Параметры: @@ -408,38 +384,94 @@ Если ИмеетсяРезервноеКопирование Тогда ДействиеПриУстановленномФлажке = Новый Структура("Форма, ПараметрыФормы", ФормаОбработки, ПараметрыФормы); - СтруктураПредупреждения = Новый Структура("ТекстФлажка, ДействиеПриУстановленномФлажке, Приоритет", ТекстФлажка, ДействиеПриУстановленномФлажке, 90); + СтруктураПредупреждения = Новый Структура("ТекстФлажка, ДействиеПриУстановленномФлажке, Приоритет", ТекстФлажка, ДействиеПриУстановленномФлажке, 70); Предупреждения.Добавить(СтруктураПредупреждения); КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий подсистем БСП +// Локальные служебные процедуры и функции -// Доопределяет список предупреждений пользователю перед завершением работы системы. +// Обработчик ожидания выполнения резервного копирования. // -// Параметры: -// Предупреждения - Массив, в который можно добавить элементы типа Структура с полями: -// ТекстФлажка - Строка - текст флажка. -// ПоясняющийТекст - Строка - текст, выводимый в форме сверху -// управляющего элемента (флажок или гиперссылка). -// ТекстГиперссылки - Строка - текст гиперссылки. -// ДействиеПриУстановленномФлажке - Структура с полями: -// Форма - путь к открываемой форме. -// ПараметрыФормы - произвольная структура параметров формы Форма. -// ДействиеПриНажатииГиперссылки - Структура с полями: -// Форма - Строка - путь к форме, которая должна открываться по нажатию на гиперссылку. -// ПараметрыФормы - Структура - произвольная структура параметров для вышеописанной формы. -// ПрикладнаяФормаПредупреждения - Строка - путь к форме, которая должна открываться сразу -// вместо универсальной формы в случае, когда в списке -// предупреждений оказывается только одно данное предупреждение. -// ПараметрыПрикладнойФормыПредупреждения - Структура - произвольная структура -// параметров для вышеописанной формы. -// -Процедура ПриПолученииСпискаПредупрежденийЗавершенияРаботы(Предупреждения) Экспорт +Процедура ОтложенноеИнтерактивноеРезервноеКопирование() - ПриЗавершенииРаботыСистемы(Предупреждения); + Если ОбщегоНазначенияКлиент.ДатаСеанса() < ДатаОтложенногоРезервногоКопирования + И РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда + + ТекстВопроса = НСтр("ru = 'В данный момент с базой больше никто не работает. Выполнить резервное копирование?'"); + ЗаголовокВопроса = Нстр("ru = 'Провести резервное копирование прямо сейчас'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да, ЗаголовокВопроса, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Или Ответ = Неопределено Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + ПараметрыРезервногоКопированияИБ.ОтложенноеРезервноеКопирование = Ложь; + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь); + ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница, ЗаголовокНадписи", 1, "СтраницаИнформацииИВыполненияРезервногоКопирования", ""); + ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); КонецПроцедуры +// Функция проверяет настройки резервного копирования. +// +// Возвращаемое значение: +// Неопределено - если нет резервного копирования, +// Дата - если имеется отложенное резервное копирование, +// Булево - если имеется резервное копирование при завершении работы. +// +Функция ПроверитьНаличиеРезервногоКопирования() +#Если ВебКлиент Тогда + Возврат Неопределено; +#КонецЕсли + + Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().РезервноеКопированиеИБ.ДоступностьРолейОповещения Тогда + Возврат Неопределено; + КонецЕсли; + + ОповещатьПостоянно = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().РезервноеКопированиеИБ.ПроводитьРезервноеКопированиеПриЗавершенииРаботы; + ОповещатьПостоянно = ?(ОповещатьПостоянно = Неопределено, Ложь, ОповещатьПостоянно); + КоличествоАктивныхАдминистраторов = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении().РезервноеКопированиеИБ.КоличествоАктивныхПользователей; + // Переменная ОповещатьОРезервномКопированииПриЗавершенииСеанса сравнивается явно с Истина, + // так как может быть не проинициализирована при аварийном завершении. + Если ОповещатьОРезервномКопированииПриЗавершенииСеанса = Истина ИЛИ (ОповещатьПостоянно И КоличествоАктивныхАдминистраторов = 1) Тогда + Возврат Истина; + Иначе // Если нет резервного копирования при завершении работы системы. + // Переменная ДатаОтложенногоРезервногоКопирования может быть не проинициализирована при аварийном завершении. + Если ДатаОтложенногоРезервногоКопирования = Неопределено Тогда + ДатаОтложенногоРезервногоКопирования = Дата('00010101'); + КонецЕсли; + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ДатаОтложенногоРезервногоКопирования > ТекущаяДата Тогда + Возврат ДатаОтложенногоРезервногоКопирования; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Возвращает позицию последнего передаваемого символа. +// +// Параметры: +// ИсходнаяСтрока - Строка - строка, в которой осуществляется поиск. +// СимволПоиска - Строка - символ поиска. +// +// Возвращаемое значение - Число - позиция символа. +// +Функция ПолучитьНомерПоследнегоСимвола(Знач ИсходнаяСтрока, Знач СимволПоиска) + ПозицияСимвола = СтрДлина(ИсходнаяСтрока); + Пока ПозицияСимвола >= 1 Цикл + + Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда + Возврат ПозицияСимвола; + КонецЕсли; + + ПозицияСимвола = ПозицияСимвола - 1; + КонецЦикла; + Возврат 0; +КонецФункции + diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl index 7a31d90f3..bd8fb7b1c 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl @@ -11,76 +11,6 @@ // Процедура ОбработчикДействийРезервногоКопирования() Экспорт - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - ПроводитьАвтоматическоеРезервноеКопирование = РезервноеКопированиеИБКлиент.НеобходимостьАвтоматическогоРезервногоКопирования(); - - Если ПроводитьАвтоматическоеРезервноеКопирование Тогда - РезервноеКопированиеИБКлиент.ПровестиРезервноеКопирование(); - КонецЕсли; - - Если ПараметрыРезервногоКопированияИБНаКлиенте.ОтложенноеРезервноеКопирование Тогда - ОтложенноеИнтерактивноеРезервноеКопирование(ПараметрыРезервногоКопированияИБНаКлиенте); - КонецЕсли; - - ВариантОповещения = ПараметрыРезервногоКопированияИБНаКлиенте.ПараметрОповещения; - Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда - РезервноеКопированиеИБКлиент.ОповеститьПользователяОРезервномКопировании(ПараметрыРезервногоКопированияИБНаКлиенте.ПараметрОповещения); - КонецЕсли; + РезервноеКопированиеИБКлиент.ОбработчикОжиданияЗапуска(); КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Обработчик ожидания выполнения резервного копирования. -// -// Параметры: -// ПараметрыКопирования - Структура - параметры резервного копирования. -// -Процедура ОтложенноеИнтерактивноеРезервноеКопирование(ПараметрыКопирования) Экспорт - - ДатаКопирования = РезервноеКопированиеИБКлиент.ПолучитьДатуКопирования(); - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ТекущаяДата > ДатаКопирования Тогда - - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - ПараметрыРезервногоКопированияИБНаКлиенте.ОтложенноеРезервноеКопирование = Ложь; - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь); - РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); - - НачатьРезервноеКопирование(); - - Иначе - - Если РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда - - ТекстВопроса = НСтр("ru = 'В данный момент с базой больше никто не работает. Выполнить резервное копирование?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да, - Нстр("ru = 'Провести резервное копирование прямо сейчас'"), КодВозвратаДиалога.Да); - - Если Ответ = КодВозвратаДиалога.Да ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - ПараметрыРезервногоКопированияИБНаКлиенте.ОтложенноеРезервноеКопирование = Ложь; - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь); - РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); - - НачатьРезервноеКопирование(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Открывает форму выполнения резервного копирования. -// -Процедура НачатьРезервноеКопирование() - - ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница, ЗаголовокНадписи", 1, "СтраницаИнформацииИВыполненияРезервногоКопирования", ""); - ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); - -КонецПроцедуры - - diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 2f4b6adee..2b5f4f1a7 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -35,34 +35,6 @@ КонецПроцедуры -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; - КонецЕсли; - - Параметры.Вставить("ПараметрыРезервногоКопированияИБ", ПолучитьНастройкиРезервногоКопирования()); - -КонецПроцедуры - -// Заполняет структуру параметров, необходимых для работы клиентского кода -// конфигурации при завершении работы. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиентаПриЗавершении(Параметры) Экспорт - - Параметры.Вставить("ПараметрыРезервногоКопированияИБ", ПолучитьПараметрыПриЗавершенииРаботы()); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -102,7 +74,7 @@ Возврат 3600 * 24; ИначеЕсли ТипПериодаСтрока = "Неделя" Тогда Возврат 3600 * 24 * 7; - КонецЕсли; + КонецЕсли; КонецФункции // Возвращает значение периода по заданному интервалу времени. @@ -229,8 +201,8 @@ Если Параметры.Свойство("ПроцессВыполняется") Тогда Если Параметры.ПроцессВыполняется Тогда Возврат Ложь; - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; ДатаПроверки = ТекущаяДатаСеанса(); Если Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования > ДатаПроверки Тогда @@ -243,21 +215,23 @@ КонецФункции -// Устанавливает значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. +// Формирует даты ближайшего следующего автоматического резервного копирования в соответствии с расписанием. // // Параметры: // НачальнаяНастройка - Булево - признак начальной настройки. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. // -Процедура УстановитьДатуСледующегоАвтоматическогоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте, НачальнаяНастройка = Ложь) Экспорт +Функция СформироватьДатыСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь) Экспорт + + Результат = Новый Структура; + + НастройкиРезервногоКопирования = ПолучитьНастройкиРезервногоКопирования(); - Параметры = ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); - Если НачальнаяНастройка Тогда - Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДата; - Параметры.ДатаПоследнегоРезервногоКопирования = ТекущаяДата; + Если НачальнаяНастройка Тогда + Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", ТекущаяДата); + Результат.Вставить("ДатаПоследнегоРезервногоКопирования", ТекущаяДата); Иначе - РасписаниеКопирования = Параметры.РасписаниеКопирования; + РасписаниеКопирования = НастройкиРезервногоКопирования.РасписаниеКопирования; ПериодПовтораВТечениеДня = РасписаниеКопирования.ПериодПовтораВТечениеДня; ПериодПовтораДней = РасписаниеКопирования.ПериодПовтораДней; @@ -267,24 +241,23 @@ Значение = ТекущаяДата + ПериодПовтораДней * ПолучитьВременнойПараметрПоСтроке("День"); Иначе Значение = НачалоДня(КонецДня(ТекущаяДата) + 1); - КонецЕсли; - Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = Значение; + КонецЕсли; + Результат.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", Значение); КонецЕсли; - ПараметрыРезервногоКопированияИБНаКлиенте = Параметры; - УстановитьПараметрыРезервногоКопирования(Параметры); -КонецПроцедуры + ЗаполнитьЗначенияСвойств(НастройкиРезервногоКопирования, Результат); + УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); + + Возврат Результат; + +КонецФункции // Возвращает значение настройки "Статус резервного копирования" в части результата. // Используется при начале работы системы для показа формы с результатами резервного копирования. // -// Параметры: -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт +Процедура УстановитьРезультатРезервногоКопирования() Экспорт СтруктураПараметров = ПолучитьНастройкиРезервногоКопирования(); СтруктураПараметров.ПроведеноКопирование = Ложь; - ПараметрыРезервногоКопированияИБНаКлиенте = СтруктураПараметров; УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); КонецПроцедуры @@ -351,33 +324,15 @@ УстановитьПараметрыРезервногоКопирования(ПараметрыОповещений); КонецПроцедуры -// Останавливает механизм автоматического резервного копирования. -// Устанавливает пустое расписание и минимальную дату копирования в будущее время. -// -// Параметры: -// ПроводитьПриЗавершении - Булево - признак проведения резервного копирования при завершении работы. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура ОстановитьАвтоматическоеРезервноеКопирование(ПараметрыРезервногоКопированияИБНаКлиенте, ПроводитьПриЗавершении) Экспорт - - ПараметрыАвтоматическогоКопирования = ПолучитьНастройкиРезервногоКопирования(); - ПараметрыАвтоматическогоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = Дата(2100, 12, 31); - ПараметрыАвтоматическогоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы = ПроводитьПриЗавершении; - ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыАвтоматическогоКопирования; - УстановитьПараметрыРезервногоКопирования(ПараметрыАвтоматическогоКопирования); - -КонецПроцедуры - // Устанавливает настройку в параметры резервного копирования. // // Параметры: // ИмяЭлемента - Строка - имя параметра. // ЗначениеЭлемента - Произвольный тип - значение параметра. // -Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт +Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента) Экспорт СтруктураНастроек = ПолучитьПараметрыРезервногоКопирования(); СтруктураНастроек.Вставить(ИмяЭлемента, ЗначениеЭлемента); - ПараметрыРезервногоКопированияИБНаКлиенте = СтруктураНастроек; УстановитьПараметрыРезервногоКопирования(СтруктураНастроек); КонецПроцедуры @@ -388,10 +343,14 @@ // // Возвращаемое значение - Структура - параметры резервного копирования. // -Функция ПолучитьНастройкиРезервногоКопирования(НаКлиент = Ложь) Экспорт +Функция ПолучитьНастройкиРезервногоКопирования(НачалоРаботы = Ложь) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Неопределено; // Не выполнен вход в область данных. + КонецЕсли; Если Не ПолучитьДоступностьРолейОповещения() Тогда - Возврат Неопределено; + Возврат Неопределено; // Текущий пользователь не обладает необходимыми правами. КонецЕсли; СтруктураВозврата = ПолучитьПараметрыРезервногоКопирования(); @@ -400,7 +359,7 @@ КонецЕсли; ВариантОповещения = ПолучитьВариантОповещения(); - Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда + Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда УстановитьДатуПоследнегоНапоминания(ТекущаяДатаСеанса()); КонецЕсли; @@ -413,26 +372,12 @@ ОбновитьРезультатВосстановления(); КонецЕсли; - Если НаКлиент Тогда - Возврат СформироватьКлиентскуюСтруктуру(СтруктураВозврата); - Иначе - Возврат СтруктураВозврата; + Если НачалоРаботы И СтруктураВозврата.ПроцессВыполняется Тогда + СтруктураВозврата.ПроцессВыполняется = Ложь; + УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь); КонецЕсли; -КонецФункции - -// Возвращает клиентскую структуру с параметрами для работы приложения. -// -// Параметры: -// ИсходнаяСтруктура - Структура - структура параметров резервного копирования. -// -// Возвращаемое значение - Структура - скопированная структура параметров резервного копирования. -// -Функция СформироватьКлиентскуюСтруктуру(ИсходнаяСтруктура) - - КлиентскаяСтруктура = Новый Структура("ДатаПоследнегоОповещения, ОтложенноеРезервноеКопирование, ПараметрОповещения, ДатаПоследнегоРезервногоКопирования"); - ЗаполнитьЗначенияСвойств(КлиентскаяСтруктура, ИсходнаяСтруктура); - Возврат КлиентскаяСтруктура; + Возврат СтруктураВозврата; КонецФункции @@ -500,7 +445,7 @@ Параметры.Вставить("ДатаПоследнегоРезервногоКопирования", ТекущаяДата); Параметры.Вставить("РасписаниеКопирования", ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Новый РасписаниеРегламентногоЗадания)); Параметры.Вставить("КаталогХраненияРезервныхКопий", ""); - Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", Дата(2100, 12, 31)); + Параметры.Вставить("МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования", '29990101'); Параметры.Вставить("ПроизводитьУдаление", Истина); Параметры.Вставить("УдалятьПоПериоду", Истина); Параметры.Вставить("ЗначениеПараметра", ДобавитьМесяц(ТекущаяДата, 6) - ТекущаяДата); @@ -528,46 +473,14 @@ КонецФункции -// Возвращает признак доступности роли "ПолучениеНапоминанийОРезервномКопировании". +// Возвращает признак наличия у пользователя полных прав. // -// Возвращаемое значение - Булево - доступность роли. +// Возвращаемое значение - Булево - Истина, если это полноправный пользователь. // Функция ПолучитьДоступностьРолейОповещения() Экспорт - Возврат Пользователи.РолиДоступны("ПолучениеНапоминанийОРезервномКопировании"); + Возврат Пользователи.ЭтоПолноправныйПользователь(,Истина); КонецФункции -// Останавливает оповещения о резервном копировании. -// -// Параметры: -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт - Настройка = ПолучитьНастройкиРезервногоКопирования(); - Настройка.ПериодОповещения = 0; - Настройка.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = Дата(2100, 12, 31); - Настройка.НастроеноПользователем = Истина; - ПараметрыРезервногоКопированияИБНаКлиенте = Настройка; - УстановитьПараметрыРезервногоКопирования(Настройка); -КонецПроцедуры - -// Устанавливает элемент "Код выбора" настроек резервного копирования. -// -// Параметры: -// КодПереключателя - Число - код переключателя. -// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. -// -Процедура УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт - Структура = ПолучитьНастройкиРезервногоКопирования(); - Структура.ВыборПунктаНастройки = КодПереключателя; - - Если КодПереключателя = 3 Тогда - Структура.НастроеноПользователем = Ложь; - КонецЕсли; - - ПараметрыРезервногоКопированияИБНаКлиенте = Структура; - УстановитьПараметрыРезервногоКопирования(Структура); -КонецПроцедуры - // Процедура, вызываемая из скрипта через com-соединение. // Записывает результат проведенного копирования в настройки. // @@ -596,6 +509,42 @@ УстановитьПараметрыРезервногоКопирования(СтруктураРезультата); КонецПроцедуры +// Возвращает текущую настройку резервного копирования строкой +// Два варианта использования функции - или с передачей всех параметров или без параметров +// +Функция ТекущаяНастройкаРезервногоКопирования(КодНастройки = Неопределено, + ПриЗавершенииРаботы = Неопределено, Расписание = Неопределено) Экспорт + + Если КодНастройки = Неопределено Тогда + НастройкиРезервногоКопирования = ПолучитьНастройкиРезервногоКопирования(); + КодНастройки = НастройкиРезервногоКопирования.ВыборПунктаНастройки; + ПриЗавершенииРаботы = НастройкиРезервногоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы; + Расписание = НастройкиРезервногоКопирования.РасписаниеКопирования; + КонецЕсли; + + НадписьПоУмолчанию = НСтр("ru = 'Резервное копирование не настроено, информационная база подвергается риску потери данных.'");; + + Если КодНастройки = 3 Тогда + ТекущаяНастройка = НадписьПоУмолчанию; + ИначеЕсли КодНастройки = 2 Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование не выполняется (организовано средствами СУБД или другими сторонними программами)'"); + Иначе + Если ПриЗавершенииРаботы Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно при завершении работы.'"); + Иначе + Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); + Если Не ПустаяСтрока(Расписание) Тогда + ТекущаяНастройка = НСтр("ru = 'Резервное копирование выполняется регулярно по расписанию:'") + " " + Строка(Расписание); + Иначе + ТекущаяНастройка = НадписьПоУмолчанию; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат ТекущаяНастройка; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -609,7 +558,7 @@ // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗавершении(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиентаПриЗавершении(Параметры); + Параметры.Вставить("РезервноеКопированиеИБ", ПолучитьПараметрыПриЗавершенииРаботы()); КонецПроцедуры @@ -621,7 +570,7 @@ // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Параметры.Вставить("РезервноеКопированиеИБ", ПолучитьНастройкиРезервногоКопирования(Истина)); КонецПроцедуры @@ -633,6 +582,6 @@ // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт - ДобавитьПараметрыРаботыКлиента(Параметры); + Параметры.Вставить("РезервноеКопированиеИБ", ПолучитьНастройкиРезервногоКопирования()); КонецПроцедуры diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl index 6a6cd4abf..78f991a85 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -21,80 +21,6 @@ КонецФункции -// Сообщить об успешной архивации текущей области. -// -Функция ОтправитьСообщениеРезервнаяКопияОбластиСоздана(Знач ПараметрыСообщения) Экспорт - - НачатьТранзакцию(); - Попытка - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеРезервнаяКопияОбластиСоздана()); - - Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; - Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; - Сообщение.Body.FileId = ПараметрыСообщения.ИДФайла; - Сообщение.Body.Date = ТекущаяУниверсальнаяДата(); - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецФункции - -// Планировать архивацию области в прикладной базе. -// -Функция ОтправитьСообщениеОшибкаАрхивацииОбласти(Знач ПараметрыСообщения) Экспорт - - НачатьТранзакцию(); - Попытка - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеОшибкаАрхивацииОбласти()); - - Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; - Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецФункции - -// Планировать архивацию области в прикладной базе. -// -Функция ОтправитьСообщениеАрхивацияОбластиПропущена(Знач ПараметрыСообщения) Экспорт - - НачатьТранзакцию(); - Попытка - Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеАрхивацияОбластиПропущена()); - - Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; - Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; - - СообщенияВМоделиСервиса.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -124,6 +50,10 @@ СерверныеОбработчики[ "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"].Добавить( "РезервноеКопированиеОбластейДанных"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииОбработчиковОшибок"].Добавить( + "РезервноеКопированиеОбластейДанных"); КонецПроцедуры @@ -142,6 +72,7 @@ Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт СоответствиеИменПсевдонимам.Вставить("РезервноеКопированиеОбластейДанных.ВыгрузитьОбластьВХранилищеМС"); + СоответствиеИменПсевдонимам.Вставить("РезервноеКопированиеОбластейДанных.СозданиеКопий"); КонецПроцедуры @@ -196,6 +127,7 @@ Процедура ПриОпределенииОбъектовМетаданныхИсключаемыхИзВыгрузкиЗагрузки(Объекты) Экспорт Объекты.Добавить(Метаданные.Константы.ВыполнитьРезервноеКопированиеОбластиДанных); + Объекты.Добавить(Метаданные.Константы.ДатаПоследнегоСтартаКлиентскогоСеанса); КонецПроцедуры @@ -208,32 +140,71 @@ Процедура ПриЗаполненииТаблицыПараметровИБ(ТаблицаПараметров) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - СтрокаПараметра = Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПоддержкаРезервногоКопирования"); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + СтрокаПараметра = МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПоддержкаРезервногоКопирования"); КонецЕсли; КонецПроцедуры +// Заполняет соответствие методов обработчиков ошибок псевдонимам методов, при возникновении +// ошибок в которых они вызываются. +// +// Параметры: +// ОбработчикиОшибок - Соответствие +// Ключ - Псевдоним метода, например ОчиститьОбластьДанных +// Значение - Имя метода - обработчика ошибок, для вызова при возникновении ошибки. +// Обработчик ошибок вызывается в случае завершения выполнения исходного задания +// с ошибкой. Обработчик ошибок вызывается в той же области данных, что и исходное +// задание. +// Метод обработчика ошибок считается разрешенным к вызову механизмами очереди. +// Параметры обработчика ошибок: +// ПараметрыЗадания - Структура - параметры задания очереди +// Параметры +// НомерПопытки +// КоличествоПовторовПриАварийномЗавершении +// ДатаНачалаПоследнегоЗапуска +// ИнформацияОбОшибке - ИнформацияОбОшибке - описание ошибки, произошедшей при +// выполнении задания +// +Процедура ПриОпределенииОбработчиковОшибок(ОбработчикиОшибок) Экспорт + + ОбработчикиОшибок.Вставить( + "РезервноеКопированиеОбластейДанных.СозданиеКопий", + "РезервноеКопированиеОбластейДанных.ОшибкаСозданияКопии"); + +КонецПроцедуры + // Активность пользователей в области данных // Устанавливает признак активности пользователя в текущей области. -// Признаком является значение совместно разделенной константы ВыполнитьРезервноеКопированиеОбластиДанных. +// Признаком является значение совместно разделенной константы ДатаПоследнегоСтартаКлиентскогоСеанса. // Процедура УстановитьФлагАктивностиПользователяВОбласти() Экспорт - Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ТекущийРежимЗапуска() <> Неопределено - И ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования") Тогда + Если НЕ ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ ТекущийРежимЗапуска() = Неопределено + ИЛИ НЕ ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования") Тогда + + Возврат; - УстановитьФлагАктивностиВОбласти(); КонецЕсли; + УстановитьФлагАктивностиВОбласти(); // Для обратной совместимости + + ДатаСтарта = НачалоДня(ТекущаяУниверсальнаяДата()); + + Если Константы.ДатаПоследнегоСтартаКлиентскогоСеанса.Получить() = ДатаСтарта Тогда + Возврат; + КонецЕсли; + + Константы.ДатаПоследнегоСтартаКлиентскогоСеанса.Установить(ДатаСтарта); + КонецПроцедуры // Устанавливает либо снимает признак активности пользователя в текущей области. // Признаком является значение совместно разделенной константы ВыполнитьРезервноеКопированиеОбластиДанных. -// Снятие признака - удаление записи. +// Устарело. // // Параметры: // ОбластьДанных - Число; Неопределено - Значение разделителя. Неопределено означает значение разделителя текущей области данных. @@ -258,6 +229,15 @@ УстановитьПривилегированныйРежим(Истина); + Если Состояние Тогда + МенеджерЗначения = Константы.ВыполнитьРезервноеКопированиеОбластиДанных.СоздатьМенеджерЗначения(); + МенеджерЗначения.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; + МенеджерЗначения.Прочитать(); + Если МенеджерЗначения.Значение Тогда + Возврат; + КонецЕсли; + КонецЕсли; + ФлагАктивности = Константы.ВыполнитьРезервноеКопированиеОбластиДанных.СоздатьМенеджерЗначения(); ФлагАктивности.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; ФлагАктивности.Значение = Состояние; @@ -268,6 +248,264 @@ //////////////////////////////////////////////////////////////////////////////// // Выгрузка областей данных. +// Создает резервную копию области в соответствии с настройками резервного копирования +// области. +// +// Параметры: +// ПараметрыСоздания - ФиксированнаяСтруктура - параметры создания резервной копии, +// соответствуют настройкам резервного копирования +// СостояниеСоздания - ФиксированнаяСтруктура - состояние процесса создания +// резервных копий в области +// +Процедура СозданиеКопий(Знач ПараметрыСоздания, Знач СостояниеСоздания) Экспорт + + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + + УсловияСозданияКопий = Новый Массив; + + Параметры = Новый Структура; + Параметры.Вставить("Тип", "Ежедневная"); + Параметры.Вставить("Включены", "СоздаватьЕжедневные"); + Параметры.Вставить("Периодичность", "День"); + Параметры.Вставить("ДатаСоздания", "ДатаСозданияПоследнейЕжедневной"); + Параметры.Вставить("День", Неопределено); + Параметры.Вставить("Месяц", Неопределено); + УсловияСозданияКопий.Добавить(Параметры); + + Параметры = Новый Структура; + Параметры.Вставить("Тип", "Ежемесячная"); + Параметры.Вставить("Включены", "СоздаватьЕжемесячные"); + Параметры.Вставить("Периодичность", "Месяц"); + Параметры.Вставить("ДатаСоздания", "ДатаСозданияПоследнейЕжемесячной"); + Параметры.Вставить("День", "ДеньСозданияЕжемесячных"); + Параметры.Вставить("Месяц", Неопределено); + УсловияСозданияКопий.Добавить(Параметры); + + Параметры = Новый Структура; + Параметры.Вставить("Тип", "Ежегодная"); + Параметры.Вставить("Включены", "СоздаватьЕжегодные"); + Параметры.Вставить("Периодичность", "Год"); + Параметры.Вставить("ДатаСоздания", "ДатаСозданияПоследнейЕжегодной"); + Параметры.Вставить("День", "ДеньСозданияЕжегодных"); + Параметры.Вставить("Месяц", "МесяцСозданияЕжегодных"); + УсловияСозданияКопий.Добавить(Параметры); + + ТребуетсяСоздание = Ложь; + ТекущаяДата = ТекущаяУниверсальнаяДата(); + + ПоследнийСеанс = Константы.ДатаПоследнегоСтартаКлиентскогоСеанса.Получить(); + + СоздаватьБезусловно = НЕ ПараметрыСоздания.ТолькоПриАктивностиПользователей; + + ФлагиПериодичности = Новый Структура; + Для каждого ПараметрыПериодичности Из УсловияСозданияКопий Цикл + + ФлагиПериодичности.Вставить(ПараметрыПериодичности.Тип, Ложь); + + Если НЕ ПараметрыСоздания[ПараметрыПериодичности.Включены] Тогда + // Создание копий данной периодичности выключено в настройках + Продолжить; + КонецЕсли; + + ДатаСозданияПредыдущей = СостояниеСоздания[ПараметрыПериодичности.ДатаСоздания]; + + Если Год(ТекущаяДата) = Год(ДатаСозданияПредыдущей) Тогда + Если ПараметрыПериодичности.Периодичность = "Год" Тогда + // Год еще не сменился + Продолжить; + КонецЕсли; + КонецЕсли; + + Если Месяц(ТекущаяДата) = Месяц(ДатаСозданияПредыдущей) Тогда + Если ПараметрыПериодичности.Периодичность = "Месяц" Тогда + // Месяц еще не сменился + Продолжить; + КонецЕсли; + КонецЕсли; + + Если День(ТекущаяДата) = День(ДатаСозданияПредыдущей) Тогда + // День еще не сменился + Продолжить; + КонецЕсли; + + Если ПараметрыПериодичности.День <> Неопределено + И День(ТекущаяДата) < ПараметрыСоздания[ПараметрыПериодичности.День] Тогда + + // Нужный день еще не наступил + Продолжить; + КонецЕсли; + + Если ПараметрыПериодичности.Месяц <> Неопределено + И Месяц(ТекущаяДата) < ПараметрыСоздания[ПараметрыПериодичности.Месяц] Тогда + + // Нужный месяц еще не наступил + Продолжить; + КонецЕсли; + + Если НЕ СоздаватьБезусловно + И ЗначениеЗаполнено(ДатаСозданияПредыдущей) + И ПоследнийСеанс < ДатаСозданияПредыдущей Тогда + + // Пользователи не заходили в область после создания резервной копии + Продолжить; + КонецЕсли; + + ТребуетсяСоздание = Истина; + ФлагиПериодичности.Вставить(ПараметрыПериодичности.Тип, Истина); + + КонецЦикла; + + Если НЕ ТребуетсяСоздание Тогда + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрации() + "." + + НСтр("ru = 'Пропуск создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация); + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИмяАрхива = Неопределено; + + ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + ПараметрыБлокировки.Начало = ТекущаяУниверсальнаяДата(); + ПараметрыБлокировки.Сообщение = НСтр("ru = 'Выполняется создание резервной копии приложения. Настройки резервного копирования могут быть изменены в менеджере сервиса.'"); + ПараметрыБлокировки.Установлена = Истина; + + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); + + НачатьТранзакцию(); + Попытка + + РаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(, Истина); + ИмяАрхива = ВыгрузкаЗагрузкаДанных.ВыгрузитьТекущуюОбластьВАрхив(); + + ДатаСозданияКопии = ТекущаяУниверсальнаяДата(); + + ОписаниеАрхива = Новый Файл(ИмяАрхива); + РазмерФайла = ОписаниеАрхива.Размер(); + + ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ОписаниеАрхива); + + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + // При невозможности удаления файла выполнение не должно прерываться + КонецПопытки; + + ИдКопии = Новый УникальныйИдентификатор; + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыСообщения.Вставить("ИДКопии", ИдКопии); + ПараметрыСообщения.Вставить("ИДФайла", ИДФайла); + ПараметрыСообщения.Вставить("ДатаСоздания", ДатаСозданияКопии); + Для каждого КлючИЗначение Из ФлагиПериодичности Цикл + ПараметрыСообщения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыСообщения); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + // Обновление состояния в параметрах + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); + ОтборЗаданий.Вставить("Ключ", "1"); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗаданий); + Если Задания.Количество() > 0 Тогда + Задание = Задания[0].Идентификатор; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ПараметрыСоздания); + + ОбновленноеСостояние = Новый Структура; + Для каждого ПараметрыПериодичности Из УсловияСозданияКопий Цикл + Если ФлагиПериодичности[ПараметрыПериодичности.Тип] Тогда + ДатаСостояния = ДатаСозданияКопии; + Иначе + ДатаСостояния = СостояниеСоздания[ПараметрыПериодичности.ДатаСоздания]; + КонецЕсли; + + ОбновленноеСостояние.Вставить(ПараметрыПериодичности.ДатаСоздания, ДатаСостояния); + КонецЦикла; + + ПараметрыМетода.Добавить(Новый ФиксированнаяСтруктура(ОбновленноеСостояние)); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЕсли; + + ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + ПараметрыБлокировки.Установлена = Ложь; + + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); + + ПараметрыСобытия = Новый Структура; + Для каждого КлючИЗначение Из ФлагиПериодичности Цикл + ПараметрыСобытия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыСобытия.Вставить("ИдКопии", ИдКопии); + ПараметрыСобытия.Вставить("ИдФайла", ИдФайла); + ПараметрыСобытия.Вставить("Размер", РазмерФайла); + ПараметрыСобытия.Вставить("Длительность", ТекущаяУниверсальнаяДата() - НачалоВыполнения); + + ЗаписатьСобытиеВЖурнал( + НСтр("ru = 'Создание'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ПараметрыСобытия); + +КонецПроцедуры + +// При исчерпании количества попыток создания резервной копии, записывает в журнал +// регистрации сообщение о том, что копия не была создана. +// +// Параметры: +// ПараметрыЗадания - Структура - описание см. описание события +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииОбработчиковОшибок +// +Процедура ОшибкаСозданияКопии(Знач ПараметрыЗадания, Знач ИнформацияОбОшибке) Экспорт + + Если ПараметрыЗадания.НомерПопытки < ПараметрыЗадания.КоличествоПовторовПриАварийномЗавершении Тогда + ШаблонКомментария = НСтр("ru = 'При создании резервной копии области %1 произошла ошибка. + |Номер попытки: %2 + |По причине: + |%3'"); + Уровень = УровеньЖурналаРегистрации.Предупреждение; + Событие = НСтр("ru = 'Ошибка итерации создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Иначе + ШаблонКомментария = НСтр("ru = 'При создании резервной копии области %1 произошла невосстановимая ошибка. + |Номер попытки: %2 + |По причине: + |%3'"); + Уровень = УровеньЖурналаРегистрации.Ошибка; + Событие = НСтр("ru = 'Ошибка создания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + ПараметрыБлокировки.Установлена = Ложь; + + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); + КонецЕсли; + + ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонКомментария, + Формат(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ЧН=0; ЧГ="), + ПараметрыЗадания.НомерПопытки, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрации() + "." + Событие, + Уровень, + , + , + ТекстКомментария); + +КонецПроцедуры + // Планирует создание резервной копии области данных. // // Параметры: @@ -356,6 +594,7 @@ // При невозможности удаления файла выполнение не должно прерываться КонецПопытки; ПараметрыВыгрузки.Вставить("ИДФайла", ИДФайла); + ПараметрыВыгрузки.Вставить("ДатаСоздания", ТекущаяУниверсальнаяДата()); ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыВыгрузки); Если ЗначениеЗаполнено(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ИДФайла, АдресХранилища); @@ -364,7 +603,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Попытка Если ИмяАрхива <> Неопределено Тогда @@ -473,6 +712,101 @@ КонецПроцедуры +// Сообщить об успешной архивации текущей области. +// +Процедура ОтправитьСообщениеРезервнаяКопияОбластиСоздана(Знач ПараметрыСообщения) + + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеРезервнаяКопияОбластиСоздана()); + + Тело = Сообщение.Body; + + Тело.Zone = ПараметрыСообщения.ОбластьДанных; + Тело.BackupId = ПараметрыСообщения.ИДКопии; + Тело.FileId = ПараметрыСообщения.ИДФайла; + Тело.Date = ПараметрыСообщения.ДатаСоздания; + Если ПараметрыСообщения.Свойство("Ежедневная") Тогда + Тело.Daily = ПараметрыСообщения.Ежедневная; + Тело.Monthly = ПараметрыСообщения.Ежемесячная; + Тело.Yearly = ПараметрыСообщения.Ежегодная; + Иначе + Тело.Daily = Ложь; + Тело.Monthly = Ложь; + Тело.Yearly = Ложь; + КонецЕсли; + Тело.ConfigurationVersion = Метаданные.Версия; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + +КонецПроцедуры + +// Планировать архивацию области в прикладной базе. +// +Процедура ОтправитьСообщениеОшибкаАрхивацииОбласти(Знач ПараметрыСообщения) + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеОшибкаАрхивацииОбласти()); + + Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; + Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Планировать архивацию области в прикладной базе. +// +Процедура ОтправитьСообщениеАрхивацияОбластиПропущена(Знач ПараметрыСообщения) + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + СообщенияКонтрольРезервногоКопированияИнтерфейс.СообщениеАрхивацияОбластиПропущена()); + + Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; + Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция СобытиеЖурналаРегистрации() + + Возврат НСтр("ru = 'Резервное копирование приложений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Процедура ЗаписатьСобытиеВЖурнал(Знач Событие, Знач Параметры) + + ЗаписьЖурналаРегистрации( + СобытиеЖурналаРегистрации() + "." + Событие, + УровеньЖурналаРегистрации.Информация, + , + , + ОбщегоНазначения.ЗначениеВСтрокуXML(Параметры)); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Работа с настройками резервного копирования @@ -488,7 +822,8 @@ Функция ПолучитьНастройкиРезервногоКопированияОбласти(Знач ОбластьДанных = Неопределено) Экспорт Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() - И ОбластьДанных <> ОбщегоНазначения.ЗначениеРазделителяСеанса() Тогда + И ОбластьДанных <> ОбщегоНазначения.ЗначениеРазделителяСеанса() + И ОбластьДанных <> Неопределено Тогда ВызватьИсключение(НСтр("ru = 'Запрещено работать с данными области кроме текущей'")); КонецЕсли; diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl new file mode 100644 index 000000000..683f380de --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/Module.bsl @@ -0,0 +1,47 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование областей данных". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт + + Параметры = Реализация().ПолучитьПараметрыФормыНастроек(ОбластьДанных); + Параметры.Вставить("ОбластьДанных", ОбластьДанных); + + Возврат Параметры; + +КонецФункции + +Функция ПолучитьНастройкиОбласти(Знач ОбластьДанных) Экспорт + + Возврат Реализация().ПолучитьНастройкиОбласти(ОбластьДанных); + +КонецФункции + +Процедура УстановитьНастройкиОбласти(Знач ОбластьДанных, Знач НовыеНастройки, Знач ИсходныеНастройки) Экспорт + + Реализация().УстановитьНастройкиОбласти(ОбластьДанных, НовыеНастройки, ИсходныеНастройки); + +КонецПроцедуры + +Функция ПолучитьСтандартныеНастройки() Экспорт + + Возврат Реализация().ПолучитьСтандартныеНастройки(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция Реализация() + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеОбластейДанныхМС") Тогда + Возврат ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанныхДанныеФормРеализацияИБ"); + Иначе + Возврат ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис"); + КонецЕсли; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.mdo b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.mdo new file mode 100644 index 000000000..0cdd4594b --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс/РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="0a23f273-5589-4a48-be3a-eee7565749aa"> + <name>РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс</name> + <synonym> + <key>ru</key> + <value>Резервное копирование областей данных данные форм интерфейс</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl new file mode 100644 index 000000000..51b6ed74c --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/Module.bsl @@ -0,0 +1,86 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование областей данных". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПолучитьПараметрыФормыНастроек(Знач ОбластьДанных) Экспорт + + ИнформацияОбОшибке = Неопределено; + Параметры = Прокси().GetSettingsFormParameters( + ОбластьДанных, + КлючОбласти(), + ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + + Возврат СериализаторXDTO.ПрочитатьXDTO(Параметры); + +КонецФункции + +Функция ПолучитьНастройкиОбласти(Знач ОбластьДанных) Экспорт + + ИнформацияОбОшибке = Неопределено; + Параметры = Прокси().GetZoneSettings( + ОбластьДанных, + КлючОбласти(), + ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + + Возврат СериализаторXDTO.ПрочитатьXDTO(Параметры); + +КонецФункции + +Процедура УстановитьНастройкиОбласти(Знач ОбластьДанных, Знач НовыеНастройки, Знач ИсходныеНастройки) Экспорт + + ИнформацияОбОшибке = Неопределено; + Прокси().SetZoneSettings( + ОбластьДанных, + КлючОбласти(), + СериализаторXDTO.ЗаписатьXDTO(НовыеНастройки), + СериализаторXDTO.ЗаписатьXDTO(ИсходныеНастройки), + ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + +КонецПроцедуры + +Функция ПолучитьСтандартныеНастройки() Экспорт + + ИнформацияОбОшибке = Неопределено; + Параметры = Прокси().GetDefaultSettings( + ИнформацияОбОшибке); + РаботаВМоделиСервиса.ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке); + + Возврат СериализаторXDTO.ПрочитатьXDTO(Параметры); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция КлючОбласти() + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.КлючОбластиДанных.Получить(); + +КонецФункции + +Функция Прокси() + + УстановитьПривилегированныйРежим(Истина); + АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + АдресСервиса = АдресМенеджераСервиса + "/ws/ZoneBackupControl_1_0_2_1?wsdl"; + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + + Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, "http://www.1c.ru/1cFresh/ZoneBackupControl/1.0.2.1", + "ZoneBackupControl_1_0_2_1", , ИмяПользователя, ПарольПользователя, 10); + + Возврат Прокси; + +КонецФункции diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис.mdo b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис.mdo new file mode 100644 index 000000000..2030738aa --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис/РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="494eb9d9-4a10-4e85-b511-375408f21bbe"> + <name>РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис</name> + <synonym> + <key>ru</key> + <value>Резервное копирование областей данных данные форм реализация web сервис</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl index 460667364..4dfb8ed1c 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -98,6 +98,6 @@ // Функция НаименованиеФоновогоРезервногоКопирования() Экспорт - Возврат НСтр("ru = 'Резервное копирование области данных'"); + Возврат НСтр("ru = 'Резервное копирование области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 7b8d548a5..28f3afda6 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -66,14 +66,13 @@ // Возвращаемое значение: // Булево - Истина, если установлена, ложь - Иначе. // -Функция УстановленаБлокировкаСоединений() Экспорт +Функция УстановленаБлокировкаСоединений(ПараметрыБлокировки = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - ТекущийРежимОбластиДанных = ПолучитьБлокировкуСеансовОбластиДанных(); - ТекущийРежимИБ = ПолучитьБлокировкуСеансов(); - ТекущаяДата = ТекущаяДатаСеанса(); - Возврат УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата) - Или УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата); + Если ПараметрыБлокировки = Неопределено Тогда + ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); + КонецЕсли; + + Возврат ПараметрыБлокировки.УстановленаБлокировкаСоединений; КонецФункции @@ -93,23 +92,23 @@ // КоличествоСеансов - 0, если параметр ПолучитьКоличествоСеансов = Ложь // ТекущаяДатаСеанса - Дата - текущая дата сеанса. // -Функция ПараметрыБлокировкиСеансов(Знач ПолучитьКоличествоСеансов = Ложь) Экспорт +Функция ПараметрыБлокировкиСеансов(Знач ПолучитьКоличествоСеансов = Ложь, ПараметрыБлокировки = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - ТекущийРежимОбластиДанных = ПолучитьБлокировкуСеансовОбластиДанных(); - ТекущийРежимИБ = ПолучитьБлокировкуСеансов(); - ТекущаяДата = ТекущаяДатаСеанса(); - ТекущийРежим = НовыеПараметрыБлокировкиСоединений(); - Если УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата) Тогда - ТекущийРежим = ТекущийРежимИБ; - ИначеЕсли УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата) Тогда - ТекущийРежим = ТекущийРежимОбластиДанных; - ИначеЕсли ТекущийРежимИБ.Установлена Тогда - ТекущийРежим = ТекущийРежимИБ; - Иначе - ТекущийРежим = ТекущийРежимОбластиДанных; + Если ПараметрыБлокировки = Неопределено Тогда + ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); КонецЕсли; + Если ПараметрыБлокировки.УстановленаБлокировкаСоединенийИБНаДату Тогда + ТекущийРежим = ПараметрыБлокировки.ТекущийРежимИБ; + ИначеЕсли ПараметрыБлокировки.УстановленаБлокировкаСоединенийОбластиДанныхНаДату Тогда + ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; + ИначеЕсли ПараметрыБлокировки.ТекущийРежимИБ.Установлена Тогда + ТекущийРежим = ПараметрыБлокировки.ТекущийРежимИБ; + Иначе + ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); Возврат Новый Структура( "Установлена,Начало,Конец,Сообщение,ИнтервалОжиданияЗавершенияРаботыПользователей,КоличествоСеансов,ТекущаяДатаСеанса", ТекущийРежим.Установлена, @@ -119,8 +118,7 @@ 15 * 60, // 15 минут; интервал ожидания завершения пользователей до момента установки // блокировки информационной базы (в секундах). ?(ПолучитьКоличествоСеансов, КоличествоСеансовИнформационнойБазы(), 0), - ТекущаяДатаСеанса() - ); + ПараметрыБлокировки.ТекущаяДата); КонецФункции @@ -174,7 +172,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); СоединенияИБКлиентСервер.УстановитьБлокировкуРегламентныхЗаданий(Значение); @@ -189,7 +187,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); Возврат СоединенияИБКлиентСервер.БлокировкаРегламентныхЗаданийУстановлена(); @@ -316,7 +314,7 @@ // Параметры - Структура - структура параметров. // Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); + Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов())); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -389,8 +387,8 @@ Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "СообщениеБлокировкиПриОбновленииКонфигурации"); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "СообщениеБлокировкиПриОбновленииКонфигурации"); КонецЕсли; КонецПроцедуры @@ -405,14 +403,17 @@ // Процедура ПриДобавленииПараметровРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт - Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); - УстановитьПривилегированныйРежим(Истина); - Если Не УстановленаБлокировкаСоединений() Тогда + ПараметрыБлокировки = СтруктураПараметровБлокировкиСеансов(); + Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(ПараметрыБлокировкиСеансов(, ПараметрыБлокировки))); + + Если Не ПараметрыБлокировки.УстановленаБлокировкаСоединений + Или Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; - ТекущийРежим = ПолучитьБлокировкуСеансовОбластиДанных(); - УстановитьПривилегированныйРежим(Ложь); + // Дальнейший код актуален только для области данных с установленной блокировкой + ТекущийРежим = ПараметрыБлокировки.ТекущийРежимОбластиДанных; Если ЗначениеЗаполнено(ТекущийРежим.Конец) Тогда ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -525,7 +526,7 @@ Набор = РегистрыСведений.БлокировкиСеансовОбластейДанных.СоздатьНаборЗаписей(); Набор.Загрузить(Запрос.Выполнить().Выгрузить()); - Набор.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); ЗафиксироватьТранзакцию(); @@ -554,7 +555,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; + КонецЕсли; СтандартнаяОбработка = Истина; Результат = Истина; @@ -566,7 +567,7 @@ УстановитьПривилегированныйРежим(Истина); Возврат СоединенияИБКлиентСервер.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); Иначе // Для Linux - СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеансы при работе через веб-сервер, + СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеансы, | так как на сервере не установлена ОС Microsoft Windows'"); ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); Возврат Ложь; @@ -586,7 +587,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); Возврат СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); @@ -607,7 +608,7 @@ Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); - КонецЕсли; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); СоединенияИБКлиентСервер.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); @@ -757,17 +758,6 @@ КонецФункции -// Возвращает строковую константу для формирования сообщений журнала регистрации. -// -// Возвращаемое значение: -// Строка -// -Функция СобытиеЖурналаРегистрации() - - Возврат НСтр("ru = 'Завершение работы пользователей'"); - -КонецФункции - // Записать в журнал регистрации список сеансов ИБ. // // Параметры: @@ -775,7 +765,7 @@ // Процедура ЗаписатьНазванияСоединенийИБ(Знач ТекстСообщения) Экспорт Сообщение = ПолучитьНазванияСоединенийИБ(ТекстНеУдалосьЗавершитьРаботуПользователей(ТекстСообщения)); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, , , Сообщение); КонецПроцедуры @@ -816,6 +806,30 @@ КонецФункции +// Возвращает структуру, содержащую параметры блокировки сеансов +// +Функция СтруктураПараметровБлокировкиСеансов() + + УстановитьПривилегированныйРежим(Истина); + + ТекущаяДата = ТекущаяДатаСеанса(); + ТекущийРежимИБ = ПолучитьБлокировкуСеансов(); + ТекущийРежимОбластиДанных = ПолучитьБлокировкуСеансовОбластиДанных(); + УстановленаБлокировкаСоединенийИБНаДату = УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата); + УстановленаБлокировкаСоединенийОбластиДанныхНаДату = УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата); + + ПараметрыБлокировкиСеансов = Новый Структура; + ПараметрыБлокировкиСеансов.Вставить("ТекущаяДата", ТекущаяДата); + ПараметрыБлокировкиСеансов.Вставить("ТекущийРежимИБ", ТекущийРежимИБ); + ПараметрыБлокировкиСеансов.Вставить("ТекущийРежимОбластиДанных", ТекущийРежимОбластиДанных); + ПараметрыБлокировкиСеансов.Вставить("УстановленаБлокировкаСоединенийИБНаДату", УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата)); + ПараметрыБлокировкиСеансов.Вставить("УстановленаБлокировкаСоединенийОбластиДанныхНаДату", УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата)); + ПараметрыБлокировкиСеансов.Вставить("УстановленаБлокировкаСоединений", УстановленаБлокировкаСоединенийИБНаДату Или УстановленаБлокировкаСоединенийОбластиДанныхНаДату); + + Возврат ПараметрыБлокировкиСеансов; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -844,8 +858,8 @@ УстановитьПривилегированныйРежим(Истина); Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); Попытка - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Результат = Модуль.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + Результат = МодульРаботаВМоделиСервиса.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); Исключение СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Результат = Ложь; diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index ca59faeac..da9d4ea36 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -93,6 +93,8 @@ Возврат Ложь; КонецЕсли; + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(),, + Нстр("ru = 'Выполнен запуск с параметром ""РазрешитьРаботуПользователей"". Работа программы будет завершена.'"), ,Истина); ЗавершитьРаботуСистемы(Ложь); Возврат Истина; diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index 39da458ad..882dfa6e5 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -21,32 +21,33 @@ Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда - Возврат Истина; // Отключены все пользователи, кроме текущего сеанса + Возврат Истина;// Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеанс в файловом режиме работы'"); СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); - Возврат Ложь; + Возврат Ложь; КонецЕсли; -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() + Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда // Передаем управление на Windows-сервер Возврат СоединенияИБВызовСервера.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); КонецЕсли; -#КонецЕсли +#КонецЕсли Попытка Возврат ЗавершитьСеанс(НомерСеанса); Исключение СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеанс - |по причине: - |%1 - | - |Возможно не настроены параметры администрирования ИБ. - |Технические подробности об ошибке см. в Журнале регистрации.'"); + |по причине: + |%1 + | + |Возможно не настроены параметры администрирования ИБ. + |Технические подробности об ошибке см. в Журнале регистрации.'"); ИнфоОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КраткоеПредставлениеОшибки(ИнфоОбОшибке)); @@ -67,47 +68,49 @@ Функция ОтключитьСоединенияИБ(Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда - Возврат Истина; // Отключены все пользователи, кроме текущего сеанса + Возврат Истина; // Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы в файловом режиме работы'")); - Возврат Ложь; + Возврат Ложь; КонецЕсли; -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() + Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер Возврат СоединенияИБВызовСервера.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); КонецЕсли; - СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы при работе с клиента через веб-сервер, + СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ( + НСтр("ru = 'Невозможно принудительно завершить сеансы, | если на сервере не установлена ОС Microsoft Windows'")); - Возврат Ложь; + Возврат Ложь; КонецЕсли; -#КонецЕсли +#КонецЕсли Попытка Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); Для каждого Сеанс Из Сеансы.Сеансы Цикл // Разрываем сеансы с ИБ Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершается сеанс: %1, компьютер %2, начат %3, режим %4'"), - Сеанс.UserName, - Сеанс.Host, - Сеанс.StartedAt, + НСтр("ru = 'Завершается сеанс: %1, компьютер %2, начат %3, режим %4'"), + Сеанс.UserName, + Сеанс.Host, + Сеанс.StartedAt, Сеанс.AppID); ЗаписатьСобытие(Сообщение, "Информация", Ложь); Сеансы.АгентСервера.TerminateSession(Сеансы.КластерСерверов, Сеанс); КонецЦикла; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда КлиентскиеСообщения = СообщенияДляЖурналаРегистрации; -#Иначе +#Иначе КлиентскиеСообщения = Неопределено; -#КонецЕсли +#КонецЕсли Возврат СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы(КлиентскиеСообщения) <= 1; Исключение ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); @@ -135,7 +138,7 @@ ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); КонецЕсли; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер @@ -145,7 +148,7 @@ // если на сервере не установлена ОС Microsoft Windows ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); КонецЕсли; -#КонецЕсли +#КонецЕсли Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); Исключение @@ -173,7 +176,7 @@ ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий в файловом режиме работы'"); КонецЕсли; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер @@ -182,7 +185,7 @@ ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий при работе с клиента через веб-сервер, | если на сервере не установлена ОС Microsoft Windows'"); КонецЕсли; -#КонецЕсли +#КонецЕсли Подключение = ПодключитьсяКТекущейИБ(); Подключение.ТекущаяБаза.ScheduledJobsDenied = Значение; @@ -201,7 +204,7 @@ Возврат Ложь; КонецЕсли; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер @@ -209,7 +212,7 @@ КонецЕсли; Возврат Ложь; КонецЕсли; -#КонецЕсли +#КонецЕсли Подключение = ПодключитьсяКТекущейИБ(); Возврат Подключение.ТекущаяБаза.ScheduledJobsDenied; @@ -232,13 +235,13 @@ Результат = СтрокаСоединенияИнформационнойБазы(); Если ИнформационнаяБазаФайловая() Или (ПортКластераСерверов = 0) Тогда Возврат Результат; - КонецЕсли; + КонецЕсли; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Возврат Результат; - КонецЕсли; -#КонецЕсли + КонецЕсли; +#КонецЕсли ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Результат, ";"); ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); @@ -254,7 +257,7 @@ // // Параметры // ПризнакФайловогоРежима - Булево - выходной параметр. Принимает значение -// Истина, если текущая ИБ - файловая; +// Истина, если текущая ИБ - файловая; // Ложь - если клиент-серверная. // ПортКластераСерверов - Число - входной параметр. Задается в случае, если // кластер серверов использует нестандартный номер порта. @@ -286,7 +289,7 @@ ПозицияТочкиСЗапятой = Найти(СтрокаСоединения, ";"); НачальнаяПозицияКопирования = 6 + 1; - КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; + КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; ИмяСервера = Сред(СтрокаСоединения, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); @@ -378,9 +381,9 @@ // Возвращаемое значение: // Строка - наименование события для журнала регистрации. // -Функция СобытиеЖурналаРегистрации() +Функция СобытиеЖурналаРегистрации() Экспорт - Возврат НСтр("ru = 'Завершение работы пользователей'"); + Возврат НСтр("ru = 'Завершение работы пользователей'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции @@ -400,7 +403,7 @@ Функция ПодключитьсяКАгентуСервера(ПараметрыСоединенияССервером1СПредприятие) ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СтрокаСоединенияИнформационнойБазы(), ";"); + СтрокаСоединенияИнформационнойБазы(), ";"); СтрокаИмениСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); @@ -415,7 +418,7 @@ СообщениеОбОшибке = Символы.ПС; ШаблонОшибки = Нстр("ru = 'Не удалось подключиться к серверу ""%1"" по причине: - |%2'"); + |%2'"); Для Каждого ИмяСервера Из СписокСерверовКластера Цикл @@ -453,7 +456,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - СообщениеОбОшибке = СообщениеОбОшибке + ТекстОшибки + Символы.ПС; + СообщениеОбОшибке = СообщениеОбОшибке + ТекстОшибки + Символы.ПС + Символы.ПС; КонецПопытки; @@ -573,7 +576,7 @@ Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); КонецЕсли; Подключение = ПодключитьсяКАгентуСервера(Параметры); - Результат.АгентСервера = Подключение.АгентСервера; + Результат.АгентСервера = Подключение.АгентСервера; // Найдем необходимый нам кластер Для каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл @@ -582,7 +585,7 @@ Продолжить; КонецЕсли; - Результат.КластерСерверов = Кластер; + Результат.КластерСерверов = Кластер; Подключение.АгентСервера.Authenticate(Кластер, Параметры.ИмяАдминистратораКластера, Параметры.ПарольАдминистратораКластера); @@ -602,7 +605,7 @@ КонецЦикла; Возврат Результат; - + КонецФункции // Возвращает активные сеансы информационной базы. @@ -621,11 +624,11 @@ ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); КонецЕсли; -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); КонецЕсли; -#КонецЕсли +#КонецЕсли // Подключение к агенту сервера ПараметрыАдминистрированияИБ = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); @@ -670,11 +673,11 @@ // Булево - Истина, если информационная база файловая. // Функция ИнформационнаяБазаФайловая() -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда Результат = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; #Иначе Результат = ОбщегоНазначения.ИнформационнаяБазаФайловая(); -#КонецЕсли +#КонецЕсли Возврат Результат; КонецФункции @@ -686,11 +689,11 @@ // Записать - Булево - Истина, если сразу записать в журнал регистрации. // Процедура ЗаписатьСобытие(Знач ТекстСобытия, ПредставлениеУровня = "Информация", Записать = Истина) -#Если НаКлиенте Тогда +#Если НаКлиенте Тогда ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), ПредставлениеУровня, ТекстСобытия,,Записать); #Иначе ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), ПредопределенноеЗначение("УровеньЖурналаРегистрации." + ПредставлениеУровня),,, ТекстСобытия); -#КонецЕсли +#КонецЕсли КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl index a865119d7..8e3586e48 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -189,7 +189,7 @@ // Для внутреннего использования // -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl index defe86bb9..cebbdafd7 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.0.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 2.1.2.1 ИНТЕРФЕЙСА СООБЩЕНИЙ // КОНТРОЛЯ АДМИНИСТРИРОВАНИЯ ОБМЕНА ДАННЫМИ // //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl index c9d392aed..66a64e589 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -187,7 +187,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index 44c511c54..08aec49a9 100644 --- a/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияАдминистрированиеОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.0.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 2.1.2.1 ИНТЕРФЕЙСА СООБЩЕНИЙ // УПРАВЛЕНИЯ АДМИНИСТРИРОВАНИЕМ ОБМЕНА ДАННЫМИ // //////////////////////////////////////////////////////////////////////////////// @@ -74,12 +74,10 @@ ПредставлениеОшибки = НСтр("ru = 'Конечная точка не соответствует ожидаемой. Код ожидаемой конечной точки %1. Код текущей конечной точки %2.'"); ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеОшибки, Тело.SenderId, - ОбменСообщениямиВнутренний.КодЭтогоУзла() - ); + ОбменСообщениямиВнутренний.КодЭтогоУзла()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКорреспондента(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПодключенияКорреспондента()); @@ -111,19 +109,16 @@ Тело.SenderPassword, ПодключенныйКорреспондент, Тело.RecipientName, - Тело.SenderName - ); + Тело.SenderName); Если Отказ Тогда // Отправляем сообщение в менеджер сервиса об ошибке ПредставлениеОшибки = НСтр("ru = 'Ошибка подключения конечной точки корреспондента обмена. Код конечной точки корреспондента обмена %1.'"); ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеОшибки, - Тело.RecipientId - ); + Тело.RecipientId); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКорреспондента(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПодключенияКорреспондента()); @@ -146,16 +141,13 @@ ПредставлениеОшибки = НСтр("ru = 'Ошибка при подключении конечной точки корреспондента обмена. |Настройки подключения веб-сервиса не соответствуют ожидаемым. |Код ожидаемой конечной точки корреспондента обмена %1. - |Код подключенной конечной точки корреспондента обмена %2.'" - ); + |Код подключенной конечной точки корреспондента обмена %2.'"); ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеОшибки, Тело.RecipientId, - ПодключенныйКорреспондентКод - ); + ПодключенныйКорреспондентКод); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКорреспондента(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПодключенияКорреспондента()); @@ -185,23 +177,19 @@ Тело.RecipientPassword, Тело.SenderURL, Тело.SenderUser, - Тело.SenderPassword - ); + Тело.SenderPassword); Если Отказ Тогда // Отправляем сообщение в менеджер сервиса об ошибке ПредставлениеОшибки = НСтр("ru = 'Ошибка обновления параметров подключения этой конечной точки и конечной точки корреспондента обмена. |Код этой конечной токи %1 - |Код конечной точки корреспондента обмена %2'" - ); + |Код конечной точки корреспондента обмена %2'"); ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеОшибки, ОбменСообщениямиВнутренний.КодЭтогоУзла(), - Тело.RecipientId - ); + Тело.RecipientId); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКорреспондента(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( СообщенияАдминистрированиеОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПодключенияКорреспондента()); @@ -273,14 +261,12 @@ // Поиск узла по формату кода узла "S00000123" Корреспондент = ПланыОбмена[Тело.ExchangePlan].НайтиПоКоду( - ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Тело.CorrespondentZone) - ); + ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Тело.CorrespondentZone)); Если Корреспондент.Пустая() Тогда // Поиск узла по формату кода узла "0000123" (старый формат) Корреспондент = ПланыОбмена[Тело.ExchangePlan].НайтиПоКоду( - Формат(Тело.CorrespondentZone,"ЧЦ=7; ЧВН=; ЧГ=0") - ); + Формат(Тело.CorrespondentZone,"ЧЦ=7; ЧВН=; ЧГ=0")); КонецЕсли; Если Корреспондент.Пустая() Тогда @@ -297,8 +283,7 @@ АбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( НастройкиТранспорта.FILEОбщийКаталогОбменаИнформацией, - НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией - ); + НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией); АбсолютныйКаталог = Новый Файл(АбсолютныйКаталогОбменаИнформацией); @@ -306,8 +291,7 @@ УдалитьФайлы(АбсолютныйКаталог.ПолноеИмя); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index 22c16ba56..5f7bb6947 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -47,8 +47,7 @@ ТранслироватьСообщениеВВерсиюКорреспондентаПриНеобходимости( Сообщение, ПараметрыПодключения, - Строка(Получатель) - ); + Строка(Получатель)); НетипизированноеТело = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); @@ -308,8 +307,8 @@ Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); - Модуль.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); + МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); + МодульСообщенияВМоделиСервисаРазделениеДанных.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); КонецЕсли; @@ -346,8 +345,8 @@ Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); - Модуль.ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); + МодульСообщенияВМоделиСервисаРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияВМоделиСервисаРазделениеДанных"); + МодульСообщенияВМоделиСервисаРазделениеДанных.ПриПолученииСообщения(КаналСообщений, ТелоСообщения, ОбъектСообщения); КонецЕсли; diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl index 23a31ef18..a1bb78502 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаРазделениеДанных/Module.bsl @@ -152,8 +152,7 @@ Если ТипЗнч(ПереопределенныйСправочник.ПустаяСсылка()) <> ТипЗнч(ОбъектСообщения.Ссылка) Тогда ПодменаОбъектаСообщенияСсылка = ПереопределенныйСправочник.ПолучитьСсылку( - ОбъектСообщения.ПолучитьСсылкуНового().УникальныйИдентификатор() - ); + ОбъектСообщения.ПолучитьСсылкуНового().УникальныйИдентификатор()); Если ОбщегоНазначения.СсылкаСуществует(ПодменаОбъектаСообщенияСсылка) Тогда @@ -254,8 +253,7 @@ Для Каждого Обработчик Из МассивОбработчиков Цикл ТипСообщенияОбработчика = СообщенияУдаленногоАдминистрированияИнтерфейс.СообщениеУстановитьПараметрыОбластиДанных( - Обработчик.Пакет() - ); + Обработчик.Пакет()); Если Сообщение.Body.Тип() = ТипСообщенияОбработчика Тогда СообщениеСодержитКлючОбласти = Истина; @@ -295,8 +293,7 @@ Функция ПроверкаКлючаОбластиВСообщенияхВозможна() СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS( - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() - ); + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); ПараметрыПодключенияКМС = Новый Структура; ПараметрыПодключенияКМС.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); ПараметрыПодключенияКМС.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); @@ -315,8 +312,7 @@ Иначе МаксимальнаяВерсия = ?(ОбщегоНазначенияКлиентСервер.СравнитьВерсии( ВерсияМС, МаксимальнаяВерсия) > 0, ВерсияМС, - МаксимальнаяВерсия - ); + МаксимальнаяВерсия); КонецЕсли; КонецЦикла; @@ -327,4 +323,4 @@ Возврат (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МаксимальнаяВерсия, "1.0.4.1") >= 0); -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияИнформационногоЦентраИнтерфейс/Module.bsl new file mode 100644 index 000000000..0d704214f --- /dev/null +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраИнтерфейс/Module.bsl @@ -0,0 +1,68 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ИНТЕРФЕЙСА СООБЩЕНИЙ ИНФОРМАЦИОННОГО ЦЕНТРА +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter/Messages/" + Версия(); + +КонецФункции + +// Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений +Функция Версия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает название программного интерфейса сообщений +Функция ПрограммныйИнтерфейс() Экспорт + + Возврат "MessageInfoCenter"; + +КонецФункции + +// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями +// +// Параметры: +// МассивОбработчиков - массив. +// +Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт + + МассивОбработчиков.Добавить(СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1); + +КонецПроцедуры + +// Возвращает тип сообщения {http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter/Messages/a.b.c.d}notificateSuggestion +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОповещенияПожелания(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "notificateSuggestion"); + +КонецФункции + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) + + Если ИспользуемыйПакет = Неопределено Тогда + ИспользуемыйПакет = Пакет(); + КонецЕсли; + + Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); + +КонецФункции \ 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 34e5cab5b..29d1e18ef 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/УправлениеКонтактнойИнформациейСобытия.mdo +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраИнтерфейс/СообщенияИнформационногоЦентраИнтерфейс.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6c58cc27-215e-4169-88ae-004ecc657d53"> - <name>УправлениеКонтактнойИнформациейСобытия</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b98a3511-4a6d-4b95-b7f5-eb3043e2289e"> + <name>СообщенияИнформационногоЦентраИнтерфейс</name> <synonym> <key>ru</key> - <value>Управление контактной информацией события</value> + <value>Сообщения информационного центра интерфейс</value> </synonym> <server>true</server> <externalConnection>true</externalConnection> diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения/Module.bsl index 1a610f040..449521613 100644 --- a/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения/Module.bsl @@ -4,7 +4,7 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Получает список обработчиков сообщений, которые обрабатывает данная подсистема. // @@ -13,10 +13,10 @@ // Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт - ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Добавление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); - ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Удаление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); - ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Добавление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); - ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Удаление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Добавление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Удаление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Добавление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Удаление", СообщенияИнформационногоЦентраОбработчикСообщения, Обработчики); КонецПроцедуры @@ -31,17 +31,17 @@ Если КаналСообщений = "ИнформационныйЦентр\Недоступность\Добавление" Тогда ОбработатьНедоступность(ТелоСообщения); - ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Недоступность\Удаление" Тогда + ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Недоступность\Удаление" Тогда Если ТелоСообщения.Свойство("Идентификатор") Тогда УдалитьДанныеИнформационногоЦентра(ТелоСообщения.Идентификатор); - КонецЕсли; + КонецЕсли; ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Новость\Добавление" Тогда ОбработатьНовость(ТелоСообщения); ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Новость\Удаление" Тогда Если ТелоСообщения.Свойство("Идентификатор") Тогда УдалитьДанныеИнформационногоЦентра(ТелоСообщения.Идентификатор); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -71,9 +71,9 @@ СоздатьНедоступность(ТелоСообщения); Иначе ОбновитьНедоступность(Объект, ТелоСообщения); - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры // Создает недоступность в справочнике общих данных информационного центра. // @@ -85,12 +85,12 @@ Недоступность = Справочники.ОбщиеДанныеИнформационногоЦентра.СоздатьЭлемент(); Недоступность.УстановитьНовыйКод(); - Недоступность.Идентификатор = ТелоСообщения.Идентификатор; - Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); - Недоступность.Дата = ТелоСообщения.Дата; - Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); - Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; - Недоступность.Критичность = ТелоСообщения.Критичность; + Недоступность.Идентификатор = ТелоСообщения.Идентификатор; + Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); + Недоступность.Дата = ТелоСообщения.Дата; + Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); + Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Недоступность.Критичность = ТелоСообщения.Критичность; Если ТелоСообщения.Свойство("ТекстHTML") Тогда Недоступность.ТекстHTML = ТелоСообщения.ТекстHTML; КонецЕсли; @@ -118,14 +118,14 @@ // Процедура ОбновитьНедоступность(Недоступность, ТелоСообщения) - Недоступность.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Недоступность"); - Недоступность.Идентификатор = ТелоСообщения.Идентификатор; - Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); - Недоступность.Дата = ТелоСообщения.Дата; - Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); - Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; - Недоступность.Критичность = ТелоСообщения.Критичность; - Недоступность.ПометкаУдаления = Ложь; + Недоступность.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Недоступность"); + Недоступность.Идентификатор = ТелоСообщения.Идентификатор; + Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); + Недоступность.Дата = ТелоСообщения.Дата; + Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); + Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Недоступность.Критичность = ТелоСообщения.Критичность; + Недоступность.ПометкаУдаления = Ложь; Если ТелоСообщения.Свойство("ТекстHTML") Тогда Недоступность.ТекстHTML = ТелоСообщения.ТекстHTML; КонецЕсли; @@ -133,7 +133,7 @@ Недоступность.Вложения = Новый ХранилищеЗначения(ТелоСообщения.Вложения); КонецЕсли; Если ТелоСообщения.Свойство("ВнешняяСсылка") Тогда - Недоступность.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; + Недоступность.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; КонецЕсли; Недоступность.Записать(); @@ -151,9 +151,9 @@ СоздатьНовость(ТелоСообщения); Иначе ОбновитьНовость(Объект, ТелоСообщения); - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры // Создает новость в справочнике общих данных информационного центра. // @@ -165,12 +165,12 @@ Новость = Справочники.ОбщиеДанныеИнформационногоЦентра.СоздатьЭлемент(); Новость.УстановитьНовыйКод(); - Новость.Идентификатор = ТелоСообщения.Идентификатор; - Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); - Новость.Дата = ТелоСообщения.Дата; - Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; - Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; - Новость.Критичность = ТелоСообщения.Критичность; + Новость.Идентификатор = ТелоСообщения.Идентификатор; + Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); + Новость.Дата = ТелоСообщения.Дата; + Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; + Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Новость.Критичность = ТелоСообщения.Критичность; Если ТелоСообщения.Свойство("ТекстHTML") Тогда Новость.ТекстHTML = ТелоСообщения.ТекстHTML; КонецЕсли; @@ -188,7 +188,7 @@ Новость.Записать(); -КонецПроцедуры +КонецПроцедуры // Обновляет новость. // @@ -198,14 +198,14 @@ // Процедура ОбновитьНовость(Новость, ТелоСообщения) - Новость.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Новость"); - Новость.Идентификатор = ТелоСообщения.Идентификатор; - Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); - Новость.Дата = ТелоСообщения.Дата; - Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; - Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; - Новость.Критичность = ТелоСообщения.Критичность; - Новость.ПометкаУдаления = Ложь; + Новость.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Новость"); + Новость.Идентификатор = ТелоСообщения.Идентификатор; + Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); + Новость.Дата = ТелоСообщения.Дата; + Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; + Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Новость.Критичность = ТелоСообщения.Критичность; + Новость.ПометкаУдаления = Ложь; Если ТелоСообщения.Свойство("ТекстHTML") Тогда Новость.ТекстHTML = ТелоСообщения.ТекстHTML; КонецЕсли; @@ -217,7 +217,7 @@ КонецЕсли; Новость.Записать(); -КонецПроцедуры +КонецПроцедуры // Удаляет данное информационного центра по идентификатору. // @@ -234,7 +234,7 @@ Объект.УстановитьПометкуУдаления(Истина); -КонецПроцедуры +КонецПроцедуры // Возвращает объект Справочника ОбщиеДанныеИнформационногоЦентра по идентификатору. // @@ -248,12 +248,13 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.Текст = "ВЫБРАТЬ - | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК Ссылка - |ИЗ - | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра - |ГДЕ - | ОбщиеДанныеИнформационногоЦентра.Идентификатор = &Идентификатор"; + Запрос.Текст = + "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК Ссылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.Идентификатор = &Идентификатор"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Неопределено; @@ -262,9 +263,9 @@ Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Возврат Выборка.Ссылка.ПолучитьОбъект(); - КонецЦикла; + КонецЦикла; -КонецФункции +КонецФункции // Возвращает заголовок недоступности. // diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/Module.bsl new file mode 100644 index 000000000..b57698c67 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/Module.bsl @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбработчикСообщенийИнформационногоЦентра. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter/Messages/" + Версия(); + +КонецФункции + +// Возвращает версию интерфейса сообщений, обслуживаемую обработчиком +Функция Версия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает базовый тип для сообщений версии +Функция БазовыйТип() Экспорт + + Возврат СообщенияВМоделиСервисаПовтИсп.ТипТело(); + +КонецФункции + +// Выполняет обработку входящих сообщений модели сервиса +// +// Параметры: +// Сообщение - ОбъектXDTO, входящее сообщение, +// Отправитель - ПланОбменаСсылка.ОбменСообщениями, узел плана обмена, соответствующий отправителю сообщения +// СообщениеОбработано - булево, флаг успешной обработки сообщения. Значение данного параметра необходимо +// установить равным Истина в том случае, если сообщение было успешно прочитано в данном обработчике +// +Процедура ОбработатьСообщениеМоделиСервиса(Знач Сообщение, Знач Отправитель, СообщениеОбработано) Экспорт + + СообщениеОбработано = Истина; + + Словарь = СообщенияИнформационногоЦентраИнтерфейс; + ТипСообщения = Сообщение.Body.Тип(); + + Если ТипСообщения = Словарь.СообщениеОповещенияПожелания() Тогда + ДобавитьОповещениеОПожелании(Сообщение); + Иначе + СообщениеОбработано = Ложь; + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ДобавитьОповещениеОПожелании(Сообщение) + + ТелоСообщения = Сообщение.Body; + СообщенияИнформационногоЦентраРеализация.ДобавитьОповещениеОПожелании(ТелоСообщения); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1.mdo b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1.mdo new file mode 100644 index 000000000..de2b93deb --- /dev/null +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1/СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cac7aa71-b5ed-4b0a-87cd-67149b718538"> + <name>СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1</name> + <synonym> + <key>ru</key> + <value>Сообщения информационного центра обработчик сообщения 1 0 1 1</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/Module.bsl new file mode 100644 index 000000000..a633244cf --- /dev/null +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/Module.bsl @@ -0,0 +1,51 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБЩАЯ РЕАЛИЗАЦИЯ ОБРАБОТКИ СООБЩЕНИЙ ИНФОРМАЦИОННОГО ЦЕНТРА +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// По сообщению формирует элемент справочника "ОбщиеДанныеИнформационногоЦентра" +// +// Параметры: +// ТелоСообщения - ОбъектXDTO - тело сообщения. +// +Процедура ДобавитьОповещениеОПожелании(ТелоСообщения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + ДобавитьОповещениеОПожеланииВСправочник(ТелоСообщения); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Добавляет оповещение по пожеланию +// +// Параметры: +// ТелоСообщения - ОбъектXDTO - тело сообщения. +// +Процедура ДобавитьОповещениеОПожеланииВСправочник(ТелоСообщения) + + УведомлениеОПожелании = Справочники.ОбщиеДанныеИнформационногоЦентра.СоздатьЭлемент(); + УведомлениеОПожелании.Идентификатор = ТелоСообщения.id; + УведомлениеОПожелании.Наименование = ТелоСообщения.name; + УведомлениеОПожелании.ДатаНачалаАктуальности = ТелоСообщения.startDate; + УведомлениеОПожелании.ДатаОкончанияАктуальности = ТелоСообщения.endDate; + УведомлениеОПожелании.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("УведомлениеОПожелании"); + УведомлениеОПожелании.Критичность = ТелоСообщения.criticality; + УведомлениеОПожелании.Записать(); + +КонецПроцедуры + + diff --git a/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/СообщенияИнформационногоЦентраРеализация.mdo b/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/СообщенияИнформационногоЦентраРеализация.mdo new file mode 100644 index 000000000..657d36126 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияИнформационногоЦентраРеализация/СообщенияИнформационногоЦентраРеализация.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9bd0ffb9-5ba6-43d3-83fd-2b165dea85f6"> + <name>СообщенияИнформационногоЦентраРеализация</name> + <synonym> + <key>ru</key> + <value>Сообщения информационного центра реализация</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl new file mode 100644 index 000000000..f7de23bf9 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl @@ -0,0 +1,123 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ИНТЕРФЕЙСА СООБЩЕНИЙ КОНТРОЛЯ ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Control/" + Версия(); + +КонецФункции + +// Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений +Функция Версия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает название программного интерфейса сообщений +Функция ПрограммныйИнтерфейс() Экспорт + + Возврат "ApplicationExtensionsControl"; + +КонецФункции + +// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями +// +// Параметры: +// МассивОбработчиков - массив. +// +Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт + + + +КонецПроцедуры + +// Выполняет регистрацию обработчиков трансляции сообщений. +// +// Параметры: +// МассивОбработчиков - массив. +// +Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт + + МассивОбработчиков.Добавить(СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1); + +КонецПроцедуры + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Control/a.b.c.d}ExtensionInstalled +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеДополнительныйОтчетИлиОбработкаУстановлена(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionInstalled"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Control/a.b.c.d}ExtensionDeleted +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеДополнительныйОтчетИлиОбработкаУдалена(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionDeleted"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Control/a.b.c.d}ExtensionInstallFailed +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionInstallFailed"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Control/a.b.c.d}ExtensionDeleteFailed +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionDeleteFailed"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) + + Если ИспользуемыйПакет = Неопределено Тогда + ИспользуемыйПакет = Пакет(); + КонецЕсли; + + Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); + +КонецФункции diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo new file mode 100644 index 000000000..01a3c94f2 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fa787228-aed5-4a16-b958-d102b78bf776"> + <name>СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс</name> + <synonym> + <key>ru</key> + <value>Сообщения контроль дополнительных отчетов и обработок интерфейс</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl new file mode 100644 index 000000000..2402085d4 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/Module.bsl @@ -0,0 +1,73 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ТРАНСЛЯЦИИ СООБЩЕНИЙ КОНТРОЛЯ ДОПОЛНИТЕЛЬНЫХ ОТЧЕТОВ И ОБРАБОТОК +// ИЗ ВЕРСИИ 1.0.1.1 В ВЕРСИЮ 1.0.2.4 СООБЩЕНИЙ КОНТРОЛЯ УДАЛЕННОГО АДМИНИСТРИРОВАНИЯ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает номер версии, для трансляции с которой предназначен обработчик +Функция ИсходнаяВерсия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции с которой предназначен обработчик +Функция ПакетИсходнойВерсии() Экспорт + + Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Control/" + ИсходнаяВерсия(); + +КонецФункции + +// Возвращает номер версии, для трансляции в которую предназначен обработчик +Функция РезультирующаяВерсия() Экспорт + + Возврат "1.0.0.1"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции в которую предназначен обработчик +Функция ПакетРезультирующейВерсии() Экспорт + + Возврат "http://www.1c.ru/1cFresh/RemoteAdministration/Control/1.0.2.4"; + +КонецФункции + +// Обработчик проверки выполнения стандартной обработки трансляции +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение, +// СтандартнаяОбработка - Булево, для отмены выполнения стандартной обработки трансляции +// этому параметру внутри данной процедуры необходимо установить значение Ложь. +// При этом вместо выполнения стандартной обработки трансляции будет вызвана функция +// ТрансляцияСообщения() обработчика трансляции. +// +Процедура ПередТрансляцией(Знач ИсходноеСообщение, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Обработчик выполнения произвольной трансляции сообщения. Вызывается только в том случае, +// если при выполнении процедуры ПередТрансляцией значению параметра СтандартнаяОбработка +// было установлено значение Ложь. +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение. +// +// Возвращаемое значение: +// ОбъектXDTO, результат произвольной трансляции сообщения. +// +Функция ТрансляцияСообщения(Знач ИсходноеСообщение) Экспорт + + + +КонецФункции + + + + + + diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo new file mode 100644 index 000000000..55511404b --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1/СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d511a261-4f9b-44e8-b3a1-1e6d393ec6e1"> + <name>СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1</name> + <synonym> + <key>ru</key> + <value>Сообщения контроль удаленного администрирования обработчик трансляции 1.0.0.1</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl index db57c56f8..6cfec0c29 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияИнтерфейс/Module.bsl @@ -16,7 +16,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений Функция Версия() Экспорт - Возврат "1.0.2.1"; + Возврат "1.0.3.1"; КонецФункции @@ -45,7 +45,7 @@ // Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт - + МассивОбработчиков.Добавить(СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1); КонецПроцедуры @@ -90,6 +90,10 @@ // Функция СообщениеАрхивацияОбластиПропущена(Знач ИспользуемыйПакет = Неопределено) Экспорт + Если ИспользуемыйПакет = Неопределено Тогда + ИспользуемыйПакет = "http://www.1c.ru/SaaS/ControlZonesBackup/1.0.2.1"; + КонецЕсли; + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ZoneBackupSkipped"); КонецФункции @@ -97,7 +101,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl new file mode 100644 index 000000000..db2e61dd7 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/Module.bsl @@ -0,0 +1,128 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ТРАНСЛЯЦИИ СООБЩЕНИЙ КОНТРОЛЯ РЕЗЕРВНОГО КОПИРОВАНИЯ ОБЛАСТЕЙ ДАННЫХ +// ИЗ ВЕРСИИ 1.0.3.1 В ВЕРСИЮ 1.0.2.1 +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает номер версии, для трансляции с которой предназначен обработчик +Функция ИсходнаяВерсия() Экспорт + + Возврат "1.0.3.1"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции с которой предназначен обработчик +Функция ПакетИсходнойВерсии() Экспорт + + Возврат "http://www.1c.ru/SaaS/ControlZonesBackup/1.0.3.1"; + +КонецФункции + +// Возвращает номер версии, для трансляции в которую предназначен обработчик +Функция РезультирующаяВерсия() Экспорт + + Возврат "1.0.2.1"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции в которую предназначен обработчик +Функция ПакетРезультирующейВерсии() Экспорт + + Возврат "http://www.1c.ru/SaaS/ControlZonesBackup/1.0.2.1"; + +КонецФункции + +// Обработчик проверки выполнения стандартной обработки трансляции +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение, +// СтандартнаяОбработка - Булево, для отмены выполнения стандартной обработки трансляции +// этому параметру внутри данной процедуры необходимо установить значение Ложь. +// При этом вместо выполнения стандартной обработки трансляции будет вызвана функция +// ТрансляцияСообщения() обработчика трансляции. +// +Процедура ПередТрансляцией(Знач ИсходноеСообщение, СтандартнаяОбработка) Экспорт + + ТипТела = ИсходноеСообщение.Тип(); + + Если ТипТела = Интерфейс().СообщениеРезервнаяКопияОбластиСоздана(ПакетИсходнойВерсии()) Тогда + СтандартнаяОбработка = Ложь; + ИначеЕсли ТипТела = Интерфейс().СообщениеОшибкаАрхивацииОбласти(ПакетИсходнойВерсии()) Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +// Обработчик выполнения произвольной трансляции сообщения. Вызывается только в том случае, +// если при выполнении процедуры ПередТрансляцией значению параметра СтандартнаяОбработка +// было установлено значение Ложь. +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение. +// +// Возвращаемое значение: +// ОбъектXDTO, результат произвольной трансляции сообщения. +// +Функция ТрансляцияСообщения(Знач ИсходноеСообщение) Экспорт + + ТипТела = ИсходноеСообщение.Тип(); + + Если ТипТела = Интерфейс().СообщениеРезервнаяКопияОбластиСоздана(ПакетИсходнойВерсии()) Тогда + Возврат ТранслироватьРезервнаяКопияОбластиСоздана(ИсходноеСообщение); + ИначеЕсли ТипТела = Интерфейс().СообщениеОшибкаАрхивацииОбласти(ПакетИсходнойВерсии()) Тогда + Возврат ТранслироватьОшибкаАрхивацииОбласти(ИсходноеСообщение); + ИначеЕсли ТипТела = Интерфейс().СообщениеАрхивацияОбластиПропущена(ПакетИсходнойВерсии()) Тогда + Возврат ТранслироватьАрхивацияОбластиПропущена(ИсходноеСообщение); + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция Интерфейс() + + Возврат СообщенияКонтрольРезервногоКопированияИнтерфейс; + +КонецФункции + +Функция ТранслироватьРезервнаяКопияОбластиСоздана(Знач ИсходноеСообщение) + + Результат = ФабрикаXDTO.Создать( + Интерфейс().СообщениеРезервнаяКопияОбластиСоздана(ПакетРезультирующейВерсии())); + + Результат.Zone = ИсходноеСообщение.Zone; + Результат.BackupId = ИсходноеСообщение.BackupId; + Результат.Date = ИсходноеСообщение.Date; + Результат.FileId = ИсходноеСообщение.FileId; + + Возврат Результат; + +КонецФункции + +Функция ТранслироватьОшибкаАрхивацииОбласти(Знач ИсходноеСообщение) + + Результат = ФабрикаXDTO.Создать( + Интерфейс().СообщениеОшибкаАрхивацииОбласти(ПакетРезультирующейВерсии())); + + Результат.Zone = ИсходноеСообщение.Zone; + Результат.BackupId = ИсходноеСообщение.BackupId; + + Возврат Результат; + +КонецФункции + +Функция ТранслироватьАрхивацияОбластиПропущена(Знач ИсходноеСообщение) + + Результат = ФабрикаXDTO.Создать( + Интерфейс().СообщениеАрхивацияОбластиПропущена(ПакетРезультирующейВерсии())); + + Результат.Zone = ИсходноеСообщение.Zone; + Результат.BackupId = ИсходноеСообщение.BackupId; + + Возврат Результат; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1.mdo b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1.mdo new file mode 100644 index 000000000..2f73b92a0 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1/СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="5b93975e-b2a4-4102-a060-2667f5813c94"> + <name>СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1</name> + <synonym> + <key>ru</key> + <value>Сообщения контроль резервного копирования обработчик трансляции 1.0.2.1</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl index 339ef43b2..98e094004 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс/Module.bsl @@ -16,7 +16,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений Функция Версия() Экспорт - Возврат "1.0.2.4"; + Возврат "1.0.2.5"; КонецФункции @@ -46,6 +46,7 @@ Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт МассивОбработчиков.Добавить(СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3); + МассивОбработчиков.Добавить(СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4); КонецПроцедуры @@ -139,70 +140,10 @@ КонецФункции -// Возвращает тип сообщения {http://www.1c.ru/SaaS/RemoteAdministration/Control/a.b.c.d}ExtensionInstalled -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеДополнительныйОтчетИлиОбработкаУстановлена(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionInstalled"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/SaaS/RemoteAdministration/Control/a.b.c.d}ExtensionDeleted -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеДополнительныйОтчетИлиОбработкаУдалена(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionDeleted"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/SaaS/RemoteAdministration/Control/a.b.c.d}ExtensionInstallFailed -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеОшибкаУстановкиДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionInstallFailed"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/SaaS/RemoteAdministration/Control/a.b.c.d}ExtensionDeleteFailed -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеОшибкаУдаленияДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionDeleteFailed"); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl new file mode 100644 index 000000000..41622883f --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/Module.bsl @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ТРАНСЛЯЦИИ СООБЩЕНИЙ КОНТРОЛЯ УДАЛЕННОГО АДМИНИСТРИРОВАНИЯ +// ИЗ ВЕРСИИ 1.0.2.5 В ВЕРСИЮ 1.0.2.4 +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает номер версии, для трансляции с которой предназначен обработчик +Функция ИсходнаяВерсия() Экспорт + + Возврат "1.0.2.5"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции с которой предназначен обработчик +Функция ПакетИсходнойВерсии() Экспорт + + Возврат "http://www.1c.ru/1cFresh/RemoteAdministration/Control/" + ИсходнаяВерсия(); + +КонецФункции + +// Возвращает номер версии, для трансляции в которую предназначен обработчик +Функция РезультирующаяВерсия() Экспорт + + Возврат "1.0.2.4"; + +КонецФункции + +// Возвращает пространство имен версии, для трансляции в которую предназначен обработчик +Функция ПакетРезультирующейВерсии() Экспорт + + Возврат "http://www.1c.ru/1cFresh/RemoteAdministration/Control/" + РезультирующаяВерсия(); + +КонецФункции + +// Обработчик проверки выполнения стандартной обработки трансляции +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение, +// СтандартнаяОбработка - Булево, для отмены выполнения стандартной обработки трансляции +// этому параметру внутри данной процедуры необходимо установить значение Ложь. +// При этом вместо выполнения стандартной обработки трансляции будет вызвана функция +// ТрансляцияСообщения() обработчика трансляции. +// +Процедура ПередТрансляцией(Знач ИсходноеСообщение, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Обработчик выполнения произвольной трансляции сообщения. Вызывается только в том случае, +// если при выполнении процедуры ПередТрансляцией значению параметра СтандартнаяОбработка +// было установлено значение Ложь. +// +// Параметры: +// ИсходноеСообщение - ОбъектXDTO, транслируемое сообщение. +// +// Возвращаемое значение: +// ОбъектXDTO, результат произвольной трансляции сообщения. +// +Функция ТрансляцияСообщения(Знач ИсходноеСообщение) Экспорт + +КонецФункции + + + + + + diff --git a/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4.mdo b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4.mdo new file mode 100644 index 000000000..a561682e0 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4/СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ac8c40d6-be1e-4733-be2e-ae83bde4ec15"> + <name>СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4</name> + <synonym> + <key>ru</key> + <value>Сообщения контроль удаленного администрирования обработчик трансляции 1.0.2.3</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl index e50e81aa9..76e5597e0 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольИнтерфейс/Module.bsl @@ -232,7 +232,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl index 3778db119..015600e0d 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.0.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 2.1.2.1 ИНТЕРФЕЙСА СООБЩЕНИЙ // КОНТРОЛЯ ОБМЕНА ДАННЫМИ // //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl index 63d416e8a..a82f5e62c 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиОбработчикСообщения/Module.bsl @@ -39,8 +39,7 @@ ТелоСообщения.НастройкаОтборовНаУзле, ТелоСообщения.ЗначенияПоУмолчаниюНаУзле, ТелоСообщения.КодЭтогоУзла, - ТелоСообщения.КодНовогоУзла - ); + ТелоСообщения.КодНовогоУзла); ИначеЕсли КаналСообщений = "ОбменДанными\ПрикладноеПриложение\УдалениеОбмена" Тогда @@ -102,8 +101,7 @@ Если КонечнаяТочкаКорреспондента.Пустая() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"), - Настройки.КонечнаяТочкаКорреспондента - ); + Настройки.КонечнаяТочкаКорреспондента); КонецЕсли; Корреспондент = Неопределено; @@ -117,8 +115,7 @@ НастройкаОтборовНаУзле, Корреспондент, , - Истина - ); + Истина); // Сохраняем настройки транспорта сообщений обмена для текущей области данных СтруктураЗаписи = Новый Структура; @@ -237,8 +234,7 @@ АбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( НастройкиТранспорта.FILEОбщийКаталогОбменаИнформацией, - НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией - ); + НастройкиТранспорта.FILEОтносительныйКаталогОбменаИнформацией); АбсолютныйКаталог = Новый Файл(АбсолютныйКаталогОбменаИнформацией); @@ -246,8 +242,7 @@ УдалитьФайлы(АбсолютныйКаталог.ПолноеИмя); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -371,4 +366,4 @@ Возврат НСтр("ru = 'Отправка сообщений'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl index 27945839b..bd67abcc8 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеИнтерфейс/Module.bsl @@ -143,7 +143,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl index c526ab343..265d9a30e 100644 --- a/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl +++ b/SSL/src/CommonModules/СообщенияОбменаДаннымиУправлениеОбработчикСообщения_2_1_2_1/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.0.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 2.1.2.1 ИНТЕРФЕЙСА СООБЩЕНИЙ // УПРАВЛЕНИЯ ОБМЕНА ДАННЫМИ // //////////////////////////////////////////////////////////////////////////////// @@ -83,6 +83,8 @@ Тело = Сообщение.Body; + Корреспондент = Неопределено; + НачатьТранзакцию(); Попытка @@ -100,12 +102,9 @@ Если КонечнаяТочкаКорреспондента.Пустая() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"), - Тело.EndPoint - ); + Тело.EndPoint); КонецЕсли; - Корреспондент = Неопределено; - Префикс = ""; Если Сообщение.Установлено("AdditionalInfo") Тогда Префикс = СериализаторXDTO.ПрочитатьXDTO(Сообщение.AdditionalInfo).Префикс; @@ -121,46 +120,48 @@ Корреспондент, Истина, , - Префикс - ); + Префикс); // Регистрируем справочники к выгрузке ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(Корреспондент); + ЗафиксироватьТранзакцию(); + // Выполняем выгрузку данных Отказ = Ложь; ОбменДаннымиВМоделиСервиса.ВыполнитьВыгрузкуДанных(Отказ, Корреспондент); Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки в процессе выгрузки справочников для корреспондента %1.'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг1УспешноЗавершена() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг1УспешноЗавершена()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; + НачатьТранзакцию(); СообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина); - ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + УдалитьНастройкуСинхронизации(Корреспондент); ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг1() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг1()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -187,16 +188,14 @@ // Обновляем настройку обмена ОбменДаннымиВМоделиСервиса.ОбновитьНастройкуОбмена(Корреспондент, - ОбменДаннымиСервер.ПолучитьЗначенияНастройкиОтборов(СериализаторXDTO.ПрочитатьXDTO(Тело.AdditionalSettings)) - ); + ОбменДаннымиСервер.ПолучитьЗначенияНастройкиОтборов(СериализаторXDTO.ПрочитатьXDTO(Тело.AdditionalSettings))); // Регистрируем все данные к выгрузке, кроме справочников ОбменДаннымиСервер.ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки(Корреспондент); // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг2УспешноЗавершена() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг2УспешноЗавершена()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -210,13 +209,11 @@ ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг2() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг2()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -236,7 +233,6 @@ Тело = Сообщение.Body; - НачатьТранзакцию(); Попытка Корреспондент = КорреспондентОбмена(Тело.ExchangePlan, Тело.CorrespondentCode); @@ -247,34 +243,29 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки в процессе загрузки справочников от корреспондента %1.'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеЗагрузкаСообщенияОбменаУспешноЗавершена() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеЗагрузкаСообщенияОбменаУспешноЗавершена()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; + НачатьТранзакцию(); СообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина); - ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаЗагрузкиСообщенияОбмена() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаЗагрузкиСообщенияОбмена()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -298,13 +289,11 @@ Попытка ДанныеКорреспондента = ОбменДаннымиСервер.ДанныеТаблицКорреспондента( - СериализаторXDTO.ПрочитатьXDTO(Тело.Tables), Тело.ExchangePlan - ); + СериализаторXDTO.ПрочитатьXDTO(Тело.Tables), Тело.ExchangePlan); // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеДанныхКорреспондентаУспешноЗавершено() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеДанныхКорреспондентаУспешноЗавершено()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -319,13 +308,11 @@ ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияДанныхКорреспондента() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияДанныхКорреспондента()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -352,8 +339,7 @@ // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеОбщихДанныхУзловКорреспондентаУспешноЗавершено() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеОбщихДанныхУзловКорреспондентаУспешноЗавершено()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -368,13 +354,11 @@ ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияОбщихДанныхУзловКорреспондента() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияОбщихДанныхУзловКорреспондента()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -408,8 +392,7 @@ // Отправляем ответное сообщение об успешной операции ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеПараметровУчетаКорреспондентаУспешноЗавершено() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеПолучениеПараметровУчетаКорреспондентаУспешноЗавершено()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -424,13 +407,11 @@ ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки - ); + УровеньЖурналаРегистрации.Ошибка,,, ПредставлениеОшибки); // Отправляем ответное сообщение об ошибке ОтветноеСообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияПараметровУчетаКорреспондента() - ); + СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаПолученияПараметровУчетаКорреспондента()); ОтветноеСообщение.Body.Zone = ОбщегоНазначения.ЗначениеРазделителяСеанса(); ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone; ОтветноеСообщение.Body.SessionId = Тело.SessionId; @@ -460,3 +441,27 @@ Возврат Результат; КонецФункции + +Процедура УдалитьНастройкуСинхронизации(Знач Корреспондент) + + УстановитьПривилегированныйРежим(Истина); + + Попытка + Если Корреспондент <> Неопределено Тогда + + КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); + + Если КорреспондентОбъект <> Неопределено Тогда + + КорреспондентОбъект.Удалить(); + + КонецЕсли; + + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index 588777356..acc0992e4 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -36,7 +36,8 @@ КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки сообщения'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки сообщения'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; @@ -78,7 +79,8 @@ ЗапланироватьЗагрузкуДанных(Дескриптор); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Доступны новые данные'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Доступны новые данные'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , ?(Загружать, НСтр("ru = 'В очередь добавлено задание на загрузку.'"), НСтр("ru = 'Загрузка данных не требуется.'")) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -126,14 +128,16 @@ Попытка Дескриптор = ДесериализоватьXDTO(ДескрипторXML); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка работы с XML'"), - УровеньЖурналаРегистрации.Ошибка, , - , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - + ДескрипторXML); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка работы с XML'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + ДескрипторXML); Возврат; КонецПопытки; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Загрузка начата'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -141,15 +145,17 @@ ИмяФайлаВыгрузки = ПолучитьФайлИзХранилища(Дескриптор); Если ИмяФайлаВыгрузки = Неопределено Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'"), - УровеньЖурналаРегистрации.Информация, , - , НСтр("ru = 'Файл не может быть загружен'") + Символы.ПС - + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, , + , НСтр("ru = 'Файл не может быть загружен'") + Символы.ПС + + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); Возврат; КонецЕсли; КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Примечание, , , НСтр("ru = 'Загрузка успешно выполнена'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -180,7 +186,8 @@ НаборНеобработанныхДанных.Удалить(ЗаписьНеобработанныхДанных); НаборНеобработанныхДанных.Записать(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) @@ -208,16 +215,17 @@ //Откладываем загрузку на 5 минут Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата() + 5 * 60; ЗапланироватьЗагрузкуДанных(Дескриптор); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Обработка данных будет запущена повторно из-за ошибки обработчика.'") - + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) - ); + + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); Иначе НаборНеобработанныхДанных.Очистить(); НаборНеобработанныхДанных.Записать(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Загрузка данных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Новые данные обработаны'") + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); @@ -257,14 +265,16 @@ Попытка Обработчик.Обработчик.ОбработкаДанныхОтменена(Дескриптор); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'"), - УровеньЖурналаРегистрации.Информация, , - , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) - + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, , + , ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) + + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Код обработчика: %1'"), Обработчик.КодОбработчика)); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Отмена обработки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор) @@ -279,10 +289,11 @@ Попытка ИмяФайлаВыгрузки = РаботаВМоделиСервиса.ПолучитьФайлИзХранилищаМенеджераСервиса(Дескриптор.FileGUID); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка хранилища'"), - УровеньЖурналаРегистрации.Ошибка, , - , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка хранилища'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + Символы.ПС + ПоставляемыеДанные.ПолучитьОписаниеДанных(Дескриптор)); //Откладываем загрузку на час Дескриптор.RecommendedUpdateDate = Дескриптор.RecommendedUpdateDate + 60 * 60; diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl index 01102b33a..4f0b9880c 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияИнтерфейс/Module.bsl @@ -38,6 +38,7 @@ МассивОбработчиков.Добавить(СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2); МассивОбработчиков.Добавить(СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3); МассивОбработчиков.Добавить(СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4); + МассивОбработчиков.Добавить(СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5); КонецПроцедуры @@ -262,100 +263,10 @@ КонецФункции -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}InstallExtension -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеУстановитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "InstallExtension"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}ExtensionCommandSettings -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция ТипНастройкиКомандыДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionCommandSettings"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DeleteExtension -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеУдалитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DeleteExtension"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DisableExtension -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеОтключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DisableExtension"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}EnableExtension -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеВключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "EnableExtension"); - -КонецФункции - -// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DropExtension -// -// Параметры: -// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой -// получается тип сообщения. -// -// Возвращаемое значение: -// ТипXDTO -// -Функция СообщениеОтозватьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт - - Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DropExtension"); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl index f9a4f779d..1c4287b81 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4/Module.bsl @@ -41,6 +41,12 @@ СообщениеОбработано = Истина; Словарь = СообщенияУдаленногоАдминистрированияИнтерфейс; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + СловарьДОиО = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс"); + Иначе + СловарьДОиО = Неопределено; + КонецЕсли; ТипСообщения = Сообщение.Body.Тип(); Если ТипСообщения = Словарь.СообщениеОбновитьПользователя(Пакет()) Тогда @@ -67,15 +73,15 @@ УстановитьРейтингОбластейДанных(Сообщение, Отправитель); ИначеЕсли ТипСообщения = Словарь.СообщениеПрикрепитьОбластьДанных(Пакет()) Тогда ПрикрепитьОбластьДанных(Сообщение, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ИначеЕсли СловарьДОиО <> Неопределено И ТипСообщения = СловарьДОиО.СообщениеУстановитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда УстановитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ИначеЕсли СловарьДОиО <> Неопределено И ТипСообщения = СловарьДОиО.СообщениеУдалитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда УдалитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеОтключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ИначеЕсли СловарьДОиО <> Неопределено И ТипСообщения = СловарьДОиО.СообщениеОтключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда ОтключитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеВключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ИначеЕсли СловарьДОиО <> Неопределено И ТипСообщения = СловарьДОиО.СообщениеВключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда ВключитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеОтозватьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ИначеЕсли СловарьДОиО <> Неопределено И ТипСообщения = СловарьДОиО.СообщениеОтозватьДополнительныйОтчетИлиОбработку(Пакет()) Тогда ОтозватьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); Иначе СообщениеОбработано = Ложь; @@ -195,163 +201,194 @@ Процедура УстановитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - ТелоСообщения = Сообщение.Body; - - НастройкиКоманд = Новый ТаблицаЗначений(); - НастройкиКоманд.Колонки.Добавить("Идентификатор"); - НастройкиКоманд.Колонки.Добавить("БыстрыйДоступ"); - НастройкиКоманд.Колонки.Добавить("Расписание"); - - Если ЗначениеЗаполнено(ТелоСообщения.CommandSettings) Тогда + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Для Каждого CommandSettings Из ТелоСообщения.CommandSettings Цикл - - НастройкиКоманды = НастройкиКоманд.Добавить(); - НастройкиКоманды.Идентификатор = CommandSettings.Id; - - Если CommandSettings.Settings <> Неопределено Тогда - - МассивИдентификаторов = Новый Массив; - Для Каждого UserGUID Из CommandSettings.Settings.UsersFastAccess Цикл - МассивИдентификаторов.Добавить(UserGUID); - КонецЦикла; - - НастройкиКоманды.БыстрыйДоступ = МассивИдентификаторов; - - Если CommandSettings.Settings.Schedule <> Неопределено Тогда - - НастройкиКоманды.Расписание = СериализаторXDTO.ПрочитатьXDTO(CommandSettings.Settings.Schedule); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; + МодульДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс"); + МодульДополнительныеОтчетыИОбработкиКлиентСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиентСервер"); - КонецЕсли; - - НастройкиРазделов = Новый ТаблицаЗначений(); - НастройкиРазделов.Колонки.Добавить("Раздел"); - - НастройкиНазначения = Новый ТаблицаЗначений(); - НастройкиНазначения.Колонки.Добавить("ОбъектНазначения"); - - НастройкиРасположенияКоманд = Новый Структура(); - - Если ЗначениеЗаполнено(ТелоСообщения.Assignments) Тогда + ТелоСообщения = Сообщение.Body; - Для Каждого Assignment Из ТелоСообщения.Assignments Цикл + НастройкиКоманд = Новый ТаблицаЗначений(); + НастройкиКоманд.Колонки.Добавить("Идентификатор"); + НастройкиКоманд.Колонки.Добавить("БыстрыйДоступ"); + НастройкиКоманд.Колонки.Добавить("Расписание"); + + Если ЗначениеЗаполнено(ТелоСообщения.CommandSettings) Тогда - Если Assignment.Тип() = ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам() Тогда + Для Каждого CommandSettings Из ТелоСообщения.CommandSettings Цикл - Для Каждого AssignmentObject Из Assignment.Objects Цикл + НастройкиКоманды = НастройкиКоманд.Добавить(); + НастройкиКоманды.Идентификатор = CommandSettings.Id; + + Если CommandSettings.Settings <> Неопределено Тогда - СтрокаРаздела = НастройкиРазделов.Добавить(); - Если AssignmentObject.ObjectName = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда - СтрокаРаздела.Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); - Иначе - СтрокаРаздела.Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(AssignmentObject.ObjectName); + МассивИдентификаторов = Новый Массив; + Для Каждого UserGUID Из CommandSettings.Settings.UsersFastAccess Цикл + МассивИдентификаторов.Добавить(UserGUID); + КонецЦикла; + + НастройкиКоманды.БыстрыйДоступ = МассивИдентификаторов; + + Если CommandSettings.Settings.Schedule <> Неопределено Тогда + + НастройкиКоманды.Расписание = СериализаторXDTO.ПрочитатьXDTO(CommandSettings.Settings.Schedule); + КонецЕсли; - КонецЦикла; - - ИначеЕсли Assignment.Тип() = ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеСправочникамИДокументам() Тогда - - Для Каждого AssignmentObject Из Assignment.Objects Цикл - - СтрокаНазначения = НастройкиНазначения.Добавить(); - СтрокаНазначения.ОбъектНазначения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( - AssignmentObject.ObjectName); - - КонецЦикла; - - НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыСписка", - Assignment.UseInListsForms); - НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыОбъекта", - Assignment.UseInObjectsForms); - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - НастройкиВариантов = Новый ТаблицаЗначений(); - НастройкиВариантов.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); - НастройкиВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Массив")); - НастройкиВариантов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Если ТелоСообщения.ReportVariants <> Неопределено Тогда - - Для Каждого ReportVariant Из ТелоСообщения.ReportVariants Цикл - - НастройкаВарианта = НастройкиВариантов.Добавить(); - НастройкаВарианта.Ключ = ReportVariant.VariantKey; - НастройкаВарианта.Представление = ReportVariant.Representation; - - Размещение = Новый Массив; - Для Каждого ReportVariantAssignment Из ReportVariant.Assignments Цикл - - Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( - ReportVariantAssignment.ObjectName); - Важный = Ложь; - СмТакже = Ложь; - Если ReportVariantAssignment.Importance = "High" Тогда - Важный = Истина; - ИначеЕсли ReportVariantAssignment.Importance = "Low" Тогда - СмТакже = Истина; КонецЕсли; - ЭлементРазмещения = Новый Структура("Раздел,Важный,СмТакже", Раздел, Важный, СмТакже); - Размещение.Добавить(ЭлементРазмещения); КонецЦикла; - НастройкаВарианта.Размещение = Размещение; + КонецЕсли; + + НастройкиРазделов = Новый ТаблицаЗначений(); + НастройкиРазделов.Колонки.Добавить("Раздел"); + + НастройкиНазначения = Новый ТаблицаЗначений(); + НастройкиНазначения.Колонки.Добавить("ОбъектНазначения"); + + НастройкиРасположенияКоманд = Новый Структура(); + + Если ЗначениеЗаполнено(ТелоСообщения.Assignments) Тогда - КонецЦикла; + Для Каждого Assignment Из ТелоСообщения.Assignments Цикл + + Если Assignment.Тип() = МодульДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам() Тогда + + Для Каждого AssignmentObject Из Assignment.Objects Цикл + + СтрокаРаздела = НастройкиРазделов.Добавить(); + Если AssignmentObject.ObjectName = МодульДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда + СтрокаРаздела.Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + Иначе + СтрокаРаздела.Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(AssignmentObject.ObjectName); + КонецЕсли; + + КонецЦикла; + + ИначеЕсли Assignment.Тип() = МодульДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеСправочникамИДокументам() Тогда + + Для Каждого AssignmentObject Из Assignment.Objects Цикл + + СтрокаНазначения = НастройкиНазначения.Добавить(); + СтрокаНазначения.ОбъектНазначения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + AssignmentObject.ObjectName); + + КонецЦикла; + + НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыСписка", + Assignment.UseInListsForms); + НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыОбъекта", + Assignment.UseInObjectsForms); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + НастройкиВариантов = Новый ТаблицаЗначений(); + НастройкиВариантов.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); + НастройкиВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Массив")); + НастройкиВариантов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Если ТелоСообщения.ReportVariants <> Неопределено Тогда + + Для Каждого ReportVariant Из ТелоСообщения.ReportVariants Цикл + + НастройкаВарианта = НастройкиВариантов.Добавить(); + НастройкаВарианта.Ключ = ReportVariant.VariantKey; + НастройкаВарианта.Представление = ReportVariant.Representation; + + Размещение = Новый Массив; + Для Каждого ReportVariantAssignment Из ReportVariant.Assignments Цикл + + Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + ReportVariantAssignment.ObjectName); + Важный = Ложь; + СмТакже = Ложь; + Если ReportVariantAssignment.Importance = "High" Тогда + Важный = Истина; + ИначеЕсли ReportVariantAssignment.Importance = "Low" Тогда + СмТакже = Истина; + КонецЕсли; + ЭлементРазмещения = Новый Структура("Раздел,Важный,СмТакже", Раздел, Важный, СмТакже); + Размещение.Добавить(ЭлементРазмещения); + + КонецЦикла; + + НастройкаВарианта.Размещение = Размещение; + + КонецЦикла; + + КонецЕсли; + + ОписаниеИнсталляции = Новый Структура( + "Идентификатор,Представление,Инсталляция", + ТелоСообщения.Extension, + ТелоСообщения.Representation, + ТелоСообщения.Installation); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.УстановитьДополнительныйОтчетИлиОбработку( + ОписаниеИнсталляции, НастройкиКоманд, НастройкиРасположенияКоманд, НастройкиРазделов, + НастройкиНазначения, НастройкиВариантов, ТелоСообщения.InitiatorServiceID); КонецЕсли; - ОписаниеИнсталляции = Новый Структура( - "Идентификатор,Представление,Инсталляция", - ТелоСообщения.Extension, - ТелоСообщения.Representation, - ТелоСообщения.Installation - ); - - СообщенияУдаленногоАдминистрированияРеализация.УстановитьДополнительныйОтчетИлиОбработку( - ОписаниеИнсталляции, НастройкиКоманд, НастройкиРасположенияКоманд, НастройкиРазделов, - НастройкиНазначения, НастройкиВариантов, ТелоСообщения.InitiatorServiceID); - КонецПроцедуры Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - ТелоСообщения = Сообщение.Body; - СообщенияУдаленногоАдминистрированияРеализация.УдалитьДополнительныйОтчетИлиОбработку( - ТелоСообщения.Extension, ТелоСообщения.Installation); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + ТелоСообщения = Сообщение.Body; + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.УдалитьДополнительныйОтчетИлиОбработку( + ТелоСообщения.Extension, ТелоСообщения.Installation); + + КонецЕсли; КонецПроцедуры Процедура ОтключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - СообщенияУдаленногоАдминистрированияРеализация.ОтключитьДополнительныйОтчетИлиОбработку( - Сообщение.Body.Extension); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ОтключитьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + + КонецЕсли; КонецПроцедуры Процедура ВключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - СообщенияУдаленногоАдминистрированияРеализация.ВключитьДополнительныйОтчетИлиОбработку( - Сообщение.Body.Extension - ); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ВключитьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + + КонецЕсли; КонецПроцедуры Процедура ОтозватьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) - СообщенияУдаленногоАдминистрированияРеализация.ОтозватьДополнительныйОтчетИлиОбработку( - Сообщение.Body.Extension - ); + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация"); + + МодульСообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ОтозватьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl new file mode 100644 index 000000000..bfffc8d96 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/Module.bsl @@ -0,0 +1,184 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.3.5 ИНТЕРФЕЙСА СООБЩЕНИЙ +// УДАЛЕННОГО АДМИНИСТРИРОВАНИЯ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/1cFresh/RemoteAdministration/App/" + Версия(); + +КонецФункции + +// Возвращает версию интерфейса сообщений, обслуживаемую обработчиком +Функция Версия() Экспорт + + Возврат "1.0.3.5"; + +КонецФункции + +// Возвращает базовый тип для сообщений версии +Функция БазовыйТип() Экспорт + + Возврат СообщенияВМоделиСервисаПовтИсп.ТипТело(); + +КонецФункции + +// Выполняет обработку входящих сообщений модели сервиса +// +// Параметры: +// Сообщение - ОбъектXDTO, входящее сообщение, +// Отправитель - ПланОбменаСсылка.ОбменСообщениями, узел плана обмена, соответствующий отправителю сообщения +// СообщениеОбработано - булево, флаг успешной обработки сообщения. Значение данного параметра необходимо +// установить равным Истина в том случае, если сообщение было успешно прочитано в данном обработчике +// +Процедура ОбработатьСообщениеМоделиСервиса(Знач Сообщение, Знач Отправитель, СообщениеОбработано) Экспорт + + СообщениеОбработано = Истина; + + Словарь = СообщенияУдаленногоАдминистрированияИнтерфейс; + ТипСообщения = Сообщение.Body.Тип(); + + Если ТипСообщения = Словарь.СообщениеОбновитьПользователя(Пакет()) Тогда + ОбновитьПользователя(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеПодготовитьОбластьДанных(Пакет()) Тогда + ПодготовитьОбластьДанных(Сообщение, Отправитель, Ложь); + ИначеЕсли ТипСообщения = Словарь.СообщениеПодготовитьОбластьДанныхИзВыгрузки(Пакет()) Тогда + ПодготовитьОбластьДанных(Сообщение, Отправитель, Истина); + ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьОбластьДанных(Пакет()) Тогда + УдалитьОбластьДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьДоступКОбластиДанных(Пакет()) Тогда + УстановитьДоступКОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьКонечнуюТочкуМенеджераСервиса(Пакет()) Тогда + УстановитьКонечнуюТочкуМенеджераСервиса(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыИБ(Пакет()) Тогда + УстановитьПараметрыИБ(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыОбластиДанных(Пакет()) Тогда + УстановитьПараметрыОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПолныеПраваОбластиДанных(Пакет()) Тогда + УстановитьПолныеПраваОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПраваПользователяПоУмолчанию(Пакет()) Тогда + УстановитьПраваПользователяПоУмолчанию(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьРейтингОбластейДанных(Пакет()) Тогда + УстановитьРейтингОбластейДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеПрикрепитьОбластьДанных(Пакет()) Тогда + ПрикрепитьОбластьДанных(Сообщение, Отправитель); + Иначе + СообщениеОбработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ОбновитьПользователя(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.ОбновитьПользователя( + ТелоСообщения.Name, + ТелоСообщения.FullName, + ТелоСообщения.StoredPasswordValue, + ТелоСообщения.UserApplicationID, + ТелоСообщения.UserServiceID, + ТелоСообщения.Phone, + ТелоСообщения.EMail, + ТелоСообщения.Language); + +КонецПроцедуры + +Процедура ПодготовитьОбластьДанных(Знач Сообщение, Знач Отправитель, Знач ИзВыгрузки) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.ПодготовитьОбластьДанных( + ТелоСообщения.Zone, + ИзВыгрузки, + ?(ИзВыгрузки, Неопределено, ТелоСообщения.Kind), + ТелоСообщения.DataFileId); + +КонецПроцедуры + +Процедура УдалитьОбластьДанных(Сообщение, Отправитель) + + СообщенияУдаленногоАдминистрированияРеализация.УдалитьОбластьДанных(Сообщение.Body.Zone); + +КонецПроцедуры + +Процедура УстановитьДоступКОбластиДанных(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.УстановитьДоступКОбластиДанных( + ТелоСообщения.Name, + ТелоСообщения.StoredPasswordValue, + ТелоСообщения.UserServiceID, + ТелоСообщения.Value, + ТелоСообщения.Language); + +КонецПроцедуры + +Процедура УстановитьКонечнуюТочкуМенеджераСервиса(Знач Сообщение, Знач Отправитель) + + СообщенияУдаленногоАдминистрированияРеализация.УстановитьКонечнуюТочкуМенеджераСервиса(Отправитель); + +КонецПроцедуры + +Процедура УстановитьПараметрыИБ(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + Параметры = СериализаторXDTO.ПрочитатьXDTO(ТелоСообщения.Params); + СообщенияУдаленногоАдминистрированияРеализация.УстановитьПараметрыИБ(Параметры); + +КонецПроцедуры + +Процедура УстановитьПараметрыОбластиДанных(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.УстановитьПараметрыОбластиДанных( + ТелоСообщения.Zone, + ТелоСообщения.Presentation, + ТелоСообщения.TimeZone); + +КонецПроцедуры + +Процедура УстановитьПолныеПраваОбластиДанных(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.УстановитьПолныеПраваОбластиДанных( + ТелоСообщения.UserServiceID, + ТелоСообщения.Value); + +КонецПроцедуры + +Процедура УстановитьПраваПользователяПоУмолчанию(Знач Сообщение, Знач Отправитель) + + СообщенияУдаленногоАдминистрированияРеализация.УстановитьПраваПользователяПоУмолчанию( + Сообщение.Body.UserServiceID); + +КонецПроцедуры + +Процедура УстановитьРейтингОбластейДанных(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + ТаблицаРейтинга = Новый ТаблицаЗначений(); + ТаблицаРейтинга.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(7,0))); + ТаблицаРейтинга.Колонки.Добавить("Рейтинг", Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(7,0))); + Для Каждого СтрокаСообщения Из ТелоСообщения.Item Цикл + СтрокаРейтинга = ТаблицаРейтинга.Добавить(); + СтрокаРейтинга.ОбластьДанных = СтрокаСообщения.Zone; + СтрокаРейтинга.Рейтинг = СтрокаСообщения.Rating; + КонецЦикла; + СообщенияУдаленногоАдминистрированияРеализация.УстановитьРейтингОбластейДанных( + ТаблицаРейтинга, ТелоСообщения.SetAllZones); + +КонецПроцедуры + +Процедура ПрикрепитьОбластьДанных(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУдаленногоАдминистрированияРеализация.ПрикрепитьОбластьДанных(ТелоСообщения); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5.mdo b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5.mdo new file mode 100644 index 000000000..edcbe7877 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5/СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="eccded1c-f3ca-40d3-a8cd-71947bfed7b8"> + <name>СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5</name> + <synonym> + <key>ru</key> + <value>Сообщения удаленного администрирования обработчик сообщения 1.0.3.5</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl index 41e2133a4..3b6e62d8b 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl @@ -158,6 +158,10 @@ МенеджерЗаписи.Повтор = 0; МенеджерЗаписи.Вариант = ?(ИзВыгрузки, "", Вариант); + КопияМенеджера = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(КопияМенеджера, МенеджерЗаписи); + МенеджерЗаписи = КопияМенеджера; + МенеджерЗаписи.Записать(); ПараметрыМетода = Новый Массив; @@ -212,6 +216,10 @@ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению; МенеджерЗаписи.Повтор = 0; + КопияМенеджера = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(КопияМенеджера, МенеджерЗаписи); + МенеджерЗаписи = КопияМенеджера; + МенеджерЗаписи.Записать(); ПараметрыМетода = Новый Массив; @@ -329,7 +337,8 @@ Если СтрокаПараметра = Неопределено Тогда ШаблонСообщения = НСтр("ru = 'Не известное имя параметра %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); - ЗаписьЖурналаРегистрации("УдаленноеАдминистрирование.УстановитьПараметрыИБ", + ЗаписьЖурналаРегистрации(НСтр("ru ='УдаленноеАдминистрирование.УстановитьПараметрыИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); Продолжить; ИначеЕсли СтрокаПараметра.ЗапретЗаписи Тогда @@ -360,7 +369,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров ИБ'"), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров ИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -425,8 +435,8 @@ Если ПользователиСлужебный.ЗапретРедактированияРолей() И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - Модуль.УстановитьПринадлежностьПользователяКГруппеАдминистраторы(ПользовательОбластиДанных, ДоступРазрешен); + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.УстановитьПринадлежностьПользователяКГруппеАдминистраторы(ПользовательОбластиДанных, ДоступРазрешен); Иначе @@ -564,6 +574,10 @@ УстановитьЧасовойПоясИнформационнойБазы(); КонецЕсли; + КопияМенеджера = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(КопияМенеджера, МенеджерЗаписи); + МенеджерЗаписи = КопияМенеджера; + МенеджерЗаписи.Записать(); Константы.ПредставлениеОбластиДанных.Установить(Параметры.Presentation); @@ -648,8 +662,8 @@ Если ПользователиСлужебный.ЗапретРедактированияРолей() И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - Модуль.УстановитьПринадлежностьПользователяКГруппеАдминистраторы(ПользовательОбластиДанных, Истина); + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.УстановитьПринадлежностьПользователяКГруппеАдминистраторы(ПользовательОбластиДанных, Истина); КонецЕсли; КонецЦикла; @@ -672,206 +686,6 @@ КонецПроцедуры -// Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}InstallExtension -// -// Параметры: -// ОписаниеИнсталляции - Структура, ключи: -// Идентификатор - УникальныйИдентификатор, уникальный идентификатор ссылки -// элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки, -// Представление - строка, представление инсталляции поставляемой дополнительной -// обработки (будет использоваться в качестве наименования элемента справочника -// ДополнительныеОтчетыИОбработки), -// Инсталляция - УникальныйИдентификатор, уникальный идентификатор инсталляции -// поставляемой дополнительной обработки (будет использоваться в качестве -// уникального идентификатора ссылки справочника ДополнительныеОтчетыИОбработки), -// НастройкиКоманд - ТаблицаЗначений, содержащая настройки команд для инсталляции -// поставляемой дополнительной обработки, колонки: -// Идентификатор - строка, идентификатор команды, -// БыстрыйДоступ - Массив(УникальныйИдентификатор), массив уникальный идентификаторов, -// определяющих пользователей сервиса, которым команда должна быть включена в -// быстрый доступ, -// Расписание - РасписаниеРегламентногоЗадания, расписание для задания команды -// дополнительной обработки (если для команды включено выполнение в качестве -// регламентного задания), -// Разделы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции -// поставляемой дополнительной обработки в разделы командного интерфейса, колонки: -// Раздел - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// СправочникиИДокументы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции -// поставляемой дополнительной обработки в интерфейс форм список и элементов, колонки: -// ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных, -// ВариантыДополнительногоОтчета - Массив(Строка), массив, содержащий ключи вариантов отчетов -// дополнительного отчета, -// ИдентификаторПользователяСервиса - УникальныйИдентификатор, определяющий пользователя -// сервиса, который инициировал инсталляцию поставляемой дополнительной обработки. -// -Процедура УстановитьДополнительныйОтчетИлиОбработку(Знач ОписаниеИнсталляции, - Знач НастройкиКоманд, Знач НастройкиРасположенияКоманд, Знач Разделы, Знач СправочникиИДокументы, Знач ВариантыДополнительногоОтчета, - Знач ИдентификаторПользователяСервиса) Экспорт - - // Настройки заполняются по данным из сообщения - БыстрыйДоступ = Новый ТаблицаЗначений(); - БыстрыйДоступ.Колонки.Добавить("ИдентификаторКоманды", Новый ОписаниеТипов("Строка")); - БыстрыйДоступ.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); - - Задания = Новый ТаблицаЗначений(); - Задания.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - Задания.Колонки.Добавить("РегламентноеЗаданиеРасписание", Новый ОписаниеТипов("СписокЗначений")); - Задания.Колонки.Добавить("РегламентноеЗаданиеИспользование", Новый ОписаниеТипов("Булево")); - - Для Каждого НастройкаКоманды из НастройкиКоманд Цикл - - Если ЗначениеЗаполнено(НастройкаКоманды.БыстрыйДоступ) Тогда - - Для Каждого ИдентификаторПользователя Из НастройкаКоманды.БыстрыйДоступ Цикл - - ТекстЗапроса = "ВЫБРАТЬ - | Пользователи.Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователя); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - - Продолжить; - - Иначе - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ЭлементБыстрогоДоступа = БыстрыйДоступ.Добавить(); - ЭлементБыстрогоДоступа.ИдентификаторКоманды = НастройкаКоманды.Идентификатор; - ЭлементБыстрогоДоступа.Пользователь = Выборка.Ссылка; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - Если НастройкаКоманды.Расписание <> Неопределено Тогда - - Задание = Задания.Добавить(); - Задание.Идентификатор = НастройкаКоманды.Идентификатор; - РегламентноеЗаданиеРасписание = Новый СписокЗначений(); - РегламентноеЗаданиеРасписание.Добавить(НастройкаКоманды.Расписание); - Задание.РегламентноеЗаданиеРасписание= РегламентноеЗаданиеРасписание; - Задание.РегламентноеЗаданиеИспользование = Истина; - - КонецЕсли; - - КонецЦикла; - - ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуВОбластьДанных( - ОписаниеИнсталляции, - БыстрыйДоступ, - Задания, - Разделы, - СправочникиИДокументы, - НастройкиРасположенияКоманд, - ВариантыДополнительногоОтчета, - ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса( - ИдентификаторПользователяСервиса - ) - ); - -КонецПроцедуры - -// Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}DeleteExtension -// -// Параметры: -// ИдентификаторПоставляемойОбработки - УникальныйИдентификатор, ссылка на элемент -// справочника ПоставляемыеДополнительныеОтчетыИОбработки; -// ИдентификаторИспользуемойОбработки - УникальныйИдентификатор, ссылка на элемент -// справочника ДополнительныеОтчетыИОбработки. -// -Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторПоставляемойОбработки, Знач ИдентификаторИспользуемойОбработки) Экспорт - - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторПоставляемойОбработки); - - ДополнительныеОтчетыИОбработкиВМоделиСервиса.УдалитьПоставляемуюОбработкуИзОбластиДанных( - ПоставляемаяОбработка, - ИдентификаторИспользуемойОбработки - ); - -КонецПроцедуры - -// Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}DisableExtension -// -// Параметры: -// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент -// справочника ПоставляемыеДополнительныеОтчетыИОбработки -// -Процедура ОтключитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторРасширения) Экспорт - - УстановитьПривилегированныйРежим(Истина); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторРасширения - ); - - Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда - - Объект = ПоставляемаяОбработка.ПолучитьОбъект(); - - Объект.Публикация = - Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; - Объект.ПричинаОтключения = - Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.БлокировкаАдминистраторомСервиса; - - Объект.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}EnableExtension -// -// Параметры: -// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент -// справочника ПоставляемыеДополнительныеОтчетыИОбработки -// -Процедура ВключитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторРасширения) Экспорт - - УстановитьПривилегированныйРежим(Истина); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторРасширения - ); - - Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда - - Объект = ПоставляемаяОбработка.ПолучитьОбъект(); - - Объект.Публикация = - Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - - Объект.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}DropExtension -// -// Параметры: -// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент -// справочника ПоставляемыеДополнительныеОтчетыИОбработки -// -Процедура ОтозватьДополнительныйОтчетИлиОбработку(Знач ИдентификаторПоставляемойОбработки) Экспорт - - УстановитьПривилегированныйРежим(Истина); - ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( - ИдентификаторПоставляемойОбработки - ); - - Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда - ДополнительныеОтчетыИОбработкиВМоделиСервиса.ОтозватьПоставляемуюДополнительнуюОбработку( - ПоставляемаяОбработка - ); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl index d41eb06bf..fb9266f5e 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемИнтерфейс/Module.bsl @@ -16,7 +16,7 @@ // Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений Функция Версия() Экспорт - Возврат "1.0.2.1"; + Возврат "1.0.3.1"; КонецФункции @@ -35,6 +35,7 @@ Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт МассивОбработчиков.Добавить(СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1); + МассивОбработчиков.Добавить(СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1); КонецПроцедуры @@ -75,14 +76,48 @@ // Функция СообщениеОтменитьАрхивациюОбласти(Знач ИспользуемыйПакет = Неопределено) Экспорт + Если ИспользуемыйПакет = Неопределено Тогда + ИспользуемыйПакет = "http://www.1c.ru/SaaS/ManageZonesBackup/1.0.2.1"; + КонецЕсли; + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CancelZoneBackup"); КонецФункции +// Возвращает тип сообщения {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}UpdateScheduledZoneBackupSettings +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОбновитьНастройкиПериодическогоРезервногоКопирования(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "UpdateScheduledZoneBackupSettings"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}CancelScheduledZoneBackup +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОтменитьПериодическоеРезервноеКопирование(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "CancelScheduledZoneBackup"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl new file mode 100644 index 000000000..68ca8c414 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/Module.bsl @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.3.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// УПРАВЛЕНИЯ РЕЗЕРВНЫМ КОПИРОВАНИЕМ ОБЛАСТЕЙ ДАННЫХ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/SaaS/ManageZonesBackup/" + Версия(); + +КонецФункции + +// Возвращает версию интерфейса сообщений, обслуживаемую обработчиком +Функция Версия() Экспорт + + Возврат "1.0.3.1"; + +КонецФункции + +// Возвращает базовый тип для сообщений версии +Функция БазовыйТип() Экспорт + + Возврат СообщенияВМоделиСервисаПовтИсп.ТипТело(); + +КонецФункции + +// Выполняет обработку входящих сообщений модели сервиса +// +// Параметры: +// Сообщение - ОбъектXDTO, входящее сообщение, +// Отправитель - ПланОбменаСсылка.ОбменСообщениями, узел плана обмена, соответствующий отправителю сообщения +// СообщениеОбработано - булево, флаг успешной обработки сообщения. Значение данного параметра необходимо +// установить равным Истина в том случае, если сообщение было успешно прочитано в данном обработчике +// +Процедура ОбработатьСообщениеМоделиСервиса(Знач Сообщение, Знач Отправитель, СообщениеОбработано) Экспорт + + СообщениеОбработано = Истина; + + Словарь = СообщенияУправлениеРезервнымКопированиемИнтерфейс; + ТипСообщения = Сообщение.Body.Тип(); + + Если ТипСообщения = Словарь.СообщениеПланироватьАрхивациюОбласти(Пакет()) Тогда + ПланироватьАрхивациюОбласти(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеОбновитьНастройкиПериодическогоРезервногоКопирования(Пакет()) Тогда + ОбновитьНастройкиПериодическогоРезервногоКопирования(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеОтменитьПериодическоеРезервноеКопирование(Пакет()) Тогда + ОтменитьПериодическоеРезервноеКопирование(Сообщение, Отправитель); + Иначе + СообщениеОбработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ПланироватьАрхивациюОбласти(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУправлениеРезервнымКопированиемРеализация.ПланироватьСозданиеРезервнойКопииОбласти( + ТелоСообщения.Zone, + ТелоСообщения.BackupId, + ТелоСообщения.Date, + Истина); + +КонецПроцедуры + +Процедура ОбновитьНастройкиПериодическогоРезервногоКопирования(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + + Настройки = Новый Структура; + Настройки.Вставить("СоздаватьЕжедневные", ТелоСообщения.CreateDailyBackup); + Настройки.Вставить("СоздаватьЕжемесячные", ТелоСообщения.CreateMonthlyBackup); + Настройки.Вставить("СоздаватьЕжегодные", ТелоСообщения.CreateYearlyBackup); + Настройки.Вставить("ТолькоПриАктивностиПользователей", ТелоСообщения.CreateBackupOnlyAfterUsersActivity); + Настройки.Вставить("НачалоИнтервалаФормированияКопий", ТелоСообщения.BackupCreationBeginTime); + Настройки.Вставить("ОкончаниеИнтервалаФормированияКопий", ТелоСообщения.BackupCreationEndTime); + Настройки.Вставить("ДеньСозданияЕжемесячных", ТелоСообщения.MonthlyBackupCreationDay); + Настройки.Вставить("МесяцСозданияЕжегодных", ТелоСообщения.YearlyBackupCreationMonth); + Настройки.Вставить("ДеньСозданияЕжегодных", ТелоСообщения.YearlyBackupCreationDay); + Настройки.Вставить("ДатаСозданияПоследнейЕжедневной", ТелоСообщения.LastDailyBackupDate); + Настройки.Вставить("ДатаСозданияПоследнейЕжемесячной", ТелоСообщения.LastMonthlyBackupDate); + Настройки.Вставить("ДатаСозданияПоследнейЕжегодной", ТелоСообщения.LastYearlyBackupDate); + + СообщенияУправлениеРезервнымКопированиемРеализация.ОбновитьНастройкиПериодическогоРезервногоКопирования( + ТелоСообщения.Zone, + Настройки); + +КонецПроцедуры + +Процедура ОтменитьПериодическоеРезервноеКопирование(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + + СообщенияУправлениеРезервнымКопированиемРеализация.ОтменитьПериодическоеРезервноеКопирование( + ТелоСообщения.Zone); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1.mdo b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1.mdo new file mode 100644 index 000000000..80097f904 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1/СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="09256328-6205-4b04-b908-3287ae8ded75"> + <name>СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1</name> + <synonym> + <key>ru</key> + <value>Сообщения управление резервным копированием обработчик сообщения 1.0.3.1</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl index 1cd9ecaef..c1c3782d7 100644 --- a/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправлениеРезервнымКопированиемРеализация/Module.bsl @@ -41,4 +41,93 @@ ПараметрыОтмены = Новый Структура("ОбластьДанных, ИДКопии", КодОбластиДанных, ИдентификаторРезервнойКопии); РезервноеКопированиеОбластейДанных.ОтменитьСозданиеРезервнойКопииОбласти(ПараметрыОтмены); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}UpdateScheduledZoneBackupSettings +// +// Параметры: +// ОбластьДанных - Число - значение разделителя области данных +// Настройки - Структура - новые настройки резервного копирования +Процедура ОбновитьНастройкиПериодическогоРезервногоКопирования(Знач ОбластьДанных, Знач Настройки) Экспорт + + ПараметрыСоздания = Новый Структура; + ПараметрыСоздания.Вставить("СоздаватьЕжедневные"); + ПараметрыСоздания.Вставить("СоздаватьЕжемесячные"); + ПараметрыСоздания.Вставить("СоздаватьЕжегодные"); + ПараметрыСоздания.Вставить("ТолькоПриАктивностиПользователей"); + ПараметрыСоздания.Вставить("ДеньСозданияЕжемесячных"); + ПараметрыСоздания.Вставить("МесяцСозданияЕжегодных"); + ПараметрыСоздания.Вставить("ДеньСозданияЕжегодных"); + ЗаполнитьЗначенияСвойств(ПараметрыСоздания, Настройки); + + СостояниеСоздания = Новый Структура; + СостояниеСоздания.Вставить("ДатаСозданияПоследнейЕжедневной"); + СостояниеСоздания.Вставить("ДатаСозданияПоследнейЕжемесячной"); + СостояниеСоздания.Вставить("ДатаСозданияПоследнейЕжегодной"); + ЗаполнитьЗначенияСвойств(СостояниеСоздания, Настройки); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Новый ФиксированнаяСтруктура(ПараметрыСоздания)); + ПараметрыМетода.Добавить(Новый ФиксированнаяСтруктура(СостояниеСоздания)); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.ВремяНачала = Настройки.НачалоИнтервалаФормированияКопий; + Расписание.ВремяКонца = Настройки.ОкончаниеИнтервалаФормированияКопий; + Расписание.ПериодПовтораДней = 1; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ПараметрыЗадания.Вставить("Расписание", Расписание); + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ОтборЗадания.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); + ОтборЗадания.Вставить("Ключ", "1"); + + НачатьТранзакцию(); + Попытка + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + Если Задания.Количество() > 0 Тогда + ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); + Иначе + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); + ПараметрыЗадания.Вставить("Ключ", "1"); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 600); // 10 минут + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/SaaS/ManageZonesBackup/a.b.c.d}CancelScheduledZoneBackup +// +// Параметры: +// ОбластьДанных - Число - значение разделителя области данных +Процедура ОтменитьПериодическоеРезервноеКопирование(Знач ОбластьДанных) Экспорт + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ОтборЗадания.Вставить("ИмяМетода", "РезервноеКопированиеОбластейДанных.СозданиеКопий"); + ОтборЗадания.Вставить("Ключ", "1"); + + НачатьТранзакцию(); + Попытка + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + Если Задания.Количество() > 0 Тогда + ОчередьЗаданий.УдалитьЗадание(Задания[0].Идентификатор); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl new file mode 100644 index 000000000..fff9227fd --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/Module.bsl @@ -0,0 +1,153 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК ИНТЕРФЕЙСА СООБЩЕНИЙ УПРАВЛЕНИЯ ДОПОЛНИТЕЛЬНЫМИ ОТЧЕТАМИ И ОБРАБОТКАМИ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Management/" + Версия(); + +КонецФункции + +// Возвращает текущую (используемую вызывающим кодом) версию интерфейса сообщений +Функция Версия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает название программного интерфейса сообщений +Функция ПрограммныйИнтерфейс() Экспорт + + Возврат "ApplicationExtensionsManagement"; + +КонецФункции + +// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями +// +// Параметры: +// МассивОбработчиков - массив. +// +Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт + + МассивОбработчиков.Добавить(СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1); + +КонецПроцедуры + +// Выполняет регистрацию обработчиков трансляции сообщений. +// +// Параметры: +// МассивОбработчиков - массив. +// +Процедура ОбработчикиТрансляцииСообщений(Знач МассивОбработчиков) Экспорт + + + +КонецПроцедуры + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}InstallExtension +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеУстановитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "InstallExtension"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}ExtensionCommandSettings +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция ТипНастройкиКомандыДополнительногоОтчетаИлиОбработки(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "ExtensionCommandSettings"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DeleteExtension +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеУдалитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DeleteExtension"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DisableExtension +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОтключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DisableExtension"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}EnableExtension +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеВключитьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "EnableExtension"); + +КонецФункции + +// Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DropExtension +// +// Параметры: +// ИспользуемыйПакет - строка, пространство имен версии интерфейса сообщений, для которой +// получается тип сообщения. +// +// Возвращаемое значение: +// ТипXDTO +// +Функция СообщениеОтозватьДополнительныйОтчетИлиОбработку(Знач ИспользуемыйПакет = Неопределено) Экспорт + + Возврат СоздатьТипСообщения(ИспользуемыйПакет, "DropExtension"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) + + Если ИспользуемыйПакет = Неопределено Тогда + ИспользуемыйПакет = Пакет(); + КонецЕсли; + + Возврат ФабрикаXDTO.Тип(ИспользуемыйПакет, Тип); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo new file mode 100644 index 000000000..374873365 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="966ecce5-ec91-4f8e-82b2-364b38eb7ff4"> + <name>СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс</name> + <synonym> + <key>ru</key> + <value>Сообщения управления дополнительными отчетами и обработками интерфейс</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl new file mode 100644 index 000000000..5cbc8b99d --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/Module.bsl @@ -0,0 +1,223 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИК КАНАЛОВ СООБЩЕНИЙ ДЛЯ ВЕРСИИ 1.0.1.1 ИНТЕРФЕЙСА СООБЩЕНИЙ +// УПРАВЛЕНИЯ ДОПОЛНИТЕЛЬНЫМИ ОТЧЕТАМИ И ОБРАБОТКАМИ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает пространство имен версии интерфейса сообщений +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Management/" + Версия(); + +КонецФункции + +// Возвращает версию интерфейса сообщений, обслуживаемую обработчиком +Функция Версия() Экспорт + + Возврат "1.0.1.1"; + +КонецФункции + +// Возвращает базовый тип для сообщений версии +Функция БазовыйТип() Экспорт + + Возврат СообщенияВМоделиСервисаПовтИсп.ТипТело(); + +КонецФункции + +// Выполняет обработку входящих сообщений модели сервиса +// +// Параметры: +// Сообщение - ОбъектXDTO, входящее сообщение, +// Отправитель - ПланОбменаСсылка.ОбменСообщениями, узел плана обмена, соответствующий отправителю сообщения +// СообщениеОбработано - булево, флаг успешной обработки сообщения. Значение данного параметра необходимо +// установить равным Истина в том случае, если сообщение было успешно прочитано в данном обработчике +// +Процедура ОбработатьСообщениеМоделиСервиса(Знач Сообщение, Знач Отправитель, СообщениеОбработано) Экспорт + + СообщениеОбработано = Истина; + + Словарь = СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс; + ТипСообщения = Сообщение.Body.Тип(); + + Если ТипСообщения = Словарь.СообщениеУстановитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + УстановитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + УдалитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеОтключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ОтключитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеВключитьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ВключитьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеОтозватьДополнительныйОтчетИлиОбработку(Пакет()) Тогда + ОтозватьДополнительныйОтчетИлиОбработку(Сообщение, Отправитель); + Иначе + СообщениеОбработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + + НастройкиКоманд = Новый ТаблицаЗначений(); + НастройкиКоманд.Колонки.Добавить("Идентификатор"); + НастройкиКоманд.Колонки.Добавить("БыстрыйДоступ"); + НастройкиКоманд.Колонки.Добавить("Расписание"); + + Если ЗначениеЗаполнено(ТелоСообщения.CommandSettings) Тогда + + Для Каждого CommandSettings Из ТелоСообщения.CommandSettings Цикл + + НастройкиКоманды = НастройкиКоманд.Добавить(); + НастройкиКоманды.Идентификатор = CommandSettings.Id; + + Если CommandSettings.Settings <> Неопределено Тогда + + МассивИдентификаторов = Новый Массив; + Для Каждого UserGUID Из CommandSettings.Settings.UsersFastAccess Цикл + МассивИдентификаторов.Добавить(UserGUID); + КонецЦикла; + + НастройкиКоманды.БыстрыйДоступ = МассивИдентификаторов; + + Если CommandSettings.Settings.Schedule <> Неопределено Тогда + + НастройкиКоманды.Расписание = СериализаторXDTO.ПрочитатьXDTO(CommandSettings.Settings.Schedule); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + НастройкиРазделов = Новый ТаблицаЗначений(); + НастройкиРазделов.Колонки.Добавить("Раздел"); + + НастройкиНазначения = Новый ТаблицаЗначений(); + НастройкиНазначения.Колонки.Добавить("ОбъектНазначения"); + + НастройкиРасположенияКоманд = Новый Структура(); + + Если ЗначениеЗаполнено(ТелоСообщения.Assignments) Тогда + + Для Каждого Assignment Из ТелоСообщения.Assignments Цикл + + Если Assignment.Тип() = ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам() Тогда + + Для Каждого AssignmentObject Из Assignment.Objects Цикл + + СтрокаРаздела = НастройкиРазделов.Добавить(); + Если AssignmentObject.ObjectName = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда + СтрокаРаздела.Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + Иначе + СтрокаРаздела.Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(AssignmentObject.ObjectName); + КонецЕсли; + + КонецЦикла; + + ИначеЕсли Assignment.Тип() = ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеСправочникамИДокументам() Тогда + + Для Каждого AssignmentObject Из Assignment.Objects Цикл + + СтрокаНазначения = НастройкиНазначения.Добавить(); + СтрокаНазначения.ОбъектНазначения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + AssignmentObject.ObjectName); + + КонецЦикла; + + НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыСписка", + Assignment.UseInListsForms); + НастройкиРасположенияКоманд.Вставить("ИспользоватьДляФормыОбъекта", + Assignment.UseInObjectsForms); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + НастройкиВариантов = Новый ТаблицаЗначений(); + НастройкиВариантов.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); + НастройкиВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Массив")); + НастройкиВариантов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Если ТелоСообщения.ReportVariants <> Неопределено Тогда + + Для Каждого ReportVariant Из ТелоСообщения.ReportVariants Цикл + + НастройкаВарианта = НастройкиВариантов.Добавить(); + НастройкаВарианта.Ключ = ReportVariant.VariantKey; + НастройкаВарианта.Представление = ReportVariant.Representation; + + Размещение = Новый Массив; + Для Каждого ReportVariantAssignment Из ReportVariant.Assignments Цикл + + Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + ReportVariantAssignment.ObjectName); + Важный = Ложь; + СмТакже = Ложь; + Если ReportVariantAssignment.Importance = "High" Тогда + Важный = Истина; + ИначеЕсли ReportVariantAssignment.Importance = "Low" Тогда + СмТакже = Истина; + КонецЕсли; + ЭлементРазмещения = Новый Структура("Раздел,Важный,СмТакже", Раздел, Важный, СмТакже); + Размещение.Добавить(ЭлементРазмещения); + + КонецЦикла; + + НастройкаВарианта.Размещение = Размещение; + + КонецЦикла; + + КонецЕсли; + + ОписаниеИнсталляции = Новый Структура( + "Идентификатор,Представление,Инсталляция", + ТелоСообщения.Extension, + ТелоСообщения.Representation, + ТелоСообщения.Installation); + + СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.УстановитьДополнительныйОтчетИлиОбработку( + ОписаниеИнсталляции, НастройкиКоманд, НастройкиРасположенияКоманд, НастройкиРазделов, + НастройкиНазначения, НастройкиВариантов, ТелоСообщения.InitiatorServiceID); + +КонецПроцедуры + +Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) + + ТелоСообщения = Сообщение.Body; + СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.УдалитьДополнительныйОтчетИлиОбработку( + ТелоСообщения.Extension, ТелоСообщения.Installation); + +КонецПроцедуры + +Процедура ОтключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) + + СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ОтключитьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + +КонецПроцедуры + +Процедура ВключитьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) + + СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ВключитьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + +КонецПроцедуры + +Процедура ОтозватьДополнительныйОтчетИлиОбработку(Знач Сообщение, Знач Отправитель) + + СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.ОтозватьДополнительныйОтчетИлиОбработку( + Сообщение.Body.Extension); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo new file mode 100644 index 000000000..79bba172e --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66a2df23-3a08-40d2-8e6c-2db10a3bca7a"> + <name>СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1</name> + <synonym> + <key>ru</key> + <value>Сообщения управления дополнительными отчетами и обработками обработчик сообщения 1. 0 .1 .1</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl new file mode 100644 index 000000000..e0e53b646 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/Module.bsl @@ -0,0 +1,238 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБЩАЯ РЕАЛИЗАЦИЯ ОБРАБОТКИ СООБЩЕНИЙ УПРАВЛЕНИЯ ДОПОЛНИТЕЛЬНЫМИ ОТЧЕТАМИ И ОБРАБОТКАМИ +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}InstallExtension +// +// Параметры: +// ОписаниеИнсталляции - Структура, ключи: +// Идентификатор - УникальныйИдентификатор, уникальный идентификатор ссылки +// элемента справочника ПоставляемыеДополнительныеОтчетыИОбработки, +// Представление - строка, представление инсталляции поставляемой дополнительной +// обработки (будет использоваться в качестве наименования элемента справочника +// ДополнительныеОтчетыИОбработки), +// Инсталляция - УникальныйИдентификатор, уникальный идентификатор инсталляции +// поставляемой дополнительной обработки (будет использоваться в качестве +// уникального идентификатора ссылки справочника ДополнительныеОтчетыИОбработки), +// НастройкиКоманд - ТаблицаЗначений, содержащая настройки команд для инсталляции +// поставляемой дополнительной обработки, колонки: +// Идентификатор - строка, идентификатор команды, +// БыстрыйДоступ - Массив(УникальныйИдентификатор), массив уникальный идентификаторов, +// определяющих пользователей сервиса, которым команда должна быть включена в +// быстрый доступ, +// Расписание - РасписаниеРегламентногоЗадания, расписание для задания команды +// дополнительной обработки (если для команды включено выполнение в качестве +// регламентного задания), +// Разделы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции +// поставляемой дополнительной обработки в разделы командного интерфейса, колонки: +// Раздел - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникиИДокументы - ТаблицаЗначений, содержащая настройки включения команд для инсталляции +// поставляемой дополнительной обработки в интерфейс форм список и элементов, колонки: +// ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// ВариантыДополнительногоОтчета - Массив(Строка), массив, содержащий ключи вариантов отчетов +// дополнительного отчета, +// ИдентификаторПользователяСервиса - УникальныйИдентификатор, определяющий пользователя +// сервиса, который инициировал инсталляцию поставляемой дополнительной обработки. +// +Процедура УстановитьДополнительныйОтчетИлиОбработку(Знач ОписаниеИнсталляции, + Знач НастройкиКоманд, Знач НастройкиРасположенияКоманд, Знач Разделы, Знач СправочникиИДокументы, Знач ВариантыДополнительногоОтчета, + Знач ИдентификаторПользователяСервиса) Экспорт + + // Настройки заполняются по данным из сообщения + БыстрыйДоступ = Новый ТаблицаЗначений(); + БыстрыйДоступ.Колонки.Добавить("ИдентификаторКоманды", Новый ОписаниеТипов("Строка")); + БыстрыйДоступ.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); + + Задания = Новый ТаблицаЗначений(); + Задания.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + Задания.Колонки.Добавить("РегламентноеЗаданиеРасписание", Новый ОписаниеТипов("СписокЗначений")); + Задания.Колонки.Добавить("РегламентноеЗаданиеИспользование", Новый ОписаниеТипов("Булево")); + + Для Каждого НастройкаКоманды Из НастройкиКоманд Цикл + + Если ЗначениеЗаполнено(НастройкаКоманды.БыстрыйДоступ) Тогда + + Для Каждого ИдентификаторПользователя Из НастройкаКоманды.БыстрыйДоступ Цикл + + ТекстЗапроса = "ВЫБРАТЬ + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователя); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + + Продолжить; + + Иначе + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ЭлементБыстрогоДоступа = БыстрыйДоступ.Добавить(); + ЭлементБыстрогоДоступа.ИдентификаторКоманды = НастройкаКоманды.Идентификатор; + ЭлементБыстрогоДоступа.Пользователь = Выборка.Ссылка; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Если НастройкаКоманды.Расписание <> Неопределено Тогда + + Задание = Задания.Добавить(); + Задание.Идентификатор = НастройкаКоманды.Идентификатор; + РегламентноеЗаданиеРасписание = Новый СписокЗначений(); + РегламентноеЗаданиеРасписание.Добавить(НастройкаКоманды.Расписание); + Задание.РегламентноеЗаданиеРасписание= РегламентноеЗаданиеРасписание; + Задание.РегламентноеЗаданиеИспользование = Истина; + + КонецЕсли; + + КонецЦикла; + + ДополнительныеОтчетыИОбработкиВМоделиСервиса.УстановитьПоставляемуюОбработкуВОбластьДанных( + ОписаниеИнсталляции, + БыстрыйДоступ, + Задания, + Разделы, + СправочникиИДокументы, + НастройкиРасположенияКоманд, + ВариантыДополнительногоОтчета, + ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса( + ИдентификаторПользователяСервиса)); + +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DeleteExtension +// +// Параметры: +// ИдентификаторПоставляемойОбработки - УникальныйИдентификатор, ссылка на элемент +// справочника ПоставляемыеДополнительныеОтчетыИОбработки; +// ИдентификаторИспользуемойОбработки - УникальныйИдентификатор, ссылка на элемент +// справочника ДополнительныеОтчетыИОбработки. +// +Процедура УдалитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторПоставляемойОбработки, Знач ИдентификаторИспользуемойОбработки) Экспорт + + ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ИдентификаторПоставляемойОбработки); + + ДополнительныеОтчетыИОбработкиВМоделиСервиса.УдалитьПоставляемуюОбработкуИзОбластиДанных( + ПоставляемаяОбработка, + ИдентификаторИспользуемойОбработки); + +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DisableExtension +// +// Параметры: +// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент +// справочника ПоставляемыеДополнительныеОтчетыИОбработки +// +Процедура ОтключитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторРасширения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ИдентификаторРасширения); + + Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда + + Объект = ПоставляемаяОбработка.ПолучитьОбъект(); + + Объект.Публикация = + Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + Объект.ПричинаОтключения = + Перечисления.ПричиныОтключенияДополнительныхОтчетовИОбработокВМоделиСервиса.БлокировкаАдминистраторомСервиса; + + Объект.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}EnableExtension +// +// Параметры: +// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент +// справочника ПоставляемыеДополнительныеОтчетыИОбработки +// +Процедура ВключитьДополнительныйОтчетИлиОбработку(Знач ИдентификаторРасширения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ИдентификаторРасширения); + + Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда + + Объект = ПоставляемаяОбработка.ПолучитьОбъект(); + + Объект.Публикация = + Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; + + Объект.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Обработка входящих сообщений с типом {http://www.1c.ru/1cFresh/ApplicationExtensions/Management/a.b.c.d}DropExtension +// +// Параметры: +// ИдентификаторРасширения - УникальныйИдентификатор, ссылка на элемент +// справочника ПоставляемыеДополнительныеОтчетыИОбработки +// +Процедура ОтозватьДополнительныйОтчетИлиОбработку(Знач ИдентификаторПоставляемойОбработки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПоставляемаяОбработка = Справочники.ПоставляемыеДополнительныеОтчетыИОбработки.ПолучитьСсылку( + ИдентификаторПоставляемойОбработки); + + Если ОбщегоНазначения.СсылкаСуществует(ПоставляемаяОбработка) Тогда + ДополнительныеОтчетыИОбработкиВМоделиСервиса.ОтозватьПоставляемуюДополнительнуюОбработку( + ПоставляемаяОбработка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Знач ИдентификаторПользователяСервиса) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователяСервиса); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Не найден пользователь с идентификатором пользователя сервиса %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторПользователяСервиса); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции diff --git a/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo new file mode 100644 index 000000000..5eecad9d0 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация/СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="5ee4b3ee-b795-48c1-9bad-f4010b559b0e"> + <name>СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация</name> + <synonym> + <key>ru</key> + <value>Сообщения управления дополнительными отчетами и обработками реализация</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl index 2a36122b6..b3dccfc60 100644 --- a/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУправленияПриложениямиИнтерфейс/Module.bsl @@ -67,7 +67,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция СоздатьТипСообщения(Знач ИспользуемыйПакет = Неопределено, Знач Тип) +Функция СоздатьТипСообщения(Знач ИспользуемыйПакет, Знач Тип) Если ИспользуемыйПакет = Неопределено Тогда ИспользуемыйПакет = Пакет(); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 9022aa329..f97dcb25e 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -37,6 +37,8 @@ ПараметрыКлиента.Вставить("ПараметрЗапуска", Параметры.ПараметрЗапуска); ПараметрыКлиента.Вставить("СтрокаСоединенияИнформационнойБазы", Параметры.СтрокаСоединенияИнформационнойБазы); ПараметрыКлиента.Вставить("ПривилегированныйРежимУстановленПриЗапуске", ПривилегированныйРежимУстановленПриЗапуске); + ПараметрыКлиента.Вставить("ЭтоВебКлиент", Параметры.ЭтоВебКлиент); + ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); КонецЕсли; УстановитьПривилегированныйРежим(Ложь); @@ -215,3 +217,14 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа с предопределенными данными + +// Получает ссылку предопределенного элемента по его полному имени. +// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); +// +Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + +КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index a61496e97..265396da4 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -38,16 +38,30 @@ ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, СокрЛП(ПредставлениеЗаголовка), ПредставлениеПользователя, ПредставлениеКонфигурации); КонецЕсли; - - УстановитьЗаголовокПриложения(ЗаголовокПриложения); Иначе ШаблонЗаголовка = "%1 / %2"; ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, НСтр("ru = 'Не установлены разделители'"), ПараметрыКлиента.ПодробнаяИнформация); - - УстановитьЗаголовокПриложения(ЗаголовокПриложения); КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + +#Если ВебКлиент Тогда + Результат = Вычислить("УстановитьЗаголовокКлиентскогоПриложения(ЗаголовокПриложения)"); +#Иначе + Выполнить("УстановитьЗаголовокКлиентскогоПриложения(ЗаголовокПриложения)"); +#КонецЕсли + + Иначе + +#Если ВебКлиент Тогда + Результат = Вычислить("УстановитьЗаголовокПриложения(ЗаголовокПриложения)"); +#Иначе + Выполнить("УстановитьЗаголовокПриложения(ЗаголовокПриложения)"); +#КонецЕсли + + КонецЕсли; + КонецПроцедуры // Отключает выдачу предупреждения пользователю при завершении работы программы. @@ -173,7 +187,7 @@ // |- Текст (Строка) // |- ТекстОшибок (Строка) Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. // |- ПутьКРеквизитуФормы (Строка) Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. -// |- ОповещениеФорм (Структура) см. справку к методу глобального контекста Оповестить(). +// |- ОповещениеФорм (Структура, Массив из Структура) см. справку к методу глобального контекста Оповестить(). // |- Использование (Булево) Оповещать открытые формы. // |- ИмяСобытия (Строка) Имя события, которое используется для первичной идентификации сообщений принимающими формами. // |- Параметр (*) Набор данных, которые используются принимающей формой для обновления состава. @@ -251,8 +265,19 @@ КонецЕсли; КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") И Результат.ОповещениеФорм.Использование Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); + Если Результат.Свойство("ОповещениеФорм") Тогда + Если ТипЗнч(Результат.ОповещениеФорм) = Тип("Структура") Или ТипЗнч(Результат.ОповещениеФорм) = Тип("ФиксированнаяСтруктура") Тогда + ОповещениеФорм = Результат.ОповещениеФорм; + Если ОповещениеФорм.Использование Тогда + Оповестить(ОповещениеФорм.ИмяСобытия, ОповещениеФорм.Параметр, ОповещениеФорм.Источник); + КонецЕсли; + Иначе + Для Каждого ОповещениеФорм Из Результат.ОповещениеФорм Цикл + Если ОповещениеФорм.Использование Тогда + Оповестить(ОповещениеФорм.ИмяСобытия, ОповещениеФорм.Параметр, ОповещениеФорм.Источник); + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; Если Результат.Свойство("ОповещениеДинамическихСписков") И Результат.ОповещениеДинамическихСписков.Использование Тогда @@ -276,11 +301,11 @@ // ПарольПользователяСервиса - Строка - пароль пользователя сервиса // Отказ - Булево - флаг отказа от выполнения действия // -Процедура ПриЗапросеПароляДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ) Экспорт +Процедура ПриЗапросеПароляДляАутентификацииВСервисе(ВладелецФормы, ПарольПользователяСервиса = Неопределено, ПарольЕщёНеВведен = Ложь) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервисаКлиент"); - Модуль.ЗапроситьПарольДляАутентификацииВСервисе(ПарольПользователяСервиса, Отказ); + МодульПользователиСлужебныйВМоделиСервисаКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервисаКлиент"); + МодульПользователиСлужебныйВМоделиСервисаКлиент.ЗапроситьПарольДляАутентификацииВСервисе(ВладелецФормы, ПарольПользователяСервиса, ПарольЕщёНеВведен); КонецЕсли; КонецПроцедуры @@ -301,6 +326,7 @@ Если Отказ Тогда Возврат; КонецЕсли; + // Конец СтандартныеПодсистемы.БазоваяФункциональность ОтметитьПервыйЗапросПараметровРаботыКлиентаПриЗапуске(); ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); @@ -318,13 +344,32 @@ Возврат; КонецЕсли; + ОбновитьПараметрыКлиента = Ложь; + + // СтандартныеПодсистемы.ОбменДанными + Если ПараметрыКлиента.ИменаПодсистем.Получить("СтандартныеПодсистемы.ОбменДанными") <> Неопределено Тогда + МодульОбменДаннымиКлиент = Вычислить("ОбменДаннымиКлиент"); + МодульОбменДаннымиКлиент.ПередНачаломРаботыСистемы(Отказ, ПараметрыКлиента, ОбновитьПараметрыКлиента); + Если Отказ Тогда + Возврат; + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.БазоваяФункциональность Если ПараметрыКлиента.НеобходимоОбновлениеПараметровРаботыПрограммы Тогда + ОбновитьПараметрыКлиента = Истина; // Параметры работы программы должны быть обновлены до продолжения работы. ЗагрузитьОбновитьПараметрыРаботыПрограммы(Отказ, ПараметрыКлиента); Если Отказ Тогда Возврат; КонецЕсли; КонецЕсли; + + Если ОбновитьПараметрыКлиента Тогда + ОбновитьПовторноИспользуемыеЗначения(); + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + КонецЕсли; // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.Пользователи @@ -350,18 +395,6 @@ // СтандартныеПодсистемы.БазоваяФункциональность УстановитьРасширенныйЗаголовокПриложения(Истина); // Для вспомогательных окон. - - // Для толстого клиента в режиме обычного приложения логика выполняется - // в обработчике "ПриНачалеРаботыСистемы". - // - // В остальных случаях - в обработчике "ПередНачаломРаботыСистемы". -#Если НЕ ТолстыйКлиентОбычноеПриложение Тогда - ВерсияАктуальна = ПроверитьВерсиюПлатформыПриЗапуске(); - Если Не ВерсияАктуальна Тогда - Отказ = Истина; - Возврат; - КонецЕсли; -#КонецЕсли // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.ЗавершениеРаботыПользователей @@ -376,30 +409,6 @@ КонецЕсли; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей -#Если НЕ ТолстыйКлиентОбычноеПриложение Тогда - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - ОбновлениеИБДоступно = Истина; - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - - // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует( - "СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда - - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПроверкаЛегальностиПолученияОбновленияКлиент"); - ОбновлениеИБДоступно = Модуль.ПроверитьЛегальностьПолученияОбновленияПриЗапуске(); - КонецЕсли; - // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - Если ОбновлениеИБДоступно Тогда - ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(Отказ, Истина); - Если Отказ Тогда - Возврат; - КонецЕсли; - КонецЕсли; - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ -#КонецЕсли - // СтандартныеПодсистемы.БазоваяФункциональность ОбработчикиСобытия = ОбщегоНазначенияКлиент.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПередНачаломРаботыСистемы"); @@ -419,58 +428,43 @@ // либо в локальном режиме работы. // Соответствует обработчику ПриНачалеРаботыСистемы. // -// Параметры: -// ОбработкаПараметровЗапуска - Булево. -// Истина - обработчик вызван при обычном входе пользователя -// в систему и обработка параметров запуска будет выполнена. -// Ложь - обработчик вызван при входе неразделенного пользователя -// в область данных и обработка параметров запуска будет пропущена. -// -Процедура ДействияПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска = Истина) Экспорт +Процедура ДействияПриНачалеРаботыСистемы() Экспорт // СтандартныеПодсистемы.БазоваяФункциональность УстановитьРасширенныйЗаголовокПриложения(Истина); // Для главного окна. - - // Для толстого клиента в режиме обычного приложения логика выполняется - // в обработчике "ПриНачалеРаботыСистемы". - // - // В остальных случаях - в обработчике "ПередНачаломРаботыСистемы". -#Если ТолстыйКлиентОбычноеПриложение Тогда - ВерсияАктуальна = ПроверитьВерсиюПлатформыПриЗапуске(); - Если Не ВерсияАктуальна Тогда - Отказ = Истина; - Возврат; - КонецЕсли; // Конец СтандартныеПодсистемы.БазоваяФункциональность - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - ОбновлениеИБДоступно = Истина; - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует( "СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПроверкаЛегальностиПолученияОбновленияКлиент"); - ОбновлениеИБДоступно = Модуль.ПроверитьЛегальностьПолученияОбновленияПриЗапуске(); + МодульПроверкаЛегальностиПолученияОбновленияКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПроверкаЛегальностиПолученияОбновленияКлиент"); + МодульПроверкаЛегальностиПолученияОбновленияКлиент.ПроверитьЛегальностьПолученияОбновленияПриЗапуске(); КонецЕсли; // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - Если ОбновлениеИБДоступно Тогда - Отказ = Ложь; - ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(Отказ, Истина); - Если Отказ Тогда - Возврат; - КонецЕсли; + ВерсияАктуальна = ПроверитьВерсиюПлатформыПриЗапуске(); + Если ВерсияАктуальна Тогда + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(, Истина); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + Иначе + // В противном случае, если версия не актуальна, то обновление информационной базы + // будет выполнено только после подтверждения пользователем. + // См. процедуру ПродолжитьРаботу модуля формы Обработка.НерекомендуемаяВерсияПлатформы.Форма.НерекомендуемаяВерсияПлатформы КонецЕсли; - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ -#КонецЕсли +КонецПроцедуры + +// Только для внутреннего использования. +// +Процедура ЗавершающиеДействияПриНачалеРаботыСистемы() Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); // СтандартныеПодсистемы.БазоваяФункциональность // Обработка параметров запуска системы. - Если ОбработкаПараметровЗапуска И НЕ ОбработатьПараметрыЗапуска() Тогда + Если НЕ ОбработатьПараметрыЗапуска() Тогда Возврат; КонецЕсли; // Конец СтандартныеПодсистемы.БазоваяФункциональность @@ -501,12 +495,18 @@ "СтандартныеПодсистемы.БазоваяФункциональность\ПриНачалеРаботыСистемы"); Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска); + Обработчик.Модуль.ПриНачалеРаботыСистемы(); КонецЦикла; - ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска); + ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы(); // Конец СтандартныеПодсистемы.БазоваяФункциональность + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + Если Не ПараметрыКлиента.РазделениеВключено И ПараметрыКлиента.ПроверитьЛегальностьПолученияОбновления = Ложь Тогда + ОбновлениеИнформационнойБазыКлиент.ПодключитьОбработчикПроверкиСтатусаОтложенногоОбновления(); + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + КонецПроцедуры // Обработать параметры запуска программы. @@ -562,6 +562,12 @@ Возврат; КонецЕсли; + // Если перед завершение работы есть незаписанные сообщения для журнала регистрации, + // накопленные в переменной, то их необходимо записать + Если ТипЗнч(СообщенияДляЖурналаРегистрации) = Тип("СписокЗначений") И СообщенияДляЖурналаРегистрации.Количество() <> 0 Тогда + ОбщегоНазначенияВызовСервера.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + КонецЕсли; + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ДоступноИспользованиеРазделенныхДанных Тогда ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); КонецЕсли; @@ -592,8 +598,7 @@ КодВозвратаДиалога.Да, НСтр("ru = 'Завершение работы'"), КодВозвратаДиалога.Нет, - БольшеНеЗадаватьЭтотВопрос - ); + БольшеНеЗадаватьЭтотВопрос); Если БольшеНеЗадаватьЭтотВопрос Тогда СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(НЕ БольшеНеЗадаватьЭтотВопрос); @@ -613,19 +618,18 @@ // Функция ПроверитьВерсиюПлатформыПриЗапуске() Экспорт - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().РазделениеВключено Тогда + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботы.РазделениеВключено Тогда Возврат Истина; КонецЕсли; // Определяем минимальную версию платформы для запуска и логику входа в программу - ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ТипЗнч(ПараметрыРаботы.АвторизованныйПользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Возврат Истина; - Иначе - Возврат ПроверитьВерсиюПлатформы(ПараметрыРаботы.МинимальноНеобходимаяВерсияПлатформы, ПараметрыРаботы.РаботаВПрограммеЗапрещена); КонецЕсли; + Возврат ПроверитьВерсиюПлатформы(ПараметрыРаботы.МинимальноНеобходимаяВерсияПлатформы, ПараметрыРаботы.РаботаВПрограммеЗапрещена); + КонецФункции // Проверяет минимально допустимую версию платформы для запуска. @@ -671,16 +675,20 @@ Параметры.Вставить("ТекстСообщения", ТекстСообщения); Параметры.Вставить("ЗавершитьРаботу", РаботаВПрограммеЗапрещена); Параметры.Вставить("РекомендуемаяВерсияПлатформы", РекомендуемаяВерсияПлатформы); - Результат = ОткрытьФормуМодально("Обработка.НерекомендуемаяВерсияПлатформы.Форма.НерекомендуемаяВерсияПлатформы", Параметры); - Если РаботаВПрограммеЗапрещена Тогда - ПрекратитьРаботуСистемы(); - Возврат Ложь; - ИначеЕсли Результат = КодВозвратаДиалога.OK Тогда - ПрекратитьРаботуСистемы(); - Возврат Ложь; + Параметры.Вставить("ОткрытаПоСценарию", Истина); + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Результат = ОткрытьФорму("Обработка.НерекомендуемаяВерсияПлатформы.Форма.НерекомендуемаяВерсияПлатформы", Параметры); + Иначе + Результат = ОткрытьФормуМодально("Обработка.НерекомендуемаяВерсияПлатформы.Форма.НерекомендуемаяВерсияПлатформы", Параметры); КонецЕсли; - Возврат Истина; + // Если форма сегодня уже была показана - пропускаем проверку. + Если Результат = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции @@ -692,6 +700,11 @@ // Процедура ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ) Экспорт + // В веб-клиенте не выводится список предупреждений. +#Если ВебКлиент Тогда + Возврат; +#КонецЕсли + Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина Тогда Возврат; КонецЕсли; @@ -917,16 +930,21 @@ Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Отказ, ПараметрыКлиента) - Если ПараметрыКлиента.Свойство("ПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиКлиент"); - Модуль.ПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ(ПараметрыКлиента.ГлавныйУзел); - КонецЕсли; - - Модуль = Неопределено; - Если ПараметрыКлиента.ИнформационнаяБазаФайловая - И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда + МодульСоединенияИБКлиент = Неопределено; + Если ПараметрыКлиента.ИнформационнаяБазаФайловая Тогда + // ВАЖНО: + // В этой процедуре нельзя использовать функции ПодсистемаСуществует и ОбщийМодуль, + // т.к. из них будет вызвана функция СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске() + // которая будет выполнятся не в режиме ПервыйЗапросПараметров, что потенциально ведет к ошибке. - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБКлиент"); + // Проверка существования подсистемы. + ПодсистемаСуществует = ПараметрыКлиента.ИменаПодсистем.Получить( + "СтандартныеПодсистемы.ЗавершениеРаботыПользователей") <> Неопределено; + + Если ПодсистемаСуществует Тогда + // Получение общего модуля по имени. + МодульСоединенияИБКлиент = Вычислить("СоединенияИБКлиент"); + КонецЕсли; КонецЕсли; СнятьБлокировкуФайловойБазы = Ложь; @@ -942,13 +960,13 @@ Прервать; КонецЕсли; - Если Модуль = Неопределено Тогда + Если МодульСоединенияИБКлиент = Неопределено Тогда Предупреждение(ОшибкаУстановкиМонопольногоРежима); Отказ = Истина; Возврат; КонецЕсли; - Модуль.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ); + МодульСоединенияИБКлиент.ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ); Если Отказ Тогда Если СнятьБлокировкуФайловойБазы Тогда ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); @@ -968,11 +986,6 @@ ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); КонецЕсли; - Состояние(НСтр("ru = 'Подготовка к обновлению информационной базы выполнена успешно.'")); - - ОбновитьПовторноИспользуемыеЗначения(); - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - КонецПроцедуры Процедура ОтметитьПервыйЗапросПараметровРаботыКлиентаПриЗапуске() diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 337c142bc..07997dbc7 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -29,10 +29,22 @@ ПараметрыРаботыКлиентаПриОбновлении.Удалить("ПервыйЗапросПараметров"); КонецЕсли; +#Если ВебКлиент Тогда + ЭтоВебКлиент = Истина; +#Иначе + ЭтоВебКлиент = Ложь; +#КонецЕсли + + СистемнаяИнформация = Новый СистемнаяИнформация; + ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64; + Параметры = Новый Структура; Параметры.Вставить("ПервыйЗапросПараметров", ПервыйЗапросПараметров); Параметры.Вставить("ПараметрЗапуска", ПараметрЗапуска); Параметры.Вставить("СтрокаСоединенияИнформационнойБазы", СтрокаСоединенияИнформационнойБазы()); + Параметры.Вставить("ЭтоВебКлиент", ЭтоВебКлиент); + Параметры.Вставить("ЭтоLinuxКлиент", ЭтоLinuxКлиент); Возврат СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиентаПриЗапуске(Параметры); @@ -101,6 +113,18 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Работа с предопределенными данными + +// Получает ссылку предопределенного элемента по его полному имени. +// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); +// +Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт + + Возврат СтандартныеПодсистемыВызовСервера.ПредопределенныйЭлемент(ПолноеИмяПредопределенного); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index 2c9af7106..0b057a2cd 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -66,3 +66,23 @@ КонецЦикла; КонецЕсли; КонецПроцедуры + +// Добавляет в оповещение для динамических списков типы из массива измененных объектов. +// +// Параметры: +// Результат (Структура) См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// ИмяСобытия (Строка) Имя события, которое используется для первичной идентификации сообщений принимающими формами. +// Параметр (*) Набор данных, которые используются принимающей формой для обновления состава. +// Источник (*) Источник оповещения, например форма-источником. +// +Процедура РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, ИмяСобытия, Параметр = Неопределено, Источник = Неопределено) Экспорт + Если Не Результат.Свойство("ОповещениеФорм") Тогда + Результат.Вставить("ОповещениеФорм", Новый Массив); + ИначеЕсли ТипЗнч(Результат.ОповещениеФорм) = Тип("Структура") Тогда // Структуру в массив структур. + ОповещениеФорм = Результат.ОповещениеФорм; + Результат.ОповещениеФорм = Новый Массив; + Результат.ОповещениеФорм.Добавить(ОповещениеФорм); + КонецЕсли; + ОповещениеФорм = Новый Структура("Использование, ИмяСобытия, Параметр, Источник", Истина, ИмяСобытия, Параметр, Источник); + Результат.ОповещениеФорм.Добавить(ОповещениеФорм); +КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 4c232e26d..a0dcfaf2d 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -23,7 +23,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обновления информационной базы. |Не заполнен параметр базовой функциональности: - |""%1"".'"), + |""%1"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), ПредставлениеПараметра); КонецЕсли; @@ -48,7 +49,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обновления информационной базы. |Не заполнен параметр служебных событий: - |""%1"".'"), + |""%1"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), ПредставлениеПараметра); КонецЕсли; @@ -240,8 +242,7 @@ // Получаем объекты начального образа ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты); @@ -323,8 +324,8 @@ // // Параметры: // ПолноеИмяОбъектаМетаданных - Строка, например, "Справочник.ВидыНоменклатуры", -// Поддерживаются таблицы для которых доступен -// метод ПолучитьИмяПредопределенного: +// Поддерживаются только таблицы +// с предопределенными элементами: // - Справочники, // - Планы видов характеристик, // - Планы счетов, @@ -340,20 +341,31 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ТекущаяТаблица.Ссылка КАК Ссылка + | ТекущаяТаблица.Ссылка КАК Ссылка, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных |ИЗ | &ТекущаяТаблица КАК ТекущаяТаблица |ГДЕ - | ТекущаяТаблица.Предопределенный"; + | ТекущаяТаблица.Предопределенный = ИСТИНА"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "ТекущаяТаблица.ИмяПредопределенныхДанных"); + Иначе + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); ПредопределенныеЗначения = Новый Соответствие; Пока Выборка.Следующий() Цикл - ИмяПредопределенного = Менеджер.ПолучитьИмяПредопределенного(Выборка.Ссылка); + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенного = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяПредопределенного = Менеджер.ПолучитьИмяПредопределенного(Выборка.Ссылка); + КонецЕсли; ПредопределенныеЗначения.Вставить(ИмяПредопределенного, Выборка.Ссылка); КонецЦикла; @@ -376,6 +388,50 @@ КонецФункции +// Возвращает Истина, если конфигурация запущена под управлением платформы 1С:Предприятие 8.3 без использования режима совместимости +// с версией 8.3.2 или более ранней. +// +Функция ЭтоПлатформа83БезРежимаСовместимости() Экспорт + + Информация = Новый СистемнаяИнформация; + Возврат Лев(Информация.ВерсияПриложения, 3) = "8.3" + И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать + Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13 + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_16") + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_1") + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_2"))); + +КонецФункции + +// Только для внутреннего использования. +Функция ОтключитьСправочникИдентификаторыОбъектовМетаданных() Экспорт + + Использовать = НЕ ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности( + ).ОтключитьСправочникИдентификаторыОбъектовМетаданных; + + Если Использовать Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") + ИЛИ ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") + ИЛИ ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") + ИЛИ ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ВызватьИсключение + НСтр("ru = 'Невозможно отключить справочник Идентификаторы объектов метаданных, + |если используется любая из следующих подсистем: + |- ВариантыОтчетов, + |- ДополнительныеОтчетыИОбработки, + |- РассылкаОтчетов, + |- УправлениеДоступом.'"); + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для обновления справочника ИдентификаторыОбъектовМетаданных @@ -389,6 +445,39 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Работа с предопределенными данными + +// Получает ссылку предопределенного элемента по его полному имени. +// Подробнее - см. ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент(); +// +Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт + + ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + Точка = Найти(ИмяПредопределенного, "."); + ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1); + ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1); + + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ &ПолноеИмяТаблицы ГДЕ ИмяПредопределенныхДанных = &ИмяПредопределенного"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ИмяКоллекции + "." + ИмяТаблицы); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИмяПредопределенного", ИмяПредопределенного); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат Неопределено; + Иначе + Возврат Результат.Выгрузить()[0].Ссылка; + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 7e0a71c98..618055e9c 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -63,29 +63,29 @@ // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи // СтандартныеПодсистемы.КалендарныеГрафики Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафики"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульКалендарныеГрафики = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафики"); + МодульКалендарныеГрафики.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.КалендарныеГрафики // СтандартныеПодсистемы.НапоминанияПользователя Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("НапоминанияПользователяСлужебный"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульНапоминанияПользователяСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("НапоминанияПользователяСлужебный"); + МодульНапоминанияПользователяСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.НапоминанияПользователя // СтандартныеПодсистемы.ОбменДанными Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.ОбменДанными @@ -99,64 +99,57 @@ // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы // СтандартныеПодсистемы.РаботаВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВыгрузкаЗагрузкаДанных"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульВыгрузкаЗагрузкаДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВыгрузкаЗагрузкаДанных"); + МодульВыгрузкаЗагрузкаДанных.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменСообщениями"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульОбменСообщениями = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменСообщениями"); + МодульОбменСообщениями.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебный"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульОчередьЗаданийСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебный"); + МодульОчередьЗаданийСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПоставляемыеДанные"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульПоставляемыеДанные = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПоставляемыеДанные"); + МодульПоставляемыеДанные.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - // СтандартныеПодсистемы.СтруктураПодчиненности - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.СтруктураПодчиненности") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СтруктураПодчиненности"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); - КонецЕсли; - // Конец СтандартныеПодсистемы.СтруктураПодчиненности - // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом // СтандартныеПодсистемы.ФайловыеФункции Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебный"); - Модуль.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); + МодульФайловыеФункцииСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебный"); + МодульФайловыеФункцииСлужебный.ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия); КонецЕсли; // Конец СтандартныеПодсистемы.ФайловыеФункции @@ -193,276 +186,276 @@ // СтандартныеПодсистемы.АдресныйКлассификатор Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + МодульАдресныйКлассификатор.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.АдресныйКлассификатор // СтандартныеПодсистемы.АнализЖурналаРегистрации Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АнализЖурналаРегистрацииСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульАнализЖурналаРегистрацииСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АнализЖурналаРегистрацииСлужебный"); + МодульАнализЖурналаРегистрацииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.АнализЖурналаРегистрации // СтандартныеПодсистемы.Анкетирование Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("Анкетирование"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульАнкетирование = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("Анкетирование"); + МодульАнкетирование.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Анкетирование // СтандартныеПодсистемы.Банки Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСБанками"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРаботаСБанками = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСБанками"); + МодульРаботаСБанками.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Банки // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи // СтандартныеПодсистемы.Валюты Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСКурсамиВалют"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРаботаСКурсамиВалют = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСКурсамиВалют"); + МодульРаботаСКурсамиВалют.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Валюты // СтандартныеПодсистемы.ВариантыОтчетов Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульВариантыОтчетов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ВариантыОтчетов // СтандартныеПодсистемы.Взаимодействия Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("Взаимодействия"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеЭлектроннойПочтой"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульВзаимодействия = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("Взаимодействия"); + МодульВзаимодействия.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеЭлектроннойПочтой = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеЭлектроннойПочтой"); + МодульУправлениеЭлектроннойПочтой.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Взаимодействия // СтандартныеПодсистемы.ВерсионированиеОбъектов Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульВерсионированиеОбъектов = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.ДатыЗапретаИзменения Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + МодульДатыЗапретаИзмененияСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки // СтандартныеПодсистемы.ЗавершениеРаботыПользователей Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБ"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульСоединенияИБ = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("СоединенияИБ"); + МодульСоединенияИБ.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей // СтандартныеПодсистемы.ЗаметкиПользователя Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗаметкиПользователяСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульЗаметкиПользователяСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗаметкиПользователяСлужебный"); + МодульЗаметкиПользователяСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ЗаметкиПользователя // СтандартныеПодсистемы.ИнформацияПриЗапуске Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ИнформацияПриЗапуске") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнформацияПриЗапуске"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульИнформацияПриЗапуске = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнформацияПриЗапуске"); + МодульИнформацияПриЗапуске.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ИнформацияПриЗапуске // СтандартныеПодсистемы.КалендарныеГрафики Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафики"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульКалендарныеГрафики = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафики"); + МодульКалендарныеГрафики.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.КалендарныеГрафики // СтандартныеПодсистемы.ИнформационныйЦентр Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ИнформационныйЦентр") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнформационныйЦентрСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульИнформационныйЦентрСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнформационныйЦентрСлужебный"); + МодульИнформационныйЦентрСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ИнформационныйЦентр // СтандартныеПодсистемы.КонтактнаяИнформация Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + МодульУправлениеКонтактнойИнформацией.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.НапоминанияПользователя Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("НапоминанияПользователяСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульНапоминанияПользователяСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("НапоминанияПользователяСлужебный"); + МодульНапоминанияПользователяСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.НапоминанияПользователя // СтандартныеПодсистемы.ОбновлениеВерсииИБ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеВерсииИБ") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазы"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбновлениеИнформационнойБазы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазы"); + МодульОбновлениеИнформационнойБазы.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ // СтандартныеПодсистемы.ОбменДанными Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ОбменДанными // СтандартныеПодсистемы.ОбновлениеКонфигурации Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеКонфигурации"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбновлениеКонфигурации = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеКонфигурации"); + МодульОбновлениеКонфигурации.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации // СтандартныеПодсистемы.Организации Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОрганизацииСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОрганизацииСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОрганизацииСлужебный"); + МодульОрганизацииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Организации // СтандартныеПодсистемы.ОценкаПроизводительности Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + МодульОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ОценкаПроизводительности // СтандартныеПодсистемы.Печать Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатью"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеПечатью = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Печать // СтандартныеПодсистемы.ПолнотекстовыйПоиск Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульПолнотекстовыйПоискСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолнотекстовыйПоискСервер"); + МодульПолнотекстовыйПоискСервер.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернетаСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульПолучениеФайловИзИнтернетаСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПолучениеФайловИзИнтернетаСлужебный"); + МодульПолучениеФайловИзИнтернетаСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета // СтандартныеПодсистемы.Пользователи Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Пользователи") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульПользователиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебный"); + МодульПользователиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Пользователи // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы // СтандартныеПодсистемы.РаботаВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.АдресныйКлассификаторВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.АдресныйКлассификаторВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификаторСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульАдресныйКлассификаторСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификаторСлужебныйВМоделиСервиса"); + МодульАдресныйКлассификаторСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.АдресныйКлассификаторВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.БанкиВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БанкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БанкиСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульБанкиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БанкиСлужебныйВМоделиСервиса"); + МодульБанкиСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БанкиВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); + МодульКурсыВалютСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиВМоделиСервиса"); + МодульДополнительныеОтчетыИОбработкиВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменСообщениями"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбменСообщениями = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменСообщениями"); + МодульОбменСообщениями.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульИнтерфейсыСообщенийВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ИнтерфейсыСообщенийВМоделиСервиса"); + МодульИнтерфейсыСообщенийВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОчередьЗаданийСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебный"); + МодульОчередьЗаданийСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); + МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; КонецЕсли; @@ -470,106 +463,106 @@ // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПоставляемыеДанные"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульПоставляемыеДанные = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПоставляемыеДанные"); + МодульПоставляемыеДанные.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); + МодульРезервноеКопированиеОбластейДанных.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УдаленноеАдминистрированиеСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУдаленноеАдминистрированиеСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УдаленноеАдминистрированиеСлужебный"); + МодульУдаленноеАдминистрированиеСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса // СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульФайловыеФункцииСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебныйВМоделиСервиса"); + МодульФайловыеФункцииСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + МодульРаботаСПочтовымиСообщениями.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями // СтандартныеПодсистемы.РаботаСФайлами Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРаботаСФайламиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебный"); + МодульРаботаСФайламиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаСФайлами // СтандартныеПодсистемы.РегламентныеЗадания Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РегламентныеЗаданияСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РегламентныеЗадания // СтандартныеПодсистемы.РезервноеКопированиеИБ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеИБСервер"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульРезервноеКопированиеИБСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеИБСервер"); + МодульРезервноеКопированиеИБСервер.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ // СтандартныеПодсистемы.Свойства Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеСвойствамиСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом // СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеИтогамиИАгрегатамиСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульУправлениеИтогамиИАгрегатамиСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеИтогамиИАгрегатамиСлужебный"); + МодульУправлениеИтогамиИАгрегатамиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами // СтандартныеПодсистемы.ФайловыеФункции Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебный"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульФайловыеФункцииСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФайловыеФункцииСлужебный"); + МодульФайловыеФункцииСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ФайловыеФункции // СтандартныеПодсистемы.ФизическиеЛица Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ФизическиеЛица") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФизическиеЛица"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульФизическиеЛица = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ФизическиеЛица"); + МодульФизическиеЛица.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ФизическиеЛица // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЭлектроннаяЦифроваяПодпись"); - Модуль.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + МодульЭлектроннаяЦифроваяПодпись = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЭлектроннаяЦифроваяПодпись"); + МодульЭлектроннаяЦифроваяПодпись.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись @@ -630,35 +623,9 @@ КонецПопытки; КонецЕсли; + БезИзменений = Новый Структура; Попытка - // СтандартныеПодсистемы.БазоваяФункциональность - Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(ЕстьИзменения, ТолькоПроверка); - Если ТолькоПроверка И НЕ ЕстьИзменения Тогда - // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, ЕстьИзменения, ТолькоПроверка, ЕстьИзменения, ЕстьИзменения); - ИначеЕсли НЕ ТолькоПроверка Тогда - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьИзменения); - КонецЕсли; - // Конец СтандартныеПодсистемы.БазоваяФункциональность - - // СтандартныеПодсистемы.Пользователи - Если НЕ (ТолькоПроверка И ЕстьИзменения) Тогда - ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей(ЕстьИзменения, ТолькоПроверка); - КонецЕсли; - // Конец СтандартныеПодсистемы.Пользователи - - // СтандартныеПодсистемы.УправлениеДоступом - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); - Если НЕ (ТолькоПроверка И ЕстьИзменения) Тогда - Модуль.ОбновитьПараметрыОграниченияДоступа(ЕстьИзменения, ТолькоПроверка); - КонецЕсли; - КонецЕсли; - // Конец СтандартныеПодсистемы.УправлениеДоступом - - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений); Исключение Если СнятьМонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); @@ -666,28 +633,38 @@ ВызватьИсключение; КонецПопытки; - Если НЕ НайтиИзменения И ТолькоПроверка И ЕстьИзменения Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - Исключение - ТекстОшибки = - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); - - Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - Иначе - ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; - Возврат; - КонецЕсли; - КонецПопытки; - Попытка - ОбновитьПараметрыРаботыПрограммы(); - Исключение + Если СнятьМонопольныйРежим Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + + Если НЕ НайтиИзменения И ТолькоПроверка Тогда + Если ЕстьИзменения Тогда + Попытка + УстановитьМонопольныйРежим(Истина); + Исключение + ТекстОшибки = + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); + + Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + Иначе + ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; + Возврат; + КонецЕсли; + КонецПопытки; + Попытка + ОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, Ложь); + Исключение + УстановитьМонопольныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; УстановитьМонопольныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; + Иначе + // Монопольный режим не требуется. + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -718,11 +695,11 @@ // Получаем список обязательных объектов и объектов-исключений ОбязательныеОбъекты = Новый Массив; ОбъектыИсключения = Новый Массив; + ОбъектыНачальногоОбраза = Новый Массив; // Получаем обязательные объекты ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; @@ -732,8 +709,7 @@ // Получаем объекты-исключения ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; @@ -745,11 +721,16 @@ // Получаем объекты начального образа ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(ОбязательныеОбъекты); + Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(ОбъектыНачальногоОбраза); + + КонецЦикла; + + Для Каждого Объект Из ОбъектыНачальногоОбраза Цикл + + ОбязательныеОбъекты.Добавить(Объект); КонецЦикла; @@ -778,10 +759,11 @@ КонецЦикла; // Проверяем признак авторегистрации - // Авторегистрация должна быть отключена у всех элементов состава + // Авторегистрация должна быть отключена у всех объектов начального образа Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - Если ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Запретить Тогда + Если ОбъектыНачальногоОбраза.Найти(ЭлементСостава.Метаданные) <> Неопределено + И ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Запретить Тогда ОтключитьАвторегистрацию.Добавить(ЭлементСостава.Метаданные); @@ -799,8 +781,7 @@ ОписаниеИсключения1 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В состав плана обмена %1 должны входить следующие объекты метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ") - ); + СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ")); КонецЕсли; @@ -809,8 +790,7 @@ ОписаниеИсключения2 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В состав плана обмена %1 НЕ должны входить следующие объекты метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ") - ); + СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ")); КонецЕсли; @@ -820,8 +800,7 @@ НСтр("ru = 'В составе плана обмена %1 не должно быть объектов с установленным признаком авторегистрации. |Требуется запретить авторегистрацию для следующих объектов метаданных: %2'"), ИмяПланаОбмена, - СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ") - ); + СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ")); КонецЕсли; @@ -971,8 +950,8 @@ // Вставка кода от подсистемы обмена данными должна быть первой. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); - Модуль.ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + МодульОбменДаннымиСобытия = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; @@ -980,13 +959,11 @@ КонецЕсли; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"); Для каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриОтправкеДанныхПодчиненному( - ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель - ); + ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -994,8 +971,8 @@ // Вставка кода от подсистемы обмена данными в модели сервиса должна быть последней. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Модуль.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; @@ -1029,8 +1006,7 @@ // т.к. ограничение миграции "снизу-вверх" в РИБ по умолчанию не предусмотрено. ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"); Для каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); @@ -1059,13 +1035,18 @@ Для каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриПолученииДанныхОтПодчиненного( - ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель - ); + ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; КонецЦикла; + // Вставка кода от подсистемы обмена данными должна быть последней. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСобытия = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.ПриПолученииДанныхОтПодчиненногоВКонце(ЭлементДанных, ПолучениеЭлемента, Отправитель); + КонецЕсли; + КонецПроцедуры // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. @@ -1083,27 +1064,35 @@ // Вставка кода от подсистемы обмена данными должна быть первой. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); - Модуль.ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); + МодульОбменДаннымиСобытия = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.ПриПолученииДанныхОтГлавногоВНачале(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; + КонецЕсли; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного" - ); + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"); Для каждого Обработчик Из ОбработчикиСобытия Цикл Обработчик.Модуль.ПриПолученииДанныхОтГлавного( - ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель - ); + ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; КонецЦикла; + // Вставка кода от подсистемы обмена данными должна быть последней. + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + И Не СозданиеНачальногоОбраза(ЭлементДанных) Тогда + + МодульОбменДаннымиСобытия = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.ПриПолученииДанныхОтГлавногоВКонце(ЭлементДанных, ПолучениеЭлемента, Отправитель); + + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1287,6 +1276,24 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Возвращает уточнения при возникновении проблем с параметрами работы программы. +Функция УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика() Экспорт + + Возврат Символы.ПС + Символы.ПС + + НСтр("ru = 'Для разработчика: возможно требуется обновить вспомогательные данные, + |которые влияют на работу программы. Для выполнения обновления можно: + |- воспользоваться внешней обработкой + | ""Инструменты разработчика: Обновление вспомогательных данных"", + |- либо запустить программу с параметром командной строки 1С:Предприятия 8 + | ""/С ЗапуститьОбновлениеИнформационнойБазы"", + |- либо увеличить номер версии конфигурации, чтобы при очередном запуске + | выполнились процедуры обновления данных информационной базы.'"); + +КонецФункции + /////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -1332,8 +1339,8 @@ ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина)); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиПовтИсп"); - Если Модуль.ЭтоАвтономноеРабочееМесто() Тогда + МодульОбменДаннымиПовтИсп = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиПовтИсп"); + Если МодульОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда // Для автономного рабочего места проверка выполняется после загрузки данных. Параметры.ОшибкаЗапускаСПустымСпискомПользователей = ""; КонецЕсли; @@ -1344,25 +1351,28 @@ Возврат Ложь; КонецЕсли; + Если Параметры.ПервыйЗапросПараметров + И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + МодульОбменДаннымиВызовСервера = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиВызовСервера"); + Если МодульОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Тогда + Параметры.Вставить("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском"); + КонецЕсли; + КонецЕсли; + // Проверка необходимости предварительного обновления параметров работы программы. Параметры.Вставить("НеобходимоОбновлениеПараметровРаботыПрограммы", НеобходимоОбновлениеПараметровРаботыПрограммы()); - Если Параметры.НеобходимоОбновлениеПараметровРаботыПрограммы - И Параметры.ПервыйЗапросПараметров Тогда - // Будет выполнено предварительное обновление. - Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); + Если Параметры.ПервыйЗапросПараметров Тогда + Если Параметры.НеобходимоОбновлениеПараметровРаботыПрограммы + ИЛИ Параметры.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() - И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Если Модуль.НеобходимоПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ() Тогда - Параметры.Вставить("ПодтвердитьНастройкиЗагрузкиСообщенияВПодчиненномУзлеРИБ"); - Параметры.Вставить("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); - КонецЕсли; + // Будет выполнено предварительная загрузка или обновление. + Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); + Возврат Ложь; КонецЕсли; - Возврат Ложь; КонецЕсли; // Обязательные параметры для всех режимов работы. @@ -1381,6 +1391,8 @@ Параметры.Вставить("НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы", ОбновлениеИнформационнойБазы.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы()); + Параметры.Вставить("ЗагрузитьСообщениеОбменаДанными", Ложь); + // При входе неразделенным пользователем в неразделенный сеанс ошибки авторизации нет. Параметры.Вставить("ОшибкаАвторизации", ""); @@ -1393,6 +1405,13 @@ Параметры.Вставить("НеобходимоОбновлениеИнформационнойБазы", ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()); + Если Не Параметры.РазделениеВключено + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + Параметры.Вставить("ЗагрузитьСообщениеОбменаДанными", МодульОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными()); + КонецЕсли; + Параметры.Вставить("ЭтоРазделеннаяКонфигурация", ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация()); Параметры.Вставить("ЕстьДоступДляОбновленияВерсииПлатформы", ПравоДоступа("Администрирование", Метаданные)); @@ -1436,7 +1455,7 @@ Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); Параметры.Вставить("КодОсновногоЯзыка", Метаданные.ОсновнойЯзык.КодЯзыка); - Параметры.Вставить("Платформа83БезИспользованияРежимаСовместимости", Платформа83БезИспользованияРежимаСовместимости()); + Параметры.Вставить("ЭтоПлатформа83БезРежимаСовместимости", СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости()); Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); @@ -1470,8 +1489,13 @@ Параметры.Вставить("ЭтоГлавныйУзел", НЕ ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ()); Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); + + Параметры.Вставить("ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий", + ОбщегоНазначения.ИнформационнаяБазаФайловая() + И НЕ ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости()); + Параметры.Вставить("ТребуетсяОбновлениеКонфигурацииУзлаРИБ", - ОбновлениеИнформационнойБазы.ТребуетсяОбновлениеКонфигурацииУзлаРИБ()); + ОбщегоНазначения.ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ()); Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); @@ -1683,7 +1707,7 @@ КонецФункции // Только для внутреннего использования. -Функция НеобходимоОбновлениеПараметровРаботыПрограммы(БезЗагрузки = Ложь) Экспорт +Функция НеобходимоОбновлениеПараметровРаботыПрограммы(ВыполнитьЗагрузку = Истина) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Обновление в модели сервиса. @@ -1700,10 +1724,10 @@ КонецЕсли; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Если Модуль.НастройкаПодчиненногоУзлаРИБ() Тогда - БезЗагрузки = Истина; + Если МодульОбменДаннымиСервер.НастройкаПодчиненногоУзлаРИБ() Тогда + ВыполнитьЗагрузку = Ложь; Возврат Истина; КонецЕсли; КонецЕсли; @@ -1711,7 +1735,7 @@ Попытка ПользователиСлужебныйПовтИсп.Параметры(); Исключение - БезЗагрузки = Истина; + ВыполнитьЗагрузку = Ложь; Возврат Истина; КонецПопытки; @@ -1722,9 +1746,9 @@ // Только для внутреннего использования. Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено) Экспорт - БезЗагрузки = Ложь; + ВыполнитьЗагрузку = Истина; - Если НЕ НеобходимоОбновлениеПараметровРаботыПрограммы(БезЗагрузки) Тогда + Если НЕ НеобходимоОбновлениеПараметровРаботыПрограммы(ВыполнитьЗагрузку) Тогда Возврат; КонецЕсли; @@ -1735,10 +1759,14 @@ |быть выполнено в разделенном режиме модели сервиса.'"); КонецЕсли; + Если СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + ВыполнитьЗагрузку = Ложь; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); СнятьМонопольныйРежим = Ложь; Попытка - Если НЕ БезЗагрузки + Если ВыполнитьЗагрузку И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда // Есть РИБ-обмен данными и обновление в подчиненном узле ИБ. @@ -1761,8 +1789,6 @@ Если СтандартнаяОбработка = Истина И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); - Если НЕ МонопольныйРежим() Тогда Попытка УстановитьМонопольныйРежим(Истина); @@ -1778,52 +1804,9 @@ КонецПопытки; КонецЕсли; - Отказ = Ложь; - ИнформацияОбОшибке = Неопределено; - Попытка - // Загрузка идентификаторов объектов метаданных из главного узла. - Модуль.ПриОбновленииИдентификаторовОбъектовМетаданных(Отказ); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - - Если КонфигурацияИзменена() Тогда - ВызватьИсключение - НСтр("ru = 'Найдены изменения программы, полученные из главного узла. - |Завершите работу программы. Откройте программу в конфигураторе и - |выполните команду ""Обновить конфигурацию базы данных (F7)"". - | - |После этого запустите программу.'"); - КонецЕсли; - - Если ИнформацияОбОшибке <> Неопределено - ИЛИ Отказ = Истина Тогда - - // Сброс кэша сообщения обмена. - Модуль.ПриОшибкеПолученияИдентификаторовОбъектовМетаданных(); - - Если ИнформацияОбОшибке <> Неопределено Тогда - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обмен данными.Загрузка справочника Идентификаторы объектов метаданных'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"". - |Произошла ошибка: - |""%1"". - | - |См. подробности в журнале регистрации.'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецЕсли; - - ВызватьИсключение - НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"". - | - |Ошибка загрузки данных. См. подробности в журнале регистрации.'"); - КонецЕсли; + // Загрузка идентификаторов объектов метаданных из главного узла. + МодульОбменДаннымиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); КонецЕсли; // Проверка загрузки идентификаторов объектов метаданных из главного узла. @@ -1831,36 +1814,23 @@ Попытка Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, , Истина, ЕстьКритичныеИзменения); Исключение - // Сброс кэша сообщения обмена. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль.ПриОшибкеПолученияИдентификаторовОбъектовМетаданных(); + // Сброс кэша сообщения обмена. + МодульОбменДаннымиСервер.ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(); КонецЕсли; ВызватьИсключение; КонецПопытки; Если ЕстьКритичныеИзменения Тогда - // Сброс кэша сообщения обмена. Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - Модуль.ПриОшибкеПолученияИдентификаторовОбъектовМетаданных(); + // Сброс кэша сообщения обмена, вызов исключения с пояснением дальнейших действий. + МодульОбменДаннымиСервер.ПриОшибкеПроверкиИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(Истина); КонецЕсли; ТекстОшибки = НСтр("ru = 'Из главного узла не загружены изменения справочника ""Идентификаторы объектов метаданных"".'"); - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + - НСтр("ru = 'Если было недоступно сообщение обмена данными перезапустите программу, - |чтобы открылось окно изменения настроек транспорта обмена данными. - |Иначе в главном узле выполните обновление информационной базы, - |повторите синхронизацию и после этого перезапустите программу. - | - |Чтобы выполнить обновление информационной базы в главном узле, - |включите константу ""Запустить обновление информационной базы"" - |через меню ""Все функции"" и перезапустите программу. - |Выключение константы произойдет автоматически.'"); - КонецЕсли; - ЗаписьЖурналаРегистрации( НСтр("ru = 'Обмен данными.Загрузка справочника Идентификаторы объектов метаданных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -2094,8 +2064,8 @@ Для каждого Запись Из НаборЗаписей Цикл Запись.ДатаОбновления = Неопределено; КонецЦикла; - НаборЗаписей.Записать(); - + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + ЗафиксироватьТранзакцию(); КонецПроцедуры @@ -2180,15 +2150,6 @@ Возврат Результат; КонецФункции -// Возвращает Истина если конфигурация запущена под управлением платформы 8.3 без использования режима совместимости. -Функция Платформа83БезИспользованияРежимаСовместимости() Экспорт - Информация = Новый СистемнаяИнформация; - Возврат ( - Лев(Информация.ВерсияПриложения, 3) = "8.3" - И Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать - ); -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработка подписок на события планов обмена РИБ @@ -2322,8 +2283,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); - Модуль.ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных(); + МодульРаботаВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса.ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных(); КонецЕсли; @@ -2349,15 +2310,23 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда // Установка флага активности пользователей в области - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); - Модуль.УстановитьФлагАктивностиПользователяВОбласти(); + МодульРезервноеКопированиеОбластейДанных = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); + МодульРезервноеКопированиеОбластейДанных.УстановитьФлагАктивностиПользователяВОбласти(); КонецЕсли; КонецПроцедуры Функция ПолучитьИнформациюОПользователе() - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + // Вычисляем актуальное имя пользователя, даже если оно было ранее изменено в текущем сеансе; + // Например, для подключения к текущей ИБ через внешнее соединение из этого сеанса; + // Во всех остальных случаях достаточно получить ПользователиИнформационнойБазы.ТекущийПользователь() + ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + + Если ТекущийПользователь = Неопределено Тогда + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + КонецЕсли; Информация = Новый Структура; Информация.Вставить("Имя", ТекущийПользователь.Имя); @@ -2406,7 +2375,7 @@ КонецПроцедуры -Процедура ИгнорироватьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента) +Функция ИгнорироватьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента) Если Не СозданиеНачальногоОбраза(ЭлементДанных) И ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных(ЭлементДанных)) Тогда @@ -2415,7 +2384,7 @@ КонецЕсли; -КонецПроцедуры +КонецФункции Функция ОбъектМетаданных(Знач ЭлементДанных) @@ -2482,15 +2451,8 @@ // Вызывается при интерактивном начале работы пользователя с областью данных. // Соответствует событию ПриНачалеРаботыСистемы модулей приложения. // - // Параметры: - // ОбработкаПараметровЗапуска - Булево. - // Истина - обработчик вызван при обычном входе пользователя - // в систему и обработка параметров запуска будет выполнена. - // Ложь - обработчик вызван при входе неразделенного пользователя - // в область данных и обработка параметров запуска будет пропущена. - // // Синтаксис: - // Процедура ПриНачалеРаботыСистемы(ОбработкаПараметровЗапуска) Экспорт + // Процедура ПриНачалеРаботыСистемы() Экспорт // // (То же, что ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы). КлиентскиеСобытия.Добавить( @@ -2546,9 +2508,6 @@ // предупреждений оказывается только одно данное предупреждение. // ПараметрыПрикладнойФормыПредупреждения - Структура - произвольная структура // параметров для вышеописанной формы. - // Приоритет - Число - приоритет обработчика, определяет порядок вывода предупреждений пользователю. - // ОчищатьПредупрежденияДругихОбработчиков - Булево - если Истина, предупреждения, - // добавляемые другими обработчиками, будут очищаться. // Синтаксис: // Процедура ПриПолученииСпискаПредупрежденийЗавершенияРаботы(Предупреждения) Экспорт // @@ -2589,27 +2548,33 @@ СерверныеСобытия.Добавить( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса"); - // Доопределяет список имен объектов метаданных, данные которых могут содержать ссылки - // на различные объекты метаданных, но при этом эти ссылки не должны учитываться - // в бизнес-логике приложения. + // Доопределяет список объектов метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. // - // Пример: - // Для документ "Реализация товаров и услуг" настроена подсистема версионирования объектов, - // и подсистема свойств. При этом на экземпляр документа может быть множество ссылок - // в информационной базе (из других документов, регистров). Часть ссылок имеют значение для - // бизнес-логики (например движения по регистрам). Другая часть ссылок - "техногенные" ссылки - // на объект из объектов ИБ, которые относятся к подсистеме версионирования объектов и подсистеме - // свойств. Такие "техногенные" ссылки должны быть отфильтрованы, например, в обработке удаления - // помеченных и при поиске ссылок на объект в подсистеме запрета редактирования ключевых реквизитов. - // Список таких "техногенных" объектов нужно перечислить в этой функции. + // Описание: + // Для документа "Реализация товаров и услуг" настроены подсистемы "Версионирование объектов" и "Свойства". + // При этом документ может быть указан в других объектах метаданных - документах или регистрах. + // Часть ссылок имеют значение для бизнес-логики (например движения по регистрам) и должны выводиться пользователю. + // Другая часть ссылок - "техногенные" ссылки на документ из данных подсистем "Версионирование объектов" и "Свойства", + // должны скрываться от пользователя при поиске ссылок на объект. + // Например, в обработке удаления помеченных или в подсистеме запрета редактирования ключевых реквизитов. + // Список таких "техногенных" объектов нужно перечислить в этой функции. // - // При этом необходимо позаботиться об удалении "техногенных" данных или очистке ссылок на - // удаленные объекты. Это может быть реализовано с помощью подписки на событие ПередУдалением, - // или с помощью установки признака Ведущее для измерений регистров сведений. + // Важно: + // Для избежания появления пустых "битых" ссылок рекомендуется предусмотреть процедуру очистки указанных объектов метаданных. + // Для измерений регистров сведений - с помощью установки флажка "Ведущее", + // тогда запись регистра сведений будет удалена вместе с удалением ссылки, указанной в измерении. + // Для других реквизитов указанных объектов - с помощью подписки на событие ПередУдалением всех типов объектов метаданных, + // которые могут быть записаны в реквизиты указанных объектов метаданных. + // В обработчике необходимо найти "техногенные" объекты, в реквизитах которых указана ссылка удаляемого объекта, + // и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. // // Параметры: - // Исключения - Массив в который можно добавить исключения, например: - // Исключения.Добавить("РегистрСведений.ВерсииОбъектов"). + // Исключения (Массив) из + // |- (ОбъектМетаданных) Объект метаданных или его реквизит, например: + // Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов); + // Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Реквизиты.АвторВерсии); + // |- (Строка) Полное имя объекта метаданных, например: + // Массив.Добавить("РегистрСведений.ВерсииОбъектов"); // // Синтаксис: // Процедура ПриДобавленииИсключенийПоискаСсылок(Исключения) Экспорт @@ -3108,3 +3073,67 @@ Возврат Новый ФиксированноеСоответствие(ОбработчикиСобытий); КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Для функции ОбновитьПараметрыРаботыПрограммы + +Процедура ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений = Неопределено) + + Если ТипЗнч(БезИзменений) <> Тип("Структура") Тогда + БезИзменений = Новый Структура; + КонецЕсли; + + // СтандартныеПодсистемы.БазоваяФункциональность + Если НЕ БезИзменений.Свойство("БазоваяФункциональностьСлужебныеСобытия") Тогда + ЕстьТекущиеИзменения = Ложь; + Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(ЕстьТекущиеИзменения, ТолькоПроверка); + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + Иначе + БезИзменений.Вставить("БазоваяФункциональностьСлужебныеСобытия"); + КонецЕсли; + КонецЕсли; + + Если НЕ СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + Если ТолькоПроверка И НЕ ЕстьИзменения Тогда + // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(, ЕстьИзменения, ТолькоПроверка, ЕстьИзменения, ЕстьИзменения); + ИначеЕсли НЕ ТолькоПроверка Тогда + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьИзменения); + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.Пользователи + Если НЕ БезИзменений.Свойство("ПользователиПараметрыРаботы") + И НЕ (ТолькоПроверка И ЕстьИзменения) Тогда + + ЕстьТекущиеИзменения = Ложь; + ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей(ЕстьТекущиеИзменения, ТолькоПроверка); + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + Иначе + БезИзменений.Вставить("ПользователиПараметрыРаботы"); + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.УправлениеДоступом + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + + Если НЕ БезИзменений.Свойство("УправлениеДоступомПараметрыОграниченияДоступа") + И НЕ (ТолькоПроверка И ЕстьИзменения) Тогда + + ЕстьТекущиеИзменения = Ложь; + МодульУправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(ЕстьТекущиеИзменения, ТолькоПроверка); + Если ЕстьТекущиеИзменения Тогда + ЕстьИзменения = Истина; + Иначе + БезИзменений.Вставить("УправлениеДоступомПараметрыОграниченияДоступа"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index ac4e2229b..54fec70fc 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -769,9 +769,8 @@ // Строка - текстовое представление количества единиц, число записывается цифрами. // // Примеры: -// ЧислоЦифрамиПредметИсчисленияПрописью(23, НСтр("ru = 'минуту,минуты,минут'")); // Вернет "23 минуты". -// ЧислоЦифрамиПредметИсчисленияПрописью(15, НСтр("ru = 'минуту,минуты,минут'")); // Вернет "15 минут". -// +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт Результат = Формат(Число,"ЧН=0"); @@ -1251,4 +1250,4 @@ Возврат Результат; КонецФункции -// Конец ВычислитьХешСтрокиПоАлгоритмуMD5 \ No newline at end of file +// Конец ВычислитьХешСтрокиПоАлгоритмуMD5 diff --git a/SSL/src/CommonModules/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненности/Module.bsl deleted file mode 100644 index 4624ee187..000000000 --- a/SSL/src/CommonModules/СтруктураПодчиненности/Module.bsl +++ /dev/null @@ -1,54 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Структура подчиненности". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -//////////////////////////////////////////////////////////////////////////////// -// Объявление событий, к которым можно добавлять обработчики. - -// Объявляет служебные события подсистемы СтруктураПодчиненности: -// -// Серверные события: -// ПриФормированииМассиваДополнительныхРеквизитовДокумента, -// ПриПолученииПредставленияДокументаДляПечати. -// -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт - - // СЕРВЕРНЫЕ СОБЫТИЯ. - - // Формирует массив реквизитов документа. - // - // Параметры: - // ИмяДокумента - Строка - имя документа. - // МассивДопРеквизитов - Массив наименований реквизитов документа. - // - // Синтаксис: - // Процедура ПриФормированииМассиваДополнительныхРеквизитовДокумента(ИмяДокумента, МассивДопРеквизитов) Экспорт - // - // (То же, что СтруктураПодчиненностиПереопределяемый.МассивДополнительныхРеквизитовДокумента). - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.СтруктураПодчиненности\ПриФормированииМассиваДополнительныхРеквизитовДокумента"); - - // Получает представление документа для печати - // - // Параметры - // Выборка - КоллекцияДанных - структура или выборка из результатов запроса - // в которой содержатся дополнительные реквизиты, на основании - // которых можно сформировать переопределенное представление до- - // кумента для вывода в отчет "Структура подчиненности" - // ПредставлениеДокумента - Строка, Неопределено. Переопределенное представление документа, или Неопределено, - // если для данного типа документов такое не задано. - // - // Синтаксис: - // Процедура ПриПолученииПредставленияДокументаДляПечати(Выборка, ПредставлениеДокумента) Экспорт - // - // (То же, что СтруктураПодчиненностиПереопределяемый.ПолучитьПредставлениеДокументаДляПечати). - // - СерверныеСобытия.Добавить("СтандартныеПодсистемы.СтруктураПодчиненности\ПриПолученииПредставленияДокументаДляПечати"); - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 3b10f6043..d80268be5 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -38,9 +38,9 @@ // если для данного типа документов такое не задано. // Функция ПолучитьПредставлениеДокументаДляПечати(Выборка) Экспорт - + Возврат Неопределено; - + КонецФункции diff --git a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl index f070e1d6e..95eda9859 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl @@ -25,17 +25,14 @@ ОписаниеИсходнойВерсии = ТрансляцияXDTOСлужебный.СформироватьОписаниеВерсии( , - ПакетИсходнойВерсии - ); + ПакетИсходнойВерсии); ОписаниеРезультирующейВерсии = ТрансляцияXDTOСлужебный.СформироватьОписаниеВерсии( - РезультирующаяВерсия - ); + РезультирующаяВерсия); Возврат ТрансляцияXDTOСлужебный.ВыполнитьТрансляцию( ИсходныйОбъект, ОписаниеИсходнойВерсии, - ОписаниеРезультирующейВерсии - ); + ОписаниеРезультирующейВерсии); КонецФункции @@ -62,17 +59,14 @@ ОписаниеИсходнойВерсии = ТрансляцияXDTOСлужебный.СформироватьОписаниеВерсии( , - ПакетИсходнойВерсии - ); + ПакетИсходнойВерсии); ОписаниеРезультирующейВерсии = ТрансляцияXDTOСлужебный.СформироватьОписаниеВерсии( , - ПакетРезультирующейВерсии - ); + ПакетРезультирующейВерсии); Возврат ТрансляцияXDTOСлужебный.ВыполнитьТрансляцию( ИсходныйОбъект, ОписаниеИсходнойВерсии, - ОписаниеРезультирующейВерсии - ); + ОписаниеРезультирующейВерсии); -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl index 3e468aefd..056c2d7b4 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl @@ -118,8 +118,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В конфигурации не зарегистрирован обработчик трансляции из версии %1 в версию %2!'"), СформироватьПредставлениеВерсии(ОписаниеИсходнойВерсии), - СформироватьПредставлениеВерсии(ОписаниеРезультирующейВерсии) - ); + СформироватьПредставлениеВерсии(ОписаниеРезультирующейВерсии)); Иначе ТаблицаТрансляцииИнтерфейса = Новый ТаблицаЗначений(); diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index d45abbbc2..379cef813 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -9,19 +9,28 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые для проверки прав -// Проверяет, что у текущего пользователя есть роль в одном из профилей +// Проверяет, что у пользователя есть роль в одном из профилей // тех групп доступа в которых он участвует, например, // роль ПросмотрЖурналаРегистрации, роль ПечатьНепроведенныхДокументов. // +// Если указан объект, тогда дополнительно проверяет, что группа доступа +// в профиле которой есть указанная роль также предоставляет право Чтение +// указанного объекта. +// // Параметры: -// Роль - Строка - имя роли. +// Роль - Строка - имя роли. // -// НаборыЗначенийДоступа - ТаблицаЗначений(НомерНабора, ВидДоступа, ЗначениеДоступа). -// Пустую подготовленную таблицу можно получить с помощью функции -// УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(). +// СсылкаНаОбъект - Ссылка на объект для которого заполняются наборы значений доступа +// для проверки права Чтение. +// - ТаблицаЗначений(НомерНабора, ВидДоступа, ЗначениеДоступа) - произвольная +// таблица наборов значений доступа. +// Пустую подготовленную таблицу можно получить с помощью функции +// УправлениеДоступом.ТаблицаНаборыЗначенийДоступа() - колонки +// Чтение, Изменение, Добавление, Удаление не заполнять. +// +// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено. +// Если не заполнено, тогда право проверяется для текущего пользователя. // -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено. -// Если не заполнено, тогда право проверяется для текущего пользователя. // Возвращаемое значение: // Булево. // @@ -56,6 +65,26 @@ | И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления)"; Иначе + Если ТипЗнч(НаборыЗначенийДоступа) <> Тип("ТаблицаЗначений") Тогда + СсылкаНаОбъект = НаборыЗначенийДоступа; + НаборыЗначенийДоступа = ТаблицаНаборыЗначенийДоступа(); + СсылкаНаОбъект.ПолучитьОбъект().ЗаполнитьНаборыЗначенийДоступа(НаборыЗначенийДоступа); + // Выбор только наборов значений доступа предназначенных для проверки права Чтение. + СтрокиНаборовЧтения = НаборыЗначенийДоступа.НайтиСтроки(Новый Структура("Чтение", Истина)); + НомераНаборов = Новый Соответствие; + Для каждого Строка Из СтрокиНаборовЧтения Цикл + НомераНаборов.Вставить(Строка.НомерНабора, Истина); + КонецЦикла; + Индекс = НаборыЗначенийДоступа.Количество()-1; + Пока Индекс > 0 Цикл + Если НомераНаборов[НаборыЗначенийДоступа[Индекс].НомерНабора] = Неопределено Тогда + НаборыЗначенийДоступа.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + НаборыЗначенийДоступа.ЗаполнитьЗначения(Ложь, "Чтение, Изменение, Добавление, Удаление") ; + КонецЕсли; + // Проверка, что роль назначается пользователю через группу доступа по профилю с разрешенными наборами значений доступа. Запрос.УстановитьПараметр("НаборыЗначенийДоступа", НаборыЗначенийДоступа); @@ -1858,7 +1887,9 @@ Функция НовоеОписаниеПрофиляГруппДоступа() Экспорт НовоеОписание = Новый Структура; - НовоеОписание.Вставить("Идентификатор", ""); + НовоеОписание.Вставить("Имя", ""); // ИмяПредопределенныхДанных используется для привязки + // поставляемых данных к предопределенному элементу. + НовоеОписание.Вставить("Идентификатор", ""); // ИдентификаторПоставляемыхДанных НовоеОписание.Вставить("Наименование", ""); НовоеОписание.Вставить("Описание", ""); НовоеОписание.Вставить("Роли", Новый Массив); @@ -1869,6 +1900,20 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые при обновлении информационной базы + +// Возвращает ссылку на поставляемый профиль по идентификатору. +// +// Параметры: +// Идентификатор - Строка - имя или уникальный идентификатор поставляемого профиля. +// +Функция ПоставляемыйПрофильПоИдентификатору(Идентификатор) Экспорт + + Возврат Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильПоИдентификатору(Идентификатор); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые для обновления вспомогательных данных diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 645a6119e..38991ee00 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -262,6 +262,78 @@ //////////////////////////////////////////////////////////////////////////////// // Основные процедуры и функции. +// Добавляет пользователя в группу доступа, соответствующую поставляемому профилю. +// Группа доступа определяется по идентификатору ссылки поставляемого профиля. +// Если группа доступа не будет найдена, она будет создана. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.ГруппыПользователей, +// СправочникСсылка.ГруппыВнешнихПользователей +// - участник, которого нужно включить в группу доступа. +// +// ПоставляемыйПрофиль - Строка - строка идентификатора поставляемого профиля или +// - СправочникСсылка.ПрофилиГруппДоступа - ссылка на профиль, который +// создан по описанию в модуле УправлениеДоступомПереопределяемый +// в процедуре ЗаполнитьПоставляемыеПрофилиГруппДоступа. +// Профили с непустым списком видов доступа не поддерживаются. +// Профиль групп доступа Администратор не поддерживается. +// +Процедура ВключитьПользователяВГруппуДоступа(Пользователь, ПоставляемыйПрофиль) Экспорт + + ОбработатьСвязьПользователяСГруппойДоступа(Пользователь, ПоставляемыйПрофиль, Истина); + +КонецПроцедуры + +// Удаляет пользователя из группы доступа, соответствующей поставляемому профилю. +// Группа доступа определяется по идентификатору ссылки поставляемого профиля. +// Если группа доступа не будет найдена, никаких действий не будет выполнено. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.ГруппыПользователей, +// СправочникСсылка.ГруппыВнешнихПользователей +// - участник, которого нужно исключить из группы доступа. +// +// ПоставляемыйПрофиль - Строка - строка идентификатора поставляемого профиля или +// - СправочникСсылка.ПрофилиГруппДоступа - ссылка на профиль, который +// создан по описанию в модуле УправлениеДоступомПереопределяемый +// в процедуре ЗаполнитьПоставляемыеПрофилиГруппДоступа. +// Профили с непустым списком видов доступа не поддерживаются. +// Профиль групп доступа Администратор не поддерживается. +// +Процедура ИсключитьПользователяИзГруппыДоступа(Пользователь, ПоставляемыйПрофиль) Экспорт + + ОбработатьСвязьПользователяСГруппойДоступа(Пользователь, ПоставляемыйПрофиль, Ложь); + +КонецПроцедуры + +// Найти пользователя в группе доступа, соответствующей поставляемому профилю. +// Группа доступа определяется по идентификатору ссылки поставляемого профиля. +// Если группа доступа не будет найдена, никаких действий не будет выполнено. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, +// СправочникСсылка.ГруппыПользователей, +// СправочникСсылка.ГруппыВнешнихПользователей +// - участник, которого нужно найти в группе доступа. +// +// ПоставляемыйПрофиль - Строка - строка идентификатора поставляемого профиля или +// - СправочникСсылка.ПрофилиГруппДоступа - ссылка на профиль, который +// создан по описанию в модуле УправлениеДоступомПереопределяемый +// в процедуре ЗаполнитьПоставляемыеПрофилиГруппДоступа. +// Профили с непустым списком видов доступа не поддерживаются. +// Профиль групп доступа Администратор не поддерживается. +// +Функция НайтиПользователяВГруппеДоступа(Пользователь, ПоставляемыйПрофиль) Экспорт + + Возврат ОбработатьСвязьПользователяСГруппойДоступа(Пользователь, ПоставляемыйПрофиль); + +КонецФункции + // Устанавливает параметры сеанса по текущим настройкам констант и // настройкам групп доступа пользователей. // Вызывается ПриНачалеРаботыСистемы. @@ -312,11 +384,15 @@ Запрос = Новый Запрос( "ВЫБРАТЬ - | ВидыДоступа.Ссылка КАК ВидДоступа + | ВидыДоступа.Ссылка КАК ВидДоступа, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных |ИЗ | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа |ГДЕ - | ВидыДоступа.Предопределенный"); + | ВидыДоступа.Предопределенный = ИСТИНА"); + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "ВидыДоступа.ИмяПредопределенныхДанных"); + КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); КаждыйВидЕдинственный = Истина; @@ -366,7 +442,11 @@ КонецЕсли; ОписаниеВидаДоступа = ОписаниеВидаДоступа + ОписаниеГрупп; КонецЕсли; - ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяВидаДоступа = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); + КонецЕсли; ПараметрыСеанса["ОграничиватьДоступПоВиду" + ИмяВидаДоступа] = ОписаниеВидаДоступа; УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду" + ИмяВидаДоступа); КонецЦикла; @@ -443,6 +523,19 @@ Обработчик.Версия = "2.1.3.5"; Обработчик.Процедура = "РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппировкиПользователей"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.15"; + Обработчик.Процедура = "Справочники.ПрофилиГруппДоступа.ЗаполнитьИдентификаторыПоставляемыхДанных"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "Справочники.ГруппыДоступа.ЗаполнитьПрофильГруппыДоступаАдминистраторы"; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + КонецПроцедуры // Переопределяет поведение после получения данных в распределенной ИБ. @@ -541,6 +634,103 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки (Коллекция) Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в программе и показываться в панели отчетов. +// +// Вспомогательные функции: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// +// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// |- Включен (Булево) +// Если Ложь, то вариант отчета не регистрируется в подсистеме. +// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. +// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи +// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). +// |- ВидимостьПоУмолчанию (Булево) +// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// Пользователь может "включить" его в режиме настройки панели отчетов +// или открыть через форму "Все отчеты". +// |- Описание (Строка) +// Дополнительная информация по варианту отчета. +// В панели отчетов выводится в качестве подсказки. +// Должно расшифровывать для пользователя содержимое варианта отчета +// и не должно дублировать наименование варианта отчета. +// |- Размещение (Соответствие) Настройки размещения варианта отчета в разделах +// |- Ключ (ОбъектМетаданных) Подсистема, в которой размещается отчет или вариант отчета +// |- Значение (Строка) Необязательный. Настройки размещения в подсистеме. +// |- "" - Выводить отчет в своей группе обычным шрифтом. +// |- "Важный" - Выводить отчет в своей группе жирным шрифтом. +// |- "СмТакже" - Выводить отчет в группе "См. также". +// |- ФункциональныеОпции (Массив) из (Строка) +// Имена функциональных опций варианта отчета. +// +// Например: +// +// (1) Добавить в подсистему вариант отчета. +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); +// Вариант.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// +// (2) Отключить вариант отчета. +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); +// Вариант.Включен = Ложь; +// +// (3) Отключить все варианты отчета, кроме требуемого. +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Отчет.Включен = Ложь; +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); +// Вариант.Включен = Истина; +// +// (4) Результат исполнения 4.1 и 4.2 будет одинаковым: +// (4.1) +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// +// (4.2) +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); +// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); +// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); +// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// +// Важно: +// Отчет выступает в качестве контейнера вариантов. +// Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. +// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, +// т.е. более не будут наследовать изменения настроек от отчета. См. примеры 3 и 4. +// +// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, +// ее дублирование в коде не требуется. +// +// Функциональные опции вариантов объединяются с функциональными опциями отчетов по следующим правилам: +// (ФункциональнаяОпция1Отчета ИЛИ ФункциональнаяОпция2Отчета) И (ФункциональнаяОпция3Варианта ИЛИ ФункциональнаяОпция4Варианта). +// Функциональные опции отчетов не зачитываются из метаданных, +// они применяются на этапе использования подсистемы пользователем. +// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, +// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого отчета. +// Для пользовательских вариантов отчета действуют только функциональные опции отчета +// - они отключаются только с отключением всего отчета. +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + + Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ПраваДоступа); + Отчет.Включен = Ложь; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -697,7 +887,8 @@ Профили = ПрофилиПользователяСРолью(ТекущийПользователь, Строка.Роль); Для каждого Профиль Из Профили Цикл ЗаписьЖурналаРегистрации( - НСтр("ru = 'Управление доступом.Роль не найдена в метаданных'"), + НСтр("ru = 'Управление доступом.Роль не найдена в метаданных'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -746,6 +937,35 @@ КонецПроцедуры +// Проверка группы доступа Администраторы перед записью. +Процедура ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы(ПользователиГруппы, ОписаниеОшибки) Экспорт + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + + // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. + УстановитьПривилегированныйРежим(Истина); + НайденПользовательИБ = Ложь; + + Для каждого ОписаниеПользователя ИЗ ПользователиГруппы Цикл + + Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + + НайденПользовательИБ = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НЕ НайденПользовательИБ Тогда + ОписаниеОшибки = + НСтр("ru = 'В группе доступа Администраторы + |должен быть хотя бы один пользователь, + |которому разрешен доступ к информационной базе.'"); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП @@ -1352,7 +1572,8 @@ Если КоличествоДанных < 1000 Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1370,7 +1591,8 @@ КонецЕсли; Иначе ЗаписьЖурналаРегистрации( - НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1882,7 +2104,8 @@ Если ОграничениеДоступаНаУровнеЗаписейВключено Тогда ЗаписьЖурналаРегистрации( - НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -2011,24 +2234,6 @@ КонецФункции -// Заполняет шаблон заголовка подчиненной формы свойствами ссылки-владельца, -// например, НСтр("ru = 'Права доступа: %1 (%2)'" -> "Права доступа: Иванов (Пользователь)". -// -// Параметры: -// СсылкаНаВладельца - ссылка на объект-владелец. -// -Функция ЗаголовокПодчиненнойФормы(СтрокаЗаголовкаСПараметрами, СсылкаНаВладельца) Экспорт - - МетаданныеВладельца = СсылкаНаВладельца.Метаданные(); - НаименованиеВладельца = Строка(СсылкаНаВладельца); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаЗаголовкаСПараметрами, - НаименованиеВладельца, - НазваниеОбъектаИзМетаданных(МетаданныеВладельца) ); - -КонецФункции - // Возвращает название объекта метаданных с учетом заданных свойств в порядке: // - РасширенноеПредставлениеОбъекта, // - ПредставлениеОбъекта, @@ -2898,8 +3103,8 @@ Процедура ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра, НетГруппИсполнителей) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - Модуль.ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра); + МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииГруппИсполнителей(МенеджерВременныхТаблиц, СодержаниеПараметра, ЗначениеПараметра); НетГруппИсполнителей = Ложь; Иначе НетГруппИсполнителей = Истина; @@ -2915,8 +3120,8 @@ Процедура ПриВключенииЗаполненияДанныхДляОграниченияДоступа(Знач Использование) Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); - Модуль.ВключитьЗаполнениеДанныхДляОграниченияДоступа(Использование); + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ВключитьЗаполнениеДанныхДляОграниченияДоступа(Использование); КонецЕсли; КонецПроцедуры @@ -2933,8 +3138,8 @@ Процедура ПриЗаписиПользователяСервиса(Знач Пользователь, Знач СоздатьПользователяСервиса, Знач ПарольПользователяСервиса) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - Модуль.ЗаписатьПользователяСервиса(Пользователь, СоздатьПользователяСервиса, ПарольПользователяСервиса); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + МодульПользователиСлужебныйВМоделиСервиса.ЗаписатьПользователяСервиса(Пользователь, СоздатьПользователяСервиса, ПарольПользователяСервиса); КонецЕсли; КонецПроцедуры @@ -2951,8 +3156,8 @@ Процедура ПриПолученииДействийСПользователемСервиса(ДоступныеДействия, Знач Пользователь = Неопределено) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); - ДоступныеДействия = Модуль.ПолучитьДействияСПользователемСервиса(Пользователь); + МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса"); + ДоступныеДействия = МодульПользователиСлужебныйВМоделиСервиса.ПолучитьДействияСПользователемСервиса(Пользователь); КонецЕсли; КонецПроцедуры @@ -3093,6 +3298,177 @@ КонецФункции +// Для процедур ВключитьПользователяВГруппуДоступа, ИсключитьПользователяИзГруппыДоступа +// и функции НайтиПользователяВГруппеДоступа. + +Функция ОбработатьСвязьПользователяСГруппойДоступа(Пользователь, ПоставляемыйПрофиль, Включить = Неопределено) + + Если ТипЗнч(Пользователь) <> Тип("СправочникСсылка.Пользователи") + И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ГруппыПользователей") + И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") + И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Возврат Ложь; + КонецЕсли; + + ИдентификаторПоставляемогоПрофиля = Неопределено; + + Если ТипЗнч(ПоставляемыйПрофиль) = Тип("Строка") Тогда + Если СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(ПоставляемыйПрофиль) Тогда + + ИдентификаторПоставляемогоПрофиля = ПоставляемыйПрофиль; + + ПоставляемыйПрофиль = Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильПоИдентификатору( + ИдентификаторПоставляемогоПрофиля); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПоставляемыйПрофиль) <> Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда + Возврат Ложь; + КонецЕсли; + + Если ИдентификаторПоставляемогоПрофиля = Неопределено Тогда + ИдентификаторПоставляемогоПрофиля = + Справочники.ПрофилиГруппДоступа.ИдентификаторПоставляемогоПрофиля(ПоставляемыйПрофиль); + КонецЕсли; + + Если ИдентификаторПоставляемогоПрофиля = Справочники.ПрофилиГруппДоступа.ИдентификаторПрофиляАдминистратор() Тогда + Возврат Ложь; + КонецЕсли; + + СвойстваПрофиля = УправлениеДоступомСлужебныйПовтИсп.Параметры( + ).ПоставляемыеПрофилиГруппДоступа.ОписанияПрофилей.Получить(ИдентификаторПоставляемогоПрофиля); + + Если СвойстваПрофиля = Неопределено + ИЛИ СвойстваПрофиля.ВидыДоступа.Количество() <> 0 Тогда + + Возврат Ложь; + КонецЕсли; + + ГруппаДоступа = Неопределено; + + Если УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + + Если ТипЗнч(Пользователь) <> Тип("СправочникСсылка.Пользователи") + И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + Возврат Ложь; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Профиль", ПоставляемыйПрофиль); + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль = &Профиль + | И ГруппыДоступа.Пользователь = &Пользователь"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаДоступа = Выборка.Ссылка; + КонецЕсли; + + Если ГруппаДоступа = Неопределено Тогда + Если Включить <> Истина Тогда + Возврат Ложь; + Иначе + ГруппаДоступа = Справочники.ГруппыДоступа.СоздатьЭлемент(); + ГруппаДоступа.Наименование = СвойстваПрофиля.Наименование; + ГруппаДоступа.Профиль = ПоставляемыйПрофиль; + ГруппаДоступа.Пользователь = Пользователь; + ГруппаДоступа.Пользователи.Добавить().Пользователь = Пользователь; + ГруппаДоступа.Записать(); + Возврат Истина; + КонецЕсли; + КонецЕсли; + Иначе + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПоставляемыйПрофиль", ПоставляемыйПрофиль); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка, + | ГруппыДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль = &ПоставляемыйПрофиль + | + |УПОРЯДОЧИТЬ ПО + | ГруппыДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля УБЫВ"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаДоступа = Выборка.Ссылка; + КонецЕсли; + + Если ГруппаДоступа = Неопределено Тогда + Если Включить <> Истина Тогда + Возврат Ложь; + Иначе + ГруппаДоступа = Справочники.ГруппыДоступа.СоздатьЭлемент(); + ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля = Истина; + ГруппаДоступа.Наименование = СвойстваПрофиля.Наименование; + ГруппаДоступа.Профиль = ПоставляемыйПрофиль; + ГруппаДоступа.Пользователи.Добавить().Пользователь = Пользователь; + ГруппаДоступа.Записать(); + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", ГруппаДоступа); + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппы + |ГДЕ + | УчастникиГруппы.Ссылка = &Ссылка + | И УчастникиГруппы.Пользователь = &Пользователь"; + ПользовательНайден = НЕ Запрос.Выполнить().Пустой(); + + Если Включить = Неопределено Тогда + Возврат ПользовательНайден; + КонецЕсли; + + Если Включить И ПользовательНайден Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ Включить И НЕ ПользовательНайден Тогда + Возврат Истина; + КонецЕсли; + + ГруппаДоступа = ГруппаДоступа.ПолучитьОбъект(); + + Если НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа() + И НЕ ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля Тогда + + ГруппаДоступа.ОсновнаяГруппаДоступаПоставляемогоПрофиля = Истина; + КонецЕсли; + + Если Включить Тогда + ГруппаДоступа.Пользователи.Добавить().Пользователь = Пользователь; + Иначе + Отбор = Новый Структура("Пользователь", Пользователь); + Строки = ГруппаДоступа.Пользователи.НайтиСтроки(Отбор); + Для каждого Строка Из Строки Цикл + ГруппаДоступа.Пользователи.Удалить(Строка); + КонецЦикла; + КонецЕсли; + + ГруппаДоступа.Записать(); + + Возврат Истина; + +КонецФункции + // Для процедуры ОбновитьРолиПользователей. Функция ТекущиеСвойстваПользователей(МассивПользователей) @@ -4074,8 +4450,7 @@ КонецЕсли; Индекс = Индекс-1; КонецЦикла; - Объект.ОбменДанными.Загрузка = Истина; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index 2c76cdfa4..a47d247d9 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -115,10 +115,6 @@ НачатьТранзакцию(); Попытка - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); - Блокировка.Добавить("Справочник.ГруппыДоступа"); - Блокировка.Заблокировать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); @@ -133,14 +129,14 @@ ГруппаАдминистраторы.Пользователи.Добавить().Пользователь = Строка.Пользователь; КонецЕсли; КонецЦикла; - ГруппаАдминистраторы.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГруппаАдминистраторы); КонецЕсли; - ГруппаАдминистраторыДанных.Удалить(); + ОбновлениеИнформационнойБазы.УдалитьДанные(ГруппаАдминистраторыДанных); КонецЕсли; Если НЕ РезультатыЗапроса[1].Пустой() Тогда ПрофильАдминистраторДанных = ПрофильАдминистраторДанныхСсылка.ПолучитьОбъект(); - ПрофильАдминистраторДанных.Удалить(); + ОбновлениеИнформационнойБазы.УдалитьДанные(ПрофильАдминистраторДанных); КонецЕсли; ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index ac6a50192..99289c1a1 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -35,7 +35,8 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка обновления информационной базы. |Не заполнен параметр ограничения доступа: - |""%1"".'"), + |""%1"".'") + + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(), ПредставлениеПараметра); КонецЕсли; @@ -76,14 +77,24 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ВидыДоступа.Ссылка + | ВидыДоступа.Ссылка КАК Ссылка, + | НЕОПРЕДЕЛЕНО КАК ИмяПредопределенныхДанных |ИЗ | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа |ГДЕ - | ВидыДоступа.Предопределенный"; + | ВидыДоступа.Предопределенный = ИСТИНА"; + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕОПРЕДЕЛЕНО", "ВидыДоступа.ИмяПредопределенныхДанных"); + КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ПредопределенныеВидыДоступа.Вставить(ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.Ссылка), Выборка.Ссылка); + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяВидаДоступа = Выборка.ИмяПредопределенныхДанных; + Иначе + ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.Ссылка); + КонецЕсли; + ПредопределенныеВидыДоступа.Вставить(ИмяВидаДоступа, Выборка.Ссылка); КонецЦикла; ОграниченияПрав = ""; diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl index b4cbc4ea4..171f57fe7 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиКлиент/Module.bsl @@ -39,7 +39,7 @@ |(обязательная ежемесячная процедура, может занять некоторое время)'"); ДействиеПриУстановленномФлажке = Новый Структура; ДействиеПриУстановленномФлажке.Вставить("Форма", "Обработка.СдвигГраницыИтоговПриЗавершенииРаботы.Форма"); - ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", Новый Структура); + ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", Новый Структура("ОткрытаПоСценарию", Истина)); ПараметрыПредупреждения = Новый Структура; ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index e783f1245..9155cae73 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -154,8 +154,8 @@ Для Каждого РегистрМетаданные Из Метаданные.РегистрыНакопления Цикл Если РегистрМетаданные.ВидРегистра = ВидОстатки Тогда РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; - Если РегистрНакопленияМенеджер.ПолучитьПериодРассчитанныхИтогов() < РегистрНакопленияПериод Тогда - РегистрНакопленияМенеджер.УстановитьПериодРассчитанныхИтогов(РегистрНакопленияПериод); + Если ПолучитьПериодРассчитанныхИтогов(РегистрНакопленияМенеджер) < РегистрНакопленияПериод Тогда + УстановитьПериодРассчитанныхИтогов(РегистрНакопленияМенеджер, РегистрНакопленияПериод); Если РегистрНакопленияМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда РегистрНакопленияМенеджер.ПересчитатьТекущиеИтоги(); КонецЕсли; @@ -166,8 +166,8 @@ // Расчет итогов для регистров бухгалтерии. Для Каждого РегистрМетаданные Из Метаданные.РегистрыБухгалтерии Цикл РегистрБухгалтерииМенеджер = РегистрыБухгалтерии[РегистрМетаданные.Имя]; - Если РегистрБухгалтерииМенеджер.ПолучитьПериодРассчитанныхИтогов() < РегистрБухгалтерииПериод Тогда - РегистрБухгалтерииМенеджер.УстановитьПериодРассчитанныхИтогов(РегистрБухгалтерииПериод); + Если ПолучитьПериодРассчитанныхИтогов(РегистрБухгалтерииМенеджер) < РегистрБухгалтерииПериод Тогда + УстановитьПериодРассчитанныхИтогов(РегистрБухгалтерииМенеджер, РегистрБухгалтерииПериод); Если РегистрБухгалтерииМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда РегистрБухгалтерииМенеджер.ПересчитатьТекущиеИтоги(); КонецЕсли; @@ -231,7 +231,8 @@ // Определяет актуальность итогов и агрегатов. Если нет регистров, то возвращает Истина. Функция НадоСдвинутьГраницуИтогов() Экспорт Параметры = ПараметрыИтоговИАгрегатов(); - Возврат Параметры.ЕстьРегистрыИтогов И ДобавитьМесяц(Параметры.ДатаРасчетаИтогов, 1) < ТекущаяДатаСеанса(); + Возврат Пользователи.ЭтоПолноправныйПользователь() + И Параметры.ЕстьРегистрыИтогов И ДобавитьМесяц(Параметры.ДатаРасчетаИтогов, 1) < ТекущаяДатаСеанса(); КонецФункции // Получает значение константы "ПараметрыИтоговИАгрегатов". @@ -254,7 +255,7 @@ Для Каждого РегистрМетаданные Из Метаданные.РегистрыНакопления Цикл Если РегистрМетаданные.ВидРегистра = ВидОстатки Тогда Параметры.ЕстьРегистрыИтогов = Истина; - Параметры.ДатаРасчетаИтогов = Мин(Параметры.ДатаРасчетаИтогов, РегистрыНакопления[РегистрМетаданные.Имя].ПолучитьПериодРассчитанныхИтогов()); + Параметры.ДатаРасчетаИтогов = Мин(Параметры.ДатаРасчетаИтогов, ПолучитьПериодРассчитанныхИтогов(РегистрыНакопления[РегистрМетаданные.Имя])); КонецЕсли; КонецЦикла; @@ -272,6 +273,28 @@ Константы.ПараметрыИтоговИАгрегатов.Установить(Новый ХранилищеЗначения(Параметры)); КонецПроцедуры +// Возвращает период рассчитанных итогов для регистров. +Функция ПолучитьПериодРассчитанныхИтогов(МенеджерРегистра) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат МенеджерРегистра.ПолучитьМаксимальныйПериодРассчитанныхИтогов(); + Иначе + Возврат МенеджерРегистра.ПолучитьПериодРассчитанныхИтогов(); + КонецЕсли; + +КонецФункции + +// Устанавливает период, на который рассчитаны итоги в регистре. +Процедура УстановитьПериодРассчитанныхИтогов(МенеджерРегистра, Период) Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + МенеджерРегистра.УстановитьМаксимальныйПериодРассчитанныхИтогов(Период); + Иначе + МенеджерРегистра.УстановитьПериодРассчитанныхИтогов(Период); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 3d61127f2..69d16ad14 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -12,7 +12,8 @@ // Обработчик для события формы ПриСозданииНаСервере // // Параметры: -// Форма - УправляемаяФорма - Форма объекта-владельца, предназначенная для вывода контактной информации +// Форма - УправляемаяФорма - Форма объекта-владельца, предназначенная для вывода контактной +// информации // Объект - Объект-владелец контактной информации // ПоложениеЗаголовкаКИ - Может принимать значения ПоложениеЗаголовкаЭлементаФормы.Лево // или ПоложениеЗаголовкаЭлементаФормы.Верх (по умолчанию) @@ -56,60 +57,105 @@ ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; ИмяОбъекта = МетаданныеОбъекта.Имя; - ТекстЗапроса =" - |ВЫБРАТЬ - | КонтактнаяИнформация.Представление КАК Представление, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, - | КонтактнаяИнформация.Вид КАК Вид, - | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтроки - |ПОМЕСТИТЬ - | КонтактнаяИнформация - |ИЗ - | [ИмяОбъекта].КонтактнаяИнформация КАК КонтактнаяИнформация - |ГДЕ - | КонтактнаяИнформация.Ссылка = &Владелец - |;//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.Тип КАК Тип, - | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, - | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, - | ВидыКонтактнойИнформации.Наименование КАК Наименование, - | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, - | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, - | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, - | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, - | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, - | КонтактнаяИнформация.ИдентификаторСтроки КАК ИдентификаторСтроки, - | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, - | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ЛЕВОЕ СОЕДИНЕНИЕ - | КонтактнаяИнформация КАК КонтактнаяИнформация - |ПО - | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид - |ГДЕ - | (ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) - | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ - | - |УПОРЯДОЧИТЬ ПО - | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ - |"; + Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти")=Неопределено Тогда + ДанныеИдентификатораСтрокиТабличнойЧасти = "0"; + Иначе + ДанныеИдентификатораСтрокиТабличнойЧасти = "ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0)"; + КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъекта]", ПолноеИмяОбъектаМетаданных); - - Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено Тогда - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти", "0"); - + Если СтандартныеПодсистемыПовтИсп.ЭтоПлатформа83БезРежимаСовместимости() Тогда + РеквизитИмениПредопределенного = "ВидыКонтактнойИнформации.ИмяПредопределенныхДанных"; + Иначе + РеквизитИмениПредопределенного = "НЕОПРЕДЕЛЕНО"; КонецЕсли; Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; + Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда + Запрос.Текст =" + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | " + РеквизитИмениПредопределенного + " КАК ИмяПредопределенныхДанных, + | ВидыКонтактнойИнформации.Тип КАК Тип, + | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, + | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, + | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, + | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, + | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, + | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтроки, + | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, + | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ЛЕВОЕ СОЕДИНЕНИЕ + | " + ПолноеИмяОбъектаМетаданных + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ПО + | КонтактнаяИнформация.Ссылка = &Владелец + | И ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид + |ГДЕ + | НЕ ВидыКонтактнойИнформации.ПометкаУдаления + | И ( + | ВидыКонтактнойИнформации.Родитель=&ГруппаВидовКИ + | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель=&ГруппаВидовКИ + | ) + |УПОРЯДОЧИТЬ ПО + | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ + |"; + Иначе + Запрос.Текст =" + |ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, + | КонтактнаяИнформация.Вид КАК Вид, + | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтрокиТабличнойЧасти + |ПОМЕСТИТЬ + | КонтактнаяИнформация + |ИЗ + | &ТаблицаКонтактнойИнформации КАК КонтактнаяИнформация + |ИНДЕКСИРОВАТЬ ПО + | Вид + |;//////////////////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | " + РеквизитИмениПредопределенного + " КАК ИмяПредопределенныхДанных, + | ВидыКонтактнойИнформации.Тип КАК Тип, + | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, + | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, + | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, + | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, + | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, + | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтроки, + | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, + | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ЛЕВОЕ СОЕДИНЕНИЕ + | КонтактнаяИнформация КАК КонтактнаяИнформация + |ПО + | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид + |ГДЕ + | НЕ ВидыКонтактнойИнформации.ПометкаУдаления + | И ( + | ВидыКонтактнойИнформации.Родитель=&ГруппаВидовКИ + | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель=&ГруппаВидовКИ + | ) + |УПОРЯДОЧИТЬ ПО + | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ + |"; + + Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", Объект.КонтактнаяИнформация.Выгрузить()); + КонецЕсли; + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект); + УстановитьПривилегированныйРежим(Истина); КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией).Строки; УстановитьПривилегированныйРежим(Ложь); @@ -120,7 +166,12 @@ Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда - ИмяВидаКИ = Справочники.ВидыКонтактнойИнформации.ПолучитьИмяПредопределенного(ОбъектКонтактнойИнформации.Вид); + ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; + Если ИмяВидаКИ=Неопределено Тогда + // 8.2 или совместимость + ИмяВидаКИ = Справочники.ВидыКонтактнойИнформации.ПолучитьИмяПредопределенного(ОбъектКонтактнойИнформации.Вид); + КонецЕсли; + Поз = Найти(ИмяВидаКИ, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); @@ -152,11 +203,21 @@ КонецЦикла; Иначе - ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + КонтактнаяИнформация.Индекс(ОбъектКонтактнойИнформации); - ОбъектКонтактнойИнформации.Комментарий = КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(ОбъектКонтактнойИнформации.ЗначенияПолей); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка500, , ОбъектКонтактнойИнформации.Наименование, Истина)); + // При обнаружении ошибок распознавания не прерываем генерацию + Попытка + ОбъектКонтактнойИнформации.Комментарий = КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(ОбъектКонтактнойИнформации.ЗначенияПолей); + Исключение + ЗаписьЖурналаРегистрации(КонтактнаяИнформацияСлужебныйПовтИсп.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , ОбъектКонтактнойИнформации.ЗначенияПолей, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru='Ошибка анализа контактной информации, возможно неверный формат значений полей.'"), , + ОбъектКонтактнойИнформации.ИмяРеквизита); + КонецПопытки; КонецЕсли; КонецЦикла; @@ -191,7 +252,7 @@ Если СтрокаКИ.ЭтоРеквизитТабличнойЧасти Тогда - ИмяВидаКИ = Справочники.ВидыКонтактнойИнформации.ПолучитьИмяПредопределенного(СтрокаКИ.Вид); + ИмяВидаКИ = ОбщегоНазначения.ИмяПредопределенного(СтрокаКИ.Вид); Поз = Найти(ИмяВидаКИ, ИмяОбъекта); ИмяТабличнойЧасти = Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); @@ -293,7 +354,7 @@ ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода", Форма, Родитель, ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная, 5); - ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.Отступ; + ГруппаКоманды.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыОтступ(); ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода"; Команда = Форма.Команды.Добавить(ИмяКоманды); @@ -301,6 +362,8 @@ Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Истина; + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); @@ -321,6 +384,7 @@ Для Каждого Реквизит Из СписокРеквизитовФормы Цикл Если Реквизит.Имя = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов" Тогда ПовторныйЗапуск = Истина; + Прервать; КонецЕсли; КонецЦикла; @@ -537,12 +601,16 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Чтение контактной информации другими подсистемами + // Проверяет адрес на соответствие российского адреса требованиям к адресной информации // // Параметры: // СтруктураПолейАдреса - Структура, СписокЗначений, Строка, содержащая поля адресной информации // Структура и СписокЗначений, содержит имена полей адреса и их значения, -// Строка - содержит строки с именами полей и их значениями +// Строка - строка XML контактной информации или содержит строки с именами +// полей и их значениями. // // ВидКонтактнойИнформации - необязательная ссылка на справочник "Виды контактной информации" // соответствующая проверяемому адресу @@ -565,8 +633,387 @@ Возврат КонтактнаяИнформацияСлужебный.ОшибкиЗаполненияАдреса(СтруктураПолейАдреса, ВидКонтактнойИнформации, Истина); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Чтение контактной информации другими подсистемами +// Преобразует все входящие форматы контактной информации в 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Строка); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + АдресРФ = КонтактнаяИнформацияСлужебный.РоссийскийАдрес(XDTOАдрес.Состав); + Если АдресРФ=Неопределено Тогда + ВызватьИсключение НСтр("ru='Невозможно определить адрес по документу, ожидается адрес РФ'"); + КонецЕсли; + + Если НовоеЗначение<>Неопределено Тогда + АдресРФ.Адрес_по_документу = НовоеЗначение; + XMLСтрока = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(XDTOАдрес); + КонецЕсли; + + Возврат Строка(АдресРФ.Адрес_по_документу); +КонецФункции + +// Возвращает информацию о стране адреса +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию. +// +// Возвращаемое значение: +// Структура с полями "Ссылка", "Наименование", "Ссылка", "Код", "НаименованиеПолное", "КодАльфа2", "КодАльфа3", +// которая описывает страну адреса. +// +// Если передана пустая строка, то возвращается пустая структура. +// Если страна не найдена в справочнике, то но найдена в классфикаторе, то поле "Ссылка" не заполнено +// Если страна не найдена ни в адресе, ни в классификаторе, то будет заполнено только поле "Наименование" +// +// Если переданная строка не содержит информации об адресе, то будет вызвано исключение +// +Функция СтранаАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт + + Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + Если ПустаяСтрока(XMLСтрока) Тогда + Возврат Результат; + КонецЕсли; + + // Читаем наименование страны + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XMLСтрока); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Адрес = XDTOАдрес.Состав; + Если Адрес=Неопределено Или Адрес.Тип()<>ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ВызватьИсключение НСтр("ru='Невозможно определить страну, ожидается адрес.'"); + КонецЕсли; + + Результат.Наименование = СокрЛП(Адрес.Страна); + ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, Результат.Наименование); + Возврат ?(ДанныеСтраны=Неопределено, Результат, ДанныеСтраны); +КонецФункции + +// Возвращает наименование субъекта РФ для адреса или пустую строку, если субъект не определен +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию. +// +// Если переданная строка не содержит информации об адресе, то будет вызвано исключение +// +Функция РегионАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт + Если ПустаяСтрока(XMLСтрока) Тогда + Возврат ""; + КонецЕсли; + + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XMLСтрока); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Адрес = XDTOАдрес.Состав; + Если Адрес=Неопределено Или Адрес.Тип()<>ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ВызватьИсключение НСтр("ru='Невозможно определить субъекта РФ, ожидается адрес.'"); + КонецЕсли; + + АдресРФ = КонтактнаяИнформацияСлужебный.РоссийскийАдрес(Адрес); + Возврат ?(АдресРФ=Неопределено, "", СокрЛП(АдресРФ.СубъектРФ)); +КонецФункции + +// Возвращает наименование города для адреса РФ или пустую строку для иностранного адреса +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию. +// +// Если переданная строка не содержит информации об адресе, то будет вызвано исключение +// +Функция ГородАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт + Если ПустаяСтрока(XMLСтрока) Тогда + Возврат ""; + КонецЕсли; + + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XMLСтрока); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Адрес = XDTOАдрес.Состав; + Если Адрес=Неопределено Или Адрес.Тип()<>ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + ВызватьИсключение НСтр("ru='Невозможно определить город, ожидается адрес.'"); + КонецЕсли; + + АдресРФ = КонтактнаяИнформацияСлужебный.РоссийскийАдрес(Адрес); + Возврат ?(АдресРФ=Неопределено, "", СокрЛП(АдресРФ.Город)); +КонецФункции + +// Возвращает домен сетевого адреса для веб-ссылки или адреса электронной почты +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию. +// +Функция ДоменАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт + Если ПустаяСтрока(XMLСтрока) Тогда + Возврат ""; + КонецЕсли; + + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XMLСтрока); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Состав = XDTOАдрес.Состав; + Если Состав<>Неопределено Тогда + Тип = Состав.Тип(); + Если Тип=ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + ДоменАдреса = СокрЛП(Состав.Значение); + Позиция = Найти(ДоменАдреса, "://"); + Если Позиция>0 Тогда + ДоменАдреса = Сред(ДоменАдреса, Позиция + 3); + КонецЕсли; + Позиция = Найти(ДоменАдреса, "/"); + Возврат ?(Позиция=0, ДоменАдреса, Лев(ДоменАдреса, Позиция - 1)); + + ИначеЕсли Тип=ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта") Тогда + ДоменАдреса = СокрЛП(Состав.Значение); + Позиция = Найти(ДоменАдреса, "@"); + Возврат ?(Позиция=0, ДоменАдреса, Сред(ДоменАдреса, Позиция + 1)); + + КонецЕсли; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Невозможно определить домен, ожидается электронная почта или веб-ссылка.'"); +КонецФункции + +// Возвращает строку с номером телефона без кода и дополнительного номера +// +// Параметры: +// XMLСтрока - строка, описывающая контактную информацию. +// +Функция НомерТелефонаКонтактнойИнформации(Знач XMLСтрока) Экспорт + Если ПустаяСтрока(XMLСтрока) Тогда + Возврат ""; + КонецЕсли; + + ПространствоИмен = КонтактнаяИнформацияКлиентСерверПовтИсп.ПространствоИмен(); + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(XMLСтрока); + XDTOАдрес = ФабрикаXDTO.ПрочитатьXML(Чтение, ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Состав = XDTOАдрес.Состав; + Если Состав<>Неопределено Тогда + Тип = Состав.Тип(); + Если Тип=ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона") Тогда + Возврат СокрЛП(Состав.Номер); + + ИначеЕсли Тип=ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса") Тогда + Возврат СокрЛП(Состав.Номер); + + КонецЕсли; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Невозможно определить номер, ожидается телефона или факс.'"); +КонецФункции + +// Сравнивает два экземпляра контактной инфромации. +// +// Параметры: +// Данные1, Данные2 - данные экземпляров контактной информации. Каждый параметр независимо может принимать +// значения следующих типов: +// - ОбъектXTDO. Рассматривается как объект с контактной информацией +// - Строка. Рассматривается как контактная информация в формате XML +// - Структура, описывающие контактную информацию. Ожидаются поля: +// ЗначенияПолей - строка (XML или старый формат ключ-значение), структура, список значений, +// соответствие. Если в этом поле передана строка XML, то остальные поля +// структуры игнорируются. +// Представление - строка представления. Используется в случае, если не удалось вычислить +// представление из ЗначенияПолей (отсутствие в них поля Представление) +// ВидКонтактнойИнформации - ссылка на справочник ВидыКонтактнойИнформации или значение перечисления +// ТипыКонтактнойИнформации. Используется в случае, если не удалось вычислить +// тип из ЗначенияПолей +// Комментарий - строка комментария. Используется в случае, если не удалось вычислить +// комментарий из ЗначенияПолей +// +// Возвращает таблицу отличающихся полей со следующими колонками: +// Путь - строка XPath, идентифицирующая различающееся значение. Значение "ТипКонтактнойИнформации" означает, +// что переданные экземпляры контактной информации различаются типом. +// Описание - строка описания отличающегося реквизита в терминах предметной области +// Значение1 - строка значения, соответствующая объекту, переданному в параметре Данные1 +// Значение2 - строка значения, соответствующая объекту, переданному в параметре Данные2 +// +Функция РазличияКонтактнойИнформации(Знач Данные1, Знач Данные2) Экспорт + Возврат КонтактнаяИнформацияXML.РазличияКонтактнойИнформации(Данные1, Данные2); +КонецФункции + +// Преобразует данные нового формата XML контактной информации в старый формат +// +// Параметры: +// Данные - строка значений полей в новом формате (xml) +// СтарыйСоставПолей - булево - необязательный флаг того, что из состава полей будут исключены +// поля, отсутствующие в версиях БСП младше 2.1.3 +// +// Возвращаемое значение: +// Строка с набором пар ключ-значение, разделенных переносом строки +// +Функция ПредыдущийФорматКонтактнойИнформацииXML(Знач Данные, Знач СтарыйСоставПолей=Ложь) Экспорт + + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда + СтарыйФормат = КонтактнаяИнформацияСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(Данные, СтарыйСоставПолей); + Возврат УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСписокПолейВСтроку( + СтарыйФормат.ЗначенияПолей, Ложь); + КонецЕсли; + + Возврат Данные; +КонецФункции + +// Преобразует данные нового формата XML контактной информации в структуру старого формата +// +// Параметры: +// Данные - строка значений полей, в новом формате (xml) или в старом (ключ=значение) +// ВидКонтактнойИнформации - необязательная ссылка на справочник вида, используется, если "Данные" - пустая строка +// +// Возвращаемое значение: +// Структура с набором пар ключ-значение +// +Функция ПредыдущаяСтруктураКонтактнойИнформацииXML(Знач Данные, Знач ВидКонтактнойИнформации=Неопределено) Экспорт + + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Данные) Тогда + // Новый формат КИ + Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей( + ПредыдущийФорматКонтактнойИнформацииXML(Данные)); + + ИначеЕсли ПустаяСтрока(Данные) И ВидКонтактнойИнформации<>Неопределено Тогда + // Генерируем по виду + Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( + ВидКонтактнойИнформации.Тип); + + КонецЕсли; + + // Возвращаем полную структуру для данного вида с заполненными полями + Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Определяет данные страны по справочнику стран или классификатору ОКСМ +// +// Параметры: +// КодСтраны - строка или число с кодом ОКСМ страны. Если не указано, то поиск по коду не производится +// Наименование - наименование страны. Если не указано, то поиск по наименованию не производится +// +// Возвращаемое значение: +// Структура с полями "Ссылка", "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3", +// Если страна не найдена в справочнике, но найдена в классфикаторе, то поле "Ссылка" не заполнено +// +// Если страна не найдена ни в адресе, ни в классификаторе, то возвращается значение Неопределено +// +Функция ДанныеСтраныМира(Знач КодСтраны=Неопределено, Знач Наименование=Неопределено) Экспорт + Возврат Справочники.СтраныМира.ДанныеСтраныМира(КодСтраны, Наименование); +КонецФункции + +// Определяет данные страны по классификатору ОКСМ +// +// Параметры: +// КодСтраны - строка кода страны или числовой код +// +// Возвращаемое значение: +// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" +// - в случае отсутствия страны в классификаторе - Неопределено +// +Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт + Возврат Справочники.СтраныМира.ДанныеКлассификатораСтранМираПоКоду(КодСтраны); +КонецФункции + +// Определяет данные страны по классификатору ОКСМ +// +// Параметры: +// Наименование - строка наименования страны +// +// Возвращаемое значение: +// - в случае успеха - структура с полями "Код", "Наименование", "НаименованиеПолное", "КодАльфа2", "КодАльфа3" +// - в случае отсутствия страны в классификаторе - Неопределено +// +Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт + Возврат Справочники.СтраныМира.ДанныеКлассификатораСтранМираПоНаименованию(Наименование); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Устарело. В будущем необходимо использовать "КонтактнаяИнформацияОбъекта" +// +Функция ПолучитьКонтактнуюИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт + Возврат КонтактнаяИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации); +КонецФункции // Получить значение определенного вида контактной информации у объекта. // @@ -577,7 +1024,7 @@ // Возвращаемое значение: // Строка - строковое представление значения. // -Функция ПолучитьКонтактнуюИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт +Функция КонтактнаяИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(Ссылка); @@ -618,8 +1065,7 @@ | И Данные.Вид = &Вид |УПОРЯДОЧИТЬ ПО | Данные.ИдентификаторСтрокиТабличнойЧасти - |", Ссылка.Метаданные().ПолноеИмя() - )); + |", Ссылка.Метаданные().ПолноеИмя())); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Вид", ВидКонтактнойИнформации); @@ -634,8 +1080,7 @@ СтрокаДанных = Результат.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаДанных, Выборка, "НомерСтроки, Представление"); СтрокаДанных.СтруктураПолей = КонтактнаяИнформацияСлужебный.ПредыдущаяСтруктураКонтактнойИнформацииXML( - Выборка.ЗначенияПолей, ВидКонтактнойИнформации - ); + Выборка.ЗначенияПолей, ВидКонтактнойИнформации); КонецЦикла; Возврат Результат; @@ -658,38 +1103,37 @@ // ЗначенияПолей // Представление // -Процедура СоздатьВТКонтактнаяИнформация(МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено) Экспорт +Процедура СоздатьВТКонтактнаяИнформация(МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ=Неопределено, ВидыКИ=Неопределено) Экспорт + + Если ТипЗнч(МассивОбъектов) = Тип("Массив") И МассивОбъектов.Количество() > 0 Тогда + Ссылка = МассивОбъектов.Получить(0); + Иначе + ВызватьИсключение НСтр("ru='Неверное значение для массива владельцев контактной информации.'"); + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Ссылка КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.Представление КАК Представление + |ПОМЕСТИТЬ ВТКонтактнаяИнформация + |ИЗ + | " + Ссылка.Метаданные().ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка В (&МассивОбъектов) + | " + ?(ТипыКИ=Неопределено, "", "И КонтактнаяИнформация.Тип В (&ТипыКИ)") + " + | " + ?(ВидыКИ=Неопределено, "", "И КонтактнаяИнформация.Вид В (&ВидыКИ)") + " + |"); - Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); Запрос.УстановитьПараметр("ТипыКИ", ТипыКИ); Запрос.УстановитьПараметр("ВидыКИ", ВидыКИ); - Если ТипЗнч(МассивОбъектов) = Тип("Массив") И МассивОбъектов.Количество() > 0 Тогда - Ссылка = МассивОбъектов.Получить(0); - КонецЕсли; - - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КонтактнаяИнформация.Ссылка КАК Объект, - | КонтактнаяИнформация.Вид КАК Вид, - | КонтактнаяИнформация.Тип КАК Тип, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.Представление КАК Представление - |ПОМЕСТИТЬ ВТКонтактнаяИнформация - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация - |ГДЕ - | КонтактнаяИнформация.Ссылка В(&МассивОбъектов) - | И (КонтактнаяИнформация.Тип В (&ТипыКИ) - | ИЛИ &ТипыКИ = НЕОПРЕДЕЛЕНО) - | И (КонтактнаяИнформация.Вид В (&ВидыКИ) - | ИЛИ &ВидыКИ = НЕОПРЕДЕЛЕНО)"; - Запрос.Выполнить(); - КонецПроцедуры // Предназначена для получения контактной информации для нескольких объектов @@ -833,17 +1277,63 @@ "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления" ].Добавить("УправлениеКонтактнойИнформацией"); - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных\ПриОпределенииСтандартныхТиповОбщихДанных" - ].Добавить("УправлениеКонтактнойИнформацией"); +КонецПроцедуры + +// Возвращает значение перечисления тип вида контактной информации +// +// Параметры: +// ВидИнформации - перечисление типа, ссылка на справочник ВидыКонтактнойИнформации или объект +// с полем "Тип" +// +Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт + Результат = Неопределено; + + Тип = ТипЗнч(ВидИнформации); + Если Тип=Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда + Результат = ВидИнформации; + ИначеЕсли Тип=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Результат = ВидИнформации.Тип; + ИначеЕсли ВидИнформации<>Неопределено Тогда + Данные = Новый Структура("Тип"); + ЗаполнитьЗначенияСвойств(Данные, ВидИнформации); + Результат = Данные.Тип; КонецЕсли; -КонецПроцедуры + Возврат Результат; +КонецФункции //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +Процедура ОбработкаЗаполненияКонтактнойИнформации(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт + + Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Заполним наименование + Наименование = ""; + Если ДанныеЗаполнения.Свойство("Наименование", Наименование) Тогда + Источник.Наименование = Наименование; + КонецЕсли; + + // Заполним контактную информацию + КонтактнаяИнформация = Неопределено; + Если ДанныеЗаполнения.Свойство("КонтактнаяИнформация", КонтактнаяИнформация) Тогда + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл + + НоваяСтрокаКИ = Источник.КонтактнаяИнформация.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ); + + Если ТипЗнч(СтрокаКИ.ЗначенияПолей) = Тип("СписокЗначений") Тогда + НоваяСтрокаКИ.ЗначенияПолей = Новый ХранилищеЗначения(СтрокаКИ.ЗначенияПолей); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + // Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника) // // Параметры: @@ -865,7 +1355,7 @@ КонецПроцедуры -// Будет удалено в следующем релизе БСП. Необходимо использовать вызов процедуры "ЗаполнитьКонтактнуюИнформацию" +// Устарело. Будет удалено в следующем релизе БСП. Необходимо использовать "ЗаполнитьКонтактнуюИнформацию" Процедура ЗаполнитьКонтактнуюИнофрмацию(Источник, Приемник) Экспорт ЗаполнитьКонтактнуюИнформацию(Источник, Приемник); КонецПроцедуры @@ -1155,9 +1645,10 @@ Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; Кнопка.Заголовок = НСтр("ru='Ввести комментарий'"); Кнопка.ИмяКоманды = ИмяКоманды; + Команда.ИзменяетСохраняемыеДанные = Истина; + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); - КонецЕсли; Если ОбязательноеЗаполнение И ЭтоНовыйВидКИ Тогда @@ -1194,6 +1685,7 @@ ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); Команда.Отображение = ОтображениеКнопки.Картинка; Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Элемент = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаДействий); ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 2); Элемент.ИмяКоманды = ИмяКоманды; @@ -1203,6 +1695,7 @@ Элемент.Заголовок = НСтр("ru='Заполнить'"); Команда.Подсказка = НСтр("ru='Заполнить адрес'"); Команда.Картинка = БиблиотекаКартинок.ПереместитьВлево; + Команда.ИзменяетСохраняемыеДанные = Истина; ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда @@ -1277,18 +1770,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП -// Заполняет массив типов неразделенных данных. Он используется при обновлении ссылок -// при загрузке-выгрузке конфигурации -// -// Параметры: -// МассивТипов - массив -// -Процедура ПриОпределенииСтандартныхТиповОбщихДанных(Знач МассивТипов) Экспорт - - МассивТипов.Добавить(Тип("СправочникСсылка.СтраныМира")); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Заполнение дополнительных реквизитов табличной части "Контактная информация" @@ -1655,31 +2136,35 @@ // Заполняет дополнительные реквизиты строки табличной части "Контактная информация" // // Параметры: -// СтрокаКИ - строка табличной части "Контактная информация" -// Представление - Строка, представление значения -// ЗначенияПолей - список значений, значения полей +// СтрокаКИ - строка табличной части "Контактная информация" +// Представление - Строка - представление значения +// ЗначенияПолей - СписокЗначений, ОбъектXTDO - значения полей // Процедура ЗаполнитьДополнительныеРеквизитыКонтактнойИнформации(СтрокаКИ, Представление, ЗначенияПолей) - // Заполним значения дополнительных реквизитов таб. части - Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - // Email - СообщениеОбОшибке = ""; - ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаКИ, СообщениеОбОшибке); - Если НЕ ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , Представление); - Отказ = Истина; - КонецЕсли; - ИначеЕсли СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - // Адрес - ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКИ, ЗначенияПолей); - ИначеЕсли СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон - Или СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда - // Телефон/факс - ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКИ, ЗначенияПолей); - ИначеЕсли СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - // WWW - ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаКИ, ЗначенияПолей); + Если ТипЗнч(ЗначенияПолей)=Тип("ОбъектXDTO") Тогда + ОбъектКИ = ЗначенияПолей; + Иначе + ОбъектКИ = КонтактнаяИнформацияСлужебный.ДесериализацияКонтактнойИнформации(ЗначенияПолей, СтрокаКИ.Вид); + КонецЕсли; + + ТипИнформации = СтрокаКИ.Тип; + + Если ТипИнформации=Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаКИ, ОбъектКИ); + + ИначеЕсли ТипИнформации=Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаКИ, ОбъектКИ); + + ИначеЕсли ТипИнформации=Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКИ, ОбъектКИ); + + ИначеЕсли ТипИнформации=Перечисления.ТипыКонтактнойИнформации.Факс Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаКИ, ОбъектКИ); + + ИначеЕсли ТипИнформации=Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаКИ, ОбъектКИ); + КонецЕсли; КонецПроцедуры @@ -1728,7 +2213,7 @@ Функция ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъекта) Экспорт ГруппаВидаКИ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидКИ, "Родитель"); - ИмяВидаКИ = Справочники.ВидыКонтактнойИнформации.ПолучитьИмяПредопределенного(ГруппаВидаКИ); + ИмяВидаКИ = ОбщегоНазначения.ИмяПредопределенного(ГруппаВидаКИ); Поз = Найти(ИмяВидаКИ, ИмяОбъекта); Возврат Сред(ИмяВидаКИ, Поз + СтрДлина(ИмяОбъекта)); @@ -1812,12 +2297,158 @@ // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.1.3.50"; - Обработчик.Процедура = "УправлениеКонтактнойИнформацией.ЗагрузитьСтраныМира"; - Обработчик.ОбщиеДанные = Истина; + // Разделение стран мира + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.8"; + Обработчик.Процедура = "УправлениеКонтактнойИнформацией.ПодготовкаЭталонаРазделенныхСтранМира"; + Обработчик.МонопольныйРежим = Истина; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.8"; + Обработчик.Процедура = "УправлениеКонтактнойИнформацией.ОбновлениеПоЭталонуРазделенныхСтранМира"; + Обработчик.МонопольныйРежим = Истина; + Обработчик.ОбщиеДанные = Ложь; + КонецЕсли; -КонецПроцедуры + // Штатное обновление классификатора без добавления новых стран + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.4.9"; + Обработчик.Процедура = "УправлениеКонтактнойИнформацией.ОбработчикОбновленияСуществующихСтранМира"; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.ОбщиеДанные = Ложь; + +КонецПроцедуры + +// Неразделенный монопольный обработчик для копирования стран мира из нулевой области +// Сохраняет эталон и список областей данных - адресатов +Процедура ПодготовкаЭталонаРазделенныхСтранМира() Экспорт + УстановитьПривилегированныйРежим(Истина); + + // Контроль версии базы + ИмяРегистраЭталона = "УдалитьСтраныМира"; + Если Метаданные.РегистрыСведений.Найти(ИмяРегистраЭталона)=Неопределено Тогда + Возврат; + КонецЕсли; + + // Запрашиваем данные из нулевой области, создаем эталон с точностью до ссылки + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, 0); + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | Справочник.Ссылка КАК Ссылка, + | Справочник.Код КАК Код, + | Справочник.Наименование КАК Наименование, + | Справочник.КодАльфа2 КАК КодАльфа2, + | Справочник.КодАльфа3 КАК КодАльфа3, + | Справочник.НаименованиеПолное КАК НаименованиеПолное + |ИЗ + | Справочник.СтраныМира КАК Справочник + |"); + Эталон = Запрос.Выполнить().Выгрузить(); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + // Пишем сам эталон + Набор = РегистрыСведений[ИмяРегистраЭталона].СоздатьНаборЗаписей(); + Набор.Добавить().Значение = Новый ХранилищеЗначения(Эталон, Новый СжатиеДанных(9)); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + + // Адресаты обновления + Менеджер = РегистрыСведений[ИмяРегистраЭталона].СоздатьМенеджерЗаписи(); + Запрос.Текст = " + |ВЫБРАТЬ + | ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных + |ГДЕ + | Статус=ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) + | И ОбластьДанныхВспомогательныеДанные<>0 + |"; + Отбор = Набор.Отбор.ОбластьДанных; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Отбор.Установить(Выборка.ОбластьДанных); + Набор.Очистить(); + Набор.Добавить().ОбластьДанных = Выборка.ОбластьДанных; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + КонецЦикла; + +КонецПроцедуры + +// Разделенный обработчик для копирования стран мира из нулевой области +// Используется эталон, подготовленный на предыдущем шаге +Процедура ОбновлениеПоЭталонуРазделенныхСтранМира() Экспорт + + // Контроль версии базы + ИмяРегистраЭталона = "УдалитьСтраныМира"; + Если Метаданные.РегистрыСведений.Найти(ИмяРегистраЭталона)=Неопределено Тогда + Возврат; + КонецЕсли; + + // Ищем эталон для текущей области + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | Эталон.Значение + |ИЗ + | РегистрСведений.УдалитьСтраныМира КАК Адресаты + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.УдалитьСтраныМира КАК Эталон + |ПО + | Эталон.ОбластьДанных = 0 + |ГДЕ + | Адресаты.ОбластьДанных = &ОбластьДанных + |"); + Запрос.УстановитьПараметр("ОбластьДанных", ПараметрыСеанса["ОбластьДанныхЗначение"]); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + // Текущую область не надо обновлять + Возврат; + КонецЕсли; + + Эталон = Результат.Выгрузить()[0].Значение.Получить(); + Запрос = Новый Запрос(" + |ВЫБРАТЬ + | Данные.Ссылка КАК Ссылка, + | Данные.Код КАК Код, + | Данные.Наименование КАК Наименование, + | Данные.КодАльфа2 КАК КодАльфа2, + | Данные.КодАльфа3 КАК КодАльфа3, + | Данные.НаименованиеПолное КАК НаименованиеПолное + |ПОМЕСТИТЬ + | Эталон + |ИЗ + | &Данные КАК Данные + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |;/////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Эталон.Ссылка КАК Ссылка, + | Эталон.Код КАК Код, + | Эталон.Наименование КАК Наименование, + | Эталон.КодАльфа2 КАК КодАльфа2, + | Эталон.КодАльфа3 КАК КодАльфа3, + | Эталон.НаименованиеПолное КАК НаименованиеПолное + |ИЗ + | Эталон КАК Эталон + |ЛЕВОЕ СОЕДИНЕНИЕ + | Справочник.СтраныМира КАК СтраныМира + |ПО + | СтраныМира.Ссылка = Эталон.Ссылка + |ГДЕ + | СтраныМира.Ссылка ЕСТЬ NULL + |"); + Запрос.УстановитьПараметр("Данные", Эталон); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Страна = Справочники.СтраныМира.СоздатьЭлемент(); + Страна.УстановитьСсылкуНового(Выборка.Ссылка); + ЗаполнитьЗначенияСвойств(Страна, Выборка, , "Ссылка"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Страна); + КонецЦикла; + +КонецПроцедуры // Обновляет один вид контактной информации. // @@ -1833,7 +2464,6 @@ Порядок = Неопределено) Экспорт Объект = ВидКИ.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); Объект.Тип = Тип; Объект.МожноИзменятьСпособРедактирования = МожноИзменятьСпособРедактирования; Объект.РедактированиеТолькоВДиалоге = РедактированиеТолькоВДиалоге; @@ -1841,8 +2471,7 @@ Если Порядок <> Неопределено Тогда Объект.РеквизитДопУпорядочивания = Порядок; КонецЕсли; - - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецПроцедуры @@ -1855,7 +2484,10 @@ // МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять настройки вида, Ложь - иначе. // РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, Ложь - иначе. // ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное заполнение поля, Ложь - иначе. -// Порядок - Неопределено или Число - порядок вида контактной информации. +// Порядок - Неопределено или Число - порядок вида контактной информации, положение в списке относительно других элементов: +// Неопределено - не переназначать; +// 0 - назначить автоматически; +// Число > 0 - назначить указанный порядок. // РазрешитьВводНесколькихЗначений - Булево - Признак возможности использования дополнительных полей ввода для данного вида. // НастройкиПроверки // Для типа Адрес - Структура @@ -1873,12 +2505,18 @@ // Установка параметра ПроверятьКорректность в значение Истина требует так же установить параметр // ЗапрещатьВводНекорректного в значение Истина. // +// При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения. Если после выполнения обновления значения +// порядка окажутся неуникальными в пределах группы, то настройка порядка пользователем будет невозможна. +// В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением 0 (порядок будет назначен автоматически в подсистеме +// "Настройка порядка элементов" при выполнении процедуры). +// Для размещения видов КИ в определённой последовательности относительно друг друга без явного размещения в начале списка достаточно вызывать данную процедуру +// в нужной последовательности для каждого вида КИ с указанием порядка 0. +// Если добавляется предопределённый вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде. +// Процедура ОбновитьВидКонтактнойИнформации(Вид, Тип, Подсказка, МожноИзменятьСпособРедактирования, РедактированиеТолькоВДиалоге, ОбязательноеЗаполнение, Порядок = Неопределено, РазрешитьВводНесколькихЗначений = Ложь, НастройкиПроверки = Неопределено) Экспорт Объект = Вид.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); - Объект.Тип = Тип; Объект.Подсказка = Подсказка; Объект.МожноИзменятьСпособРедактирования = МожноИзменятьСпособРедактирования; @@ -1943,62 +2581,35 @@ УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки); Иначе - УстановитьЗначенияРеквизитовПроверки(Объект); - КонецЕсли; Если Порядок <> Неопределено Тогда Объект.РеквизитДопУпорядочивания = Порядок; КонецЕсли; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецПроцедуры -// Обновить справочник стран мира согласно данным из макета Справочники.СтраныМира.Макеты.Классификатор. -// Идентификация существующих элементов в справочнике выполняется по полю Код. +// Загружаем все страны мира из классификатора принудительно // Процедура ЗагрузитьСтраныМира() Экспорт - - Запрос = Новый Запрос(" - |ВЫБРАТЬ - | СтраныМира.Ссылка КАК Ссылка, - | СтраныМира.Код КАК Код, - | СтраныМира.Наименование КАК Наименование, - | СтраныМира.КодАльфа2 КАК КодАльфа2, - | СтраныМира.КодАльфа3 КАК КодАльфа3, - | СтраныМира.НаименованиеПолное КАК НаименованиеПолное - |ИЗ - | Справочник.СтраныМира КАК СтраныМира - |"); - СтраныМира = Запрос.Выполнить().Выгрузить(); - СтраныМира.Индексы.Добавить("Код"); - - Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); - - ДанныеКлассификатора = ОбщегоНазначения.ТаблицаЗначенийИзXML(Макет.ПолучитьТекст()); - - // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных - Для Каждого СтрокаКлассификатора Из ДанныеКлассификатора.Данные Цикл - СтрокаСправочника = СтраныМира.Найти(СтрокаКлассификатора.Код, "Код"); - Если СтрокаСправочника=Неопределено Тогда - // Добавление страны - Страна = Справочники.СтраныМира.СоздатьЭлемент(); - ИначеЕсли СтрокаСправочника.Наименование<>СтрокаКлассификатора.Наименование - Или СтрокаСправочника.КодАльфа2<>СтрокаКлассификатора.КодАльфа2 - Или СтрокаСправочника.КодАльфа3<>СтрокаКлассификатора.КодАльфа3 - Или СтрокаСправочника.НаименованиеПолное<>СтрокаКлассификатора.НаименованиеПолное - Тогда - // Изменение страны - Страна = СтрокаСправочника.Ссылка.ПолучитьОбъект(); - Иначе - Продолжить; - КонецЕсли; - ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); - Страна.Записать(); - КонецЦикла; - + Справочники.СтраныМира.ОбновитьСтраныМираПоКлассификатору(Истина); +КонецПроцедуры + +// Обновляем только существующие элементы стран мира по классификатору +Процедура ОбновитьСуществующиеСтраныМира() Экспорт + Справочники.СтраныМира.ОбновитьСтраныМираПоКлассификатору(); +КонецПроцедуры + +// Обновляем только существующие элементы стран мира по классификатору, исключения не выбрасываем +Процедура ОбработчикОбновленияСуществующихСтранМира() Экспорт + Попытка + Справочники.СтраныМира.ОбновитьСтраныМираПоКлассификатору(); + Исключение + // Действие не требуется, информация записана в журнал + КонецПопытки; КонецПроцедуры // Получить значения определенного типа контактной информации у объекта. @@ -2026,20 +2637,20 @@ Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформацияОбъекта.Представление, - | КонтактнаяИнформацияОбъекта.Вид.Представление КАК Вид + | КонтактнаяИнформацияОбъекта.Вид |ПОМЕСТИТЬ ВТКонтактнаяИнформацияОбъекта |ИЗ - | КонтактнаяИнформацияОбъекта КАК КонтактнаяИнформацияОбъекта + | &КонтактнаяИнформацияОбъекта КАК КонтактнаяИнформацияОбъекта |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КонтактнаяИнформацияОбъекта.Представление КАК Значение, - | КонтактнаяИнформацияОбъекта.Вид КАК Вид + | ПРЕДСТАВЛЕНИЕ(КонтактнаяИнформацияОбъекта.Вид) КАК Вид |ИЗ | ВТКонтактнаяИнформацияОбъекта КАК КонтактнаяИнформацияОбъекта"; - Возврат КонтактнаяИнформацияОбъекта; + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции @@ -2087,6 +2698,21 @@ КонецФункции + +// Конструктор структуры, совместимой по полям сл справочникам видов КИ +// +Функция СтруктураВидаКонтактнойИнформации() Экспорт + + Результат = Новый Структура; + Для Каждого Мета Из Метаданные.Справочники.ВидыКонтактнойИнформации.Реквизиты Цикл + Результат.Вставить(Мета.Имя, Мета.Тип.ПривестиЗначение()); + КонецЦикла; + + Возврат Результат; +КонецФункции + + + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -2117,8 +2743,8 @@ Процедура ПриОпределенииЗаписейПоИндексу(Индекс, АдресныеОбъекты) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - АдресныеОбъекты = Модуль.НайтиЗаписиПоИндексу(Индекс); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + АдресныеОбъекты = МодульАдресныйКлассификатор.НайтиЗаписиПоИндексу(Индекс); КонецЕсли; КонецПроцедуры @@ -2138,8 +2764,8 @@ Процедура ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты(КодАдресногоЭлемента, Результат) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Модуль.ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты(КодАдресногоЭлемента, Результат); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + МодульАдресныйКлассификатор.ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты(КодАдресногоЭлемента, Результат); КонецЕсли; КонецПроцедуры @@ -2165,8 +2791,8 @@ Процедура ПриОпределенииСтруктурыАдреса(СтруктураАдреса, КодАдресногоЭлемента, Дом = "", Корпус = "", Квартира = "") Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Модуль.ПолучитьСтруктуруАдреса(КодАдресногоЭлемента, Дом, Корпус, Квартира); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + МодульАдресныйКлассификатор.ПолучитьСтруктуруАдреса(КодАдресногоЭлемента, Дом, Корпус, Квартира); КонецЕсли; КонецПроцедуры @@ -2189,8 +2815,8 @@ НазваниеУлицы, НомерДома, НомерКорпуса, РодительИндекса = Неопределено) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Индекс = Модуль.ПолучитьИндекс(НазваниеРегиона, НазваниеРайона, НазваниеГорода, + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + Индекс = МодульАдресныйКлассификатор.ПолучитьИндекс(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома, НомерКорпуса, РодительИндекса); КонецЕсли; @@ -2216,8 +2842,8 @@ НаселенныйПункт, УровеньЭлемента, ПризнакАктуальности = 0) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - СписокАвтоПодбора = Модуль.АвтоПодборТекстВАдресномЭлементе(Текст, Регион, Район, Город, + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + СписокАвтоПодбора = МодульАдресныйКлассификатор.АвтоПодборТекстВАдресномЭлементе(Текст, Регион, Район, Город, НаселенныйПункт, УровеньЭлемента, ПризнакАктуальности); КонецЕсли; @@ -2250,8 +2876,8 @@ НазваниеГорода = "", НазваниеНаселенногоПункта = "", НазваниеУлицы = "", НомерДома = "", НомерКорпуса = "") Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - СтруктураПроверки = Модуль.ПроверитьСоответствиеАдресаКЛАДРу(УказанныйИндекс, НазваниеРегиона,НазваниеРайона, + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + СтруктураПроверки = МодульАдресныйКлассификатор.ПроверитьСоответствиеАдресаКЛАДРу(УказанныйИндекс, НазваниеРегиона,НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, НомерДома , НомерКорпуса); КонецЕсли; @@ -2275,8 +2901,8 @@ НазваниеНаселенногоПункта = "", НазваниеУлицы = "", Уровень = 1) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - АдресныйЭлементЗагружен = Модуль.АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + АдресныйЭлементЗагружен = МодульАдресныйКлассификатор.АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, Уровень); КонецЕсли; @@ -2292,8 +2918,8 @@ Процедура ПриОпределенииИмениИАдресногоСокращение(ИмяИАдресноеСокращение, СтрокаЭлемента, АдресноеСокращение) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - ИмяИАдресноеСокращение = Модуль.ПолучитьИмяИАдресноеСокращение(СтрокаЭлемента, АдресноеСокращение); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + ИмяИАдресноеСокращение = МодульАдресныйКлассификатор.ПолучитьИмяИАдресноеСокращение(СтрокаЭлемента, АдресноеСокращение); КонецЕсли; КонецПроцедуры @@ -2318,8 +2944,8 @@ НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - СтруктураЗагруженныхЭлементовАдреса = Модуль.СтруктураЗагруженныхЭлементовАдреса(НазваниеРегиона, + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + СтруктураЗагруженныхЭлементовАдреса = МодульАдресныйКлассификатор.СтруктураЗагруженныхЭлементовАдреса(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); КонецЕсли; @@ -2334,8 +2960,8 @@ Процедура ПриОпределенииНаименованияРегионаПоКоду(НаименованиеРегиона, КодРегиона) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - НаименованиеРегиона = Модуль.ПолучитьНаименованиеРегионаПоКоду(КодРегиона); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + НаименованиеРегиона = МодульАдресныйКлассификатор.ПолучитьНаименованиеРегионаПоКоду(КодРегиона); КонецЕсли; КонецПроцедуры @@ -2349,8 +2975,8 @@ Процедура ПриОпределенииКодаРегионаПоНаименованию(КодРегиона, Регион) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - КодРегиона = Модуль.ПолучитьКодРегионаПоНаименованию(Регион); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + КодРегиона = МодульАдресныйКлассификатор.ПолучитьКодРегионаПоНаименованию(Регион); КонецЕсли; КонецПроцедуры @@ -2368,8 +2994,8 @@ Процедура ПриОпределенииСтрокиАдресногоКлассификатораПоАдреснымЭлементам(СтруктураАдресногоКлассификатора, НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - СтруктураАдресногоКлассификатора = Модуль.ВернутьСтруктуруАдресногоКлассификатораПоАдреснымЭлементам( + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + СтруктураАдресногоКлассификатора = МодульАдресныйКлассификатор.ВернутьСтруктуруАдресногоКлассификатораПоАдреснымЭлементам( НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); КонецЕсли; @@ -2391,9 +3017,9 @@ Процедура ПриОчисткеПотомковПоУровнюАдресногоЭлемента(Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Модуль.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район, Город, - НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + МодульАдресныйКлассификатор.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район, Город, + НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); КонецЕсли; КонецПроцедуры @@ -2416,8 +3042,8 @@ Процедура ПриБлокировкеРеквизитовОбъекта(Форма) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - Модуль = Вычислить("ЗапретРедактированияРеквизитовОбъектов"); - Модуль.ЗаблокироватьРеквизиты(Форма); + МодульЗапретРедактированияРеквизитовОбъектов = Вычислить("ЗапретРедактированияРеквизитовОбъектов"); + МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(Форма); КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl index 6ca158c0e..d95ba8af1 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl @@ -34,17 +34,16 @@ // Функция ПроверитьСоответствиеАдресаКЛАДРу(УказанныйИндекс = "", НазваниеРегиона = "", НазваниеРайона = "", НазваниеГорода = "", НазваниеНаселенногоПункта = "", НазваниеУлицы = "", НомерДома = "", НомерКорпуса = "") Экспорт - + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); - Возврат Модуль.ПроверитьСоответствиеАдресаКЛАДРу(УказанныйИндекс, - НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, - НазваниеУлицы, НомерДома - ); - КонецЕсли; - - Возврат Неопределено; - + МодульАдресныйКлассификатор = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификатор"); + Возврат МодульАдресныйКлассификатор.ПроверитьСоответствиеАдресаКЛАДРу(УказанныйИндекс, + НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, + НазваниеУлицы, НомерДома); + КонецЕсли; + + Возврат Неопределено; + КонецФункции // Устарела. Определяет Используются ли в конфигурации классификаторы diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index fe77ed832..d0a3f528b 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -37,7 +37,7 @@ Возврат; КонецЕсли; - ДанныеСтроки.ЗначенияПолей = КонтактнаяИнформацияВызовСервера.ПарсингКонтактнойИнформацииXML(Текст, ДанныеСтроки.Вид); + ДанныеСтроки.ЗначенияПолей = КонтактнаяИнформацияСлужебныйВызовСервера.ПарсингКонтактнойИнформацииXML(Текст, ДанныеСтроки.Вид); ДанныеСтроки.Представление = Текст; Если ЭтоТабличнаяЧасть Тогда @@ -69,7 +69,8 @@ // Если представление было изменено в поле и не соответствует реквизиту, то приводим в соответствие Если ДанныеЗаполнения[Элемент.Имя]<>Элемент.ТекстРедактирования Тогда ДанныеЗаполнения[Элемент.Имя] = Элемент.ТекстРедактирования; - ДанныеСтроки.ЗначенияПолей = Неопределено + ПредставлениеПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); + Форма.Модифицированность = Истина; КонецЕсли; ПараметрыОткрытия = Новый Структура; @@ -81,39 +82,40 @@ ПараметрыОткрытия.Вставить("Комментарий", ДанныеСтроки.Комментарий); КонецЕсли; - РезультатОткрытияФормы = КонтактнаяИнформацияКлиент.ОткрытьФормуКонтактнойИнформацииМодально(ПараметрыОткрытия); + РезультатОткрытияФормы = ОткрытьФормуКонтактнойИнформацииМодально(ПараметрыОткрытия); Если ТипЗнч(РезультатОткрытияФормы)<>Тип("Структура") Тогда Возврат Результат; КонецЕсли; + ТекстПредставления = СтрЗаменить(РезультатОткрытияФормы.Представление, Символы.ПС, " "); + Если ЭтоТабличнаяЧасть Тогда - ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = РезультатОткрытияФормы.КонтактнаяИнформация; Иначе - Если ПустаяСтрока(ДанныеСтроки.Комментарий) И Не ПустаяСтрока(РезультатОткрытияФормы.Комментарий) Тогда Результат.Вставить("ЭтоДобавлениеКомментария", Истина); + ИначеЕсли Не ПустаяСтрока(ДанныеСтроки.Комментарий) И ПустаяСтрока(РезультатОткрытияФормы.Комментарий) Тогда Результат.Вставить("ЭтоДобавлениеКомментария", Ложь); + Иначе Если Не ПустаяСтрока(ДанныеСтроки.Комментарий) Тогда Форма.Элементы["Комментарий" + Элемент.Имя].Заголовок = РезультатОткрытияФормы.Комментарий; КонецЕсли; + КонецЕсли; - ДанныеСтроки.Представление = РезультатОткрытияФормы.Представление; + ДанныеСтроки.Представление = ТекстПредставления; ДанныеСтроки.ЗначенияПолей = РезультатОткрытияФормы.КонтактнаяИнформация; ДанныеСтроки.Комментарий = РезультатОткрытияФормы.Комментарий; - КонецЕсли; - ДанныеЗаполнения[Элемент.Имя] = РезультатОткрытияФормы.Представление; + ДанныеЗаполнения[Элемент.Имя] = ТекстПредставления; Форма.Модифицированность = Истина; Возврат Результат; - КонецФункции // Событие Очистка в колонке Представление таблицы контактной информации @@ -136,6 +138,36 @@ КонецФункции +// Событие ОбработкаВыбора в поле ввода страны мира +Процедура СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Экспорт + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + ТипВыбранного = ТипЗнч(ВыбранноеЗначение); + Если ТипВыбранного=Тип("Массив") Тогда + СписокПреобразования = Новый Соответствие; + Для Индекс=0 По ВыбранноеЗначение.ВГраница() Цикл + Данные = ВыбранноеЗначение[Индекс]; + Если ТипЗнч(Данные)=Тип("Структура") И Данные.Свойство("Код") Тогда + СписокПреобразования.Вставить(Индекс, Данные.Код); + КонецЕсли; + КонецЦикла; + + Если СписокПреобразования.Количество()>0 Тогда + КонтактнаяИнформацияСлужебныйВызовСервера.КоллекцияСтранМираПоДаннымКлассификатора(СписокПреобразования); + Для Каждого КлючЗначение Из СписокПреобразования Цикл + ВыбранноеЗначение[КлючЗначение.Ключ] = КлючЗначение.Значение; + КонецЦикла; + КонецЕсли; + + ИначеЕсли ТипВыбранного=Тип("Структура") И ВыбранноеЗначение.Свойство("Код") Тогда + ВыбранноеЗначение = КонтактнаяИнформацияСлужебныйВызовСервера.СтранаМираПоДаннымКлассификатора(ВыбранноеЗначение.Код); + + КонецЕсли; + +КонецПроцедуры + // Обработчик дополнительной команды (копирование, активация и.т.п) контактной информации Функция ПодключаемаяКоманда(Форма, Знач ИмяКоманды) Экспорт @@ -199,6 +231,77 @@ КонецПроцедуры +// Конструктор для структуры параметров открытия формы контактной информации +// +// Параметры: +// ВидКонтактнойИнформации - вид редактируемой информации, СправочникСсылка.ВидыКонтактнойИнформации +// Значение - строка с сериализованным значением полей контактной информации +// Представление - необязательное представление +// +Функция ПараметрыФормыКонтактнойИнформации(ВидКонтактнойИнформации, Значение, Представление=Неопределено, Комментарий=Неопределено) Экспорт + Возврат Новый Структура("ВидКонтактнойИнформации, ЗначенияПолей, Представление, Комментарий", + ВидКонтактнойИнформации, Значение, Представление, Комментарий); +КонецФункции + +// Открывает подходящую форму контактной информации для редактирования или просмотра +// +// Параметры: +// Параметры - результат функции ПараметрыФормыКонтактнойИнформации +// Владелец - параметр для открываемой формы +// Уникальность - параметр для открываемой формы +// Окно - параметр для открываемой формы +// +// Возвращаемое значение: необходимая форма +// +Функция ОткрытьФормуКонтактнойИнформации(Параметры, Владелец=Неопределено, Уникальность=Неопределено, Окно=Неопределено) Экспорт + Возврат ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно); +КонецФункции + +// Модально открывает подходящую форму контактной информации для редактирования или просмотра +// +// Параметры: +// Параметры - результат функции ПараметрыФормыКонтактнойИнформации +// Владелец - параметр для открываемой формы +// Уникальность - параметр для открываемой формы +// Окно - параметр для открываемой формы +// +// Возвращаемое значение: необходимая форма +// +Функция ОткрытьФормуКонтактнойИнформацииМодально(Параметры, Владелец=Неопределено, Уникальность=Неопределено, Окно=Неопределено) Экспорт + Возврат ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно, Истина); +КонецФункции + +// Производит действие для экземпляра контактной информации по его типу +// +// Параметры: +// ЗначенияПолей - строка (XML или старый формат ключ-значение), структура, соответствие или список значений, +// описывающие контактную информацию. +// Представление - строка представления. Используется, если невозможно определить представление из параметра +// ЗначенияПолей (отсутствие поля "Представление") +// ОжидаемыйВид - ссылка на справочник ВидыКонтактнойИнформации или перечисление ТипыКонтактнойИнформации, +// объект с полем "Тип". Используется для определения типа, если его невозможно вычислить +// по полю ЗначенияПолей +// +Процедура АктивироватьКонтактнуюИнформацию(Знач ЗначенияПолей, Знач Представление="", ОжидаемыйВид=Неопределено) Экспорт + + КонтактнаяИнформация = КонтактнаяИнформацияСлужебныйВызовСервера.ПривестиКонтактнуюИнформациюXML( + Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, ОжидаемыйВид)); + ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; + + ВсеВиды = "Перечисление.ТипыКонтактнойИнформации."; + Если ТипИнформации=ПредопределенноеЗначение(ВсеВиды + "АдресЭлектроннойПочты") Тогда + СоздатьПисьмоПоКонтактнойИнформации(КонтактнаяИнформация.ДанныеXML); + + ИначеЕсли ТипИнформации=ПредопределенноеЗначение(ВсеВиды + "ВебСтраница") Тогда + ОткрытьСсылкуПоКонтактнойИнформации(КонтактнаяИнформация.ДанныеXML); + + Иначе + ВызватьИсключение СтрЗаменить(НСтр("ru='Нельзя активировать контактную информацию с типом ""%1""'"), + "%1", ТипИнформации); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -399,23 +502,8 @@ Процедура ПриЗагрузкеАдресногоКлассификатора() Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификаторКлиент"); - Модуль.ЗагрузитьАдресныйКлассификатор(); - КонецЕсли; - -КонецПроцедуры - -// Подбирает адресный объект через форму. -// -// Параметры: -// СтруктураАдреса - Структура - структура адреса. -// СтруктураРезультата - Неопределено или Структура - структура возврат выбранного адресного объекта. -// -Процедура ПриПодбореАдресногоОбъекта(Знач СтруктураАдреса, СтруктураРезультата) Экспорт - - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификаторКлиент"); - Модуль.ПриПодбореАдресногоОбъекта(СтруктураАдреса, СтруктураРезультата); + МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("АдресныйКлассификаторКлиент"); + МодульАдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); КонецЕсли; КонецПроцедуры @@ -425,8 +513,8 @@ Процедура ПриРазрешенииРедактированияРеквизитовОбъекта(Форма, РедактированиеРазрешено) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); - РедактированиеРазрешено = Модуль.РазрешитьРедактированиеРеквизитовОбъекта(Форма); + МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); + РедактированиеРазрешено = МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(Форма); КонецЕсли; КонецПроцедуры @@ -436,8 +524,8 @@ Процедура ПриУстановкеДоступностиЭлементовФормы(Форма) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); - Модуль.УстановитьДоступностьЭлементовФормы(Форма); + МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); + МодульЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(Форма); КонецЕсли; КонецПроцедуры @@ -450,3 +538,243 @@ КонецЕсли; Возврат Неопределено; КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик события НачалоВыбора для улицы +// +// Параметры: +// Элемент - вызывающий элемент формы +// КодКлассификатораНаселенногоПункта - ограничение по населенному пункту +// ТекущееЗначение - текущее значение - или код классификатора, или текст +// ПараметрыФормы - необязательная дополнительная структура параметров для формы подбора +// +Процедура НачалоВыбораУлицы(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, ПараметрыФормы=Неопределено) Экспорт + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат; + ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда + НачалоВыбораУлицыКЛАДР(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, ПараметрыФормы); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события НачалоВыбора для элемента адреса (субъект РФ, район, город и т.п.) +// +// Параметры: +// Элемент - вызывающий элемент формы +// КодЧастиАдреса - идентификатор обрабатываемой части адреса, зависит от классификатора +// ЧастиАдреса - значения для других частей адреса, зависит от классификатора +// ПараметрыФормы - необязательная дополнительная структура параметров для формы подбора +// +Процедура НачалоВыбораЭлементаАдреса(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы=Неопределено) Экспорт + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат; + ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда + НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы); + КонецЕсли; + +КонецПроцедуры + +// Возвращает полное наименование для населенного пункта. Под населенным пунктом понимается синтетическое +// поле, характеризующее все, что больше улицы +// +// Параметры: +// ЧастиАдреса - значения для частей адреса, зависит от классификатора +// +Функция НаименованиеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса) Экспорт + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат ""; + ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда + Возврат НаименованиеНаселенногоПунктаПоЧастямАдресаКЛАДР(ЧастиАдреса) + КонецЕсли; + + Возврат ""; +КонецФункции + +// Предлагает загрузить адресный классификатор +// +// Параметры: +// Текст - строка с дополнительным текстов предложения +// +Процедура ПредложениеЗагрузкиКлассификатора(Текст="") Экспорт + +#Если ВебКлиент Тогда + Возврат; +#КонецЕсли + + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат; + ИначеЕсли Вариант<>ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда + Возврат; + КонецЕсли; + + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = Текст + Символы.ПС + НСтр("ru='Загрузить классификатор сейчас?'"); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ЗагрузитьАдресныйКлассификатор(); + КонецЕсли; + +КонецПроцедуры + +// Загружает адресный классификатор +// +Процедура ЗагрузитьАдресныйКлассификатор() Экспорт +#Если ВебКлиент Тогда + Возврат; +#КонецЕсли + + Вариант = КонтактнаяИнформацияКлиентСервер.ИспользуемыйАдресныйКлассификатор(); + ИмяПеречисленияКЛАДР = "Перечисление.ВариантыАдресногоКлассификатора.КЛАДР"; + + Если Вариант=Неопределено Тогда + // Нет подсистемы классификатора + Возврат; + ИначеЕсли Вариант=ПредопределенноеЗначение(ИмяПеречисленияКЛАДР) Тогда + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульКЛАДР = Вычислить("АдресныйКлассификаторКлиент"); + МодульКЛАДР.ЗагрузитьАдресныйКлассификатор(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +Функция ОткрытьФормуКонтактнойИнформацииВнутр(Параметры, Владелец, Уникальность, Окно, Модально=Ложь) + + ВидИнформации = Параметры.ВидКонтактнойИнформации; + + ИмяОткрываемойФормы = КонтактнаяИнформацияКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации(ВидИнформации); + Если ИмяОткрываемойФормы=Неопределено Тогда + ВызватьИсключение НСтр("ru='Не обрабатываемый тип адреса: """ + ВидИнформации + """'"); + КонецЕсли; + + Если Не Параметры.Свойство("Заголовок") Тогда + Параметры.Вставить("Заголовок", Строка(КонтактнаяИнформацияСлужебныйВызовСервера.ТипВидаКонтактнойИнформации(ВидИнформации))); + КонецЕсли; + + Параметры.Вставить("ОткрытаПоСценарию", Истина); + + Если Модально Тогда + Возврат ОткрытьФормуМодально(ИмяОткрываемойФормы, Параметры, Владелец); + КонецЕсли; + + Возврат ОткрытьФорму(ИмяОткрываемойФормы, Параметры, Владелец, Уникальность, Окно); +КонецФункции + +Процедура СоздатьПисьмоПоКонтактнойИнформации(Знач XMLДанные) + АдресПочты = КонтактнаяИнформацияСлужебныйВызовСервера.СтрокаСоставаКонтактнойИнформации(XMLДанные); + Если ТипЗнч(АдресПочты)<>Тип("Строка") Тогда + ВызватьИсключение НСтр("ru='Ошибка получения адреса электронной почты, неверный тип контактной информации'"); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + // Используем встроенную почту + МодульПочты = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульПочты.ОткрытьФормуОтправкиПочтовогоСообщения(, АдресПочты); + Возврат; + КонецЕсли; + + // Нет подсистемы почты, запускаем системное +#Если ВебКлиент Тогда + ТекстПредложения = НСтр("ru='Для отправки почты из веб-клиента необходимо установить расширение для работы с файлами.'"); + Если Не ОбщегоНазначенияКлиент.РасширениеРаботыСФайламиПодключено(ТекстПредложения) Тогда + Возврат; + КонецЕсли; +#КонецЕсли + + ЗапуститьПриложение("mailto:" + АдресПочты); +КонецПроцедуры + +Процедура ОткрытьСсылкуПоКонтактнойИнформации(Знач XMLДанные) + АдресСсылки = КонтактнаяИнформацияСлужебныйВызовСервера.СтрокаСоставаКонтактнойИнформации(XMLДанные); + Если ТипЗнч(АдресСсылки)<>Тип("Строка") Тогда + ВызватьИсключение НСтр("ru='Ошибка получения ссылки, неверный тип контактной информации'"); + КонецЕсли; + + Если Найти(АдресСсылки, "://")>0 Тогда + ПерейтиПоНавигационнойСсылке(АдресСсылки); + Иначе + ПерейтиПоНавигационнойСсылке("http://" + АдресСсылки); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Реализация КЛАДР +// + +Процедура НачалоВыбораУлицыКЛАДР(Элемент, КодКлассификатораНаселенногоПункта, ТекущееЗначение, Параметры=Неопределено) + ПараметрыФормы = ?(Параметры=Неопределено, Новый Структура, Параметры); + + ПараметрыФормы.Вставить("Уровень", 5); + ПараметрыФормы.Вставить("Улица", Строка(ТекущееЗначение)); + + ИмяФормыКЛАДР = "РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора"; + ОткрытьФорму(ИмяФормыКЛАДР, ПараметрыФормы, Элемент); +КонецПроцедуры + +Процедура НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, Параметры=Неопределено) + + ПараметрыФормы = ?(Параметры=Неопределено, Новый Структура, Параметры); + + ПараметрыФормы.Вставить("Регион", ЧастиАдреса.Регион.Значение); + ПараметрыФормы.Вставить("Район", ЧастиАдреса.Район.Значение); + ПараметрыФормы.Вставить("Город", ЧастиАдреса.Город.Значение); + ПараметрыФормы.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Значение); + + КодРеквизита = ВРег(КодЧастиАдреса); + Если КодРеквизита="РЕГИОН" Тогда + Уровень = 1; + ИначеЕсли КодРеквизита="РАЙОН" Тогда + Уровень = 2; + ИначеЕсли КодРеквизита="ГОРОД" Тогда + Уровень = 3; + ИначеЕсли КодРеквизита="НАСЕЛЕННЫЙПУНКТ" Тогда + Уровень = 4; + ИначеЕсли КодРеквизита="УЛИЦА" Тогда + Уровень = 5; + Иначе + Возврат; + КонецЕсли; + ПараметрыФормы.Вставить("Уровень", Уровень); + + ИмяФормыКЛАДР = "РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора"; + ОткрытьФорму(ИмяФормыКЛАДР, ПараметрыФормы, Элемент); +КонецПроцедуры + +Функция НаименованиеНаселенногоПунктаПоЧастямАдресаКЛАДР(ЧастиАдреса) + Возврат КонтактнаяИнформацияКлиентСервер.ПолноеНаименование( + ЗначениеИлиНаименование(ЧастиАдреса.НаселенныйПункт), "", + ЗначениеИлиНаименование(ЧастиАдреса.Город), "", + ЗначениеИлиНаименование(ЧастиАдреса.Район), "", + ЗначениеИлиНаименование(ЧастиАдреса.Регион), "", ); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +Функция ЗначениеИлиНаименование(ЧастьАдреса) + Если ПустаяСтрока(ЧастьАдреса.Значение) Тогда + Возврат СокрЛП("" + ЧастьАдреса.Наименование + " " + ЧастьАдреса.Сокращение); + КонецЕсли; + Возврат ЧастьАдреса.Значение; +КонецФункции + diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 3c443920e..0c4d54442 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -261,9 +261,9 @@ Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт // XML сериализацию преобразовывать не надо - Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(СтрокаПолей) Тогда + Если КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(СтрокаПолей) Тогда Возврат СтрокаПолей; - КонецЕсли; + КонецЕсли; Результат = Новый СписокЗначений; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl deleted file mode 100644 index 5242550f9..000000000 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl +++ /dev/null @@ -1,36 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контактная информация". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -Процедура ОбработкаЗаполненияКИ(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - // Заполним наименование - Наименование = ""; - Если ДанныеЗаполнения.Свойство("Наименование", Наименование) Тогда - Источник.Наименование = Наименование; - КонецЕсли; - - // Заполним контактную информацию - КонтактнаяИнформация = Неопределено; - Если ДанныеЗаполнения.Свойство("КонтактнаяИнформация", КонтактнаяИнформация) Тогда - Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл - - НоваяСтрокаКИ = Источник.КонтактнаяИнформация.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ); - - Если ТипЗнч(СтрокаКИ.ЗначенияПолей) = Тип("СписокЗначений") Тогда - НоваяСтрокаКИ.ЗначенияПолей = Новый ХранилищеЗначения(СтрокаКИ.ЗначенияПолей); - КонецЕсли; - - КонецЦикла; - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 32fa8f52d..58ef7eb8a 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -28,7 +28,11 @@ // СинонимМакета - Строка - представление макета; // ТабличныйДокумент - ТабличныйДокумент - печатная форма документа; // Картинка - Картинка; -// ПолныйПутьКМакету - Строка - путь к макету в дереве метаданных. +// ПолныйПутьКМакету - Строка - путь к макету в дереве метаданных, например: +// "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ". +// Если не указывать этот параметр, то редактирование макета пользователем будет +// недоступно в форме ПечатьДокументов. +// Процедура ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент, Картинка = Неопределено, ПолныйПутьКМакету = "") Экспорт Стр = КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ"); @@ -79,12 +83,258 @@ Функция СписокПечатныхФормИзВнешнихИсточников(ПолноеИмяОбъектаМетаданных) Экспорт ВнешниеПечатныеФормы = Новый СписокЗначений; - ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); + Если Не ПустаяСтрока(ПолноеИмяОбъектаМетаданных) Тогда + ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); + КонецЕсли; Возврат ВнешниеПечатныеФормы; КонецФункции +// Размещает команды печати на форме. +// +// Параметры: +// Форма - УправляемаяФорма - форма, в которой необходимо разместить подменю Печать. +// МестоРазмещенияКомандПоУмолчанию - ЭлементФормы - группа, в которую необходимо разместить подменю Печать, +// по умолчанию размещается в командную панель формы. +Процедура ПриСозданииНаСервере(Форма, МестоРазмещенияКомандПоУмолчанию = Неопределено) Экспорт + КомандыПечати = КомандыПечатиФормы(Форма); + + ТаблицаКоманд = КомандыПечати.Скопировать(,"МестоРазмещения"); + ТаблицаКоманд.Свернуть("МестоРазмещения"); + МестаРазмещения = ТаблицаКоманд.ВыгрузитьКолонку("МестоРазмещения"); + + Для Каждого МестоРазмещения Из МестаРазмещения Цикл + НайденныеКоманды = КомандыПечати.НайтиСтроки(Новый Структура("МестоРазмещения,СкрытаФункциональнымиОпциями", МестоРазмещения, Ложь)); + //РазмещаемыеКоманды = КомандыПечати.Скопировать(НайденныеКоманды); + + ЭлементФормыДляРазмещения = Форма.Элементы.Найти(МестоРазмещения); + Если ЭлементФормыДляРазмещения = Неопределено Тогда + ЭлементФормыДляРазмещения = МестоРазмещенияКомандПоУмолчанию; + КонецЕсли; + + Если НайденныеКоманды.Количество() > 0 Тогда + ДобавитьКомандыПечати(Форма, НайденныеКоманды, ЭлементФормыДляРазмещения); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает список команд печати для указанной формы. +// +// Параметры: +// Форма - УправляемаяФорма или Строка - форма или полное имя формы, для которой необходимо получить список команд печати. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание см. в СоздатьКоллекциюКомандПечати(). +Функция КомандыПечатиФормы(Форма) Экспорт + + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда + ИмяФормы = Форма.ИмяФормы; + Иначе + ИмяФормы = Форма; + КонецЕсли; + + КомандыПечати = СоздатьКоллекциюКомандПечати(); + КомандыПечати.Колонки.Добавить("СкрытаФункциональнымиОпциями", Новый ОписаниеТипов("Булево")); + + СтандартнаяОбработка = Истина; + УправлениеПечатьюПереопределяемый.ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ПолноеИмяОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяФормы).Родитель().ПолноеИмя(); + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъекта); + МенеджерПечати.ДобавитьКомандыПечати(КомандыПечати); + + Для Каждого КомандаПечати Из КомандыПечати Цикл + Если ПустаяСтрока(КомандаПечати.МенеджерПечати) Тогда + КомандаПечати.МенеджерПечати = ПолноеИмяОбъекта; + КонецЕсли; + КонецЦикла; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати(КомандыПечати, ИмяФормы); + КонецЕсли; + КонецЕсли; + + Для Каждого КомандаПечати Из КомандыПечати Цикл + Если КомандаПечати.Порядок = 0 Тогда + КомандаПечати.Порядок = 50; + КонецЕсли; + КонецЦикла; + + КомандыПечати.Сортировать("Порядок Возр, Представление Возр"); + + ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяФормы, ".", Истина); + КраткоеИмяФормы = ЧастиИмени[ЧастиИмени.Количество()-1]; + + Для НомерСтроки = -КомандыПечати.Количество() + 1 По 0 Цикл + КомандаПечати = КомандыПечати[-НомерСтроки]; + СписокФорм = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КомандаПечати.СписокФорм, ",", Истина); + Если СписокФорм.Количество() > 0 И СписокФорм.Найти(КраткоеИмяФормы) = Неопределено Тогда + КомандыПечати.Удалить(КомандаПечати); + КонецЕсли; + КонецЦикла; + + ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма); + + Возврат КомандыПечати; + +КонецФункции + +// Создает пустую таблицу для размещения в нее команд печати. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание команд печати. +// +// Идентификатор - Строка или Массив - Идентификатор команды печати, по которому менеджер печати определяет печатную +// форму, которую необходимо сформировать. +// Пример: "СчетЗаказ". +// +// Для печати нескольких печатных форм можно указывать одновременно несколько их +// идентификаторов (строкой, через запятую, либо массивом строк), например: +// "СчетЗаказ,ГарантийноеПисьмо". +// +// Если необходимо задать количество копий печати для печатной формы, то её +// идентификатор нужно продублировать столько раз, сколько копий необходимо +// сформировать. При этом следует учитывать, что порядок следования печатных +// форм в комплекте будет соответствовать порядку идентификаторов печатных форм, +// указанных в этом параметре. Пример (2 счёта на оплату + 1 гарантийное письмо): +// "СчетЗаказ,СчетЗаказ,ГарантийноеПисьмо". +// +// Идентификатор печатной формы может содержать в себе и альтернативный менеджер +// печати, если он отличается от указанного в параметре МенеджерПечати, +// например: "СчетЗаказ,Обработка.ПечатнаяФорма.ГарантийноеПисьмо". +// +// В этом примере ГарантийноеПисьмо формируется в менеджере печати +// Обработка._ДемоПечатнаяФорма, а СчетЗаказ – в менеджере печати, указанном в +// параметре МенеджерПечати. +// +// Представление - Строка - Представление команды в меню Печать. +// Пример: "Счет на оплату". +// +// МенеджерПечати - Строка - (необязательный) Имя объекта, в модуле менеджера которого располагается +// процедура Печать, формирующая табличные документы для этой команды. +// Значение по умолчанию: имя модуля менеджера объекта. +// Пример: "Документ.СчетНаОплатуПокупателю". +// +// Обработчик - Строка - (необязательный) Клиентский обработчик команды, в который необходимо передать +// управление вместо стандартного обработчика команды печать. Используется, +// например, когда печатная форма формируется на клиенте. +// Пример: "ОбработчикиПечатиКлиент.ПечатьСчетовНаОплатуПокупателю". +// +// Порядок - Число - (необязательный) Значение от 1 до 100, указывающее порядок размещения команды +// по отношению к другим командам. Сортировка команд меню Печать осуществляется +// сначала по полю Порядок, затем по представлению. +// Значение по умолчанию: 50. +// +// Картинка - Картинка - (необязательный) Картинка, которая отображается возле команды в меню Печать. +// Пример: БиблиотекаКартинок.ФорматPDF. +// +// СписокФорм - Строка - (необязательный) Имена форм через запятую, в которых должна отображаться +// команда. Если параметр не указан, то команда печати будет отображаться во +// всех формах объекта, где встроена подсистема Печать. +// Пример: "ФормаДокумента". +// +// МестоРазмещения - Строка - (необязательный) Имя командной панели формы, в которую необходимо разместить +// команду печати. Параметр необходимо использовать только в случае, когда на +// форме размещается более одного подменю "Печать". В остальных случаях место +// размещения необходимо задавать в модуле формы при вызове метода +// УправлениеПечатью.ПриСозданииНаСервере. +// +// ЗаголовокФормы - Строка - (необязательный) Произвольная строка, переопределяющая стандартных заголовок +// формы «Печать документов». +// Пример: "Настраиваемый комплект". +// +// ФункциональныеОпции - Строка (необязательный) Имена функциональных опций через запятую, от которых зависит +// доступность команды печати. +// +// ПроверкаПроведенияПередПечатью - Булево - (необязательный) Признак необходимости проверки проведенности +// документов перед печатью. Если параметр не указан, то проверка проведенности +// не выполняется. +// +// СразуНаПринтер - Булево - (необязательный) Признак необходимости печати документов без предварительного +// просмотра, сразу на принтер. Если параметр не указан, то при выборе команды +// печати открывается форма предварительного просмотра «Печать документов». +// +// ФорматСохранения - ТипФайлаТабличногоДокумента - (необязательный) Применяется для быстрого сохранения печатной +// формы (без дополнительных действий) в различные форматы, отличные от mxl. +// Если параметр не указан, то формируется обычный mxl. +// Пример: ТипФайлаТабличногоДокумента.PDF. +// +// При выборе команды печати сразу открывается сформированный в формате pdf +// документ. +// +// ПереопределитьПользовательскиеНастройкиКоличества - Булево - (необязательный) Признак необходимости отключения в +// форме ПечатьДокументов механизма сохранения/восстановления выбранного +// пользователем количества экземпляров на печать. Если параметр не указан, то +// механизм сохранения/восстановления настроек будет работать при открытии формы +// ПечатьДокументов. +// +// ДополнитьКомплектВнешнимиПечатнымиФормами - Булево - (необязательный) Признак необходимости дополнить комплект +// документов всеми подключенными к объекту внешними печатными формами +// (подсистема ДополнительныеОтчетыИОбработки). Если параметр не указан, внешние +// печатные формы не добавляются в комплект. +// +// ФиксированныйКомплект - Булево - (необязательный) Признак необходимости блокировки от изменения пользователем +// состава комплекта документов. Если параметр не указан, то пользователь сможет +// исключать отдельные печатные формы из комплекта в форме ПечатьДокументов, а +// также изменять их количество. +// +// НеВыполнятьЗаписьВФорме - Булево - (необязательный) Признак необходимости отключения механизма записи объекта +// перед выполнением команды печати. Используется в исключительных случаях. Если +// параметр не указан, производится запись объекта в случае, если в форме +// объекта установлен признак модифицированности. +// +Функция СоздатьКоллекциюКомандПечати() Экспорт + + Результат = Новый ТаблицаЗначений; + + // описание + Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + + ////////// + // опции (необязательные параметры) + + // менеджер печати + Результат.Колонки.Добавить("МенеджерПечати", Новый ОписаниеТипов("Строка")); + + // альтернативный обработчик команды + Результат.Колонки.Добавить("Обработчик", Новый ОписаниеТипов("Строка")); + + // представление + Результат.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + Результат.Колонки.Добавить("СписокФорм", Новый ОписаниеТипов("Строка")); // имена форм для размещения команд, разделитель - запятая. + Результат.Колонки.Добавить("МестоРазмещения", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ЗаголовокФормы", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Строка")); // имена функциональных опций, влияющих на видимость команды, разделитель - запятая. + + // проверка проведения + Результат.Колонки.Добавить("ПроверкаПроведенияПередПечатью", Новый ОписаниеТипов("Булево")); + + // вывод + Результат.Колонки.Добавить("СразуНаПринтер", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ФорматСохранения"); // ТипФайлаТабличногоДокумента + + // настройки комплектов + Результат.Колонки.Добавить("ПереопределитьПользовательскиеНастройкиКоличества", Новый ОписаниеТипов("Булево")); // запрет сохранения настроек пользователя + Результат.Колонки.Добавить("ДополнитьКомплектВнешнимиПечатнымиФормами", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ФиксированныйКомплект", Новый ОписаниеТипов("Булево")); // запрет изменения комплекта + + // дополнительные параметры + Результат.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + + // специальный режим выполнения команды + // по умолчанию выполняется запись модифицированного объекта перед выполнением команды. + Результат.Колонки.Добавить("НеВыполнятьЗаписьВФорме", Новый ОписаниеТипов("Булево")); + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с шаблонами офисных документов @@ -390,7 +640,8 @@ Если ВнешняяПечатнаяФорма <> Неопределено Тогда // печать внешней печатной формы - УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику( + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику( ВнешняяПечатнаяФорма(ВнешняяПечатнаяФорма.Значение, ИмяМенеджераПечати), Новый Структура("ИдентификаторКоманды, ОбъектыНазначения", ВнешняяПечатнаяФорма.Значение, МассивОбъектов), ВременнаяКоллекцияДляОднойПечатнойФормы, @@ -402,10 +653,13 @@ Если ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда ИспользуемыйМенеджерПечати = ИмяМенеджераПечати; КонецЕсли; - МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИспользуемыйМенеджерПечати); + + Если Не ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИспользуемыйМенеджерПечати); - // печать внутренней печатной формы - МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); + // печать внутренней печатной формы + МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); + КонецЕсли; КонецЕсли; // обновление коллекции @@ -660,6 +914,112 @@ КонецФункции +// Создает подменю "Печать" на форме и добавляет в него команды печати. +// Если команда печати одна, то вместо подменю добавляется кнопка с названием печатной формы. +Процедура ДобавитьКомандыПечати(Форма, КомандыПечати, Знач МестоРазмещенияКоманд = Неопределено) + + Если МестоРазмещенияКоманд = Неопределено Тогда + МестоРазмещенияКоманд = Форма.КоманднаяПанель; + КонецЕсли; + + ОднаКомандаПечати = КомандыПечати.Количество() = 1; + Если Не ОднаКомандаПечати Тогда + ПодменюПечать = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + "ПодменюПечать", Тип("ГруппаФормы"), МестоРазмещенияКоманд); + ПодменюПечать.Вид = ВидГруппыФормы.Подменю; + ПодменюПечать.Заголовок = НСтр("ru = 'Печать'"); + ПодменюПечать.Картинка = БиблиотекаКартинок.Печать; + + МестоРазмещенияКоманд = ПодменюПечать; + КонецЕсли; + + Для Каждого ОписаниеКомандыПечати Из КомандыПечати Цикл + НомерКоманды = ОписаниеКомандыПечати.Владелец().Индекс(ОписаниеКомандыПечати); + ИмяКоманды = МестоРазмещенияКоманд.Имя + "КомандаПечати" + НомерКоманды; + + КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); + КомандаФормы.Действие = "Подключаемый_ВыполнитьКомандуПечати"; + КомандаФормы.Заголовок = ОписаниеКомандыПечати.Представление; + КомандаФормы.ИзменяетСохраняемыеДанные = Ложь; + КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст; + + Если ЗначениеЗаполнено(ОписаниеКомандыПечати.Картинка) Тогда + КомандаФормы.Картинка = ОписаниеКомандыПечати.Картинка; + ИначеЕсли ОднаКомандаПечати Тогда + КомандаФормы.Картинка = БиблиотекаКартинок.Печать; + КонецЕсли; + + НовыйЭлемент = Форма.Элементы.Добавить(МестоРазмещенияКоманд.Имя + ИмяКоманды, Тип("КнопкаФормы"), МестоРазмещенияКоманд); + НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; + НовыйЭлемент.ИмяКоманды = ИмяКоманды; + КонецЦикла; + +КонецПроцедуры + +// Возвращает описание команды по имени элемента формы. +// +// Возвращаемое значение +// Структура - строка таблицы из функции КомандыПечатиФормы, преобразованная в структуру. +Функция ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы) Экспорт + + КомандыПечати = КомандыПечатиФормы(ИмяФормы); + + Позиция = СтрДлина(ИмяКоманды); + Пока КодСимвола(ИмяКоманды, Позиция) >= 48 И КодСимвола(ИмяКоманды, Позиция) <= 57 Цикл // 0..9 + Позиция = Позиция - 1; + КонецЦикла; + + КомандаПечати = КомандыПечати[Число(Сред(ИмяКоманды, Позиция + 1))]; // "КомандаПечати№" + + Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(КомандаПечати); + + Возврат Результат; + +КонецФункции + +// Фильтрует список команд печати в соответствии с установленными функциональными опциями. +Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма) + Для НомерКоманды = -КомандыПечати.Количество() + 1 По 0 Цикл + ОписаниеКомандыПечати = КомандыПечати[-НомерКоманды]; + ФункциональныеОпцииКомандыПечати = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОписаниеКомандыПечати.ФункциональныеОпции, ",", Истина); + ВидимостьКоманды = ФункциональныеОпцииКомандыПечати.Количество() = 0; + Для Каждого ФункциональнаяОпция Из ФункциональныеОпцииКомандыПечати Цикл + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда + ВидимостьКоманды = ВидимостьКоманды Или Форма.ПолучитьФункциональнуюОпциюФормы(ФункциональнаяОпция); + Иначе + ВидимостьКоманды = ВидимостьКоманды Или ПолучитьФункциональнуюОпцию(ФункциональнаяОпция); + КонецЕслИ; + + Если ВидимостьКоманды Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ОписаниеКомандыПечати.СкрытаФункциональнымиОпциями = Не ВидимостьКоманды; + КонецЦикла; +КонецПроцедуры + +// Сохраняет пользовательский макет печати в информационной базе. +Процедура ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) Экспорт + Макет = ПолучитьИзВременногоХранилища(АдресМакетаВоВременномХранилище); + + ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбъектаМетаданныхМакета, "."); + ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()]; + + ИмяВладельца = ""; + Для НомерЧасти = 0 По ЧастиИмени.ВГраница()-1 Цикл + Если Не ПустаяСтрока(ИмяВладельца) Тогда + ИмяВладельца = ИмяВладельца + "."; + КонецЕсли; + ИмяВладельца = ИмяВладельца + ЧастиИмени[НомерЧасти]; + КонецЦикла; + + Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи(); + Запись.Объект = ИмяВладельца; + Запись.ИмяМакета = ИмяМакета; + Запись.Использование = Истина; + Запись.Макет = Новый ХранилищеЗначения(Макет, Новый СжатиеДанных(9)); + Запись.Записать(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы @@ -674,8 +1034,8 @@ Процедура ПриПрисоединенииПечатнойФормыКОбъекту(СсылкаНаОбъект, ИмяФайла, АдресВоВременномХранилище) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлы"); - Модуль.ДобавитьФайл(СсылкаНаОбъект, ИмяФайла, , , , АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'")); + МодульПрисоединенныеФайлы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлы"); + МодульПрисоединенныеФайлы.ДобавитьФайл(СсылкаНаОбъект, ИмяФайла, , , , АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'")); КонецЕсли; КонецПроцедуры @@ -690,8 +1050,8 @@ Процедура ПриПроверкеВозможностиПрисоединенияФайловКОбъекту(СсылкаНаОбъект, МожноПрисоединять) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлы"); - МожноПрисоединять = Модуль.КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект); + МодульПрисоединенныеФайлы = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ПрисоединенныеФайлы"); + МожноПрисоединять = МодульПрисоединенныеФайлы.КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект); КонецЕсли; КонецПроцедуры @@ -707,8 +1067,8 @@ Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); КонецЕсли; КонецПроцедуры @@ -718,8 +1078,8 @@ Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Модуль.ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка); + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 8f8014347..32be9741e 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -610,7 +610,11 @@ FindObject = Selection.Find; FindObject.ClearFormatting(); Пока FindObject.Execute(СтрокаПоиска) Цикл - Selection.TypeText(СтрокаЗамены); + Если ПустаяСтрока(СтрокаЗамены) Тогда + Selection.Delete(); + Иначе + Selection.TypeText(СтрокаЗамены); + КонецЕсли; КонецЦикла; Selection.Collapse(); diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index a07b5a85e..1bb091059 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -37,8 +37,7 @@ ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, - Отказ - ); + Отказ); КонецПроцедуры @@ -57,8 +56,7 @@ Адрес, ОбъектыПечати, ПараметрыВывода, - Отказ - ); + Отказ); КонецПроцедуры @@ -71,3 +69,13 @@ УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(Каталог); КонецПроцедуры + +// Возвращает описание команды по имени элемента формы. +// +// См. УправлениеПечатью.ОписаниеКомандыПечати +// +Функция ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы) Экспорт + + Возврат УправлениеПечатью.ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы); + +КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 70cf44987..139128d8f 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -205,6 +205,88 @@ КонецФункции +// Обработчик динамически подключаемой команды печати. +// +// Команда - КомандаФормы - подключаемая команда формы, выполняющая обработчик Подключаемый_ВыполнитьКомандуПечати. +// (альтернативный вызов*) Структура - строка таблицы КомандыПечати, преобразованная в структуру. +// Источник - ТаблицаФормы Или ДанныеФормыСтруктура - источник объектов печати (Форма.Объект, Форма.Элементы.Список). +// (альтернативный вызов*) Массив - список объектов печати. +// +// *Альтернативный вызов - указанные типы используются в случае, если вызов выполняется не из штатного +// обработчика Подключаемый_ВыполнитьКомандуПечати. +// +Процедура ВыполнитьПодключаемуюКомандуПечати(Знач Команда, Знач Форма, Знач Источник) Экспорт + + ОписаниеКоманды = Команда; + Если ТипЗнч(Команда) = Тип("КомандаФормы") Тогда + ОписаниеКоманды = ОписаниеКомандыПечати(Команда.Имя, Форма.ИмяФормы); + КонецЕсли; + + Если Не ОписаниеКоманды.НеВыполнятьЗаписьВФорме И ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура") + И (Источник.Ссылка.Пустая() Или Форма.Модифицированность) Тогда + + Если Источник.Ссылка.Пустая() Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Данные еще не записаны. + |Выполнение действия ""%1"" возможно только после записи данных. + |Данные будут записаны.'"), + ОписаниеКоманды.Представление); + Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена) = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Форма.Записать(); + КонецЕсли; + + ОбъектыПечати = Источник; + Если ТипЗнч(Источник) <> Тип("Массив") Тогда + ОбъектыПечати = ОбъектыПечати(Источник); + КонецЕсли; + + Если ОписаниеКоманды.ПроверкаПроведенияПередПечатью + И Не ПроверитьДокументыПроведены(ОбъектыПечати, Форма) Тогда + Возврат; + КонецЕсли; + + ОписаниеКоманды = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ОписаниеКоманды); + ОписаниеКоманды.Вставить("ОбъектыПечати", ОбъектыПечати); + + Если ОписаниеКоманды.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" + И ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент"); + МодульДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуПечати(ОписаниеКоманды, Форма); + Возврат; + КонецЕсли; + + Если Не ПустаяСтрока(ОписаниеКоманды.Обработчик) Тогда + ОписаниеКоманды.Вставить("Форма", Форма); + ИмяОбработчика = ОписаниеКоманды.Обработчик; + Обработчик = ИмяОбработчика + "(ОписаниеКоманды)"; + Результат = Вычислить(Обработчик); + Возврат; + КонецЕсли; + + Если ОписаниеКоманды.СразуНаПринтер Тогда + ВыполнитьКомандуПечатиНаПринтер(ОписаниеКоманды.МенеджерПечати, ОписаниеКоманды.Идентификатор, + ОбъектыПечати, ОписаниеКоманды.ДополнительныеПараметры); + Иначе + ВыполнитьКомандуПечати(ОписаниеКоманды.МенеджерПечати, ОписаниеКоманды.Идентификатор, + ОбъектыПечати, Форма, ОписаниеКоманды); + КонецЕсли; + +КонецПроцедуры + +// Возвращает описание команды по имени элемента формы. +// +// См. УправлениеПечатью.ОписаниеКомандыПечати +// +Функция ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы) Экспорт + + Возврат УправлениеПечатьюКлиентПовтИсп.ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с макетами офисных документов // @@ -704,3 +786,28 @@ КонецФункции #КонецЕсли + +// Возвращает ссылки на объекты, выбранные в данный момент на форме. +Функция ОбъектыПечати(Источник) + + Результат = Новый Массив; + + Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда + ВыделенныеСтроки = Источник.ВыделенныеСтроки; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + ТекущаяСтрока = Источник.ДанныеСтроки(ВыделеннаяСтрока); + Если ТекущаяСтрока <> Неопределено Тогда + Результат.Добавить(ТекущаяСтрока.Ссылка); + КонецЕсли; + КонецЦикла; + Иначе + Результат.Добавить(Источник.Ссылка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl new file mode 100644 index 000000000..43dd3b385 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/Module.bsl @@ -0,0 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает описание команды по имени элемента формы. +// +// См. УправлениеПечатью.ОписаниеКомандыПечати +// +Функция ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы) Экспорт + + Возврат УправлениеПечатьюВызовСервера.ОписаниеКомандыПечати(ИмяКоманды, ИмяФормы); + +КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo new file mode 100644 index 000000000..7ab3c1629 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентПовтИсп/УправлениеПечатьюКлиентПовтИсп.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c7f817ee-9f6a-454c-95a0-b279fd08055e"> + <name>УправлениеПечатьюКлиентПовтИсп</name> + <synonym> + <key>ru</key> + <value>Управление печатью клиент повт исп</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> + <returnValuesReuse>DuringSession</returnValuesReuse> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 4988f08c4..005a7ceb7 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -6,31 +6,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Выполняет внешнюю обработку печати. -// -// Параметры: -// ИсточникДанных - Произвольный - источник данных; -// ПараметрыИсточника - Произвольный - параметры источника печати; -// КоллекцияПечатныхФорм - ТаблицаЗначений - (выходной) см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм; -// ОбъектыПечати - СписокЗначений - (выходной) список объектов печати, где значение - Ссылка, а представление - имя области печати; -// ПараметрыВывода - Структура - (выходной) см. УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода. -// -// Возвращаемое значение: -// Булево - Ложь, если печать не была выполнена. -Функция ПечатьПоВнешнемуИсточнику(ИсточникДанных, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - - // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - Если ТипЗнч(ИсточникДанных) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда - ДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику( - ИсточникДанных, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); - Возврат Истина; - КонецЕсли; - // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - - Возврат Ложь; - -КонецФункции - // Переопределяет таблицу возможных форматов для сохранения табличного документа. // Вызывается из ОбщегоНазначения.НастройкиФорматовСохраненияТабличногоДокумента() // @@ -46,4 +21,9 @@ КонецПроцедуры +// Переопределяет список команд печати, получаемый функцией +Процедура ПередДобавлениемКомандПечати(ИмяФормы, КомандыПечати, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index be9300086..819b4912a 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -351,7 +351,7 @@ СсылкаПредопределенного = Ссылка.Родитель; КонецЕсли; - ИмяПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьИмяПредопределенного(СсылкаПредопределенного); + ИмяПредопределенного = ОбщегоНазначения.ИмяПредопределенного(СсылкаПредопределенного); Если НЕ ЗначениеЗаполнено(ИмяПредопределенного) Тогда Возврат ВидыСвойствНабора; @@ -599,7 +599,7 @@ НаборСвойствОбъект.ДополнительныеРеквизиты.Индекс(ДопСведение)); КонецЦикла; - НаборСвойствОбъект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборСвойствОбъект); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 17c9c69d9..5c0af4ffa 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -44,7 +44,7 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начато регламентное получение и отправка электронной почты'")); + НСтр("ru = 'Начато регламентное получение и отправка электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); МассивПисем = Новый Массив; @@ -104,7 +104,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), ВыборкаУчетныеЗаписи.УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -123,7 +123,7 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'"), ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -194,7 +194,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), ВыборкаУчетныеЗаписи.УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -217,7 +217,7 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'")); + НСтр("ru = 'Закончено регламентное получение и отправка электронной почты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецПроцедуры @@ -315,7 +315,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаУчетныеЗаписи.УчетнаяЗапись); @@ -332,7 +332,7 @@ Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время отправки электронного письма %1 произошла ошибка - |%2'"), ВыборкаПисьма.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаПисьма.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке, ВыборкаПисьма.Ссылка); Продолжить; КонецПопытки; @@ -402,7 +402,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), ВыборкаУчетныеЗаписи.УчетнаяЗапись,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,ВыборкаУчетныеЗаписи.УчетнаяЗапись); @@ -442,7 +442,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , @@ -488,7 +488,7 @@ ЕстьОшибки = Истина; ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка - |%4'"), + |%4'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Сообщение.Тема, Сообщение.ДатаОтправления, Сообщение.Отправитель.Адрес, @@ -1559,7 +1559,7 @@ ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'"), Выборка.ПредставлениеПисьма,ОписаниеОшибки()); + |%2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), Выборка.ПредставлениеПисьма,ОписаниеОшибки()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index 26e5cba6a..aa8f1aaa1 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -33,8 +33,7 @@ Для Каждого СтрокаТаблицы Из ТаблицаКонтактов Цикл Контакт = ?(ТипЗнч(СтрокаТаблицы.Контакт) = Тип("Строка"), Неопределено, СтрокаТаблицы.Контакт); Запись = Новый Структура( - "Адрес, Представление, Контакт", СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление, Контакт - ); + "Адрес, Представление, Контакт", СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление, Контакт); Результат.Добавить(Запись); КонецЦикла; diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl index d37e67c79..46cc6bc6c 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl @@ -167,7 +167,8 @@ УдалитьФайлы(ПрежнийПутьНаТоме); Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'"), + НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -184,7 +185,8 @@ КонецЕсли; Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'"), + НСтр("ru = 'Файлы.Удаление файлов в томе при обмене'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -352,7 +354,10 @@ Дата = ДатаДляРазмещенияВТоме; КонецЕсли; + // Использование абсолютного формата даты "ДФ" в следующей строке + // является правильным, так как дата используется не для просмотра пользователем. ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ОбщегоНазначенияКлиентСервер.РазделительПути(); + ПутьКТому = ПутьКТому + ПутьДня; ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); @@ -421,7 +426,8 @@ |%1'"); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Добавление файла'"), + НСтр("ru = 'Файлы.Добавление файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1110,7 +1116,8 @@ ИмяСРасширениемФайла = ""; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1199,7 +1206,8 @@ КонецЦикла; Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -1215,7 +1223,8 @@ КонецЦикла; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , , @@ -1287,8 +1296,8 @@ Процедура ПриДобавленииНастроекРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); - Модуль.ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки); + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + МодульРаботаСФайламиСлужебныйВызовСервера.ДобавитьНастройкиРаботыСФайлами(ОбщиеНастройки, ПерсональныеНастройки); КонецЕсли; КонецПроцедуры @@ -1299,8 +1308,8 @@ РазмерФайлов = 0; Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); - РазмерФайлов = РазмерФайлов + Модуль.ПодсчитатьРазмерФайловНаТоме(СсылкаТома); + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + РазмерФайлов = РазмерФайлов + МодульРаботаСФайламиСлужебныйВызовСервера.ПодсчитатьРазмерФайловНаТоме(СсылкаТома); КонецЕсли; КонецПроцедуры @@ -1315,8 +1324,8 @@ Процедура ПриОпределенииКодировкиВерсииФайла(ВерсияСсылка, Кодировка) Экспорт Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); - Кодировка = Модуль.ПолучитьКодировкуВерсииФайла(ВерсияСсылка); + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + Кодировка = МодульРаботаСФайламиСлужебныйВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияСсылка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 2b5d111bf..ced14f54d 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -76,7 +76,6 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.2.4"; Обработчик.Процедура = "ФайловыеФункцииСлужебныйВМоделиСервиса.ЗаполнитьОчередьИзвлеченияТекста"; - Обработчик.Опциональный = Истина; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.1.3.19"; @@ -237,7 +236,7 @@ Набор = РегистрыСведений.ОчередьИзвлеченияТекста.СоздатьНаборЗаписей(); Набор.Загрузить(Запрос.Выполнить().Выгрузить()); - Набор.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl index 461f673a9..043a6da76 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl @@ -111,17 +111,7 @@ Если Путь = Неопределено Тогда Если НЕ ПараметрыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда - - Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl"); - Оболочка.Language = "vbscript"; - Оболочка.AddCode(" - |Function SpecialFoldersName(Name) - |set Shell=CreateObject(""WScript.Shell"") - |SpecialFoldersName=Shell.SpecialFolders(Name) - |End Function"); - - Путь = НормализоватьКаталог(Оболочка.Run("SpecialFoldersName", "MyDocuments")); - + Путь = КаталогМоиДокументы(); ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( "ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", Путь); КонецЕсли; @@ -133,6 +123,31 @@ КонецФункции +// Возвращает каталог "Мои Документы". +// +Функция КаталогМоиДокументы() Экспорт + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат Вычислить("КаталогДокументов()"); + КонецЕсли; + + #Если ВебКлиент Тогда + Возврат ""; + #Иначе + Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl"); + Оболочка.Language = "vbscript"; + Оболочка.AddCode(" + |Function SpecialFoldersName(Name) + |set Shell=CreateObject(""WScript.Shell"") + |SpecialFoldersName=Shell.SpecialFolders(Name) + |End Function"); + + КаталогМоиДокументы = Оболочка.Run("SpecialFoldersName", "MyDocuments"); + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогМоиДокументы); + #КонецЕсли + +КонецФункции + // Показывает пользователю диалог выбора файлов и возвращает // массив - выбранные файлы для импорта. // @@ -279,26 +294,32 @@ #Если Не ВебКлиент Тогда - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - - Если НЕ ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + ИмяКаталога = Вычислить("РабочийКаталогДанныхПользователя()"); + Иначе - Оболочка = Новый COMОбъект("WScript.Shell"); - Путь = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); - Путь = Путь + "\1C\Файлы\"; + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - Путь = Путь - + ПараметрыРаботыКлиента.ИмяКонфигурации - + ОбщегоНазначенияКлиентСервер.РазделительПути(); + Если НЕ ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда + + Оболочка = Новый COMОбъект("WScript.Shell"); + Путь = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); + Путь = Путь + "\1C\Файлы\"; + + Путь = Путь + + ПараметрыРаботыКлиента.ИмяКонфигурации + + ОбщегоНазначенияКлиентСервер.РазделительПути(); + + ИмяПользователя = ПользователиКлиентСервер.ТекущийПользователь(); + + ИмяКаталога = Путь + ИмяПользователя; + ИмяКаталога = СтрЗаменить(ИмяКаталога, "<", " "); + ИмяКаталога = СтрЗаменить(ИмяКаталога, ">", " "); + ИмяКаталога = СокрЛП(ИмяКаталога); + + ИмяКаталога = ИмяКаталога + ОбщегоНазначенияКлиентСервер.РазделительПути(); + КонецЕсли; - ИмяПользователя = ПользователиКлиентСервер.ТекущийПользователь(); - - ИмяКаталога = Путь + ИмяПользователя; - ИмяКаталога = СтрЗаменить(ИмяКаталога, "<", " "); - ИмяКаталога = СтрЗаменить(ИмяКаталога, ">", " "); - ИмяКаталога = СокрЛП(ИмяКаталога); - - ИмяКаталога = ИмяКаталога + ОбщегоНазначенияКлиентСервер.РазделительПути(); КонецЕсли; #Иначе // ВебКлиент @@ -307,18 +328,24 @@ Если РасширениеПодключено Тогда - Режим = РежимДиалогаВыбораФайла.ВыборКаталога; - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - ДиалогОткрытияФайла.Каталог = ""; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к рабочему каталогу'"); - - Если ДиалогОткрытияФайла.Выбрать() Тогда + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда - ИмяКаталога = ДиалогОткрытияФайла.Каталог; + ИмяКаталога = Вычислить("РабочийКаталогДанныхПользователя()"); + + Иначе + + Режим = РежимДиалогаВыбораФайла.ВыборКаталога; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + ДиалогОткрытияФайла.Каталог = ""; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к рабочему каталогу'"); + + Если ДиалогОткрытияФайла.Выбрать() Тогда + ИмяКаталога = ДиалогОткрытияФайла.Каталог; + ИмяКаталога = ИмяКаталога + ОбщегоНазначенияКлиентСервер.РазделительПути(); + КонецЕсли; - ИмяКаталога = ИмяКаталога + ОбщегоНазначенияКлиентСервер.РазделительПути(); КонецЕсли; КонецЕсли; @@ -415,11 +442,11 @@ | |Взять файл из хранилища файлов и заменить им существующий или |открыть существующий без обновления?'")); + Иначе + // Все совпадает - и дата, и размер. + Возврат "ОткрытьСуществующий"; КонецЕсли; - // Все совпадает - и дата, и размер. - Возврат "ОткрытьСуществующий"; - ИначеЕсли Параметры.ДатаИзмененияУниверсальнаяВРабочемКаталоге < Параметры.ДатаИзмененияУниверсальнаяВХранилищеФайлов Тогда // В хранилище файлов более новый файл. diff --git a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl index da0261c1a..4df866c1a 100644 --- a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl @@ -49,6 +49,80 @@ КонецФункции +// Функция склоняет переданную фразу +// Параметры: +// ФИО (обязательный), тип строка +// Параметр должен содержать фамилию имя отчества в именительном падеже, которые необходимо просклонять. +// +// Падеж (обязательный), тип число +// Падеж, в который необходимо поставить ФИО. +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный +// +// Результат (обязательный), тип строка +// Переменная, в которую будет возвращен результат склонения. +// +// Пол (необязательный), тип Перечисление.ПолФизическогоЛица +// Пол физического лица +// +Функция Просклонять(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт + + ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО", "Decl"); + Компонента = Новый("AddIn.Decl.CNameDecl"); + + Результат = ""; + + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ФИО, " "); + + // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов + НомерНесклоняемогоСимвола = 4; + Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл + Если Не ФизическиеЛицаКлиентСервер.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда + НомерНесклоняемогоСимвола = Номер; + Прервать; + КонецЕсли; + + Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; + КонецЦикла; + + Если ПустаяСтрока(Результат) Тогда + Результат = ФИО; + Возврат Ложь; + КонецЕсли; + + Попытка + Если Пол = Перечисления.ПолФизическогоЛица.Мужской Тогда + Результат = Компонента.Просклонять(Результат, Падеж, 1) + " "; + + ИначеЕсли Пол = Перечисления.ПолФизическогоЛица.Женский Тогда + Результат = Компонента.Просклонять(Результат, Падеж, 2) + " "; + + Иначе + Результат = Компонента.Просклонять(Результат, Падеж) + " "; + + КонецЕсли; + + Исключение + Результат = ФИО; + Возврат Ложь; + + КонецПопытки; + + // Остальные символы добавим без склонения + Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл + Результат = Результат + " " + МассивСтрок[Номер-1]; + КонецЦикла; + + Результат = СокрЛП(Результат); + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -186,7 +260,7 @@ КонецЕсли; КонецЦикла; - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); НаборЗаписей.Очистить(); КонецЦикла; @@ -272,7 +346,7 @@ ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); КонецЦикла; - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); НаборЗаписей.Очистить(); КонецЦикла; @@ -297,7 +371,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Выборка.Ссылка.ПолучитьОбъект().Удалить(); + ОбновлениеИнформационнойБазы.УдалитьДанные(Выборка.Ссылка.ПолучитьОбъект()); КонецЦикла; КонецПроцедуры @@ -341,7 +415,7 @@ Объект = Выборка.Ссылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); Объект.РеквизитДопУпорядочивания = Порядок; - Объект.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); Порядок = Порядок + 1; diff --git a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl index a87b2c4c6..fbe20dfad 100644 --- a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl @@ -17,6 +17,8 @@ // Процедура ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных) Экспорт + + КонецПроцедуры // Вызывается в одноименном обработчике формы отчета после выполнения кода формы. diff --git a/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl index 6caba324a..53b187b29 100644 --- a/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl @@ -73,6 +73,8 @@ ЭтоОтбор = Истина; ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ЭтоОтбор = Ложь; + ИначеЕсли ТипОбщейНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Возврат НастройкиКД.ДоступныеОбъекты.Элементы.Найти(ОбщаяНастройка.ИдентификаторОбъекта); Иначе Возврат Неопределено; КонецЕсли; @@ -81,8 +83,7 @@ ДоступнаяНастройка = ?( ЭтоОтбор, НастройкиКД.ДоступныеПоляОтбора.НайтиПоле(ОбщаяНастройка.ЛевоеЗначение), - НастройкиКД.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ОбщаяНастройка.Параметр) - ); + НастройкиКД.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ОбщаяНастройка.Параметр)); Если ДоступнаяНастройка <> Неопределено Тогда Возврат ДоступнаяНастройка; @@ -99,8 +100,7 @@ ДоступнаяНастройка = ?( ЭтоОтбор, ЭлементСтруктурыКД.Настройки.ДоступныеПоляОтбора.НайтиПоле(ОбщаяНастройка.ЛевоеЗначение), - ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ОбщаяНастройка.Параметр) - ); + ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ОбщаяНастройка.Параметр)); Если ДоступнаяНастройка <> Неопределено Тогда Возврат ДоступнаяНастройка; @@ -558,7 +558,7 @@ // Функция ПривестиЗначениеКТипуГруппыИЭлементы(ИсходноеЗначение) Экспорт Если ИсходноеЗначение = ИспользованиеГруппИЭлементов.Элементы Тогда - Возврат ГруппыИЭлементы.Элементы + Возврат ГруппыИЭлементы.Элементы; ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда Возврат ГруппыИЭлементы.ГруппыИЭлементы; ИначеЕсли ИсходноеЗначение = ИспользованиеГруппИЭлементов.Группы Тогда @@ -570,6 +570,23 @@ КонецЕсли; КонецФункции +// Приводит значение типа ГруппыИЭлементы к типу ИспользованиеГруппИЭлементов. +// Для значения Авто и других типов возвращает значение Неопределено. +// +Функция ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(ИсходноеЗначение) Экспорт + Если ИсходноеЗначение = ГруппыИЭлементы.Элементы Тогда + Возврат ИспользованиеГруппИЭлементов.Элементы; + ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.ГруппыИЭлементы Тогда + Возврат ИспользованиеГруппИЭлементов.ГруппыИЭлементы; + ИначеЕсли ИсходноеЗначение = ГруппыИЭлементы.Группы Тогда + Возврат ИспользованиеГруппИЭлементов.Группы; + ИначеЕсли ТипЗнч(ИсходноеЗначение) = Тип("ИспользованиеГруппИЭлементов") Тогда + Возврат ИсходноеЗначение; + Иначе + Возврат Неопределено; + КонецЕсли; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции @@ -842,8 +859,7 @@ ШаблонПериода, Формат(НачНедели, "ДФ=dd.MM"), Формат(КонНедели, "ДФ=dd.MM"), - НеделяГода(КонНедели) - ); + НеделяГода(КонНедели)); СписокПериодов.Добавить(НачНедели, ПредставлениеПериода); КонецЦикла; diff --git a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl index d99e8732e..df2cdc869 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl @@ -858,7 +858,6 @@ //////////////////////////////////////////////////////////////////////////////// // Первоначальное заполнение и обновление ИБ -// // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // @@ -869,7 +868,7 @@ Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.0.0"; + Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ЭлектроннаяПочта.ЗаполнитьСистемнуюУчетнуюЗапись"; КонецПроцедуры @@ -879,9 +878,8 @@ Процедура ЗаполнитьСистемнуюУчетнуюЗапись() Экспорт УчетнаяЗапись = ПолучитьСистемнуюУчетнуюЗапись().ПолучитьОбъект(); - УчетнаяЗапись.Заблокировать(); УчетнаяЗапись.ЗаполнитьОбъектЗначениямиПоУмолчанию(); - УчетнаяЗапись.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись); КонецПроцедуры diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl index 1dc1dfc4a..0ebe47610 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl @@ -474,7 +474,7 @@ КонецЕсли; - КонецЦикла; + КонецЦикла; Для Каждого Запись Из ТабЗначений Цикл @@ -483,10 +483,10 @@ Элемент = Справочники.НазначенияСертификатовЭЦП.СоздатьЭлемент(); Элемент.Код = Запись.Code; Элемент.Наименование = Запись.Name; - Элемент.Записать(); - КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Элемент); + КонецЕсли; - КонецЦикла; + КонецЦикла; ЗафиксироватьТранзакцию(); Исключение @@ -494,7 +494,7 @@ ВызватьИсключение; КонецПопытки; -КонецПроцедуры +КонецПроцедуры // Заполняет справочник НазначенияСертификатовЭЦП значениями из макета Процедура ЗаполнитьНазначенияСертификатовЭЦП() Экспорт @@ -513,10 +513,10 @@ Элемент = Справочники.НазначенияСертификатовЭЦП.СоздатьЭлемент(); Элемент.Код = Запись.Code; Элемент.Наименование = Запись.Name; - Элемент.Записать(); - КонецЕсли; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Элемент); + КонецЕсли; - КонецЦикла; + КонецЦикла; ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl index 1cde14672..9aeed115e 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl @@ -69,23 +69,11 @@ // Параметры: // Модально - Булево - Открывать форму поверх всех остальных. // -Процедура ОткрытьФормуНастройкиЭЦП(Модально = Ложь) Экспорт +Процедура ОткрытьФормуНастройкиЭЦП() Экспорт - СистемнаяИнформация = Новый СистемнаяИнформация(); + ПараметрыФормы = Новый Структура("ПоказыватьНастройкиШифрования", Истина); - ВебКлиентВLinux = Ложь; - - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда - ВебКлиентВLinux = Истина; - КонецЕсли; - - ПараметрыФормы = Новый Структура("ВебКлиентВLinux, ПоказыватьНастройкиШифрования", ВебКлиентВLinux, Истина); - - Если Модально Тогда - ОткрытьФормуМодально("ОбщаяФорма.ПерсональныеНастройкиЭЦП", ПараметрыФормы); - Иначе - ОткрытьФорму("ОбщаяФорма.ПерсональныеНастройкиЭЦП", ПараметрыФормы); - КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ПерсональныеНастройкиЭЦП", ПараметрыФормы); КонецПроцедуры @@ -184,7 +172,7 @@ Возврат МассивСтруктурСертификатов; КонецЕсли; - ТекущаяДата = ТекущаяДата(); // Используется для выявления истекших сертификатов, которые хранятся на клиентском компьютере. + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); // Используется для выявления истекших сертификатов, которые хранятся на клиентском компьютере. Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты); СертификатыХранилища = Хранилище.ПолучитьВсе(); @@ -241,8 +229,6 @@ // МенеджерКриптографии - менеджер криптографии Функция ПолучитьМенеджерКриптографии(Отказ = Ложь) Экспорт - Отказ = Ложь; - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда Отказ = Истина; Возврат Неопределено; @@ -273,18 +259,18 @@ // Открывает форму просмотра сертификата ЭЦП // // Параметры -// Отпечаток - Строка - отпечаток сертификата ЭЦП +// Отпечаток - Строка - отпечаток сертификата ЭЦП // Процедура ОткрытьСертификат(Отпечаток) Экспорт Если ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS() Тогда Возврат; - КонецЕсли; - + КонецЕсли; + СтруктураСертификата = ЗаполнитьСтруктуруСертификатаПоОтпечатку(Отпечаток); Если СтруктураСертификата <> Неопределено Тогда ПараметрыФормы = Новый Структура("СтруктураСертификата, Отпечаток", СтруктураСертификата, Отпечаток); - СтруктураВозврата = ОткрытьФормуМодально("ОбщаяФорма.СертификатЭЦП", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.СертификатЭЦП", ПараметрыФормы); КонецЕсли; КонецПроцедуры @@ -305,7 +291,7 @@ Если СтруктураСертификата <> Неопределено Тогда ПараметрыФормы = Новый Структура("СтруктураСертификата, Отпечаток, АдресСертификата", СтруктураСертификата, Отпечаток, АдресСертификата); - ОткрытьФормуМодально("ОбщаяФорма.СертификатЭЦП", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.СертификатЭЦП", ПараметрыФормы); КонецЕсли; КонецПроцедуры @@ -346,23 +332,23 @@ Если ТекущиеДанные = Неопределено Тогда Возврат; - КонецЕсли; + КонецЕсли; Если ОбщегоНазначенияКлиентПовтИсп.ЭтоВебКлиентПодMacOS() Тогда Возврат; - КонецЕсли; + КонецЕсли; РасширениеПодключеноФайл = ПодключитьРасширениеРаботыСФайлами(); ОбъектУказан = Ложь; - Если ТипЗнч(ТекущиеДанные.Объект) = Тип("Строка") Тогда + Если ТипЗнч(ТекущиеДанные.Объект) = Тип("Строка") Тогда Если НЕ ПустаяСтрока(ТекущиеДанные.Объект) Тогда ОбъектУказан = Истина; - КонецЕсли; + КонецЕсли; ИначеЕсли ТекущиеДанные.Объект <> Неопределено И (НЕ ТекущиеДанные.Объект.Пустая()) Тогда ОбъектУказан = Истина; - КонецЕсли; + КонецЕсли; Если ОбъектУказан Тогда @@ -382,10 +368,10 @@ СтруктураСертификата, Отпечаток, ТекущиеДанные.АдресСертификата, ТекущиеДанные.УстановившийПодпись, ТекущиеДанные.Комментарий, ТекущиеДанные.АдресПодписи, ТекущиеДанные.ДатаПодписи); - ОткрытьФормуМодально("ОбщаяФорма.ПодписьЭЦП", ПараметрыФормы); + ОткрытьФорму("ОбщаяФорма.ПодписьЭЦП", ПараметрыФормы); КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -546,8 +532,7 @@ Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файлы цифровых подписей (*.%1)|*.%1|Все файлы (*.*)|*.*'"), - РасширениеДляФайловПодписи - ); + РасширениеДляФайловПодписи); ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; @@ -571,8 +556,7 @@ Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Подпись сохранена в файл |""%1"".'"), - ДиалогОткрытияФайла.ПолноеИмяФайла - ); + ДиалогОткрытияФайла.ПолноеИмяФайла); Состояние(Текст); diff --git a/SSL/src/CommonPictures/Взаимодействия/Picture.png b/SSL/src/CommonPictures/Взаимодействия/Picture.png index 800b127e22a303d311d77ea85a3b13014f833a3c..e33c95117e97425d292b8ec74fe5a0947025c1fb 100644 GIT binary patch literal 6938 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 literal 4418 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 IM6N<$f>5e{ApigX diff --git a/SSL/src/CommonPictures/ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий/Picture.png b/SSL/src/CommonPictures/ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий/Picture.png index a128db99e81f8aa938a0a5f0c418f20ab3af9ecd..58319f9047d8caba735270459856f7cbfce5d712 100644 GIT binary patch literal 3244 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 literal 2827 zcmV+m3-t7fP)<h;3K|Lk000e1NJLTq0058x000mO1^@s6`S$i;0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU+tw}^dRCwC#T6<Jf#~J^2_b$6Es4NIc zl!u5QARxwP44A5cMg*jms^uJWv}!yjYEo-BrIoylt#XWsm3nM#Y8o4QqUA)9q-wQ_ z)~Kkkh{!8J8;B3yEbQ*RyZ6<ZyWGv)7c46$e>vxT-1%na&fGimo8R}FyU2K+hbQSt z@-`7-CMPFndvtVkkm$FywQ0k`!g_Ij{P^*p)9JLy$;n3w3JNYrJCMm_!Zl_3GjX$% zA`5j*?U@PTeqU7G`EKXchMtDu9zX<e^XY9o%h0$47z+h*1pyq(2v=;<6qi{nb9{z( zN~-<)jF#i=eN;m0-R9eu4{k{JWCHr=ZsD4HG?h2^GeW+6!&RaG0A<h*wh+H8E-gft z*>0+D?AwyN)7$&U1qFk?yAvYD5r5nIa?bJ59N)Gw7(9FS>{-At4Aj=vs*{qED6tOv z2u#$32^040-n~2D5kxp8M1|xhPm9RQ$xMZYn(Dj&m8Am#Xsf3a$T1cO37_hsM#Ks) z<R5-h<J6+?NEOl5Z$8sAV4mOE(+_0t!>32OfMX&wkQfvNH!E~r0pQYybDXH0<?M@S z$^wLs(&m!}5|+MuM|{EAXpyp6juT&1xGEHKyttk`!uR((?NWfxF6tmW&_DabBPW)- z0g+eZ6OIM9Zru{VBQk>sCd5dfR;wX6IJg*rXp19=bWM-4)-0b3NihMybo#;7o5p3R z*kb_Eq#g_%_XdF?1&+g_(4<pY_kcOyWM<~KclAP7%T3URC;Z@4u2d<3K$D&LlLD6u zX!knEzkOmiP)7TA86atR^P{piT`>V##4=Bqh~r#K5??<JT0a%cN{aj39f-UcpKt{p zDf5WFMx%ks%1Si?5Y^q?orQ|*0JJ(~T$`3^8GpZ~6+-wPm@$#>`(y+Qz)%J-c9X*F z%J@O}qtL`#<J=&mWQeI)r+W<~oyeexGj_Ftd7v9k7yV2&QUEX{1Cuqea1(Uk&-w6j zLWM#o4Hx&#_lQAwH2$>gP0)Di1Bh9?eh@GC`JETE?u!GEkhvKu{;~r`iwTBHDql6U z=}91sCiqs*tU*P`hh;Jk#<v5|^y$+nDVS!?oN4nzLPFGOX=#FAUS6(s>}XyDci7nT zuvjja3mPURMtyiBFW4Vh2rr~OJ8ZkMe_eqY&KrC|XOAAjW0IiaPn%?F9|Al*9IQW^ z#hVF}gyH}e9-4_}427kQHSpZ(cRXScp67rgJ0a@%9H={43~^~c7XXhN<Nbg)1@5Nd z>^~qL)v>6p%mL;U%MZ&0!!jYEa9O@IDbkidbM}0Qt2W+@FLxBQEX!iStWHQspm5&N z$8B0$TgN$eG-bu1|EK~d@8@_~vu{Z3{_r2aT_)CHfxUJ0{E{EdiPCS*O)7aVE-=n1 zgdt{OIr!dq`zym+&1G2QcwZjvm?OVR6~H4*2F(ff#-Yo+n8&u`(;GG)r;pOgWn=ju zSQMQh_(==nt(xYQYM>sT1kTbA9Nlld4qEN;T`+CwCL1#j#tzU-dKoxV2gE$T80!CB z0*t90F<S?)CT#7f>{FqRK|XFrI4m~9a869HchmChy{}qL5=z`2NI3KyLm6&k?C*2U z!d{GT2OtcPs;Vk=TwEMQ(==dn^lNHr)LN}pFTL;evu&Y&*C*tumj83rj5lgy;@6eG zwyrXC#oXVOg-QkXyW4WdCPY7#xA@tRS6u2KPGX1&YO_<J{bZ@&<H&`LrY%nQnQ2xn zCwyE^3JPyf`0*89G*@j7EIKB;)Nl^;bPv>CsD}y!9>cwl5leI-R_Owk!q;x(cMI$i zzj&n+gUnuk3KkdF!Pxj;3-|bs^Mkr`Uka>*t>Mxcp^T$CZGGaf;5h$|Owez#KtE|U z2R-5p05nf#c4*^<AZBmIw+ms_)z#|w_;?DR#BjQO`?fkUG11PSHER~-03N($->QFP zSV<twpr7Cm4UhED(cAyN!DyO2>Gi`qbmx9EtiWawI%xKL&3Sj#Lg3M{9<z^ywT2Lx z`<FL!j9KHV!rxa3FC<NbF&ZntKD*HDvV+nWD<I><T)4RL8uT|5LDS{4Ff}F37P|1* zje}*FL2$8@LFN>c!cSjX2pI?KpnUx<V2m3e_!%wK|F;qdr2-}=SVPD?-7N@<4z-0n zX;Q0wTrq(yy}dRwn@}ilcsc2E1M(OoL(4yf!hM}L<IAPreK6A)3<ki41#@I%q?0eA zRFc+OEc8mV*#eio?trZKN?_OLSHNg6fze2=G@8h@g901w*IYyb`+*>^on8zrhPX>G zU_whSfQ(QIy9)aj##(3nR^$}Ix@mF%*6u^$%EH*n_m)=kv0>W5-DRDWX_JCL%0&2E z54LLu7Qm_O^U$Z;K4Jz*-tuRD&fIyR^;1GxTri{^yaVG?4x!Lzf#_*rFlp)p6#6X4 zH$!MdFtpUR0FUxgI;hcA-N@bY)=5VuAX&McsZ@kp09epO8A<by#=6k~-i~kc@JB;@ zBW9cW`g%JilKMD?_V)JLG|(T?!t&82U)t#dM}htODVseJ*uvUNKl`BeA_MWf+mk(z zX1WA#kk)%&!_vYY3?f<4(JEd$Mg<SLP0-lZD}*wmnE?tLqPp~g6a1yU%WXZ<W*WM_ zdR55Zt-B{Mh9?Yy!GrVHE3ZLPXgZv0=mcNXe$gN6;r!-L;L({p+lkEjT0BgOdJ39r z|7WM6Dh}`3DTW6r6BtPQkgfG~4<L4sg@!!lyD9f}e8L{V79otq#>P@6ll5fM*w|?2 zBc^iFK*J?0u<uuVu;1MK?Mp~tpAMd}vJ8H^+Bpuf_V@v%k1ej_5F(srTpWv83)Li( zD}ZMicvyD<Ruzrqqe4`G0puE}9M(<tClEAIJYtNy4Q&t^8!E5|ehSPWcwEdN_#s3F znH(1?Fi1`DM&Xf@Upr)buoLU10)8GWC2Fp>;C&$KY@6662)SUcnV<@iXUr6sV1TmN z?He=AxMv_#XCy5{t_7<hhO8gy_;$VF?>-R`5fn*UkEhMe&FYw#7z!o9Z)$2%r>Cb= zBLR<9V5{<$Ab}mPRpaAhO!mQwRwS^GR&HPRom~u<tf?`71@LGQ$np|lA(Uyk)|e}E zrXikVOBG7hFBr4wMLdr+Umi3tX=?(jzv+SjBm%Mi!B<~Izc`fP&_l@W`$0p&-TGFD znDR6N4=o5}ksv%_5SdI4jgJgM-bbUgb)K=ac|^x>M<$r)<Kq#7h&s}2vAF$~FWk?n zM|FHcs)15dQz?AZ!@n(IFlA+BQDRKQ0y-ljgHowfBLUB_0vkt2@%sfnZ3$ma&>x?o zV|H)Ou<k?H`S)|_h1-th$>j3Gn!t&(j9qR0<vTJ*^g|YDw4m_HLN8(rr*9o2V35&D zA``g#Z3-aQsW2$O55|u11Bbl<tc0|E6{9=84L}_o9ha9ZSt9&++Sk{o4G0M6wf*4e z;3H8@dN>affvt!4{#pjwpg<G}ctGMB3+y&gKk-P<x8Ayr;w~-uF2SHhvOc0>a8_gr zw?D{sBFpl2!Il-Z$R2mmzq(opN<S<Q=RG!nL?##s;FfHt@~CZ)ue^D*#+N<$caA6N dank<<7yu`4*J19daFPH3002ovPDHLkV1n1dRqg-) diff --git a/SSL/src/CommonPictures/ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета/Picture.png b/SSL/src/CommonPictures/ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета/Picture.png index 67c145b66778505df550035b66f3b46389feb432..d70240b5648b7108764ec5d705c07615461d5a56 100644 GIT binary patch literal 3162 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 AmH+?% literal 2754 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 IM6N<$f}49PQ~&?~ diff --git a/SSL/src/CommonPictures/ВходящееСообщение/Picture.png b/SSL/src/CommonPictures/ВходящееСообщение/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..83740169d1d9d5ce8c20938f583e22990d359427 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fy`C<PAr`$`uQ>8GDDbcx(EVk| zzi-xh&+FZ4EUesDY!6>pBHg0$(Yfhsf{3HY$M(<cb&YF(2;>}Wf2d!>mG{tTlI`tv zsrpgYwjbvfS(xuQ68li5yq!@&Q*hF+I?>w;BbpLIzdC<TV`*Pz8}Q)O#-~ZEU#oIi v=)C8h+m`)8<c<^2oDz<03mn|FtBRRUx0tt9{EpoSbQpuDtDnm{r-UW|lW|P4 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВходящееСообщение/ВходящееСообщение.mdo b/SSL/src/CommonPictures/ВходящееСообщение/ВходящееСообщение.mdo new file mode 100644 index 000000000..236fa4338 --- /dev/null +++ b/SSL/src/CommonPictures/ВходящееСообщение/ВходящееСообщение.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="eb226ca1-6478-4d38-b1ee-b7ec38525249"> + <name>ВходящееСообщение</name> + <synonym> + <key>ru</key> + <value>Входящее сообщение</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/Picture.png b/SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..3e728964a5a76e8f58cc5e094293790bf3933e4e GIT binary patch literal 600 zcmV-e0;m0nP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A005jxL_t(|+G70w|33pIfQf-ZK(PTV3=9kmX_GeofB*Rh11CER z12YpNih{rY{xf{~`V-Fo_2)0c_g}vmRHcO(X65-aGEy1_1YPj+*I$O;fB!KUsYo(Z zhTAcs8$f#(z{23ypT7+6zkFw4U|?Y2U}K?k7(9Rf8EzwO!{GOyzgQI^`=7pH@b}+; mhBqI-p`<*jhXKWz2`~U*cXbgtzbhpG0000<MNUMnLSTY`Hv0kq literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/ВыравниваниеПоЛевомуКраю.mdo b/SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/ВыравниваниеПоЛевомуКраю.mdo new file mode 100644 index 000000000..f384f409a --- /dev/null +++ b/SSL/src/CommonPictures/ВыравниваниеПоЛевомуКраю/ВыравниваниеПоЛевомуКраю.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dd9d3586-775b-4d5b-ab2d-78db0870ecdd"> + <name>ВыравниваниеПоЛевомуКраю</name> + <synonym> + <key>ru</key> + <value>Выравнивание по левому краю</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/Picture.png b/SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7efd5b0657f0b5feedd45fd04d54245676ea77 GIT binary patch literal 676 zcmV;V0$crwP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A008JoL_t(|+PsrHPQySDK;L@Tn>E-Zwg`v_LC+;P0yP&%$pvzY zl-wfci6|{-l1LB<JI;D2!bga7Ycl1GX7u!CMu`X^5fK={0}Q};I+J<1pxSH!$kT*8 zb;L&hX=t_{fSao`Cik~Wg*q_%lH=)2u7?B4<tqR>Qs1?@@vPn|^33u0aMuyRmxJ>` zinBjZqawqYoo5lDZagBO6!eeWKRcM03lbZ1IXs~k>jODRZ2W8gr~PBBj_7@Q@okH5 zh4;E)U2Qrf*yrHsdC92AxF|AWqlpx>vb#iQ4KJ&8Hw3}Y^f3U07i|&xY>kKj0000< KMNUMnLSTZT93Z~{ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/ВыравниваниеПоПравомуКраю.mdo b/SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/ВыравниваниеПоПравомуКраю.mdo new file mode 100644 index 000000000..7d2ba8ad3 --- /dev/null +++ b/SSL/src/CommonPictures/ВыравниваниеПоПравомуКраю/ВыравниваниеПоПравомуКраю.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="44c610c3-9c0b-4bf0-95d6-f17100d3e98d"> + <name>ВыравниваниеПоПравомуКраю</name> + <synonym> + <key>ru</key> + <value>Выравнивание по правому краю</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВыравниваниеПоЦентру/Picture.png b/SSL/src/CommonPictures/ВыравниваниеПоЦентру/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..a811db437eeec7fa4d6d00b40e9af8fe4ffbfa61 GIT binary patch literal 656 zcmV;B0&o3^P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A007iUL_t(|+Pu>{Zo)tifZ^ZX_1a5##4=KZQl-dwatq2FhLT%w z9%_VyVp$1xY!<IKRV<L`7Bk%x^ZKL-oOAd@h-Y{=kO0fo#%*^wjcIv%Nr{yJV5(z; z2r0@M+c|!!6Q;G)=FIzR#`^Ok2z(9XWwKmt+@Yw5q(H|K5e6hGqG}9Z-@jLr|7-5E z!KJ}iE1sWpzX5P{e^J&XN)BkS-Q~<iN$&vM)E~|u9cz>nEV2nogc#eg&yW56zyl1l qikQzvSleORj&o~=Gw^<<zX1T?ypR#6y%i4t0000<MNUMnLSTa8BN;;g literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВыравниваниеПоЦентру/ВыравниваниеПоЦентру.mdo b/SSL/src/CommonPictures/ВыравниваниеПоЦентру/ВыравниваниеПоЦентру.mdo new file mode 100644 index 000000000..956901a2d --- /dev/null +++ b/SSL/src/CommonPictures/ВыравниваниеПоЦентру/ВыравниваниеПоЦентру.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a54f2d41-a05e-4878-80c6-81ca2899fa4c"> + <name>ВыравниваниеПоЦентру</name> + <synonym> + <key>ru</key> + <value>Выравнивание по центру</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВыравниваниеПоШирине/Picture.png b/SSL/src/CommonPictures/ВыравниваниеПоШирине/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..4df108b9e86ace48e696343a708c973bb9bb6ad6 GIT binary patch literal 637 zcmV-@0)qXCP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A006;BL_t(|+QgGN4uVh=MbBpv45&b10-cG4rL~1iFqUq>(hax^ zOLyUVtR=C)Az*?8`4(2js09vp0q36FmnWo@REa{xR0e1O)5S`zH!<y&P2f9d>T_;! zDM_;&faPo?MAZ%M3@k&Z8+g<V?P+@yCu|QX-O&HBfs}AM=N!|FyeM%U^9u&=uJGLr z_DP28nACKYM%_eJ#G^q`673S|rcUTJm`{cuHZU}WrhRL7ZHs;<U_9uFR{-(%Z@dlw XW!7jBU4(?`00000NkvXXu0mjf*0Kr& literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВыравниваниеПоШирине/ВыравниваниеПоШирине.mdo b/SSL/src/CommonPictures/ВыравниваниеПоШирине/ВыравниваниеПоШирине.mdo new file mode 100644 index 000000000..da9faeca6 --- /dev/null +++ b/SSL/src/CommonPictures/ВыравниваниеПоШирине/ВыравниваниеПоШирине.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="23a898d9-5bcb-4744-ab6c-97b17dc98f20"> + <name>ВыравниваниеПоШирине</name> + <synonym> + <key>ru</key> + <value>Выравнивание по ширине</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаВезде/Picture.png b/SSL/src/CommonPictures/ГраницаВезде/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..3c301ee3fde5b6fe82ca2498bc3df15765ca82a4 GIT binary patch literal 548 zcmV+<0^9wGP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003x7L_t(|+G70w|33pIfQ5m9f#LLt&HpD%UV$MQ;A_vYVe>(( z;-L{~j0_A63=IGO|7VDbiu(Wm|9=K_OpG`a1BGB17{CGx)#&JGtnrCWJiyl;!5NJO m8pi@YaTs8vG&fT01;7AO<94U=Ta8u#0000<MNUMnLSTYO<>L_m literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаВезде/ГраницаВезде.mdo b/SSL/src/CommonPictures/ГраницаВезде/ГраницаВезде.mdo new file mode 100644 index 000000000..26ecf9094 --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаВезде/ГраницаВезде.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="50a04251-ac9c-4a21-a37f-ebc9ac3ef233"> + <name>ГраницаВезде</name> + <synonym> + <key>ru</key> + <value>Граница везде</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаВнутри/Picture.png b/SSL/src/CommonPictures/ГраницаВнутри/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef50c2b6fdf89fa5f74af55c4c803bfab5e5536 GIT binary patch literal 570 zcmV-A0>%A_P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A004eTL_t(|+G70w|33pIfQf;DfnocW`TrRh7#PY*(oyIs6PvM$ z!_+e{FfcIu|NkE+Ha0f?k5B&p|Njsdz)U6<pr{}EE@1rs|3AZ&iOv5PEZ&G=lc1m= z!~6H|F~k#M{TXudYZ*slftoJBl@}6X{TT@51xBjmMoIu+0N{sSaSez(8UO$Q07*qo IM6N<$f+m3O{Qv*} literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаВнутри/ГраницаВнутри.mdo b/SSL/src/CommonPictures/ГраницаВнутри/ГраницаВнутри.mdo new file mode 100644 index 000000000..85766216d --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаВнутри/ГраницаВнутри.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f8f56806-ed7e-4059-a0c8-940538c14c98"> + <name>ГраницаВнутри</name> + <synonym> + <key>ru</key> + <value>Граница внутри</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаВокруг/Picture.png b/SSL/src/CommonPictures/ГраницаВокруг/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..04d16e71b4e4e053259328156c15ec14fa5c7389 GIT binary patch literal 556 zcmV+{0@MA8P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003}FL_t(|+G70w|33pIfQ5m9fnme?#s62Y*+I0X&=3!XfWTNr z1_lNOhX4QnGekv2{r~^}KLfECSv?azo2skw3HlGO0j+Hl87VS={w{#oNQg!Oqp?7_ u3s_)jJ32c0KPh<u1{f*LjZ6#_0>A*GUx?aICH_?a0000<MNUMnLSTa3`r@?! literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаВокруг/ГраницаВокруг.mdo b/SSL/src/CommonPictures/ГраницаВокруг/ГраницаВокруг.mdo new file mode 100644 index 000000000..df03b6b5a --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаВокруг/ГраницаВокруг.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9ff9f92b-c509-48da-82ce-15b524a895d6"> + <name>ГраницаВокруг</name> + <synonym> + <key>ru</key> + <value>Граница вокруг</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаСверху/Picture.png b/SSL/src/CommonPictures/ГраницаСверху/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..dbed8a345776b84c4923f809616d5e60130280ca GIT binary patch literal 530 zcmV+t0`2{YP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A0034=L_t(|+G70w|33pIfQ5m9fnoKES^qa|K1j5t0AG8C(1<if z1_lNOMoL}4#K6G7P*#$T)f8gHhl>lgZ<+re*<?aAO#Nsq46j(A1ONa40RR6309?*q U2N(Y&&Hw-a07*qoM6N<$f?0CbX#fBK literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаСверху/ГраницаСверху.mdo b/SSL/src/CommonPictures/ГраницаСверху/ГраницаСверху.mdo new file mode 100644 index 000000000..bdaf84845 --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаСверху/ГраницаСверху.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c8bf96c8-f359-4940-8e87-3d190371d6d3"> + <name>ГраницаСверху</name> + <synonym> + <key>ru</key> + <value>Граница сверху</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаСлева/Picture.png b/SSL/src/CommonPictures/ГраницаСлева/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..320006f22b2ec77df33ff08121f8d98f13c8dc15 GIT binary patch literal 537 zcmV+!0_OdRP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003P{L_t(|+G70w|33pIfQf;DfnoKES^pUr7#PY*(oyK`Tjt{x zXJBApVEF(4KSNYh)c^ng|1*$-neaIeW+PtlVdet#(8fiN#sV!|5a4UiKyF@Oq)Kk2 b1ONsA(|%&%7nilI00000NkvXXu0mjf*2LfO literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаСлева/ГраницаСлева.mdo b/SSL/src/CommonPictures/ГраницаСлева/ГраницаСлева.mdo new file mode 100644 index 000000000..bb106e96d --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаСлева/ГраницаСлева.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="477f0b81-0eb1-4de1-8cb5-38f1e0823947"> + <name>ГраницаСлева</name> + <synonym> + <key>ru</key> + <value>Граница слева</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаСнизу/Picture.png b/SSL/src/CommonPictures/ГраницаСнизу/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8e18111e4570fb512e30af6cd916ed319a9932 GIT binary patch literal 535 zcmV+y0_gpTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003J_L_t(|+G70w|33pIfQf;DfnocW`TrRh7#PY*(otwa;tUK7 z42)E90nB7{K#cfsaRIK-#zl|D0+n6B!oa}5uzJO;{~I<RBwAB|uRTL(L>eRY!hjM0 Z7yxNaUclJf<VFAh002ovPDHLkV1oOp+X4Up literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаСнизу/ГраницаСнизу.mdo b/SSL/src/CommonPictures/ГраницаСнизу/ГраницаСнизу.mdo new file mode 100644 index 000000000..e0931dc08 --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаСнизу/ГраницаСнизу.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d914eaa9-ce85-4df7-a545-2d411ef915b0"> + <name>ГраницаСнизу</name> + <synonym> + <key>ru</key> + <value>Граница снизу</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ГраницаСправа/Picture.png b/SSL/src/CommonPictures/ГраницаСправа/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..e04b138bef2b89a90b6fe010a5dc23af75e502ba GIT binary patch literal 536 zcmV+z0_XjSP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003M`L_t(|+G70w|33pIfQf;DfnocW`TrRh7#PY*(otw!;;UE8 zLfHEM|9_HkR8-V|7@G;%WORT_90d#$7vKtQT=Z}ZgP|7-0lxNd2QX44H&Oxs00030 a{{sLf1Y#(7J^j}J0000<MNUMnLSTZ@F4!pm literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ГраницаСправа/ГраницаСправа.mdo b/SSL/src/CommonPictures/ГраницаСправа/ГраницаСправа.mdo new file mode 100644 index 000000000..86642d796 --- /dev/null +++ b/SSL/src/CommonPictures/ГраницаСправа/ГраницаСправа.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="41881344-82b7-4904-9ab8-0207d9bcd0a9"> + <name>ГраницаСправа</name> + <synonym> + <key>ru</key> + <value>Граница справа</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ИзменитьШрифт/Picture.png b/SSL/src/CommonPictures/ИзменитьШрифт/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..2813781da6bc18c4fe00fade4b637fbe03bb5f29 GIT binary patch literal 713 zcmV;)0yh1LP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A009k2L_t(|+G70w|33pIfQf-ZfY$(>u%iFmwh8~qGN5ni*8lgP zzk{<$HelbGYjAe&(ru)<;QY-8C^mlh{FPzerUU<pHlTLKYKG>FPzFPF1!OM~=K`4R zhUyB8lS>oe;`g7uW>~lX^nZc|z-)&Zg6xWUn+{;OfCb(52hUzH<aRG$5a8wh&%nUI zAi&EFm*0QpD#Q7k5B?jfD==a;pmxS;1_dcGhT>>12J}EYfAay{706y=L3h%Y{!&JC zu^`6>|6vBK+kcuN$<G1q3V0a!6n6jr@cAp&kajfDMsdylGgnaqv2W?t|L1Q$V7UM6 vHH`fqIb3qP7oZr}yL1~obutckZUhVfGMRwnu(L6t00000NkvXXu0mjfD84+f literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ИзменитьШрифт/ИзменитьШрифт.mdo b/SSL/src/CommonPictures/ИзменитьШрифт/ИзменитьШрифт.mdo new file mode 100644 index 000000000..9e9290d3c --- /dev/null +++ b/SSL/src/CommonPictures/ИзменитьШрифт/ИзменитьШрифт.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3f05dcf9-be52-42e1-b5ff-dea14d97a26f"> + <name>ИзменитьШрифт</name> + <synonym> + <key>ru</key> + <value>Изменить шрифт</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ИсходящееСообщение/Picture.png b/SSL/src/CommonPictures/ИсходящееСообщение/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..d3974fd1cbb472c2e33804278e6c3d8ef3b7e4e7 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4f(>z@qLo9l?UcJcMpuod&L3;=L z?47eZC%=?od)0o?rKzFd%WNBtnC=y;k{o8<YBjPx@n**d`3+Kej@<>?vs$Y!`0o&B zW$1i-%%Sw|ef6{j<+cXGwFzci49D6PWqFf(A4HgGy=smNH;imtXU)r}c*>Al-1CXV z3H!9S&rY68p7W<T?8~E@FRwL=KQGjd``Wza!O0MVS1j8y%z5X?dNl)G$l&Sf=d#Wz Gp$P!*y-}(F literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ИсходящееСообщение/ИсходящееСообщение.mdo b/SSL/src/CommonPictures/ИсходящееСообщение/ИсходящееСообщение.mdo new file mode 100644 index 000000000..12b50e2eb --- /dev/null +++ b/SSL/src/CommonPictures/ИсходящееСообщение/ИсходящееСообщение.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3befd4a6-8f77-4159-9a99-09202d5c83c2"> + <name>ИсходящееСообщение</name> + <synonym> + <key>ru</key> + <value>Исходящее сообщение</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/КурсивноеНачертание/Picture.png b/SSL/src/CommonPictures/КурсивноеНачертание/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..755adf614de89e57974b27215dd92a5882be8c0f GIT binary patch literal 583 zcmV-N0=WH&P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A004_gL_t(|+G70w|33pIfQf-ZK(PTV*aWjOlTrLNZTehBba9v% zRu@D^M`EyHnxms5;hJ$8uypBiINRFBg%Me^wT%lS-Y__NWY2$O+wo~;U|?WiM2|*v z|Krn);R1BqVSZh@bUBI~P6N>WjvU&!3}M1$JGNNCW(X5D+mYFX<QRv3UZB_jzyRTS VQlB2|!sP$}002ovPDHLkV1gHI^i=== literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/КурсивноеНачертание/КурсивноеНачертание.mdo b/SSL/src/CommonPictures/КурсивноеНачертание/КурсивноеНачертание.mdo new file mode 100644 index 000000000..ee7e609ea --- /dev/null +++ b/SSL/src/CommonPictures/КурсивноеНачертание/КурсивноеНачертание.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ed4edc6f-048a-40d5-8f61-989895c95cf3"> + <name>КурсивноеНачертание</name> + <synonym> + <key>ru</key> + <value>Курсивное начертание</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/НаписатьSMS/Picture.png b/SSL/src/CommonPictures/НаписатьSMS/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f168d37b4b8896fea0871a365d3ee24ca0496d GIT binary patch literal 430 zcmV;f0a5;mP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzP)S5VRCwB?Q_V_*P!v9sV=EzO73NA1 zTt#mX1g&P{vS(=3qx1}|+6XR#Am|A~V-%dtC<uWtD8vl@-Z@9SB9S^V2R=Oa-t&Ea z=N_Fg#^9Kkk$`1cmzX~x?ht1aoDJd?@n{%E3?yKh=CkK{EYEW`6<L-s*L4|kUWhv< z$-1r=s;UAW!fv-4eZ3$EplKQ`m&*mM8-c2-r0sSKhujC&LRpp#r!R0y2Zsha242qv z;6DPKLvg|t$rd4wV{ja2G$#<J6KH#C5QZVxwmq8jd+4{Y!P`F<MG<seZ$Je@c~KM% zr*nXdkM(*DGzo5T2sCD@Mb2C20Q-4ZtyVeW2A3C-B!QwRAj>lNz7J6p^+()&iTxJ7 z@o~>9(lotB(ND4(1c8fNS5)@bH0J%0^x`W?k_z$D3J=bhxA1%a7V+NNbSMADV`4AB Y0P#jh+La(;G5`Po07*qoM6N<$f;Q`}F#rGn literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/НаписатьSMS/НаписатьSMS.mdo b/SSL/src/CommonPictures/НаписатьSMS/НаписатьSMS.mdo new file mode 100644 index 000000000..5affd2834 --- /dev/null +++ b/SSL/src/CommonPictures/НаписатьSMS/НаписатьSMS.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dc17d8b6-d277-43eb-8823-71d440ae1e90"> + <name>НаписатьSMS</name> + <synonym> + <key>ru</key> + <value>Написать SMS</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/НетГраницы/Picture.png b/SSL/src/CommonPictures/НетГраницы/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..24979b95b450abfa94bef122d7e04659aeb4b8d4 GIT binary patch literal 517 zcmV+g0{Z=lP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A002ozL_t(|+G70w|33pIfQf;DfnocW`TrRh7#PY*(otwa;tUK7 z42)E90nB7{K#cfsaRIK-#zl|D0zG4aetCfs00000|NjF3a7k(zv~RG|00000NkvXX Hu0mjfN?6cD literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/НетГраницы/НетГраницы.mdo b/SSL/src/CommonPictures/НетГраницы/НетГраницы.mdo new file mode 100644 index 000000000..c9cf1c145 --- /dev/null +++ b/SSL/src/CommonPictures/НетГраницы/НетГраницы.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d9a6706e-3dcd-4aec-b9d1-542330ba6e2e"> + <name>НетГраницы</name> + <synonym> + <key>ru</key> + <value>Нет границы</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ОбъединитьЯчейки/Picture.png b/SSL/src/CommonPictures/ОбъединитьЯчейки/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..753665f65001219eb69e62da43612a644a2844de GIT binary patch literal 757 zcmV<R0t)?!P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A00B8kL_t(|+MH9tO2a@9ed%r%`~g3~vnU82#fu3@Eg}}J7(b$3 zrRN@t6+%i=Xdws%i_nND6}%M`#GC&iLbB_6%IcDoBrXigycuTSyqz)L-=5{m>j$_H zD03(wSYKNK{C-dJ_*1hoSf%L8S$SLt7@p@!N=R-CQ51tQQ)__>0SW+(Mm?8-KN!I| zJx*aXaW?iZFdw(j>0ILB@d>p(8z+qeY#z2TAGZJi!(pH?jU)bBAo~6S08GPsgwqKu zy9&oSQ+O6r#bB%6Rv;l%yOa3Q_A>mzNGqTi%z`FXYv(GkW9@=cru<pZ%-4WbmH+@k zaNLEru<WXaFVX;>=cWcE%d+x3&y~hiw<}FXbH8!n9GHxzdMh&r|7M^x$Xb%g&2=FS n{C-awMb|lwIQ}wC*7;`uNjW?Ir}0Pu00000NkvXXu0mjf3!6Sh literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ОбъединитьЯчейки/ОбъединитьЯчейки.mdo b/SSL/src/CommonPictures/ОбъединитьЯчейки/ОбъединитьЯчейки.mdo new file mode 100644 index 000000000..daf7a21d3 --- /dev/null +++ b/SSL/src/CommonPictures/ОбъединитьЯчейки/ОбъединитьЯчейки.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cc770616-f6f6-4054-876c-f319b1f8c6cf"> + <name>ОбъединитьЯчейки</name> + <synonym> + <key>ru</key> + <value>Объединить ячейки</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПиктограммыЭлементов/Picture.png b/SSL/src/CommonPictures/ПиктограммыЭлементов/Picture.png index 3e07ec8a30d2a1dea93e2ef24317d4b70a51d3b0..713ebb05bcde69ddcd6b8d00fc4aa5888a5dd7b1 100644 GIT binary patch literal 1661 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 Hu0mjfT_h>d literal 2679 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 Lp7b(m*#7?jZ2xNO diff --git a/SSL/src/CommonPictures/Подчеркивание/Picture.png b/SSL/src/CommonPictures/Подчеркивание/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..35d9996f25a58afaf3e7deafc77a5cf8c2d876d2 GIT binary patch literal 589 zcmV-T0<!&yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A005CmL_t(|+G70w|33pIfQf-ZK(PTV=mJ@p$tZrBHhnH5HZhzo zh>niLU}F=*X@Iqj3nMxkn;2~a5#5;#3=9mPK7D5R^yxF<Ktyupf8@a9<KxBZ0!CsJ zQcQH%e+C8yh9yf^ksby|kL>x+$H&XS$H&WX^vIt7Bpa}F>2j=WlDt56O2h_`QzGMl b=SIK)MPxYD`Qc2_00000NkvXXu0mjf(=_%q literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/Подчеркивание/Подчеркивание.mdo b/SSL/src/CommonPictures/Подчеркивание/Подчеркивание.mdo new file mode 100644 index 000000000..e6f4957b7 --- /dev/null +++ b/SSL/src/CommonPictures/Подчеркивание/Подчеркивание.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ba59393c-c499-4999-91d4-b9e34d94db0e"> + <name>Подчеркивание</name> + <synonym> + <key>ru</key> + <value>Подчеркивание</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ПолужирноеНачертание/Picture.png b/SSL/src/CommonPictures/ПолужирноеНачертание/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..db8b28be6c97e496eac8581b883e7c68a7861c1a GIT binary patch literal 599 zcmV-d0;v6oP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A005gwL_t(|+G70w|33pIfQf-ZK(PTV$egUqWVnB(O`ppc6CL)S zkB^sO+Vr`M=yF(H5FH(fVmdQ3Glq@mYETTYwsB!Z=5up%VHkj}h7mm$jvm?bf9cZY zSp6Fv9ZA>#Y~g|KZ>qWgBN}0vk!^&ru^G&SZac2{=HlXH;Ns%MP{V}Hc5L9=x9<$! lzJ13~!#MQw0>uUZ1^^UMNU#x<^z8ru002ovPDHLkV1nTT|6%|D literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ПолужирноеНачертание/ПолужирноеНачертание.mdo b/SSL/src/CommonPictures/ПолужирноеНачертание/ПолужирноеНачертание.mdo new file mode 100644 index 000000000..d7542e3e4 --- /dev/null +++ b/SSL/src/CommonPictures/ПолужирноеНачертание/ПолужирноеНачертание.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a3a9a48b-f241-45b2-b93b-d34bba0a8a66"> + <name>ПолужирноеНачертание</name> + <synonym> + <key>ru</key> + <value>Полужирное начертание</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ТолстаяГраницаВокруг/Picture.png b/SSL/src/CommonPictures/ТолстаяГраницаВокруг/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa3c2e05675436e51ebd362ea6b311b1f683b28 GIT binary patch literal 629 zcmV-*0*d{KP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A006m3L_t(|+RTzc3W8t|g}-0g2Xze>E<%Lx0A1mCU(vSg5Y;;B z0G^=(h#=C!MfZ8FBr{OUO%H~F$GmxuVT>e(U<6R!Z_0}YX;yX$!nsG_yLhvO0dN5N ziUHEBBrhH>LK4<mS!*SUdd1u22iKf++T0GOtLaMAx?sOsY0!eN6I6~}y$&OZD2fD- zBuS@ZbN0_}@Jj+CiOcz@zMojV^Li7%ZZMsU3FlsKap1e}35LL7Af5vN)RJ?XjBnFf P00000NkvXXu0mjfom>e? literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ТолстаяГраницаВокруг/ТолстаяГраницаВокруг.mdo b/SSL/src/CommonPictures/ТолстаяГраницаВокруг/ТолстаяГраницаВокруг.mdo new file mode 100644 index 000000000..62845656b --- /dev/null +++ b/SSL/src/CommonPictures/ТолстаяГраницаВокруг/ТолстаяГраницаВокруг.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6c07ddfb-8823-4953-9905-9550b847dc3f"> + <name>ТолстаяГраницаВокруг</name> + <synonym> + <key>ru</key> + <value>Толстая граница вокруг</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ТолстаяГраницаСверху/Picture.png b/SSL/src/CommonPictures/ТолстаяГраницаСверху/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd546c28cd0ca8e85f5492dc1d9b1b34fb6909d GIT binary patch literal 553 zcmV+^0@nSBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003=CL_t(|+G70w|33pIfQ5m9fnoKES^qa|K1j5t0AG8C(1<if z1_lNOCI(8u|Ns9PN{iF}|NsA=0UZ+~&PZt(FflMNFqD;~V>N{saq75W`<D6tkxeE< r!_-sH1p^-jgEtlkiBr!7lmNg0Zrg&Ad$Y+O00000NkvXXu0mjfs_)_m literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ТолстаяГраницаСверху/ТолстаяГраницаСверху.mdo b/SSL/src/CommonPictures/ТолстаяГраницаСверху/ТолстаяГраницаСверху.mdo new file mode 100644 index 000000000..be2fc0b07 --- /dev/null +++ b/SSL/src/CommonPictures/ТолстаяГраницаСверху/ТолстаяГраницаСверху.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2362a8d5-dca2-4527-acc0-63782377f28a"> + <name>ТолстаяГраницаСверху</name> + <synonym> + <key>ru</key> + <value>Толстая граница сверху</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ТолстаяГраницаСнизу/Picture.png b/SSL/src/CommonPictures/ТолстаяГраницаСнизу/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7a4b3b88cbb519042ad90fb6f7f58162cc9d95 GIT binary patch literal 535 zcmV+y0_gpTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A003J_L_t(|+G70w|33pIfQf;DfnocW`TrRh7#PY*(otwa;tUK7 z42)E90nB7{K#cfsaRIK-#zl|D0;)I*0|NttsfjT|baXUU#n{9HeC<(PKnb8u7*GNL Z0|3S|T3pfu7b^e&002ovPDHLkV1h8E)j$9M literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ТолстаяГраницаСнизу/ТолстаяГраницаСнизу.mdo b/SSL/src/CommonPictures/ТолстаяГраницаСнизу/ТолстаяГраницаСнизу.mdo new file mode 100644 index 000000000..2acdb8b13 --- /dev/null +++ b/SSL/src/CommonPictures/ТолстаяГраницаСнизу/ТолстаяГраницаСнизу.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dfd6d85c-a734-4458-83b0-87b5949f9c68"> + <name>ТолстаяГраницаСнизу</name> + <synonym> + <key>ru</key> + <value>Толстая граница снизу</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/УвеличитьШрифт/Picture.png b/SSL/src/CommonPictures/УвеличитьШрифт/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..6806cdf127b236854cc1b9c731b862f0ea6a740c GIT binary patch literal 826 zcmV-A1I7G_P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A00DkUL_t(|+LThUiYhS_Jrkz!2P{G?Qp74Yf*@G<17c}q<u};p z2lBSFP`0wLaCa;P_X|X^vas+A1Pf(s_Ra9lD;_)GI^$ylfslK0a?ZIIB=OVz>utra zv%nA6%lijkqZMA>KL`NfGw^o1WuwsuzCZr+`xCFx3IK{_&So=qyIsa{%x88A3&t2~ ztvMJBo)Y9{Fqupk$1##5!Dh3;?RI04&47HY)oL}K&u0knkH6JwVLqP+c?2Tw_sivi ze!mYP1cVSc91hs;_xURFygTPe5=tp5r6{Fjr_<qoL-gKLYn=g|bJSW>N=dCX*XuQ( z5@@aIz32BkDJ7+pY`5FR1kO1cV;%tB`;0(q&E;}=hsnB7sZ<C6X`0?;R4SDah9S~4 zMUo^am&@4gcEMeU!{LzD+QNYujYgRYr4$#71@9~vV>lj<3kgoA6RoxU>Po#{&#-~D zHtTP-T16B^4+GQd^?1EraXcOY0AU!S*=%Auod$mg0GGPgGj9B#ZvX%Q07*qoM6N<$ Ef^*Gh-T(jq literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/УвеличитьШрифт/УвеличитьШрифт.mdo b/SSL/src/CommonPictures/УвеличитьШрифт/УвеличитьШрифт.mdo new file mode 100644 index 000000000..869509a91 --- /dev/null +++ b/SSL/src/CommonPictures/УвеличитьШрифт/УвеличитьШрифт.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4e3b0b9f-45b7-48a8-86c6-cc14a921aa78"> + <name>УвеличитьШрифт</name> + <synonym> + <key>ru</key> + <value>Увеличить шрифт</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/УменьшитьШрифт/Picture.png b/SSL/src/CommonPictures/УменьшитьШрифт/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..69ff1af66e865aec2378237fa8d95348f2c1bdd0 GIT binary patch literal 616 zcmV-u0+;=XP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A0068>L_t(|+SJlP3c@fDh2g1^%|I5@YqZdwMAx3etLPa@leIU| zg(vA+epi87Y-<n~J{ZU%`DO-E0P<<}=g94Pm&Y*3)_ZB%N{Sp{j5KW}m*b%jAiH*_ zKssknFwI83%qmcpB{9bNF_(4?Az)^B@0q)^2-J0rnPFyx5Xb^jcR&)71*AvgdN;*t z_bIpvbX|w4qN?<L4<M?Fa}MVms``Tb!AJTz@EiaD-9^rr$|$J-0000<MNUMnLSTZx C`~-9W literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/УменьшитьШрифт/УменьшитьШрифт.mdo b/SSL/src/CommonPictures/УменьшитьШрифт/УменьшитьШрифт.mdo new file mode 100644 index 000000000..361606439 --- /dev/null +++ b/SSL/src/CommonPictures/УменьшитьШрифт/УменьшитьШрифт.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="79b6ecf5-8a6b-44a4-9587-5f8764463228"> + <name>УменьшитьШрифт</name> + <synonym> + <key>ru</key> + <value>Уменьшить шрифт</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Успешно/Picture.png b/SSL/src/CommonPictures/Успешно/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b60d373a78e225377336fb0100efe3c2aa16c289 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X?s~d7hE&{2`t$$4J+o><r^wN`;3@z0ZOtFrN3u1Tte)v% zpkr$`lkuj&BHoJsKdfhjT@gv1v1wDciFiYfIe$n>!t<2G9rb@jo&72#%a|RwKHmKI z^sK&t^{o{Rf`=Jq$Y10=m~MTCVS>_x`wm?fz?_DR)iE1hD!86#6WAo1$Z#QKg5vWs zTNlHY32zk+FeN*v{%?LH`9xMu(2Q-y+wJFU4rW<*G49|2n$yO3gXiGWatnr3wVaBR zH~;;gH+ky6=qaB6jxS|vi7b%hDdrRif9$=qXG&Un0|PUI@Z}8xH!BYB0D6?c)78&q Iol`;+0M?m&*8l(j literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/Успешно/Успешно.mdo b/SSL/src/CommonPictures/Успешно/Успешно.mdo new file mode 100644 index 000000000..ae1086354 --- /dev/null +++ b/SSL/src/CommonPictures/Успешно/Успешно.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cd49148c-e385-4b75-a758-a93196e73dba"> + <name>Успешно</name> + <synonym> + <key>ru</key> + <value>Успешно</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ЦветТекста/Picture.png b/SSL/src/CommonPictures/ЦветТекста/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8e829320e8d38cef5a14625871fa551db642da GIT binary patch literal 743 zcmV<D0vP>?P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A00ApWL_t(|+LTheio!q?J(Eo&SP0VvVw2hlirxH!Wb6F`%l($k zN0?Il6GM{5LTs$XLIj7+*(#uBlGOtPGxv4Q+<QS1U1vBP(ip?O7zZ6#uh$%nMkvb? zeGnwAjyR490Q>zO=kpn^>k3<(RY8_z1c2l5h%gMXTrN@9wVlcKFQpV$s}+?}lu|MX z0-jDMYcE=cCb79oDJi97k|exdul%<_!+!skQgS>VbGO^Irqap&Y*R{6Yu!@uFomY` zeMr+3T5I^eFCLoMFx|_)_eD{}D2h0r&v`f;_@LmKxhM+Jr|NRKV6j*rO;gdiNUy^E z{K=SaEBxMWFDHEr2AIw!*nEEpC*M{O#=ONUj6uGwx>xxfIMdk#^t`u{=y{mVCIEoH Z0RTWzOjy!Iw)6l1002ovPDHLkV1mCRLeKyJ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ЦветТекста/ЦветТекста.mdo b/SSL/src/CommonPictures/ЦветТекста/ЦветТекста.mdo new file mode 100644 index 000000000..e2a702085 --- /dev/null +++ b/SSL/src/CommonPictures/ЦветТекста/ЦветТекста.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8ccd9be8-ef26-49b9-8cee-03ae4e500386"> + <name>ЦветТекста</name> + <synonym> + <key>ru</key> + <value>Цвет текста</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ЦветФона/Picture.png b/SSL/src/CommonPictures/ЦветФона/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..e868b934824c9644b1a129903507149054b50879 GIT binary patch literal 888 zcmV-;1Bd*HP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000XU z000XU0RWnu7ytkPHfcjcP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-pOwu}Z^G6hP05 zqT*011aWY9lPD;*>R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL<VU%GIYt?Q#()D~f`@{@W0MH4u)NZv70OBN$_`&BZ0^oVm zt~(9>#(bD64NQRTZj^-}DnS22ry9f<FoS-oLEHhRI%(HHJOHI$?k_+o$o&l{DcAEs zd;n(8^?Weq05iya1u%7VsR3$9I#Or7Q!T5OWl6i61d%)*WjY#Uaz73el_sjAqb`vD z2f$*!*ls#<t!i0&>-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<hA84hn@dQ!CAE4bN! zh3lfNR-wEF_v0_X#!vm|T2EpC001CkNK#Dz0D2_=0Dyx40Qvs_0D$NK08$750ToyP z06Lcd02go9S|5-A00F#7L_t(|+LV${Xwq>Q#y>xmAA_AU69PMkuI9EwjxFqDELt_J zkxU|C-Xd&=1|93RYljipVG#Yfb%>a;K@rS6bW*_<f&>|er*aS@f7#Qavh8P*KJdWH z`~C8MpXd9$NMbM3nFR%6ejQDEmCh{4er{)1BM|fJUv)1!u)#qSfaLPL95jhu8`t&w z3DFDoi6b$$uH3k&x=I>}xm8z5#}h|%{^qp$vvBT!>MBW+0x`du`lt`PZxvbbD6-;F z^xh%$w2)k$*X!pm@em?7>%l>j$=NVJhQ2WDcHuoa#JA7lRK}|=3z5sA&dZYYW;?6E znS)y2zN@M>mDj4`IiKP=-#!(ty$U>pI`wF9lx+4P01YZUeejCfi(w9@zuG?iH?|&? zjMJ$T>`-HeTIWK83f1?Y*jj(b+34K=Q<zztR#lrF*?FyMX7O(Vb_-p5u(6gmuBL9$ zpaQ_{)MGZ*@<!i#@P`u@e44xz?8-i#^X=;yb9bJoSSZtOwdfa4(`0<&7|)gxhND<0 zV^|i0z_2Weg)#uHU8{{L4K(1pM9XUbig7ADhSM|$8sIcdrov+Y{2Tx=;gBiXE;}p$ O0000<MNUMnLSTY#Qj;D4 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ЦветФона/ЦветФона.mdo b/SSL/src/CommonPictures/ЦветФона/ЦветФона.mdo new file mode 100644 index 000000000..cbb98821f --- /dev/null +++ b/SSL/src/CommonPictures/ЦветФона/ЦветФона.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ddca925c-fdcd-40ce-a504-4fca1758de3f"> + <name>ЦветФона</name> + <synonym> + <key>ru</key> + <value>Цвет фона</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html index 633eb21a5..0745cfe88 100644 --- a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <h1><font color="#00008b">Установка обновления конфигурации <hr></hr></font></h1> <p>Для установки обновления конфигурации необходимо выполнить следующие действия:</p> diff --git a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin index 7553122ed67426053cb2fbb85d62cb78234a099d..afca8f8d455c16b04e1f8d70cf7f1a6bcab5b6b9 100644 GIT binary patch literal 76708 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 literal 71826 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 diff --git a/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.bin b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/Template.bin new file mode 100644 index 0000000000000000000000000000000000000000..df6a6102d21b40a861f85c3a958acc1742818667 GIT binary patch literal 2196779 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'($D{($TAQRym#bDLddlb03bsas|NRP#Q2t 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%0A1p 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 L}g82Qa>`9 z(f`RhsGEZVDO*!JaTbc57iSCYT|=T~OTF0KCK&IYhV2+;$Q?}0InB5dPgh!;WfDE8 zg!VSZvh7p@$kE-p)ji7u139G?wR`E0a|~GAJ~=}<gZGTvy8;e)WJk)no+E3n$<><} z&8Nc?OZ>z0D`Ax@Uw%~>XbmvU-V#WhyhSQHLuky8vNz5zBRXOzW(|<c-_$B;IlmZK z#RQ<N4&SyQi>CINf?1?w97xDWYujNYcOv#A85nk3y}*2eZa`p-SeV*!(@$E6{l{K2 z8O0%5nWDrUwLocBp*WG%*dIgvu$a#nk^)O=Pox=0*fNV~13dz%!~d@_Le)M3`Qx~A z0V7(Ua*fHJmf>_Iza1LJKP`=ONLM*PJRE@rK>}mo0V7E5WQx%G3tDfR@dcV=W3xMv z{nNKLo2z;Yg`a<&TjCWqj8+$bx1)_StLm(HhPRx?-z<Yeusl0c;PZzj|0MCzeQ6gU z!VA++qpu<E*U$9?aV;XP@72dj=I}Isi}npD0x=!xQ8ZbXMyk$s%1o3nJo5OSHuSQx z++{nJst|@+dUS>AfW~H|(#MDry?6j74%h)MAiOrTLy_Z$+C&2Ts-4SMi(?p7sydC< zLvS%&N9UF<LMdd%h$$ONo)Pna!dVx3t+-*Mr~v7ZWR{3Y=}CN{oMqXX89fWR?0oTd zEG6?6u6^pFx#3Y%#{y6HF7K0WS<%+mLT_Lpxo!zGjU4M~mJ7#?Yft~J7As+r3;tR! z1+CN%>WFu|+V4Kj$4KgFdC$!cr6*?&ew)S%*H4gCg<aWGLJM6}6&xYCG+vafX^9Bq z0N$iV&E0||_=E>Sg3FK9z!3nS1$=%7Egzf=Ly{N)Hk(F#C@j*pGglWq%h*E|p-?k? zEngOOGaHU<K^@o`6Hh_Z^R}Nyez9!GjBC-!slMDbAfgC~&u>F3LWhsF+&Ko_>Ppg2 ziElY03VyUH)8zzu06=F(izA0l$#YtoS3xFz4CazkoaI*`XMsUJHRy-=$MG?RA8Hl& zC7Zh7yp-UR3rd1Vf@SV^2>ihZLO+exxq_thRI+p1samksdH4KDS*b|z{4=83x!3fc z1d@cxIYN-R{1EhDFq#->nGon4tYO2F)w@_Lmz+C3UEFPjT(j5)B3L0sY0SGEvfX|X zCT4DL#;b?X^WDV4yGy2z->QQjz6=p(PNt#cd^H?Rpv4t!=)3_Exxy2uCbAPK=42&} zCR`Idv-d6dLO)z%(IsSG&PJiQmK;BETax2+f^albHyJ02;Xqogb{hPG)t(_~e?L(_ zS;-8VA?BValQ=^hp%)ilsQG-zLiR+6zM#2goh7Y38d~zD;dM@wlM=R9LgMigXzXg! z8ortrZ@QmVi(X@+YcDT-X}ubZYq-eWm=6SRfAzx;Zy?&~Tb=^-!xW=70iKdsk=$-a zsX!9PbNqdEXAELGdYrw(T@D9dm@p_DK$KIWk~_+0q6S|am*O2kd=Iel3!)}tx$IxC zuSDoR`d7DAzBxIwaED#c-#%0lO*8j{7z}8S9Y9k4e(CfPSc-xTi4j0|Si#n%h!&K_ zRu_`Th1;kpX=$FT`CA|vx{l_h*SaNeiDEO~)nD9$DR|bS$KZk@Z-9bUm(}B`-(9fl zvDVPPe;?&;Siq%(x4`y*#3_gM2DRkgBtFt3)@CC0j6@qoHhxj$G<M#0V(XgcWas#X z-$v2?COs+%k{NRcXAiN8L|>H}%<Vkb2QEo63w7pyj0t-MdJf6C6GE#1wFSOG^=Sg` z3UJtbFcgwgftYK}sRu2bk`9%HBok4Li`^CtpJg|tNe8Xe*jHwgd+9=6lzl;w_nM@Q zHvd3sgiGZM535)5&?Ii!Jk)I?bdjw7YAgG*<}shYbLoPQ47Uc6{<#1zyc#uFLEQwX zQ6O(G@@P?@0E7D+O&MlA8Ot;gbsbB);m@9E4Z!<_-EfK%hx3bz$3~lDin9itbc>lM zQZ<Qg7%6LeNG@o%ORa88S%;$(k@C-_CHi()i~4{U5sRhG<$sy1c0AW4=LuoFLk!93 zd0@@urR{_MNMwt5e6^faZ@T#VQ%|j?z`y;5C~5>WpS+R*h!ADBh>sDsAg_BV2Kr~C z=&U3^9{N+_g8SmJ3GK0@-RvDW>O_^~-FCtolltNS(4l!5xB#mGO|Os3Sx2vRI_9vX zPq+Rq7)`;1<T?*2|4@`8x~R|_P(;{>Ge<g33z1@O8olWIpR)DGnc}GETk7pIL`!yF z%N_TlQQH&(M;L#voW-Tm362vW)D7bg-upan+YL^;cC>UYVeQhI2pYTu-1*mS|LGXU zrod<3`OdZx+ums)AwUh}>*!SYnFOw3cnK*CK$s4jVK}p}3{bB8g(rbL1#`?1<K?tO zulOss{{Z0Y^m%=&#JVwU?#$npg;PF5POl~6U^>Po)G$tKWPonCXK1BjkE6{hf)b4Y z5>c}aL8}cxA&QUAyw1scbUFLV+~9qz$k^0;HAW2TTZ-bz-h3b}jV#UTDh8$g$+ML} zqi?sSXVqN5kdFXx<{&Vq7@A&664BzJswB09>VfL|hZ&AT4|3g=;-<qNc}cLSKdtGG zHcSDmTLmRUlmWao!^hmu6&*?$ul^Ms-A~|oLKHH@XIcV-w8Q3r`QXBABXBt0?$FV3 z4-2D!Rhv;Sn^Sjoc)aY<)^PFeD#?*~QmL;D7aAAEuUDp=SV^oC0~LS{aur+!<srZ8 zq!5sAw2X=Yi&rGDq6;~VzrxT9a^rejIPHGzjy(0z*9e5>7%5<FHk98aJ>|@&UC>Z` zn+TB~7Ui;|UFcBu(%4ZiU_qZ^X%29&fP-O1PV1~EK#9L$-huAl>;8ayfR04we`prK zl}Z5vx2M)ey2bzr1sH^q#OLVbxoFU}H?W8xDz5SMHmB#mr5QX|s~iumwTW~o>FyXS zvt`A$M-e5d=&^W4TBsT5;vaKS|1{cCTz{fArsu(#y1^woAJS$W4SUaTyW##Ykekm* z!4=Zb1G5B&fCzbJ^^UXkA%mK-F}bRxA!`eT@O1H#m?HQ^^fz5$>s7=6I{#|Q=ZOLh z9XhMU%??=?8^YNLH+UTGEW_t3krDvU`=sAZ-W4DyUbwiMK|}Y&YiAS4eWOqM-ohLk zb_Jrv|GXGRVYz_)R?45)wwxTvqRo(;o!f@fG^a1ifCipOE*mu*oV7T|ZR?A{KXhUh zw=uPm_7jV1GVhAP|6s2|za$?RsK(_5b9Xp2KogTJz3xp&*q3Jdd_ez&#hu<5-QVU0 z($R`_PobLu3ZzLdXKzf$&l;^rLRshJ4>O__B56cDozNSnY$2=qos5?;EUXH(EK@aj z5)7ojs19QtL~FuiO&iDN0N3b|u6M2J3_=-ge+|FM6Qc$#*(+A$D32cmEAGc}-f6lG zE#J9=c>R!e^wjQu5OB)!xKk<!B(uG3ENohxM9Z5iC&Gm|M*@cW&_VQ;gz^{18b=~1 zGPyC<heXqmWVuba1Bxt}?}T;w08~Dfa0m=;AD3vl*Qbar1Z}me2YT2*N>w-@+9{4O zrJ&F%VNZ=Gp-M_XEkfXQA=wm)?#AvN)r6~kc#v6LRF(0mRvc};OTA*Bn6@0Dqj#OD z6d2qdj7hZWN-JN5PI|CXFc5(cczHGqBNOuN>*<s!IvCuNtz3{KC677WN?h8RNOaoR z4fuo48?>|mRTP|L6vxaXZm{HoBx<!Qv;~rY#tsqGjr_;|w24g)!47C{$j_O+q8FW) zHwb@UN(juIq!ia;0UoHdF*Ltu6Mv!Qv}6Mp1!G9VZH6ORm9On)RE@^(A>><1{MB1p zRa)ZRK0yTxq^mcH5SpfVwNTUk8{q@fcuh9_rtf*Ty3NjE|88Tl_XoB2C1CQ8)pqc< zS4kqAuuqUVHsezuOqnd65i2}%WO2V$shl!qW}Op7EldSenR8?BPO!y#Z-Q1?U4{1= zrD@2??N$)#G~q4zvv=PiWBIQDt0UJK3ufQ&lZeW9>PzA!nZ6vbo(o1#KF<SS0~gGZ z>KlQfYu2iID%q`R==;Nb*n30!EyNd1q-&RnXfOisY2>aMGQ&tM-y5u^*A!%;N8<sz za2yW~kv4}dWwLjKVeB_*Vpd6PJpHFn;?;6LKu*w3x}S@8+C(gD#YMtcY0+1lg3q50 zUb<EM{<c$Rws^|Qp5-0TWZS-q6RPKJNn?2W)yH#qU*uIxle4J3h(_hl%sE_2r%~lO z-19ly+jS*R7MD@2Dcv1h>JkFwLT}e~T_x1zYH0v|8eSyAL7$V6UHbh3AN<Sb#a@{T z@|x8}gYForOu1=)-9ra@6Ykg^oZNc^!8C?oK#bf+@3D3m$DLQpr_o45;{&@pv83Rj z1x9}6k2O>FTAD%{{;o)e(fy9fP((Ar6v!|7Yb-6U;pW5--j3f{@=nErGiWr|L#&#@ zP@PxP9Zb_)x#dfu**>q8TT?~#P?97e$l^iJFBoV$HLd==zh%g_oMBBD2<4?k4e%G| z2P2`hTBYs&%f=?@m+GyZ>L%ibF{a0PP|c0Q2W!}6jcu{%x>Fms;_2u=Ex_ob$zB%U zNy^Y&TRd7H^|;a>Sfnt}c>FLt!Y6G2^dc7u7ymS}u4Yt=_X)!2@gD~}DENeecc50e ztAU*cJ)ab}FW*n|G4iSuVITvec%DKd9gxDoIawb)6$6VKhtljjo_v|0XFEo|tA9)n zsM%53pdG;0s3ExQegM5IxEpR*oxuHEy1<%PlXpD$3i#}C{7El0Q9?Obkr~a8zsDgy zR>Iux1f1}Wc50^sU5dN3%eTa|eGi0szoDDhas3&hm`UaG7hmn=J9#(>dE4nAYkO@3 zgXmqEYm<4y-MPZJ2GJHet3F(>ZJ$L$(m;D~bwqWYVe`#Ho<U!2D;rLh@zq^%friKX zW9!r~ikh;%J+_8+s_A$^z5&bT{_=ej6KS*AKbciKT^085J*eF9&S+r1GZnm1y|Cq% zovSHv<cU+vfJ1gB|D4ClqqGu5@P%2{`o$=)={q|Wc%~CMQznO+5m#2z(LT!F{k4a; zcS>ZF=>lzNVs$m+ph_m)_Zi@3Bg^|DeA_3|(k<_dGW@npH#BT<ZDaLE-N4l)pt#jH zp6Rcf{zLNyZxsYSna3Aq$L-U+8ZsI@6o&@<Sc)4VwocKDrJdV|L^aY<&1NBkMdbad z<FrA4qMT8D+(rcJhHZ>U1S`U)QT$GB+6GJB_Z?E8QNTfBIWs1|Yg8rpC(+*(@Q{+x z%p*g@??d7G8IAmrREN}txu)r3R-ks&5-@VIOJI}$?xB~LpVcbr3p$M~so+S3ViM*a zC+@MgU;gNQ*lIMa-G1>I2u5qb!@zV+;N8POHuDg{Nsg<A%mqk)J?1ieQYX5a%*Hho zcXQq2px<-NgXkO9PfVKn$cnOjWLUU%?QQYW9{28VPg+|P4QWWRCbn&-4#A~8g)J^E z_hG?4m{zxDNM!gUNgyK+PynQ+bQaa$!6h$-`Y4$n;K7A81ELd@zy7&^Q`GBfZhtqD zDu=~|Ft68U<TtEEw&8c)?f%Xeg}n@%We@>1ga8*vlS%z^WpWke)9&y6%38(&l90~M zT}DA_H3h9YMX1V#=9kIh;>pQ_VM!?&Yi28Z49g{f>tRVUry@XXjNireE?ZiL3<Jjf zwY+~drHh2+TE&5+K!aWvsBETVF@NqycZ>L1XuR@Ye-CLZo3C@pZ03+Q;ja5t3$_I# z1Dj5d;u+9&P>-1xvl*J4<msAZxh%L<^m;1|$YD_%!{lrpt#x0YSyeD~ZL9e>R4$=P zJE)XM%c$EutV6~?3cXR5k@bz!@i?Eh55?ZaiHJ(=y<|2)7HeqLi=)3(a;=&QM<u49 zZy5^!u0=d$O0{w;bd~a5A`c}%(n{=$B7EixUT;YkK*rua(G5nV&_H^BbQ~$RYrSD9 zmenUdq-~=W%t~fi7*?Sh08&XSudS6Q?VTM2z%U1|h)hm6fC5vSI5D&73g2JteVtpX z>E^@fTKX$GQQ1O_+zzt<BKdy7QlHJbNMHu9MDXJlOZw=7%1jyVRt2>>?dOHITxzOE z1ZJJbH!QLgnu)HoMo^h#<G1=crXjaqnsBaLDgx@5a!bk6!%vi-JcDXF#bR8vl~?X8 zau%g+6PuU0)6mJJ|6b-l950XOS09{B4ikS!-DFN4IIh8Y=DW3Mp}XK1u-;9~U=1S* zc6uBmXf{={Wn|=-9*G`Zx>2;noGKdTTu3GtQ>*=Oe@GHZY}aAmK``aqb&4lr;)Y5J zA20yL5-fuiPXIW9pNlpleydhYpUo?q0g#qcBaS0Q9<TsK_|3$iN!Kb<G!d}8^hKjO zmA1g3Vg4y}Wx?_(>=!7BlY~B;ZR0h&4y%S|{J9_5CLhH&xcMSP&-VQ!zxkSH5i;@h zcQR?8%~GZQumzx`el;0m1|}DWR5uYtFJ&QG2dKs*LIooTDH2pl2`?Hbqh?BgYHXN- zfnuk?SFk}Gr$IYbDLe?#LNksI-ZD_$LOW=nwA>r9phGLRUJfTjYkK1<j9Qgeh#}Rm z1|H&V+IMnHoh9yPp&0xbB7Wg(T72TMibu5B?tkEIw`S;|TZWf^HfBC@irmORdYR=# z&+bWog=dsK(>v1+?8aBB66NkH?Ai5^<b?n8enE-H7m{6-+yoSCZ&j?(ab!B^lLEc( z^H^d9<#4J2??sc}c+jIW*6SkZxiSrl_Bs!rYrw^NG$$IcV{Y264nvD}YAdWwQ1=Dq z^UGg4uWGN*i-<$}j@p*0D;TRp_y*xB4GX!|{{)}*B5QAs@Bc~gsN+mn+I6hoLRq?) zU^{YzeV9<&{~73K3%@&y6UC2pS^6H!xFzdP>R~QHf6?6m5lMSX2fGvPQ@r#DS#$i% zRC?C%nQky(@Sd`Qrq2`(*X<kK{TN4A{H#;L2roz1DQp9-e-V3Clw}a_^UO9yZ2{D+ zU=!rQbav?qE7XpDbNttGsM%2bIYOKh<t|t68A|+x=VP_aX!B-3MRM`H_BLXmEBRQ9 zvIbWc3YzGUfK0q39zGx#^eCOwAA5={#oa3)QmY$f6<BCN8iPp$yiY`x;_}9@GO6$Y zV#6VDn8#^~_-x_B6}W?tO%-lF5x$UFXum%8owE16wJi5KiuZ~&<!tNot|c_RjC7~; zIWKJ~kSM%;)#ss7{&g5j>{aZGZnl?8sBpITZ>LzMFZ^mO?=Q#$UzYD@D@?5IWy;a} ztI^gfS<9d4-euVz{F7X^nxo4WukWwPa49ZBsev!9kIVQ+TX9U8om#U;+mG(S$J=-C z!;{@gNtD!Aa>&Qq=bioc*A1TgN89yZtDogx=cf15@W2O+<EY15Py2CNxu$nl85ons z2j5&@;NGv3_tGy?`=9NP%%OMH`_;2A&!CZ$U7=o_9ACa)<F7AG){C#td%E7|FGn$W zDiPg$!mYc=68F}~kd68L6*Wn=9~9HD;3EGbQ<StKQ?w9J-j0J(uYJ#_XMd&}cn(9Q zurh%6u|})m9%dOo<^_4y2C|XZ(MK)Od@_@kK}^`>XM-hb4z<)^)(x2K@8k|8iw;Eu z2P{VVhm!eg8pDr2<lFHN&c<<2)^r8kxC`H>aDdlHYD-4ml?pq9S4iM@)>vhy-fcm; z>$0`KERm|flpOYYe`b3Wq71eJku-6!)re`_MH|V7W9J*<PcPLHfh0wyf4CEtY5=4D zG+(BwuYMg2m42*h_Atk7(>R6rxXz8u0L8zmIc`X(?aEi*mQ9#riu|~nCjB6FJM1bn zjJnK~gh02gK?*KgV5Gx_*!5fe5TWNV4uaDDG_{G^@B475qCopPWHi%R)Z&Qf@h*CB z!2`uWv&&GW^H0qwvB@OtSI_YEiR>d)X7)7VeONn`n@FunLp6ExI4UH*hCx=U>e|j? z;J;yciux{^y+mEceCu9e!m~!#nZEfTo6eH|TxqT|ITgN%S^j`>^Y2Gv+fB0U+EqK} zoe*JQ-02R;#tE{}N3-+80xT#QC~*_<cq=KlqG)FNhA=>H-slnTi|(3f@2E;nUWVXq z=q3iUf8S62Z2lS<`!qto9?Fun+4;VGk<)H1J4^+ChJ&X;x1#OmxZCGO>TJ#4qZ8w_ zvzg!D^fc4GKAHJ(PiK41e;0N-W&(}r7KXFb-oWZ?IO=w(zQQMVbubm|ebwT2LdK|3 z{$QSOd-L_Mg8JlfxCI(KDF&98W8g2h$KJ)Np0`D|QuGPlaSV@WzX`;Zur^-hv~aC4 z@qEcm?PliE=s|r!I;NfeU?Gc>KFyl6mXHSE7sM_w8`zk*(&8a2=H(7gY&=kTEp{b; zdt>}ErrN2nR0kV%!yC3*(5olveS8ba!`olu1V!y@G#bQZ7b<7&(eQ$xP#uI7r-#5D zhV%P;=`C4%{fQDp8G;53Fj+}9OR;2F5VD>+J1J?uJjfdIzw?#iyBGH0a2@h;AoiRy zL6#wPko<@TzdkjiJ9nMuA(z%h)iPD$r^PcV?N5C#nbHr(5Zc~uW<6QQnN6EqGx^SZ zA0-dzx%91rk{BqPx9u7B`BvrqyHk5>(lmyV8XVe7i_YL}M4yp!U$^5+n$tS^c^W={ zPRM~(#pvdL7rdBpT9h{E0r<-~>_WgXly0lotW7NsuEOmL=sI1Ih?fOgRB}Yh_Px%D zYew*$r?NLP<D`YsxILT&C*hsjHCh(@D03(Lmy9+~@%v`uQ$VSb=O+-Q5q*dAW1bin zS$)zVzjE<R5h?;q3u!Cnl}|_&p{2YVIRnob8G>?48O2&NQv0czrQVH$>OHKQpFV)( zoj{z%#NpL}y2^<55kfnleRIlf!wSPMcdrD#YJRPlPyk~dZn37FYh(QD-4$}ypqA;} z^WpJQV%D*R^dvXy>AT?Qp@o!p*IxJFaS@)3ca<keNoV1;6kpmyMv{-?{JpT~$vpNC zuV=yn{GZg+q~Dl7ZWakWT!|08IZxluyMOv0_f`iL7ZX5c^M_7#am6Wb?Vj9)yL{$0 z4+LL48H9V8JdKikOj|?^9<tP(4bvQNW_$b6oFE0>{cY;(UQ9Ws_cX8Bo{fK%Uz<Pw zTK*=~?LNWFMmOv}1#F70+j8FNZrOg|9O7-HEN;6^UZKxNmqObeQpg_Cg>4#l+^c$- zk{eQOoXl-<Y+~);Lzxp%jj3z+n2SCFN0Bk~46|k1oT#t$EKY{JX0v)lF7$S#-tsPE z`C-dJC$i-=Wb`cKDaqst6;1?d!AIZl!Ai98Ff&FcsX1)4J1kc6(N}Hl?a22KKTB=J zYZ#N(9wlLjNxWUL^p0UAF52w&(k9334zJPg7Gp)-C>TTb4AU-GwurixBf%Dg{jgM> z(P);DFbe&m=^@ypIy{lb<S*pyTT??H^<}N(**C7jMpz#sdK_zJAcKK58PB&DV5`OV zAcHUWVmH-ganyoFYtEaJn-gEUNUILBHuNOS?R3+0Gd+1elL3dm$Ea*6Ghgp+#H^Tl z&2L*~Xru-DpbJPj&b^^}Zq>R`-<7#do#DBjSl5V&^H`_hFx$O0wB+5(Y^_}s%i<Y) zYB#R?td7@92BdTzE~Xe5VEHxaWE^9wVE90PXvh>Z<ZHgatq+pEW3rN?v57*w59Yqd zEFd}32MYbv{M7x}%@xo&k6uT1;|lEvprc|39_KH}-w~N2XeSk78@D<SvrZiFZp3k& zrj;^lq&U{L$g?hOP7(N{Jp^KFif%H0ey%dlp7}24!$*KNqkX)?waBu;nV@3^@o|(M zw9aOn>!6*W<=c5m+25DD0*tR7in~8+8`FMRg|>LV*nb?@&NkVy+V}kBbZvU%oP(50 z49W^&mmhP%&|dgVqBN}Qmv($7Sl9dpGp2QvlKrPLm24I%Z=qbqYy&QJ5KqrnIvy>8 zFSY=Uz?EFC(0i|6$UDS9H_(!f;5fBCQyd3MEm~N`x(6IW*_aPI82@`y$CQeTt)R?L z_Ng`p=DhITN2{jPxGwQhwelPIz4uu5y|<4aW5Q?lv!8wqF7e5s6D4Z@J3@mSQvGYY zG26e-%ChWJNrNl4nyoJ-HoV7Xb&lZsQ{Cc}<+_U5;slfPwrhJH*7&M){|!-lbcG*` zAr6*_RlhE~T&!TP{csZG-)uEQX8hG~+=%%>7Z1;9*|J$`NC+~+F<#c#4aG*q9m{d* z)|}UzEX3T48IFD@zGVje7g0bxHn&;VHuvLxqqbhQy#OEiO0gE_yLYWL#0K-+b`i%k zm-BVewng^dElc!BkQ=Ww-oA5TmH}eGy%Oor{^bOQ<kGQ<?{4Z)kh^+W4?9e4Ji#b^ z?=eNz^o);enH-cF^Dk6gYjr1zl6Z-7L2{=WH7r_y==oyu{O5}u{L>0do)uOv6NLM6 zo9T&^Qq+V<f=+~w+T7W<6IbjM&&ES<$!t-%#7EybyF1pIvKt7`&Q_}lwb@$BAYO3; zIEveoxmWn-C9!)oUxAX#GI@-PW~c(ZZBDIxgzFL%7{b_%^?=z$UNqj~ylg(3rTw7~ z{T$3U#MA*qPd`9ezuqE++hK{Pq4|w9XE?`s&A!%O-3F~*!@`7FDhLD6n++beqO@fR z_4YPu77AqAIDCavK~nOO;YnBU+u?|N5+jFsDkC!`Yc?a?Z_f)8=5?O4l3nfK`ED;t zTe!QZYFbY0o&8b0cNLhBl)%`S>W3U6bRN%SwAoXEkuLmSz{tmAnRN{zlX^Mn(IPsB zmj^j%&$EwF`BI;`X&08OPQbyw^!Jf9bP-WNI=_*_6WO#0QG6$fIyWw!Uk2stZ`!(F z?l`w17Z~9cJQ$R6h?iNLxjdSk3wuRAZqVCdItaEA;!faQ6kF%T3v4&;1_B@Bk8gDV zN+&(AOa7G5C#E(iH3gUgC*VLzS*U%WV>tA03*#kw64oaGWKmuVy5j9GVm*kE;>*Rk zKNfzq?Wpq44M)}8qWLYGA=m_D>VR-Y*A}Kj<g56I;lP>~W@5Xn9*_8X5fzElaV6-u zsvHR*nY{*KP4D33TTOvlAaixnb570+iepva*QH;p36u3t8|kWf{fEwF#$MK>Tc1uA zWZcqaEF-){W!YGg2J6K=%6Y`Bf*gKJ0o}?PFp43Ea=fe-H`!zGY4rD{$r^sGMQ=7Q zt06-6)}@yM(okUZwNwodqS4KLxG*OTk25!Ol2XOV^9!Oh#%L)HbSD(Xz@)mf;8#g} zxP9B9Xaxi#Tt%G&R#l7E!1|%~#1}Q3vUB=I!A1mEfkwVFl{T_>JE$<Gd(X$4>nIz2 z^}<Ev^r}bbUw2_BRNmF$AS#SgTpGi`+SRM$6_npGOKiyHkdfGbg({dcG6X%G7%pt8 z_(;WHQsW*@mNSdh-Qf;3;&VKaJI+}3wXg<3RPS`4m*h7g)8r-j-jI>qN0$yW4%5ce zxrKJ4xdRI|cSl^;f$jp~%P#=V=>43;>%TA`E^-zhpqUUo{IWO}I?hp*Gq4dz;OmZ; zG;N_$Y*RIDfDG!=nx}&otoZm6r}4mgHUXNCl`*CLV^D@Vjn&|8xV3&ATM)C<$43@A zFZHz6#I7hiYT$~~U98~<4N_W>vls~5Xm<R;?E-mCX-JHvx(WLB5GzBkt4m5a=HvxN z18G0RS&+hb2MU^#`NoKb%ClQy>;Ogs$6Mj6{X4Np+7jM{_YtBeD;wT=;h6={yU-D< zRl0yY>wzXHp}|rrtlS>e#n$S+Jl8817|RgPt~u@~Kio}N3YM)1gmUx{5QBDp32tCE zH6#@oF#X2FCpDEd>^iFDy5o6O+(oyJi?zP#=|KI9^~a{<q0R}!nw-rAUcd$o4fw1E znA?Q)rz*!@bc3`7F7LJZMsz91L>EP9jYg|a@ILraOUKe4#nLFJD5{*$E~V1e`+)1| zRP_laKKK1Q=5q1)kX|L1U`Hy!F(D~!RDsd}Mk}+M>R=tIp;#@EJ>2`YtVfaXd@%Zh zWwzj|xBP8wK47Vs+-?a}O1tcER0%}Ty!_}A8Y{Nv%h9jECHcE=>xVH^>HQivNm}!U zoq$*jqjXb%{0otPBVyCCo%PRk6H3X2z}aZj@tSjD`O`cx2ktmD&69AqF$-n3gRO2h zI;8>s9Qx&qel6bZE$g`(mahsm&Tp>H9~JQIo?bpg*|a53kQO(nmv=?p1in(=5c|ce z##$A5iBWied}fqA69G#cbPd%L*W$TL*mq{`6c)3GMF}4eiMdCmW;MzvvbtU%X+tqL zydHH{a85NvG&OMAi6dK3@8s9lK)WNAmA4XD4FB$4I-c#$KDDb-i7uYHC}&CJ3i;m2 zKOJgl<vy)}rG3uBEnL8I33g%5f@>3h#p-}gZNa9ghk!8PriNXJIIuBQ)`x{>4pQ3~ z*z*l8AK<aA!$ajM?1=UL%0*oiZ{YsZ57dXyARfEJ{AjiFf^e^6iQbU!(O=sw%BI|p zc@+j<0aQ8S?9an@VtCQ}#o~hRKq?}p0)FucaFn9__~{+>#@T#<Mu={f|Dv11*$Q-P z6p(Po+Z4G*iV#%O6_kT?klMIf8ew&<+^<4@54ZGKd^d;o+*_K=`}?#<{+!FlanKjh z;dQI|pqn;Z)3-$B+3IUXJrs>1PVx(T?M`+SoY(CJ&Aj$M+$bQ--FhJg(y`*QZevq+ z(Ela3{u8LBC-~>Ll8uu`%xQ`K#pZrwpeu(#3G8##b6d5rimy70H=`FiawmiJ6-vtr zDG;{pEQBmibTy*N4Q-bjhJgAlx+QS7L2kge6EoEh!8I-Dq1H7mIcS`h=E{cw*-sa5 z;4{6d(Sza6OoCPOsk}WMoMs_L`K{CRO)a=BPQ-}MgG21}-I$FGD;cTF!|iiJtV#A} za!F9}0Zs5Ri85`2XCg|?T2h&mOC9*|%vg*@h=l1KFzKOiET_peQoBkyceuARJTn%K zkMS$!IWp3D3eWBP>QED8zdbTiUAH(GH`HgtV_7MWO?-IA!V%})F!RvbHuEssaRcY} zr*eAU+cfjAd)qqZ)z-?<OHRl)9{TU~QFqQSGIRTL`x=t2F@CqpUnk$-Z`5DugqV+Y zm^jVR;gvW3ig|ZS?EK^A=DX3q5mRmz4)}j0#qnVafX~SSki5r=NqW%|0*fpORpTj+ zEaKw54JR#Dr%?F$Z;k?Fu)Oz13*Vih!(u&49_e}vPIakq?SDW^UXMRO;J>Ma;EACh zxe~?lpe|j2ydV!_M{VnvxbC2H2IbqGjyQ1Uef78FnNIi$j`?0KA0FS#Ed0|^((Wr; zbbbBRNuZ||itd1zxZvFVA&>+kAu5IiG|78VQg)|SG6;7aQ7Vdd-x+S6@Of*YXVICV ze#(pbFu0bt%UmV`ITv{dn@F_LBKUqOGj@W`^}pu-B3DXRu><;~_++K*6co$;<jDEH zu&we@@P11-JC@Q?Tw`9$;;QpK#VQ!-OW7087V5pHLMmX{5>Tjx6k{ApVTSv{PJ;X@ z54B6f`NO~_$r!Co@PleMQXKK+wvYI?T+<dOrUZ1U83>!Nm=Db<#6gjckDay8KU7;i zjwAIg@q<4JwFjSx3xtrlym5J$!o9&-2S+;3MJ~@p&l}zro>sD_x(C8e`aS7Tv8jRn z7M$@1xXFK>p-zqXPf-17127@LD{LO!JCQGG6V$?mosP`z<5S8-^sS%OD~f=b!(D5W zCU4lX^61dUjLgP5-RmDAxEZ$l{hW<S0m5P4h$r?idvZJ2B+Dh_W#bFL)_%!BK7|W) zc>OU$p_@E=&mFw%Up!njjMiZ1guaDo2b8-RwX*e+pnz|`26-CHe&5-<tG`aKH{1*) z2{b|oVPZLBHsd1F9@3|9mS>0!Z7W4q7cfyj7UE=tS-roQ6jX-1ZF-9kW(=7pFKt1k zHpb900vL!c-6#WRfYO3lPV1g8%Ps>}3$PPxU_DiU^_&)ujqOAY6~Ek~-r(ip*=viW zwYOBWlIb&${)<apE+U~%QEP9=C0ypx^o-R)4DGo%C1#3Y1nbGTBqN*+33C;H8vF1? z?0_lOpQ83PF8@hp`Sdd{>T~42Y<km_z6P7*yaBXoS2}M70qfCn3F8f3$UB01$;DrC z|2A~wra2&&89e_%S1+L<dsLCFkr@SK8|ywY_HvZs-qoYUZ7OIt@0psn4ZJx5)c4Ak zN<CbByRa?|ET*5#K_LKYCRY}J`3af^sk7K!?R0w__e`k?!GarlX8cI4Mok$*xY3(I z12$$Y3co?IJ&*AmtO}{sjQ&>^KQh9&SDmLqto3~}=2vSdV~+d>)l@v!o7BtyXX2;i zM?-tyvvSAa(yvEBdd_jpwyh@MI|XpsFx!}`3J=644sbXBLhl_9))fH=del*I2gVmM zVbYZHQ|jEhF<vJfQURsKdOu6iiVeu60Q*r)p3=ByC49sTUZu)_2jbu_fHE*iwz(Yf z!70C@9=p4pNS`Qr6qe14Gco64w3;_hj`H|8&cHR}-Aa<bRqA-!rjkNyR1&`<r<8w2 z|0k$QHO+%^Uzjzx<-<g%^y`gE3BmdBqVO4bBZ5{ul{4g9)P1Pv`7KaX{S>Jdmi@8k zHlCi2ww*3>>l83!r3V05;TJ`&T!cK{Pj{Msw3-=+b4%xXJ9FNLVv-Xhps6Ni6QbzW zAS+^9{d~UzF_?-|nv{MFW3KPTj8OAZ*ug5E<6hn`rDx=>4A`Y9cr+-@EoPDdljbh7 zVXD&0`D;gamn?_^Gq$n5yi1y6zMtUdc(gV^l-4dWKi@t_V*8DP;v(x3@?<V$F!c;j zv!fI`Kl`p!t5(P(xaejiAdKn31y)ER;0OY>52Z^-H;FFxwOZc@wr^ibNnV_k6|j54 z8DHw~BGoP3^8#nwbN1Y(1N$m%_`+!1jFfAVh%@hBR~(hE2-+cB+zf1C37>Q+p1NYH z2Q@1%)+k0^6#`W}^zQwRHe{>2Go({zNU>DvUKy?qqZjA-La74lk69MCiAjY#^rz#; zH$v9=k?iPVpksh8p?Mo*T7d#5^hg2Y<uKFP<_$@acSKo=ZBH631p7+JrR$R01H<=t zg^tUOwhm0lj`(FB^vj+T?rZv-P<6^f8EvFf7RMVeOF`x3aOL+xWz<pC;Vdc;m1NXP z4>HBd372Zo<LK0A(c{GP`9k84-RY8$Ydf9f`K2dxz-$Am&?L#U@$aiU(XG7uMf|(w zHIEYvT?*0Iu^3Kk3wtTRx(1D3t&?U<CpeYDd{WB7JebH9at~QNT~c98@Vpo<XK)a? zKS!@kjI)!zs*Txl^Y&JOqZKsO#II1O_@m01@iKk)534npgAb~hn^;H~airR4So@v8 z$IF@BN<WCLt;O@XwZfjv2(z^oZFI0uPdnsnD)1f*T25HrMPYv_-Fx=%2b<{8w**=B zEa$<BR4hjVXsYjd$r;Lzr0<B@2nuG04I;Ia!hoC-!RCx;+0{aZ2lY9B9xL9oNr-1u zMLzXU($7c~aiBu|48T_5N#>^90wm54gTLCa36g^`-q1S$M|fzc>+aJ4hLFgO%+tk) zV*qsb=jv{4E$ZZsPK7bI&-$V?_qCR|Gr6{ap9Lkv;-?61X6j#8b<w73E#G7P7s=wa zs>jhjzTIvLz`Fz0LB4&+7Ak+DL+fF8ijArTcC6zr%l8~UA0;FN=I)a!t5C$NjjUaw z0(WR$=Y~`BfPpm5?KAgFM*%(&<_KZu!XeIr8Wax3RpA9o#@<^H0JcWWsJzW%M3p`Z zwE5bRc=kU0eOc?LJrah6JWVZ>gK($*ZWV^Jr;yWNDvq<FHH`Cuj=+7OPjktAx0!)3 zYstq=<>9HRvD=c?7PNyCpX&=F<3FIn$eiW#4PPv%IZFdNnlG!T<DTWCRt1~Ug=2#& z*f=Mr%+J!UZWtPu6j`d&F<Bh1XuXembDrBDoCy#_&|o;cx^N#&D0-qNU2|bSNtm%T zAQt{|lk?V?sbWt5)QtSq@Xy33cGWN1YN}A<iVv~gE48JQ4I}-!aQKUoeu<$9TV;YG zGYA`9M50AdkWZqeC+rzsO-y}svR{}FjoJca&((>69~7wo@~fF#pheSmV-;(iC#s%U z-liovZ@`_op1iBoq(q@nf>OPwZ^7bwBWw5r)opN_XT$yzc_NGZy1ll^a`2hebcQ|M z`@Z<+_p(spXX#twXJj<tE4f$P15f<nRz@;6CCO*zRN@C+thcA9rRd2O#>@NNTH^hd zJ>_h--VNkC{Cv~uF3an`?N)blMg`ZF&!z5Wn4+H+b_|o&J&`%oVcDC<2PvDwYF5z- z33O~zCV<q8Qs<VSgW#^yC*uwbn2l$~f+Aspax_FsX9BqC-bdu!TEisTK2tVA{pr(= zgHPG(4i>9MBbgv3meOmMzSDexS8z7`zc4*I50X#xS}^`UBiG~=>Gyq=l0}sITC{uj zr-zG&9{%V;MZZ5TJ%%YI+PKey><7+^J)n>Y$u|~%8$2upl#ck}t8&rz1j}7gvK8FR z+8t!?RJen0CRU3QIX>ShoKo2y9{1L^zHujQ$0{2n6W8aRVtCGO>ckum<<!3VHmV0z zh!OtS7#Ai;N-`3E=t-E=>8GQIK_Ea9;MyeMQ6pwnrXV$DCia%ZF{4#_+Xq&NQjRMR zfha&k?2|j7gz^`j<@av)q3dEq{zXDx19V0|0CbM0XagJhtMsN)-f&>CnWOMA^`(Xp z^QW22+!wL#Xag2IEn$M$#lAkyN>&M)QCvWD2@l&;*Bbn)MBlc-J9!<QsduKwO#ek% zs_T1sBuTj?)q`D8>tj5P*P<m5%Bj#eOv;yb1Cl{%N_y<rXv!qUL<)`m@IiLzLg<r* zE!e^xhWJBvhk(&D8^d-Mx0q%AZBVPKE_!a}_1X~gAkQGuwzFDdR-O1NSY;)5#qINM z^`$hqc^0b~-dFpx%^Mx-O&h~q>80_s0XLwEw$Bdlju)D3>~oQY37X2hsM%tdSJQ0B z{if~il)l5_HUqrMH9|H{vjHGKH#gaUH}QMI>{3n`O$F}<3t2%xX0@sf6ryI=Qx5j- z+zObtkO&vN9k#rNvpnS;v(P+*+HYJ!lBWNFkojyco|t-PHLp`C9&A~n(j?znt%LsT zEQF&MBge}Fo)5LDQz^R%2|9s(CND=^yDjo>b`#KUGYL3s#Cj;<^_G!TJ0g07u-U-h zv{o%)bh|iWz6r5oh-H{JrKB~w`v(_CAcmP?+yI@-4A)FE3lDH-Yq8kT;-$zZy7w(! zs&pR7Zv<O7b@Bq=`Y^aQGeUmImMF~{z=d1?utQMom*v}f0{|rS=SPK#3b86l!!Y5< z@1S2!6r0m({{?G8geprmEy$t8dNF&wEZ$+jf*r!)`C|4M^5g9b?EVA1H$ko%Vc&MP zIqnd7{)I5;A~)`ZdT{cuRpoHcNHv_0pjG>qnq)5uA*Kt9#Msfy5R=1s{CVMwuBk;6 zhRyD3;##*c<BnDlOsPoP<D_SpdsH=h19OM$^?C>4Y8?O6L^-HYTlhWr7wif+gDR9I ze(o)qll?FNiA1!&qPBE$!06xaBpS|zC9$o!792bom<%S|+pV{nPpW_~);Wd{MO*T4 za(nOj{_-NWOD=HrE+-?+j^c`+P0!KtPdt&MT-;pqyhMP;1C4(Q(FFf$8zSy1(CwFW zdDQd}w|Kr|fC^%h6>_ZFie}=G`=qlEce}X=w-2u%LZsiA_j@GOXDtxyL|dfCl-kY_ zLZ=9XW>NU4otj-!Ji@esw<cO#B(K193`X~up>2gn%v9r<wB12YIRGkv(Q`7YUjlHt zm*l0#rj3G_hC*T_z>kwHjXiGz5u2Nh>DXa5$_Xx)l*Td`hO~hk(+5ddzKd@*o#--o zcpiX<VXo%?=3iQeN+nPHoKz$W4+)F`mBaFgvdK(TUd6%+iCSUIjab<R>l4sOa)#;f z^{tOsa}#|hLwg2~O70`V^Vp-|{<$`vy0I$*cXjTp^Gus+bxK)LBYrGQ(+Rl942xHr zq3x%kVsTI22IxND*`_s~xEqV5CwKgH)-uosoQe&|J6L>=@-qHM7;Tm_t|)V=#ZTJE zK~E!N>}N^FQG-jR?PsxeLUNfQw`~jnESu+XMif#F_f~$Hjp%OTha{@Qxne_~XpHFv zD>O9xc=oi>oVj<+v&G@zDG$OmL#?#DvO<k>_+IE=)sj)NF+X&t-r3z7;V0;|TO-$W zfm1&~#O{7slXBQW%5opet8-jLlBhaDQkzCj<997IYJ_o?jXdnM8!kL!8atuXxU!ja zx1*04lIO<gOvd<jZ*h6*=F<K&YXoBWIX!`=Q4HWJlHH~2V5so73Q>t?XYgF)*hJ%I zw)dSVq3u7M4(<5+j@-uwcXpVB_<u>-eh!UgsK}`?82%#YBv;fn9^vreoB(we!bfbp z$%61Eh(^Sc4~sShewJE<;EOKRLnAy!F3pUs53<l0*qhsl%=imklP0jx@Aa~tA*5SI zk#f#i4{uea``yY5<`I73v1xmjhwNWPA!PXCj*MKOzoid4bR*u(glD)dl)!4nlW+gv zIr>W%uhN>Ra6x-_B#HDAz(Eg~FS(v^Z9ynvNuGQc;lFodoXrvOPYIn%EZzo$aA`fg zo|?5Jly0pxifV!OskAS%)oH@?Vht}5FZ60pZkl%mR)6MYGJ2mORm-cKKz|Kd#`E(G z3(SK79ulJHk>{eFyD)R5^Vm#J6k>YMt(fUwPmWw|$RA)<u`&adhy}M#YDXdAI}DNo z16*86BXjx`RC;KXT?`nl4<fbtc>Iz-68k1SXT>`jqHB=Z+c*tRN0)IdOp<~!Hl?X2 zJe%M@nWO@lX<NCppD#rgAQwu_*@cKv=ub1TjL(P9%bw;MRMHf04B72{;L@UUd@$Dl zJ05aoVaseW0>rUncG{RygEFw^{tcH&LQtb;b);~@%M`i8;G>CRr^#6?5pi!-pe@ix zHsdLiH!sQytCkYDj6V<?F^ohfOgDwmqt81qs;e6ZXpE5sL(7l&iGa;~kD|5*qDror znZFyE0{iq7foT?nV|C(!ak;0(a5%ws3#rF5c`pK`aiQgET!Ymar*_%CGT0iVJ-NOz zXwTKIiY7-!Hx7bEV?x%EM{L}fR*uk;T(Vo$YI0c9D;x$U4{sI2^t42}vP{u29cbh@ zU*GVQSNMob=#iCaScUaU!RXyDoK3j$%q1CEOiALsU*G!dEc$XDf9XAxcxf%V1s*?7 z%vnr$@J)L9sw^@!U3knwmbgbvxC%rcX02uzWo6xx;r*X?)~&2?2RNRtALgly_d=>4 zc^kDUm_SGECQs7BZ2eOMn_DV_l%N=_Vj~;ntFLnH!nw?J<Ceh|Ip#8hV?;C~M3VQP zGXAwLE0VE5f(ZNgxrrlsJ#J_@xJfZGla3pOr|C1(9h|&4njVzDHg`Q=3u&`pT{V4V zFfm5UC@L@mV=*?ns*<KtI65x4%ejY^`>%gk01A0u+SWDjCF7p<NH|H?GSh3p@Br|i zm-)N#uo5AaV1q`=tyY2iDzpmvv6O4p(Ut%_E&Dx1Mi=tB@iqG4LWju{CLMZeFeM(J z3yQw|bKbuFw|tp|NM>Medei$=<b5W;*kXOy=6w}2;VllnJT(4h`SvOzpKjJJ4ZZt> zX0Y#GF0s2Ayae4ms(ryT&=%ES*OA$#&o42DN<f(?5N*IEpxJtv9X`m}2@Qb7&~Nt1 ze{o;;K=Qo6TBTn@K-?y`1&lmC3*e#Yx+O(vKfT5=)KUggR1nT(XGWqmKH8?+y4@3Q zJs?jAnI;nViP@o#BXaAP^o6O#{lnfNGbh~-LT<WiLf?YpvB(E!oS62bF|x4a1%sJI z@;;vX9Kpb<Ea@kW4CCC#79~WA;-f^N$I%`|ze0440_ppg9*%PT8n#A)&|+X--j95a zq(5Z+?CB>Go8iolvmEzym6QrAmkpE1gTo3!#W>l0S;DhTlp%zI!fIDEaB|XRBrmx- zDsxRwv`cD1J_sT&wglsenx^`?#j?{h%~%8diJGeVy6G^$jjU9WIto#P0xrPhQcFV{ zw1cKnFtfM0@al9-m^iSdy8t>Pw30Z6w`VY5;4XGcw|^Bn0)Bq?)6HlYlr}1PLXhg2 zI4pv>2+u3r_UqzRR}@D8D?rr0+x^+wtl~DJG52XyFB%j1qtFR8K~;4hz@_~xdpA60 zb`|FrqcId)++QEXvn?*ypkx*WW^*v{(9l4d(zGRVrX7RaG<^6kT|aiLnq(ub$qw4T zeVRtBHsYFry^yc8r73$RB|WKWpG0Sbc`h~<1&B1v7(?yx-Kxwe{EW8nbx%9FIO+$` zwku_Uu><qQLR_De7Bikiy}#m$vG`9U>!2k^)-_EbRU^x3RF#n_b6}n|P@iE+O2f02 zDVW@<NMUwRlCNhSf=14)o`1?F2FTpQt;u7`ZE0_AZFW)+IHN%Ng3N+meQrgjXx0gd zJ7#A<i1u0FZHcY+SfEmt#xJ2)0M=-m8Md!#^!`jGweqC;YGd}%{?nBg&6G$pVVh1- zWG@rWA(2NJ@g(Rnr7|WrP_RPUG;3fJY4k7VOym&m*LsZ|mdY@2*t(ztwhiT0$}@Ws z>2sp$Jfz*NIiA1eMDRR>);*PD*OwykTka<V^&f<U2QMb`JEEI4e+^5gwOPXJB@m-5 z<rKf6>XtcjI^>PO_>_dxOQPMTjrRBZ`()<p%waXgs+eK5hz>fMHU_l9_+fPe2CQEW zDFo4%-LvPvRoCg>B_B8HECoHlJ@N;f+H4IyL61wXNl%zfk4v`w-R_0ir85grJ~<y` zW#nJ3Gm5^43j4k;IUl!aK)<~_vfV0^-_xh%v$4xe6YdwQxpZEO?iZ$Ou??PK!@lgk zLq17qUGhl?x0dBDJMKa)*LB}YUUl_d71WB0>mGR@rzXHUnLy`m4{DS<hJWMS2JEI7 z(zZkG;d2z;$-hTI$!mCzOSta9TL0K|`o-gMTjo)E4k3;Xr4I|1gh;z`2QZXkF*XM# z{CHDn0t!7^Je5^p*O+)pO1S4LY)!{(UgY1>>Sgwpf<)pM+n)6E$Q_ZCt=fQB|JYL! zp#-DdcsgEq6%Fi2qvVO}qsi&WrFYv5*N3{~#`0?%hfw$HO8bd>R>>QDtiN|bd?0or zYCl~+77jgq$`wMDXQ#W*L_MEx?9i>J55pB0!q4#&5M9+x4+X~I#!d!$EN0W5$+A%C zxyb_j@kYU%{JWvPA`O7!gG#+419txQ=qH~R#s$1u?>Q?Y9nc;$r0O;uWJ!lA`scfq zUJ{gxaUCFm_G438iT#D&dKJUc{>Z+00x=*0{^>_!GJ^B>Z&`m@#*Hw}=(Zo%%wYVk z4pcBt$ec@ld)Utf_li01awM8asJN<bDJZ0P{*ClWa(L9YCq`WTTU;jQAT|TnN<gK4 z6;YFRxK4{zO0kQFIc^boq2-KWrK`<{kPhU5_7V*_dcFWaPaxay=C)Hu3IzShs;U`U zM_;m=pQ1J^UgvQ*A(@z)=r{ORB2Roh^Q)BdvWcWtU-uv6W`Q-yUDPS}yG~4>-Vj}+ z?yr>7=^r#%Xr4p&#zu;4La)h3lWMZ1S}t2ORaUWmbkL|~aNOBVFgXOJqSCWo)3Z17 z+su6T+?JWW#(bQmq0+SSQ6936*C+Q@qU(YO7~wyT6kLv#aQKuodHhN3=dmVsuSgxv zV6N7~a}4keK#heqI*p~o4%{(g_A3BPcmwQ)gqMx+RrI-|ZU5BfGbBWtS8tJv8H$tC zU@XS*<|p+B(_L=B->>azUdU*_uXJspP^j*SO##jRZ~;&Qbr0F+8t7lxwiCH@#h)dX z7|$p)9a+^D!u52w5Ap@^|HMqcPd?G}-}SX`vol-;9Ksb(Je5~MHkzE8=dFVC!EJnl zZC^XqOP{44z==9T_(Rx`bKON_!s<x{GnT2qBNxS;o7kD<3!hJ|=q7wlRZG{f4imB_ z&;Bb!Y@Nez;<+DsNzc=f=2!P8umYB<85y=}Bj=Z-h2m4V)>rqHomXqQ)sL$>;-mpL z4_}2#oY~HT>P>Fu0_S0#td+2;fEk4f69P)XZD34|%bZe6Ysl)(e%1zO$WP*48*Y0X z!^vVoQWF*vGoDUfA?)Q`qd&11bH?lyDf{vwzfd0LU=7S$0svcs7mEJP&cKgcLoVdf zQ*$9(oDO6DF=AZDC5psc!4EPVtg!nWN|Jmd*us6UCBq?I4-G*w6zx_<rNXb^9sbdV zR^A=Krm{P~Q3eoxciKHzc7RCG@J%QimX~&&7D<p7MORxWkKr}u`OtHwGt~6wBRG$t zlxTlvsnaOnW!9Z)cK^Uf{M0|>&GSj%Wl>|!&!@Tvhg%7mQn{qoB#qjFjU(!k%!(-$ z;~s1hRQG86WKC`MRb6h|<jvWd8kO7TZ8n@^f=8bnyCjQ`wBnB1pC|dMWEoJ4ut@>t zD&7M2l(5sZab_w_e9kiuvXIL-UOkG{&&mbLhLO@&B%+y5CdQTVWr*9GL@5l97Aot9 zdEZ3V3Vvpd^vL+t@_;T!EKa}`_$k$Y{_)0rt!uLY_mAp0$2YBKXPalnV~jMjEQ5Sm zWwjPjUVNp+DEB@5Ff1?y%#Kh469mA*08o@dUd5k#rA8Pye)2T9d6M;w-9JuQVY0r9 zIUSv(4Lcnbq1FL~sXNC!m9~ZDw`Jo&7Nl-`Z$zA=<)>yMPRW*iDiVK6DhDT06xYC% ztEt6s5gCbV1bo~RBHKWcHu8_Bp(@XwYaVf@Tr%wVOamk~dG6D7x2rgp>0;p7?mAHH zuQCCB+&AD-(=K!~A;r~NjNqa?A=(E}pA*W|a63!?5E^JatlRPwTAns{!`lq=QXFe; zod1Lp=786RdEaqy5>(;5mlSY=gOqAca4CT@CFU_f&6#HE;lXXV8BojYMh84v8!;AV zo-+!^v>(2TlXV7<be)^=YUyf^teF+l=_GDxmQF7a!QT{l1>}LUK~Zq|Yl3u4yTu`! z>z}H_ufZ7820NDt&QMIRPUfclXIccjw64ge!!OxThW9X(#T}H^cQlWae*!)~9(MvW z6Q8T3^tIHFX)K_F`PGA<=npPCyc5#|iX;a_t(X~WMC7m-{RA8|_fBAaVn@<}P+SxY z<*}F<RuKS@OHh~<1&RkJ!UlaZitD=Ii_5RNF&<koW(0<(uB1N0IgS_#I9@nZBLXU3 zpB+~%Gc0AXEWEz^c{9~XaoQxpBwN~@v{K7w>Sr^k{W&&Zo+iCDjYxWlM_4`~#Mv}x znJyr|iGl_S_0DM49nL3&W=@#Lh`g43PC@|F@{&~m72fZ)3K<L2h~F@CwlJuWn+ru> z|8=<Ll&Vb9j5+5SpJk+!Yq2KT-#)tx8j8Q*#dw<J37j;4T+8E_{PG*}BG~vyPIo|$ zyS3ZJ?4R<1fxujhf1aB~<S2>oC~jR-D{AB2HPwez(mYP{kp<lO8cg1vMmA%3=3JXT zpaj~ENXMXulFviF=YcFA^QozWOlL7zJWo*57PFEZUs}iB=W(XYr6<zAX&i3!IEIU| zFn5VgHBuJik`}Y#95>21P7P+7ilPcq5Mv!%H#BGE&Q((li_IDpD;WL#>x{oHdn3Dk zArc!Vd$D=MD1vncZ#oN_UMFrJ>S7=j<KL+di)7HEG{ZkOb^5(9e0blI`(=Z7yYZn< zw(mMIAoBCR7ta+I7N5`0LzbGD-+<Z1ADj*$d<L#?GelN{x%{_V26c)Xba^0()RMqy ze(<NbV9&oMz1x}HQu<_F>+v6D?~YU4&q7V>S$tfe?26+>UgfNu_)4f)AK&nftX#`e zZ`j8Lbz?5nVo;j$Sk<;pO~l+$`7TU4Uy~&#x@v&(HC2(E+CF-!4>`6>><+vaS5lB| zV}PxRk=c0AvE|nnkEaQ~OLC9(AX+U!@XUrF{q_c0Oiu*2bXQU=bL;Pg^b(0F^zD1U zQ56?U*)bQdX`U(Ca&olRckOji!(@)X{a8q^Lb~JZZ0FqmPI`iIf4oJ9i%WmZ2M(vD z>f{y_Z7O+Io}0ev*C(Hht(7rNumDL)_7VMc{SglJvcAkI99zBFwnw4C^PVN@gv4?o z%q220cCbZc(tF~`oY;Xs_-qYsEqyhBF;v(QgPBcs*J`qhTa-DG1vayEOOY7iI+r~m zFf=y>vU?G3!hfO<PxmnvRd+FsI+XU0B~NjAoc%U2!olnp5u9)wbJL1~v9}5AQ3PkW zM$B=ERYwlkoPYRLM6PJ%DUL$i=8o4CAVLa7CB>=<;Jqz~O;`6G*0x!~EW~cN5h=@) z!Jk-{gC`%K<*QuQWlZ$hotgl1ZcAe71s(h1lqZ`vY#!z@V#GoLpFU&x^14bYqrwb2 z5gZEq@LANxek+&9!9R#2EY+o_3)-c*lL`e?hf{T6_Q@%3@TKqw1pJALOGTQ69~0!j zGbTZZmv(Jw*tcQE8x7-9_rEa&;>(Zu>H^;k1-~cJC;i><KB@JBK0F~MRgOy7yJn`| zlLv!|s4qk@^zdNhBZHrC_j+<@0vQU_JYmD%CyE-J0#WTDP@OJ#|3e2TJS%SZ!~&d| z9R-?)%B7*XN)8IhNq;|bAuRabY!{W{&CD*x{WwQ;2SbzA_n0o@8TFoyrF}HR6F0#m znRyv)Y!niDGn~B-f~-#sfS{40O12T@Co21?MSt2q3*8HQw+RCLiSi}W_dR$A-Cqll zqZ^!?CnYg|=`R_Jo5{-x`V&3udywY#j{O8o*S@@$?|)A(1jD<0ng4Si)|+B6y*n_C zTV{<bd5-|Cj7v8-`p_BrNGCG|zkXU?G1q1u^P8abOyZo#T?P)xOhw>Dn6~Z%uO~(E zWw3|N)2mlAvEqIvbiwC}H{$S^ITsp!d*~++%KU~#i@X+G#s#>a>%TjB=ZWZZ|5$t( zAb)ks&mo(ZVWAlBfOUPFkwJOS8qHAd<D?-38(UAhxIL*Tulz<2stig{-lD`h+8|3P z0sG_&sb~eHt_PPAOZD8uF#<SXMS=fXmCmqbKW%JqJFGE}cI1m!tfK_K;&;(P6-+X} zO1>K2U7lvb*uD}07f3w~c*b9XzC><H1wFh2592jz;~;_@N(F`KCZZniSzmQEwmSwA z_l0)UqdxBS3JAID6gDeJxj%hOWOVV3d6EWWUX%Upa!i=C%yZ%2iW{0U$ZTtv(dg-| zQSKPp4}K=w#Zf)@v;bJFwG|vOs}EkZEEJ=|1*R!_XnVunL*36V^o<b77VQ!SITU@L zq%}1OpB&-xaa#K(@$__9zx9Gb?K?5)S`FKusm%@X2Tvb9dG3RO`h~tGNNBY0swvc7 ziV1oy)TNTFKJKAZ@?6od8GxmK`Ss5&sjV^nkCPS3h+KJ#WjxfNT}{}4xgPdf+SxMD zQVt-<J3_|nP_6$71zWctpgsmJL~)NMG+X7;E5ZKReoPgS2V98i!uq!~u)r(-oa@N} zkTk<bM}iM0DsMamZOOTtoxT3xA32#hKffFS0$Lb2^HQECda{K_CVA<rm|&eT;cQFh zGyrEw%Rs9~W@m8RSc5BIoL6E=o?#E0Y5sAk+AY$U4D41s#ZO3IEQ!WeD<Fx{<7doe z3D7mZIWTY^Dfxvf{k}hovvNAX?x3rj?ch99ox~1jO)d!_;$bCRuJ)KFn3;C3Xnnzu z(+9M?TsU0e`={OR8D&6k*%LbGw_cldpVt%G-KU0Qr=4k|*M&{4jH0KnbbBQHqI4?P z1+{sR<Q-Cg>JSC%#Aj=m&TckbgJbs>V^^E{dv<yqevNeyuCTeJ@Y6=T%%r(}m74aF z*x0liy9~HsLeX0#$!We^nytgEAWG(0G)4QWLzl{A(^Deg2&X1-v`dv(Bcr^6KkWj8 zI34eubBLZ^9<i$;WY2&fL%g!f5o~t{+G;%^Z86#eD|tmD-^uN^ROnj>ng%kXpe{=Z zB8%Fq`F4kA?lNN_OWI*h2QZCMu+%3ee>|K1Oc4+}rw)Iag_6x-PIQTy0pLAgeCdSj z`tGs0@YBl%<)Zq$-)TbjcJ7;U0d|4;M1q4pw$NeP;=otgdueo(u|?tY`An_ZA4VCD z*nGqElxCw$>Az`%oHOo!0F;~-s7Vt^E&pk7`(bnw5afnnpx3jgm>d3zlXAM!Gl-x0 z?yShj3GZkc3pCBV>GF%TZ0t3t8oEo)yS@vPwCuixwhD#557Wx|ClN^8QjMkNyo7yS zX`!pvA?ol()8%6Nw718T`LLJ6(2hUvq$`b_bgq4lZ3Hp4JftSygKiD(Y7Zj${}8i< zRh;K+4=!jQDZD+EBsPP{O56924-G(sKzd~M%EX}`Qg2|F{vQB6fWm(vSxO9x(Hi%C z#WW^VGh|9ga*fadgh3pFv4h`M`28M!N8p_V*JE(K0<MeUcRl>xfuAr=2O{>kajE0R zrHzAs>Ef8N_VL0mQp{4yvDV&A7elwH+Qv1nJgAd4y66-6f>41wTx_A<2{3r{?Mu;a zBc;=S!k0)dotuxFN{oQW+wKXanCa0g1z}q*2ID;Ia!gsDPCYr0azD+u5}!9_(%)Rc zZl?GICJJKl<J8odkf)a&dU^?bk92^*5|(D=&BON%o7M4n&70Trdw@2TR?Oz{&~Kvx zB&NrK1kmpyKt6deMXI2Gg%`CJkT-lfN-#iZe?<k#KcKg%9`$k&+N@r_1InUfA!P;I z961F<I*Lyf>Ld{@LL~-ONsCxLwC;QGw)ab*03gyy>0au)1YX!e1=VajozGZXP!B~t zJ`XB7Nj@i)z<~=`01U~PHwghZHQ}jB^6DW0k0_T<r%0DR_TW4gr%?2wvIVJeKZ&X7 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� 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%0D%AjNC!X;AOnyBPypQzij`de?Eq~6 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�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%0AE#mQt&koxn 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ð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%0A1p%dYJDS65eCaiJ(` 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�UxH@;Ne$|Kj<yBao>}(Sw~grY z+leLEG^@t;Y&%S+BgZCae;9#SV@et%_(aJb%el1{0{W{`SEV^oSH!3#6S8qSpgDp5 zs?;>9kl1v<6(FbN(@iI~n{2?x(sV>|r=!n#(h-*p7#QKtcaA}w^&9f`Za}mrEewQV zm+9_wVsA`GCC9dKjVeb5yy#PV%pRf9h6bI0*R26KO-GbKYsm!|aGuK`9_My61fny$ zqQk)1OU_6wxHfOTGhJ>b6LuvHC6J=@_@pM;A~2$PUEtd;`>6lvoH4~ol--<~{&Gcd zbFrsoZ1cPhN?ytrOwlSuN-ramjH}C>dLg@LUjNlp)5XiiYX-_NC+ZKMc>hqPU$CcW zp5k1hL9ml#Yq+r7C~eZT0s5jiouG+j^agrH|1&_7tVpSW1+;8PVP>|Kp6Z^b#J19N zYGGi83)wR=$Z$p@F!CAd7oV^he6mTma?_{MmdKIhsMHUu7j!?O5PL;FE4G<I-AE;< zrVvjnLSuI21G+keohf=T2d~yfmqi~>Hk=B7Mojc7#z`<oDpglo0HudP_qq6oCP<Fe zR7?QI`*NGQ#inWjHH(&(ECfl)q4Z3otdBo3oSQJ5Qy8YrFruS`>?j=Oox>@Rz^d%d zPldAV^JT}w=tA=pgIl0cS2yM2XMS};uzS<>z`2%Rjb;Bw=Esq&+B4dVWYG%P38?&S zpr_-VqcPAVbdrSO@SDw{PJkKSu8kP>zHFd>?TwvXjH%F5x{^*o+dzv@4l{CH987bH z<;fFYN3Hau8Q#wN$BzWb*wnOXndOR^Qh3o5L+#q2+?w>^r1Il&D<xjI<w!{!HFk{D zRd>XI6zjOEe^<x_sS2O+P;flb&{2u0((;DFR^?WXsvAkwt`{zJ3bO!FyhTYV621)< zWvI&LQ=nTQ<hy*+1R`mr^5%_ULo#Id8r43cLMPXu5uO8WAP{O}Vs)rVt?DVYM46~h zrT6VF-elP2hzyrgP^7AIT1b`2&)X3(kTND3_<Ypp0y^bZZZ%9$KB**$&H~7Xqkx%~ zx$!MYU?gsW?4M#T1H>3BEa4%*8t5~C5|V!cgsTY4#YjU>g_^fmm7vXl>Bl2000?VR zADPreCiRf1q5rAjfLOsoaFLtNd$3WIvgT#+k}8p6(P3cVMaJU>n2Is%CWbf508=~w zWPjouAx#=Q>l}_8HD+@_aCTHqPLwBVnL1lhbw(vJc4o!rbw(%)u{%wvUkV(4_<xRc zFgSFhN=8U%s+^ctB~I`pTuxn#LUyY+n&s3p+FssyjJ%=&kKqU{gfbfCYLwRjb9V=J zw;vFs(K@*tPdFuvkF?~d&w+{Ix{Y54;F%mEXvtWPSmvA?Ohbu;mPqJW)Na(<jkCc( z4YFX8mqK(lz`zTofC^Z%MWW}l1wE1|KsCFf@x{<UM-kh|?3F0G$Ws{=E%Q;L-4>{^ zpLj&%WT!#Y4WgAzm6gHc9IbSgbjcRP{4CL-CmdfVpzXA>G8VfBNT@?it;qO|twHms z=@b8~j!zZXX9(BRXW`MFiqSG2ER9E3@QqUSJCL0jK>k6h7jY9Q`T^0!CN-MA{Y;0H ziR`&R--{6X{lrrt=3W^mYhE@3_x$<Wf3m;-dh)TrxVA4<WY<ABS?~11&fLGVTNkZF za-G;>q6#!Sa_^kVX6P<d>hio1goKNJPCAicfX53f{GcUvP4XH0W=4@8M{gR1-HVhK zBh0_~jWq-g)VafsYwij*NlmvO1kQT0SgHC0c-5I29Nef>VynRv&Cht?)bLyOl)kfO zF*#-}hJ4^B_+_BwVL{>oZYnKl07~C^H^a!7VK9Orb8+33o;N3)Qse+YfWLoj&X8kO zJ;y{L$3!8=L?OFO4>M(LXc+K-p~|7kWk?gtWq?x8;CMobOWw>9GBdAZs9@m&rK2Px zv@ePk`FbrFL~EKD;mq1w_&)}%Jl<R`zG~~sZ`qff{Av4>zbkd>o7UAO1b!J<T~R2| zA17SdZNc;?$=+Y=t%R##y_UlqWZ8k*A-z+dYzMSY5l|Yy*U5ry)6FRbFk2z_dj$-k z@j38J10m)dAsV6&x}QOA;o@`i_9;V1l6~PJ(G!m@oOq76Qsr%psMb3Q&1o&OuY_rI z|5O_Mq96PBu<HE5bU{deo&0&-)A&??#wLreLKZIe7VPMk*ul5?ftep+ZEIrr=z(td zSH*WYvv-p0pC1g=TTu~1D(%q)iPD0RR66<VekW6GI}~?gXT;3}ExACtC~=o-g;4{g zUk^wTKurz>0$27rO>ks;QkWB$*q;ieE}#tb9_|G<$=iOkwbx>MC+42Bjxx?oPn+3x z>+C{|ikBp<k|J@lfWcPsiQHFNZ*hYYzagE6a9(0Tzi2_f0vGQJXVPU-DNHS0Qr$)f zzUUZ9p5!Hm)4X$vU^;y9^1MKQoQedyB3Y_TqW~1y1k7>x5AQ|ALD8mYE1+mAzyZ^7 zU1j&A-7eX&bYCIDny)xtcPb0md0BebeK2};8W#5ctXIII3csPbLf@x+HNXAqsXX|P z>3;>-LoDB_wzvCvqi{`r!UZx8j{;2c?n=*!aWtZWvjCX##2XAw+ijnx-EE(a7lH+L z3p(k<S1eDlf#kr;$dSNAM^8HXlrGC;FCJN#3DSep9KdpnC)=E`d)3KC?;|R~F9S0y zkkBN1S<_gORz=K#fh_O>poB0{lrow?{h=EJ%t%_k{ri)`N}Y2SC7be)Q^xPI5d(L8 zl!MKSHzy*GBdeD<S~i#5CYoH(5|Z^J!c?`p{DktWas18yfB7j|88(qltQ&!v8yZLP zY2ek`#+0`b_=I>i#gJ3c%O&F}d+VNxl2pzut_`hl$O4t;e-dhkY${iIiB4#ndq_F@ zY$aQhUD*hqCoY*7IuU)^R>_0~BYPj&8g-=-veq+nC7iw;Fmo$K(6x%3G<a{oZ77|s z7Ybo@4pOI2PHjLjf^8;89|3o$2xX?H!uvY=WsJ7-j*$@nQMeQ>K%)U1WM%sL@g=J= zKq+VK!{}v?4>>sCP6LA+1Xf>9r{aNsr0wGao2HIV8%#)QMST+xGJ?bVW*Py#>06sS z71~wnZZ^n-V*n6Z%o^+KtBJnn9S*ck0X8E=Jtx%6YmsJ$W5$T5d5PXaQ<zO*M(}0N zyut6657iFtQ;AG}rLP@Ka=hjHtK1dALxpNDuT?NYZ)9aHRe}Y_iqZ*yZIlbsD^~&6 z@m%O9(+3nRSG#Z6=!6z($Lc`6x+c`+WN+?O;$4XE-GJ7_t;Eb>P0>-*V=|D?<_sDy zc%J>b|I^bRGqQ-jxg7c(t5ZK`vYVgU?MR?M^P>*=!w&g#{w75?{L#&UhO8U>^ap!& z&k@_jPk*PuYjgafR-hs3KK@vzILYY|!#U6b6#I~dRW?7?fgpqZcn`X7m^JOVg!xAk z#+qUNSksqsqJIP&6=P)Qbr1BlLrX1y|JR{y9Md#yra27r;{EMsYk(EvCAo@zBJvT= zu2bV0W<PbD@MCNh&B;;Q@Xo6WOoBAhf#5dp7H_vY(dU6qFeNfzr)XPTVC>)hfq`dQ zz@4AkbGnE+^8<8#3fR@5ZqUcT^!4<d7SZs`5dpBnG6p`Vii(c~$*cT`2`bE@S3jsS zhf&=ClU1qWGbm?e{Gx-W$8$nZr-U;V6|q!Kc{5o+JP|f`^-nu7@+T-fjC4@2K+!g+ zfwp-tA&wAwTkuF|MKAaD!P7!*bFLM6O@6wzekAbV*7}c-fOAkgO9_GkAp3UUA@dQa z7HjK9P~6b=YN?M~>5+s1T~7E8{};a!pvB$YPOgmVGRg*IS>dE_j%Zjt3cyy1+}Jd~ zjn*o9(*d69afHD776siW1wxYD8QXWSR?SA#v-)~vzh`0f{Cpi)Us^~qbfn3VQNDb7 z+=kv}8w-eS=w&*33f;mM(eU56rcsoKn#vHB?LFTJlQ$&z95QQVP~(Se;J0XPMhJt+ z86+%Ls75e^V{gg`b5su>*+jXF<e(>*NGbXmToA;fPZZXOOJ@uqP&SwGgnt&yn0yK; z@P`3K#>L52H;_6AI~p)SX%Qt*NsY>bA6ftngAKi8_ofNb4*AkR1d|zzQi%qplHCec z?u=<WRRQ3>NP#~bL|~ES+($SHDBKhp&;cua46iH`7nY39u%2l=D`d<*g=9-hmE)pl zqZy5LItg#zvisgyZDuS~+PvxMJ&MvH`ud2{VKH{dBb|(@v!W)7Nm{G9aVy0e2h8ZI zQeBnfb;~DrfgRD3IrdB0oznc1=F08*O_%7@P%W+W&BS|lPzO`PTA$RHCbrAzXwyQ{ zU!b1;>FA+Od={?dZ3mz-X+<|j-V7(Mw;N)!&=5F@^-XLa6U%90RkK8GvyDQ-<kD!R zvkR%M-wpdh{Sm_5g25Aa!Wx}PQFK_euJl3rVt1WTf|CN`807n_ZNpld2UhXCKs-R; z2w}-+DGUBN!mQ3dSCrEFfpAvJ9P3`Xz{eQoI5bl~Cj7JdRu;~R5FFncHgz%io4VMI zC4F1*eaGjgx2w-@`?qE5`Y-PH5chM3C}EVz5xP|^B;i)q3Ae{Y^E|aSnjFi;3%^pk z@wif%Pj6pw5A;VxUWAETVikakB{r~hXb#Z&XzhR~D9G`IWrj9|Y?&ZiR&wSi0;P=S zRQIrMUxi=qz1@iGcU>V;p%pQ#L_sedx&2uY-eME@RVQT}OjC=sNr6Awgz(PnD(T#& zp&+~G#ODSo%zNk~7yuml_@B<q;n}Y3pyM(qQ5Tj+rL)r>#`BflF8<y52{<=!ID26c zHgGX7a)K=~-g41W#lO`ENwq+uw=nTodfcPa@+MIpnj}(9`P_-_Uu`%X%bAFQb9N5Y z2T~xP41)g%W`G)mpYZM)IvI{k!;pL{-are2?Q5bp?ffjagP`<Y3#fQ04=8jT{&0#G zHbmtO&{S}sNHW69a>1Y!UtU<fLpT{pIL_BL)cMpMC<Cn%2^_ze53;#5@SC6h!Ogo? z>UJ&eTD1o<Y(KctHoIxds>g{YySEp0!o9xM7VHqv84^OWN8;PKi_{PTWMxW#NDvef zxtLJ~qz)Jo!>0U3IKU9Dm@7uBP^$m|YgWfd7Qpe<^-9}RtXC1SVM*D_RH89%q@s3T zwkon``h?OR!7J8fT54s1%HT|ca~Q~b4(}}W!t9hNosB=0+F@iCNgm~FYL)m&Ijf_~ z=!tPH9wS307)j!r@lUE{do=ezZ}_)yn_Ob@=D)zWfQtLfl(Evh)#0r2oQHxG&7(}N zJAe|Kxq(wNL<V{bj(k6WmEY~;kAsc|HoY+LmHd2<g9PA1c!F?{JeW6y*bkfxH|pCr z6&ytOz)snDnb~Kdc_PiElivabbOAax<Ac^XO5h*~6f8R!4CLpm9VCK88+psED3X2z zZ?y#{WujHKB;$TG=PWb&N4bC4>p)jG=<LRFr}h|E1+HQN$~857P&vUq5?z25d}ze~ z;Hw`7N}t2ICchsxNp(7Shc_xmLnE7AtoFflSGYIc!PNRe;q7CyS#}>;PV(MK-s6kV zUxQikpoKnmcpv^t;lJ953Z*j~R_3h&+9la3ds{--oS=qAu*fLOTff=9WGTA^&0#28 zF_nF`cXeZU%f(eia4mg<(9rzra4`}1v#N#?t6H<;4;}n-B%_YBUxmg7PDaJBg|rK5 z%ygxuH5ROFeen2P1@j=wd4-93!cDV-3fX~f%)w1=?(BQ_Eq8Yw$2Lf3DLS|vtYJ#4 zu!xdM>V@et%<kwi;**OS9~7uRQs)`6N3cCzei%UMXKU~qZJe-1Dq`I19%<jI@v-RR zASV>#D!P*2rIEzfagDN^IjkD3d`AFAR6=kx5%|DSY4HwMnZ3K572zy{Fkx7V?j{qe zUHbI^B<z2A7`%ZXTPz@dIUWwz^Eq9w$(^unOXG!J$m+^5)?*yg^lWcUfHKq~dKrR+ zp>_)W*uoPHP9S)F+|kkq2xYiYH>d~&UNGWTI^ex@z<Xdtrx0cmrDg^Pse^o!Wtmi# zjs#JN<*|Ap`gTzJvHBm2XH|);hX(C_J=8&XL{q8!%^SiRrMyx;a*zYbOan|s;f`~S zkCpst?YA&q;dS6L#>ZOQrE|FT%kqD=+vmC3dEVVbA0Hz=P-Exqip~woK_^fsYM;|^ z6PoZ0NqY{SS?6T1tFk=6&q(4Ksnp5aF3vK_(I7X_ylyj}L$82SMh8~Q4mtoI<1?8* z3oz^ai=&=KiGfhA%vz7jvErunn>ZzA+9Vb%=h&`L(%L?=>-JX!=f{vk^HDDGgk%N2 zf|7MVZA&%KwkG0&bSRscF65RTQGB_5S<A`El*B559kap>!3tu2EIrYdYN3ApVg2K} zd+wV6Q&4NzcG2%B3Y#KImk;k^8MpfUNzf1_p;pdKWfShTJ48rR({ulmpb?T^PHiii z>^WCQx0PmZ{6n4tpaoO>riF|xivWqV40N&105^LD{!gJM;7qjA-u*dS<x6IEyCbKo znXOQJ@s7d@-5|$=2ncoWkg4Zv6ukk~T=37)ta)Ckl_seH&$CK!)aqg8gC7QP8CT26 z0be4iluN<}UZ6e|%jF33!nK*KDPQJ1DsvW<OXmy?87TCn7GKnV3(Loz6Quu9A!|x# zXtQKG)Mbm-pRy){IVOX7>x58kYxN!sKv>O40*fc+i8<zpIp&FmWQ#0ZwWyY_Y+YXL zwS9kp;?r05GI-R?V!@gPVqjIHoid=esgJk)&jDwoTQX8L9H*lYmYkz4Ip}2K#qP+L zUK|B@D}=W~D5BRC9|TWO?e7>aS`~BP&AcK$Cr>!RT^XKpPsm}VY>zk_#yWHbPdnM= zz?KU^f3>B~`S3vX(`<S9dRw@)UAThj^k7^$KD<;M?!50ds{O-@zi36Wh@F=GR&L>1 zB3{C7OUKWSy{PyWsJErktJ9VKlsz9#Yd)an>=c{<h#@2eg;e*Pk*EV14Yw+CyT?5- zGD8F=G+JG}pmt_h0-QsS!1<G9Js6cEw0=O=mf=sV{FFg^ngwfYWeCrfJcMiriH;RG zL)w}mb~sXh(a<ECY30>wBI8Ve2bU`JMdN~X^6320_Y3-I{QIp>EnclR66-FGQ7#iJ zr*<lD8th!sO#}!V8PTBSr>6pakhgj}Euce+Xl=OIK1O&$k>R)nC<B;D^vQa`rQk*% zzx{(ZCOV<NU3^+-Ez>UVG${+5mn8+b(1rz9mMn@a;%x>1IU&8#;-)}u3gpHFvRdx^ z`~-RKlI!A9nK4@?^DQ$AXwC?FYEGpxN+R$ZB8$KvOG+?|DcBKvDNZZi2>+KrzgIL{ z%Ois_sovWi!5<ZH`+~qsrsnAN4rHx$wWAV7Lqu4k%dKMUt0@401FQpTa^+qpw(IJD zom3eMGvu?_3hD%VHK}Hu=GEqGNa-`gq^FC@PYgv*zpAW#QBl49rbPRVwXpA_y&BMR zlbGVbcdt*X=~slI>f2X*EjxBUW{X$TT0hp_zUc-n5l7rBv1(1&kMqON^{>?nq;_kF z&uNk#zjg42flZt%9r!)^mkkO5yblV~`>2~3gz0-9>G)SX1(xF(Q7k)WH`tx9AqPN{ zIe>3m+fLlY0>IT4uuFr$2&<7U6&xQ+0g}^j^pXjvoMt&C(dQ_jE|6@Q^yV?!^+#hE zF?Q*#3)1^a&^DcbOj3XuVYFFp<h_Cy0Z8fSw1UABqfr$o9KDgg3g_@JhxH<)X!Ot% zAVIjgGpxI!yu${M1y_nXOC7_AI=9Chys{GikrriK_W@RP6`15>Q8VUCSPod&A1wY4 zg=Dw$0^}os@|KmD%<z=c%I{Ppo$PF`XR+H`M{dwJCxI4m_exja3}H6}=;dk{!|a+H zbhDmon?$r9X%`;GP9~e1MgGEw728K?M^`c3?IXEDSgIxUg(cKOiQNDjPXA`s2GrM} z3Nx?-6jGs$(ci{&5}?m9tTHlH#9Hih5v(}oJ8*+*!ziwNMYkfaEN0=l)!c+vUk#jP zve`web_matk~S%66XjGxos7cnD!}rdw!Y$!p{|U6RvVquX#^9SMVQ|ir8_Gjvl22# z+0JBBjI&0=FnZ;8Ueq8f>UIeJmKY7@=tzDEx6n1v9G>SeTf)pao>3+s`k*7ZzrBR+ zbaf9`<Qk6T>QlCnn;fNOFiZz|iQMGKLykB~<goNgNf}b0unoUzY86HPOQg@&SqNl1 zZ5f}o+z~{nL?##2?xNaVvfL=)OKAoA4ZyKAJQzh2v{Tqbvr@3EUf`AB`=-jisjhFT z>YLi%O(W?|NxNmne^Z~nq0%amh5Y33Gs`HL<SlyA4gHnITc5n`I^}KGD{oUoP$l)v zMV(mgaHMY9MPx9HH#Bb!_TlYfEI6}FNVIMNue*TP2!jQES9<TeFu&R9aPLL3BgR*o zWhWdmuH<1KSRKSMHJwdMJerjtaKK1yZWAu3D&=%>>Q}KDwV7dRPqatiZQ>_X=~BCm z3@wtxHwr6VM-PxJFyw`HZ9IgPA+5NTC$%p|{b6e}$?kbh*e6LJgYDY5t8*2%YfujT z@{PZd{z~>bna9v!H@nhn++<)MSx*7hk4a$J!So*>sE6nVA-dW35^nS6O-Mq5U4kgc zTMm5zAmJS!Bc9~GiE^wk1&pDdqk0eJ_e!%97Fln4k^j@k#7`5K`_o$M>9>EcGVhVP zR|a_oyTXqH<EaQuw@+I-(zyie3Uq}GDwBPp$bkhFCp|%Ku%KCStt{qIuL|1h)y|vs z9Ebt2W``r;EmD1p44gfLEt#1mlaJg@FetmoVLpp&9?!L%EE|&HF+dtO!*IFt&d2b8 zb3ki*PLbe>WR*70c^6QWbCp}hHjr|o*N!U$zv}a_O9v_=Z;qmv9WfCzOy(`8_Qb>n z!!+%nS5lq}$!4QRd4P9_>C=#h6aPrTclhu5kI|}+PM}5({k_!hi(5IMxYx5J%2qgF zf_>T2X=jFN8hG7u>YuWBGHWmYJ22?ik@3Hvapy{ZtpH70RIlAO;TO)ewg!;wJfPCS zvkd?&8}6nUkSmRVaUHZT#U<>U*baFMij3M_KYpH!NM;`UpjN;$5TGM$>PSKw28h9t zoXhO<w}0{f-_u|X*nA)gzQ|<2m*gB+^$ltYlHZ-m#ao_UFnGyEsn9fKh#U`Gi!@|< z<eupWd{v962;Fm#jDlkoPI`PpjNH~D#?}`f)0mF_j~GXF4=$}I?uI8EoJcxokhpW9 zb%7B)bEIeX7p~nJ6;B(tt^o~_xa2PRx(4!5LXIsvA*Af&jccRn*R>9ZxCpO8T%Te< zvf(xT1v1&!jmtVjNE^Ss+AZ`#OWGhtbfC>}2t!E5*Db?<V?e~@XmdJlP9g3Xd~Uv; za^M#sfg;CQ!l)xi)K`Cr$qh?53_0<-34s$dADy}!;d{V%Cmqx_YK+?DTDF_MIC<RR z?qKirIB^a)+1n!yj=nJMl;88qsgKPQ*Ow-(FX<KbG)Y97Oi||VdL&(Mq^F4<HI_{u z>4Jf4`p6d<`b*M4o(<-W^0uU5KgXJ;F5%zOJ_3FSV6I*P2oi4zw6E23HZ&f^kVIUC zN!O71BH;wKfm_Ewk&q!{6A6an{tK5O*=z4d5PqQo#%QwB2or88rmcf$YioPfJ=y9x zy16ZzH-Th^dFX_9-klEkUTATr!JRp}a)PT__PmXrGi6^s>kdk0HrtjX2tLt&D!sBX z&#vQ}{76`eb<PE^%p2`Nqia?f6ijs0y4A{;MH4T<PwQ2)wAHx_5rST$6Rw)Vts0fq zTUcpov>I1JTU@sZ)4ENK)*Y)_x9QNjO@h|j65%WEo6Z>;dV%u9Te_)_+|);I+tT7q zMI;g97R?-$sL7_$Ugn~Rsoz2?u^x2W8E$5plG`j(soEx=ySe9$_ZwCq(fH<%&pKfk zEbkjrj+fC=%vyJo)>@Fq2)ULz9jg2}R3MaH9yE2edPsXH>sfwg6^=oLK1V_fZhjQ! zyv1p77b-`^U0VSB3*O+oGu{Of=(^cYJGeO&*usCl1K+kJJcwpZf^V_*bc^*R_WIkR zic(*@Y5nD<f%V2798LPhZnd@S1slW_aAD@Q#2Ua&Qp=5vQcBWB?RHA)NK-}H2*2Q_ z=Yed4PiNlJov!rW!=SBF#sL7|U{DoIPH-W`N0VJWywU{+Vn2)#*FOe>d&oZ;kFMi{ z)|IEJP+alApj@MKukXC+HSd*|cUsCj{bOkyOW_zs2L{Rf4jge^-T1|<4=B1Jg0%9c z)^TVUOPkpBgClwFfAqwU4dV!r@k8fn9lS{SJ;RfY#ZnxG-moYPSa8&zG$5xr+<;Mh z=*<u46aVSNGd4oFg)*^d7zllDfM}AdDR1a|hX|wM$0Z59BH-_!0H(HTPK?eC?f`K> zj=$EZUmx;dl0X0;Q);$+QMnl)v)t#EEzK34ov^G{E@K(O2Ihy(aev@kz(<_w{os1h zN5a(`MsG4HLUDPGK_o8bchEhiEvH@|)J@RUG9Nqv<rIL5Uls5%5mQAz!UPvvICzB_ z17;OUZ`nq1{CE74X;{M>5<Q0Z%|8Pe;f|ME8&U#SsC9fKIKcs*N~v{A1Q=#+^af%n zs)luqES0B?(A?ca9Q#PB^{j4^Z7=HEHJU#15sKjkydLrH7RVodBZ;RupKt~dz|viX zUb}zBjBt4(>8}so$O%2{kF4aD#<w|5ry9Mt_<7e4TNZ|cb296*YrAbq)gM~L`Y3(d z%r5T&9tjuxJKLcWb?8uk*m_L0Hq{^_AHV%;=s9m{&W7N<(oP15eS*czWX)>L<#t1Z zgBG+AHWsQwf2=25Hu15N$*tlo>qnR%Fr59ZWRUq9ASl4O5%u!~Ql<_KYA8ep5c1$> zd*S`#C(M5+kDeP|D|&7YF1w#`e90E)dVG>8I|`$>)9entnV<E*qk}|x$D?CsJn(3w zD2$9)yjweEkPKp#Kfcyya2J|8KBmjBLz(Ovqrd&->;FDCd^`xiU7z&aq``^g?X>s{ z!UDfnFr^cV<)nMS46cH3565Q@GmkCp@|ZUy56q`uPGZC>_Y4*2N^C<{{x5?p>(EGg zibPz-bq^=OXLwi5@;VcO#ZZTgcX{nWy<~h??#!TXU3aE}gtM7vURZMG0WG70ADBDG zb9?7TEd&!Fqc_n+O22oS<1Mg?MAr!Gz7A-CI=Ksk@*9$}Imkqg2Dy=5-C37n7$_e2 zh!+41<PCV*#=A_u?f+U^(g$i;uvYbTdV4r<xxI*0u^+f`Dln3AR%}aqC-<D`f(bWz zfyIa(RKY<;SCAVCeR`57+)PnHIYjH3BG@&%qZR$2QkbvqWknV$`9Qg^xY*~cD+K@+ zf=v3PO(GdcAHV&>D4k_mBj$C=^o10zO#aQdf}kg=lBQ*PDrOl}6ov`zvg`An@sOPp zjMIR1925A%0n%}g62Gei?=}*j5BcQpI2u3=7_bEqfQcZ>B!``ce4tw5`H1_tNq;{d zlWn`jxsx5V!mpSLdk#0_KpEci&QIR_<ei`V_Q}rKPGY!Rc5W#LoZEB$D>4slnC*>Z zrh8KZ{c%o*Qr)D3U8=YtK<86`ciM|K2ee0fXo;5TAaEo-iJCkCm`N{k+mVKgk@SkF zy>^T)qU7?1@1Wlv81Csc;HnmOP=u^3aTilJVj3M_KIl^pS^B=c0D2QeQXI%A`<Y$9 zB(qK?-WpSIH$9tk-u5T#9xb?1yu+2D54Qlay747|3L_CbG666G(9w7*%(g3cg4C*x z*1Bt~Rldc|nP(Sq;cI8YaG-K^mhfx93vzV+YlNl|L!?u=7$fW4Wpd#0V0p#lLpZ&0 zucx9;p5(hu{4C~5EarU5=fO9@2}eMGf63{%0aIB8TmsNcf%B4418*m|!<WEq+D1SU zRBoZFYYz_7u9Lqm{6!P96F=U1a<q`_4PycPb}Ns5@Lu{ifnOCcLnG7>&N?Uq;Kf)G zB*-&Q%~aYlo)N)~2yBExUIoRk?{mOl%VyOz1TUJja^qDny3nCL(=%h5l&%Th>s;m~ z#72^1W!YXkL%Ac}3+ato1ddoUH-@XCi^h^w=27II)Y&>$Hfk2{8|I^qCcxg;0-THj zN>#-O+Q8oM4chTr84`5k!T{|QhA+mSOJWffi2RjCsD-i>bc`y2Ub+K2IwJ6^0zYqB z>H6s41<cK_9dGHK9H)Xi!P^6QTL@r!WxxTEvmHZN0Ng273C;zUsz@FuILBS!=j|@= zv(6Np<0!$I+W(cJ-V3xx&$`gK0)B6wuD9+ej65Z?57Am(H89}Y*|-*14Oo?OY4wZ+ z%}SQ1QanQ%E%OtENt<7A=>Ll|^1=eV!OH$tR~Y$wr5W=5dd6J|29UCqDp3x`M!-#~ zECOHsJ%6~|ZU|O29oVBe$Az|MT{c?*|1Wo#ziI!*_t;8OuVSAKi7O6hoGFp5bCW@k zqS+US&MUZ(5jVaE@i6YZLd?<KyZX<`o%|?oKf%C$l-BoUe4A+du2T{l+27FoKfi6N zOmt5)yE&W7O~&3!#)5*8@n*EIf)Xrn6Oc~K>WC|wS|xm~Ec1r43_&pKg0Fli9@C-t z|74HP*9Z*c0JZ5D@I5MPZ+<G)mQg&aBOheXuBxAp@!|SW22LcbjJ#9aH=JN?%N7}e z<ljht<(<yHtKPr~vU0>`DyR&?<sy?es9e}Fjm(4XMhnR?f5C!0%is#TuiyUF$Pc~{ z9<pZ2Wk!&6({0Pxkj>Q9&(fvOP=?P^c+akHUJLdZ*-LzXE>q(tA2YwRoNQ#G%>;+@ zOdlj319e}rw7>IFHN|ihY@e?S%|Qo->t$8stjM}BxZ)LFRQyH7Uq;!>Vk9jLcYM<2 zM8DiV%Fz7v)JX?89|LUrJ=x!L|9hRtSf}JPChGwX1D^n<QRtV&8=0D+U;^uSZTDDk zgvZK75R*4H3O897nr5+<%o|IMzU<6)Zu#DM=6!j&r51mV``v)NFo6U|Q2I}O6Nmx$ ze{Q$}R-v<^N(X3&@NhYXyWIM;F(=Kv?O-4>#ZAMk=dH4Ksq?mD>*{P-D`NmO=h7I^ z3*cKO-?GE0JPCi9gF+^ktdygqDX*=5+%KO`tp2m&LOM;ZWv~n^EA-6ca5x!Q|2y^@ zlO9<dni6J7DODu)>p?2D6}WsZ%4La&O5~&{t`c#nSD5_K%E*t`WeFYtwDXa<Qbcy6 zXS*K-X>|ne2CccC*8xvh<@3`ozRTy=TlskVUwo+~eW9R|*^ar}n>zUSI5y?eEZx!E z`DFl3yayTZwFgHgz#8E9$VC@kX_>jTVOI+HsSLd&6%R?}o*bz^@!#c<3dl73_Gu~X z+44hsGrI<6{ZIDqx?q_~m`)LjhPhsvpgEK=^QP99sV-@>fbs>K%%}1yEiJ7g0q9PZ zh{D5LalaXNkFYCYTk{uyk>V&11EW9*yAnYl&<bd&yza8rEBH*N>B#*JNW;KFWw2t* z)LAmBZ#rP=*rxlt&0U?~E*FPr4Tdr+|Ap%pvaT!4+Szh23wV$(2oz2m8EjTBp^=Uz z(H6j^0(;t+-*z(`D4n(&WngW(+2cUKg|-FZw0@bWft42PEcycYfx+3kL;q3^t9bCg z{fZ0alx6->p>q}+ms(`Kw&1Ue*$eI!+*ulTmByVr&VVeK2jhPK_HXvjd*>alssrA~ z=BNZ>uHGW3-^w-cJ=@6`2X~hE`(bf>qdk0o+y4)`9^}JbVPIc0`>i|K_uuP3t_I6P zEK>stts9zb)4<UpLtAXfQZLQOqHVU<I`>K%xHy%Ep~w+f(O}E5_J47LCg=4;jYm!X zjndM*j~aAG4)T771{VX2B#;?~-ZVy6kf<btuF-kfc!CgEMcG4{XcVtdSF8bI)H^zc zYBMI4!6NDg5+=r044NwxM#=0=zqBJA-KLJ%oM!67(+TLoNys!Q+dfe!X-*)FJ<W7I z)0LdT-AAMeQAJ@#X)ECHiapA#&EpEnRvcsLxDH|1&XHNJ#&3H4W*9qHWLWVou_2^r zvF0@{>CC!}k<QT)W^aOivmIq=GGk#&Suz+`@dj7_Ma;2L7p%&$rbgFf<-$E=2c1mZ z<4I0F>>{m7vXgUjZRP-eO$xq1lHY2Pxlx>Bqu6d?f&VN6j>tw&0<AzN5N@oboyx$I zO_|VHzl|aO-ysc58r2FihY))yjSi+3MOAr>vo8R5#6Dq)R&J56G`@z#4Hh?AD2T|P zA&*zP(lrco!c&*|T1;u*46fes&`|V#V!p1v(qxN~=uUNB+mdD{{Av@(hdXR@n6rNw z^78T5k!b`!=lovWBGZraIlh_fROU12h2NbsQKy^9#r^hffg%U*o0JZPHnz?UDmc@C zen<IQJ?9N(`cpI0<NR`hG%u0Un}6T<b@#9PfD8F6e8K{Q)};CRqzO9|k^Ra!B;(XP z%zY)t0t0qkKD(FgT6LSkO-bJu&u6+IqlhT6kf64l!TGT8=47I5Q}JPa{Pqt63E%RN zOw~H`B&|~)>MJl!Wuq&<zv0n~OA5hxvQtj=-;?pd)eb0AWU5e9x{m(TSDsKArd{Au zh{;=7Zv6FG11LtwiDKS<?Fhj_lOqU?sef%qUcrN>EGH-irl%4GEhar>mPj7M0GZ&d zkC*%yec^k?KMbQhz*Q%5o=FU65?h(bP9`<$DpCLp{71k8GBS`o`P<XZY$i-esQi;B zjoMR*epwizR+lp#G|tn*xYzXZCh+YhkZ~%p+MUgMZcJy+iHAEoi<oIBv%$aO6(Ymb zO)!`Ptzn40?Cd9|?Vq2xyd2b$GIzW&QwV*^Khm@z8K;YkQ}|2a6hUgi02e?zp?5p@ z-}q~m#69ub9db78bX)A3QBDgJd`Hn#64U4TUd+r7L1hiFOXAsyyxiezJ;dtPiiIw- zU5`0TV^+8Jd>=foIy;otL6-BvLq-PKZG6GP!cf!13dTi7^2zobYR&l*8G0<}%s*Rl zen`e23?xz?0`LIq@6y<U&!vI-{-uuK__q&RQT_YH1HN!i^Wq0_E_EFEuoDs&Fp~?_ z#V#&tTp(%~L5vrZG3sA~f4AduW(6)zRO;s`F6GpSz@B0UfK8<?g+5%wxZqyT3k8e| zUVFVzn7Bwls33Qw{4R9xrh~y+;iZ})*imF5LAX`MyBfvK(3cP%E)*U>y<{CB(y3K0 zC|X=Xv><}J8F_Ib;{uW5LXqM^k-|XP1K2&?$Gu?@-J`G`c6U!PH@2hn_siO?_5a&O z7K^j1+}+1NfnR<q*z2vU{HWJmA@#%AbY}|IF9Fh}A?=_D<d1YY&j7Mv)6j$vT2mf0 zMZt;0)mVtSKqzDXpudUhk_I!vl+`o5J~yKm!3>j+Jgj%D5_Qd)?$1<{uE;XdBV29X zcX&+Bi9W?gw~vJ%3KIGpT|A^EG{cYu&b`_S29?Y?+&>kTsWX7eD$YxG{!SJO|1ybq zVk&>6;<n=h-S@%dD>j`DBNyL<Fw}b(eH!pNlF$@W7(<G_PfT~8D;sfohGV+Ks<DBA z=EK@=C?FjnT?#y-k@DD!112SxE5R%(CzxS63cDo$ufX9)L^LluIMKV^bQNe3TxX)& z78EU)UD9=g-tZ09aLg?CXbb&Tf_+vsRP+>L9(o%|g_aE|VWwEnQ8TZL2gD5hn1L^L zbh``EyWJ6kPM4np><rf(+!?<R*1`d}^YaCuY8ZZ=pyMUxPSYZ^IYG{OnK?ihz33m` zzNT1ZiH2lC#3K%-*qP!Z`V>IzQ_{~jr0#f4iu{_k3cBtp?wbE%j##JW7gm4%^A7(% z6?0FcqU70~BK&EyK@cYF8&LsG-2Uw11tvoWcMFCyvCB-sR&4$Cf9XmFrwI<i|5!-B zK^L0et!VuAhf0uC6#2v&G(nf&GrrLlr^t{$$Y->W=#z2ub{m_~l@=?%pEiAR<W*|2 z@vAWQA#Fer4ZH-6@GTTBM^PGN+3=P+hYKmZD?U3pITE4a7(l5;y-%eNZ%FbL|4DwX zVEEIOg>+@vT+7)h=f{S&P+jl8(z#)$o$TzfgQYo|9!MaorEge$dvdEl-h#i+4Y|$? zCOwNe&X~$qa82IWXR^e323b^uvkRY~Fn|M^(s1Eh<AwsTthWBLh_B%&c}Gnfzb<6+ zuNJ$cFpK(LSdR-&i~9}_O{TEhLYSUJF$QiucCjfcZWrNanBzehhf4xjk?#dU%nkXt z<4%+criR?~5wW`qmd_h~OjjCq*r+iA#}#lJKA_v%eU>8-lYPt*u_#C#H->cNE8PH| zL`MYSsH2;17ZKk;H{|CX>2&Xc!5~Y=_hy$|XRO0>m_}v-9|Y{iu+Bea%tMEU3Q^y$ zU0Tp$?2Hf(Ejadml;Z4Kr#lfkI~YBCv8VAPxxq&Q`!i(xeGv8oEe`MD<Ng+UICT}% z&X;97J1FkQ9Sm8w!n15n7)9-p*)4oJ_P+=kNATzsREg+H;%jpiJu(wBQ>064O|qX8 z?6NQHcD^1`r=Ms!fA{G_mw6SQb~T*_^0|snvFy(fzE!4iop(jfll&EhKb<W2G`5X( z|1Mv#Xyd>O43ecS1EOte1<*i;WMR>+)1q9LF$CMP)=Y!kc+@eVRg^X$)QMJK?z;O1 z?MZwfC-~)n<uIv;CV##XH0%bLaN41zpb8X`zDxKibM2bFGKO|%lN-;5cf3m9kk&ze zb$!Ff@;Y`EBi<h?XldX|4i3Ch9C)0)W>EkZVUHJ5yS@oGa&mF&%Mqj{amld?@-Z{R zwfLRy*|tIfkbp?@#HTkL4p@A0tf2DF2<x1{uQ$;wDyunAxZeEH*C2rHl!~fw831-J zIoKUcOp9IIvSD=MK3;PZ9Cr{-@!ST1$5D~|)S1IF(a<2`PGve~01iJD-B8kYA3@j4 zbYl9GeBwPy19u<J?NWIaarUb7rrBrZVC$@eNH(yCS)m+k$<4du=5mW1L3N|E{Q}E% zL1QQfQx6CEqmpb^XNtrnX18TOoh_QTmYBB|Qy00^=1=geE0@-IUfE_Jg~~q_)PU?T zMWEju<uJ=(R>G{nY_RJcU?^y&tM6|TcqEQGK@?sYdHHVV54Ci~*CM_D6qB5m0A6O= z0&)Oq(mahiyKorJx)P>76)@u5fZ$iBo1-f5OWG^7>mJc810#+6*nfJ{A!I~z9ga8e z@9<vi5P?2yTjftDGWfuOfIzj<C)sV;fFi2XUKGi9<UJ5j&if6{a+y&E0KXi_hN0$u zGok-dd$x1h5*)Zt!gkuxZt(-Efh_nXAzh0d+wGu-RLOu+suay{9(+<#soz0efxXh< z%?Gz0RO-ukpe*El747Pw4*bV3eY0$d{s2+{F1tJVWyHDq)L=pi`m55*==mZrlcD#C z8G)J1bu92EVUS(WuF=>aga-pVGfyUO(=a-ghC2@U;#G(EfK2KTy<M=8=Q*4#T285h z{mIG3u>3B1@VN^6Fnop~F1Z1o!<SZ{310yrg&M5f%@dYB*?Oj|L7^fqZqQn0dDvpv zvD1pbHuIUc9|?|tX*2D_d=29y)dv6Q_<Sm;7l;9S(@TiqEWXkLpp?v%;T_$akq}OV zu7Kz$i#BqWH_vt|e1qSDBV*a(%bUAVxmxn(<GKa;Ry;-YfcwkwaSM>9fRTl=W#JV8 zDL&Sxp0hO+%_%<?DB*W?TFh=x*bVHOAou_>R~6ZtLY0o#JMU_z@IlZF?FKWAhrHdl zqc*NlCYY$*LAl(8RQ4gg7=jbYp_+29TF70skh^lR)+pRM`ugpE*U3tA$2#%abFGTt zmoB{2+WG27ODpk4xPsxV<GmSNbE#XeD4kW(`$}zo0~CKN8ih7GirS)lV6bY(JEw=V zgPow3{PeMTwPkv@IB~zOLS%D7CVc``|Krg@d?bD7uH$aKkA)>fRDC;FyxaO^b@8y~ zbF48tuqOJ=Isf;<t6;mII&f7lM!MvHN^L|myJO3@dvksNy;~zSt+g6<CElIhP~Ga@ zm}|VbbksKoTemY}5gRpm*u?rXDa25qH-MbXG5{%LNfk~OreBI-B+2Krb0Kag94-hL z?I~XbM)TPE2X|vCI5Loysb~}3w;zhOMU*XXH#CH<EJQ;%4oAfuaBwk1^A(44dJNA_ z5P`J39lhL&rRdu*m8{|5=>~aPUHYsuqh18DTn3T0EP}4|)Z?lLBgu)aT~-1sF0u7Z z_ZYHKgxdpW1XbJkM095Ed^GKwAwFr3z;r{cE}&N`(I`#lDJ=xd;0Whq8{f~zZ~y4| zD4c1*<DbstiqVcJ;E}O}r-hXa#m>GdEn7)ZNPN1bZ>|Dd&op2oA_AEFsR-#!_dGmr zbP**`#;GIH$C9@rhRjqzwOG?jP&s8^;e=E3O{dH}C!RjdoCRoN2i={}!tVR*o4GF} zN6SPFxkoG^`}jdYvs-K<$B759dTp~5jo&W#PCI~-G59I7Pr6SKGznLtMYhV(8pXIG z11r{U9CWhiz6ru9gZ9ixsi1Fk=CW^YY^AtL!6=HwlumkkSf~E+DwkeIKB(eu1e_$< zvb4L$@-#q!Nh&fzyGm-JiTx|FjV3mRq`sfXnbN`ZaBWVw!QTx|%uhQ0_TPKFuj0fs ztO-28qhc~u{RVcA&eM1FNz&g0ei;A{ikB-41!XvS<W2F0XXq9fT<EoH7;}`}v6Gd) zF}MZ#)yK0Jjucfvt|*NVF+GLMKIt8*J|%W&97L?77x5)PM<b0g2|~LtLl@KbF^Ww2 zfy7EaVd?*<ugF^$CC$?a4nVUEO1LRBLdwWV6JziBk2DTqCu#8OWo&^5*|Vh)7SX^A zkmDxYdc?sejjW1MsZ~i)v(f>QAeO5OrVPM~4q*6I-6X9*-wTZbj6uQWaWmOG?mVb$ z#=Q9<+p(dSo=t%1Z3T7mqToUO?aJ_q>^uPiC@~4LWiNBjVks(-5=9cN$3RQBQ@a_V zpa8>%59<jUGCi-x>QmISKX`Z?H%yPYmr=hNh1sI0WVhvQR9Hn3lqtYwB-c#UtN`aI zj9E^W;6>5B%C68Bx%;vuHCrewJ|z-Dln&+Rs&i7dlo+OD(Wy+E37V50^|A#=g1BqA z-(5B={Bn$JQ*qXoAT3RbMD0f6m@X5mpr{qk2xs>Hg{Mv{n*3#B$GSnjPxqoAAIZz% zf#Pt_Z||^{fE)uwhNzS^UgQRj{G<ra0~ujdde&BlpyHrVpIy2_Gszpj&xgz*G9Ltv z4E4xDaX{yG6c)|GpaMBEvB%UhHXUF!v^irj<f9UP%n@)7uPDJd;M#N5$Y}({2)#Sz zVCl>}&t)2zM9GITpP6uguqyD{%Pl=IDAQ}Fcf{7R_*!g`JD3DuLq3xIl_3KzYWw-e zg@_GjyTpIH!@t+5$O;Z&sdS!GUt|`Ri1&;l({=uR_P8@3lE5T0EO@hv9{%iE-W^4c z9Ai-KI04hqI0tl{rZvz@cA(rx2BMJ&>OF=qM_$|=t6yUp(_4qw7e8U|=l)2;K!~|l z!|CnR1PqFtEF}6Ac$4({9s{(2Xht_%66C!Xp*cR|Oa3tm<$+mp?R6vkjIJ;Q3$1X1 z32ij@G4uw4Lk>xKR7)DwjmN0hQOr8~UO=xwHFL}|8cx|~`6?$5M>-i_05V5s9NXDj z-*{FWVqzMl9SEICJ5u>!f>=@Gh<|=4xrJ$AHES5J-~z&-C5sD=8ZI)0yIfS*G4van z1QBD5;W@Z^jwW1`NR6U7*wI#hh0iNj<RvbbcK2Q-vlc9J3}b#C#{L-%FYB%#Z%$%8 zvSQmNgOru8FSdz^|7Q>erT)p8Th=5`-4&O|Y>#u`1&%h*W@chH!7o?(bN{ekOs~yo zQLQfJ8i)g-U#O3ezv27`Y4U*HsMj~0l*5WS2Eni1beK`r<>Z<amAaBi&!$j(fGrm= z%5p)D3)Uy1%3YhO{<DE{H>Ia)bFcllo--9(-`JO4_V6|0qJ0BM3c3oa+IE(30M6h@ zV!f?Qsb#zq=Ng3vT^uX~5EBfL$_2Z;p)g_#DLyOq@`?Fz;Xq$BCh9txKCYwb`J^rA zX0ll_By?K|V@5wcN9;IS_)xDin!-dz2#OxK%utq_NkT^4nzQTj&8Dz|1=tY+ZxIB) zdOJP<7aUVp8}VyUtGyiEIY2q^D$#zmh*k!h+Yfx6@ejkZH>pZnCo}$GhdQ;v@bC8j zaFSXdwJJdGTs4BO8bJ+whLK!PpjePtyDSS^@iv05G6kUhls+4Q97Y6LMoW0~y#-MB zXA5Zcn}WSjn;;oQV(p4_Qd<~VKiOg`fDcCT$#L^}s3l<Z*mw~>!QE^r*(>Ge!2csD zioXJ^`2o-ft*(N5L*y%$M(8+)V<hM2P>v+}OpKR{Z3bSjYGuIj*q>g{8|(uivNG%} zrzPQ*0RMavkhu}Tv2C(}{OW&rqM-sb&L4@T4#KLVRVS-n0NHG{j^Zd>L1c0yFv)HX z@S=O=(7_ncxrU?7dZm{rf;0bFec-Y`XaD!abNS{+oc2c@;U}8v4;c23zcTKQwR-Tw z;R5Gv`k&d4?^Vjy=O7S9=%1NxQFxf3{>(u^$R2-YYBW~#I<Se%xGmekC@O<+vIq@I z3;WU!qu>`eTpjc@8D+B2z&_u{d<JEb-f9zX)%RO<^-ji~-hLfHC16uVJpjm^?+d=L zY*k4D$sn+E4K1UvoKdas%gs&Q4ZK6!+^8`)OjX~mF3>wGL2ln%$~BtIbX%2uds`W# z>owGF0Rge1lQ*9V&d`r{G|K1(VAWblFSj=8`euh=UfKgF^dpx)o6!>Rtq>=;((1Co zpj{v)b&}TTz&8&n<wa{i4o;Bf47ef?fnSV3d}@58;g?^`y!-MiiupC!CH3+3Xl~(c zA@E&HAjQV32?v~LcEX#T9HXNHrnJN3hQe^?El*+E357$J%c*Uq&C6TXX$vxKK_V}@ z*udb1O2EWulV40T*tXjb3TP}Wd*0#+-K(u|i%O*I${+Z-;Q@^TA9nqMZ2TBi;4bh9 zTa@v&kM2|(_U>bBuG?qJXDax~OSt2!+kJI-NkU&xt>xFybo099tIizlCJlY9Q`7$C zYuSB4pMsyG-(JoSUhfuPYIXR!Z4T!qx4VzaX;)y?lPd)A(=^U6@pb=8soi((9{WOi z;KFBprCrqDyPAqfmo21SB~M$!oz(Jf@ZF+(usSs00Bj{6H2x52NHb`nIbvp&SJH|m zfuXq%YZ&7yUdIzDLs$=u0R66tbRAkSx0bnRP3#<eE7%jQ?nLeP3f?#LfaLx@(ugi< zgL3^o_hoeoEdqgGL&FG=IQH<&o|gF<nV-w{e@~wm*agLY>G1FVE}b_T-ri2III?SR z??fKeWt_;&FEl7(92d?QD)OSb=p$n^xOhf8l#rbv8j&Z#Uk=fKx+ChhQcqh~WFQ{d z)d{Z~%=kx#>1K2Xqq!La_MQU3znEvTLVmq>Rxf>^RrKPO+*Nk)qRAbJ>YE3xjx3b^ z)O<83i2hUpwy2HX9z&Z^i9MeN1bP!J3MY*(R|(wUFFQhTXxXIvsFD+Y(jP;5!s`>> zUPp8)UHn9p+$ryX0-6JPIONQOEjSVs0G~|xwLnHj7VFs90e%Cl$T8s`O@b|ewLjVw zlrN89WD-X71NN42M68vf@l|mBC^EY_EvW0!ABPzl2?)4&2yaA+!r_Wl9z7pvb}tm- z=y@(?gyfJdPp9U@rf&CRqzxjj=@jJ;7!K<6eM39L4R8LYy}!I{h=w^r$Xjd_W-4Gg zOec8_kA-CORkqZWnUuaZn=R(`fKng_te{85R5XkF?H>+VW?)H1o8SIn;IU<9lUSyZ zNv2lZVDg4JVJzokXbxVKR3^THV~AU9LzJ~L5T*RVw?6^Z!=^KX&G>J?<|+`^p19fR zNQtN@Y>{EH6fMjc!kvVMPF&v{8ZlB^nUQUz5xrS*x6zpfi3WZ!*-;@~L5GNcE1x_B z@{S+P%x;vDMd~*=2U<21Fp@O}h~U4sP`<-QQ3r}<$@f$SU7iP!`W^fW&O7`LylhUk zxS|1M?X40k&t=?V+&kWqULv_uR#601L^IQ&?<ER;*=l}aeJznoOQ=`W@=XJVv#Kyx zC1aHzb}L+`WZ)~R;7j1K0ap|>_#NFUe-AVoM*^jLtEP%r&P>vqZ7f>PJ8JwLS$szq zLZj`#>W#Ahc2Sv~s;r9&>+)G(76>aQpo<i+wRa`DPghVlort<?MH`Rf**_q~Q_<21 z_nW`xIZ!l7cCT*Dq>N5w-I2ekUq*1Ix)70%yH=)!rV5RLZLJ?6&q?iR4vUzD8GOOn z#{DaNB_=&$oHhHN&~#X|OLG<&XpVF*OwyuA7w5CEOF?C~^;3W9Q1;^76|s7jOkx{Z zu#1GrF}dE72hoT*{4iSv6tG|N0VF28Xy=M}^Od&{QH({Ok<f7s^kN8MH;G1?w+v3< zPjRrdE+SD?OQ8#~g{6?4Eags<^$aKLD4GLwLSgp|AUg%90e87E;7_&h<w@^PCF>cv zd5W<tQ3pRt83U#{bG@=xt#ei`?IL!X^_v-dGck3333hnL)>NP>5Kf<4d;i=<(@(MN z&%CoH_)@d|iiY`>IAVMS&-oGyc+QmdDuSbz$ROGX9Q-D6$D^n$w|?*n9{CC$`Heb3 zfz5vLmA7Z(0GQa!*Qt@=GGXP_Av=j98Lk+fY{2nOy)Y0za~A+^{32CHno=(@<Sx?= zya863yaO<{>Hp9KUHQg_dB@_!U6TU`AI%uJlhkq7`qw?yzkr(CIRY7)ooD+fyN|rV zS_WVf{u#k44HJpYiEEngm|)+ti09-UL0W*A@f&=s9cB+&5-_S%87u)~k;gv1Z)sG3 z5POYo9v68m%D&dRDv%N9n_s9>^j%I&tcp&alhk4pP2iUSvrftHs2H#->14rY#;3jJ z<J79esQc=1B^!V>R$Vae;02)7*3>5f>OB~OFYM$Q@J%+|W8qYO$iyAJY3BvwU?!l% z1=UEq`ohi`fFg?V-1wpluSoKHS4^a`m&bem?(mXVMXJ7v0t^C+z=PnGtkI--Dz>JT zbc)GQK&mJTd6MkuUN^!EG60_Z<tv5zukd=4yL)p{!1rc{o<vOR9nB@-6iub!-}_{3 z2>;3c{_Bvo=)O`UZ;SXV(u`@3=^YK6^JG&1w?>vvzD$u}2}V?Tdpc*opUhSP{Md?t zZvvP7j5K5Wfx$I*c0{a_z8oI}q$_A?-w3aGA9Q*V&{&b}_>jAIMqB^u<aFK;VN1&q zE=PTO=gB-!-~gg%RzuHP*wJ<94hn-o;|20Mk(!eOQq#l%rT6e<W3XF27)2UIBRn2n zam0|7#I!kDXvC27=3mMzfIDMeJUZ|$bf;kuCYy&vvz;7$HRCcT#`#H0gb{i*ju!z~ zQdei-W#)q}DL25zNJQH&7Lc!4Wvp1)HRKJ0dD$aDe-rqH%aMjWxIPh<nwjLWIq<?J z!$;l(W>{%*gw!}B!WLB?(FW}-wf*DJ7Z3_!td)3HG1Lzg|9H+{Xn$kIi?fD2)qd)A z;B?uaIS1P(L`WlsB72akVVVjTz73TfV%%jl1+EI{-20+u0&e}q8z&S~3?dT~OMc?x zlLPLj9dt7-0eO;tl-&msFeT)2`k-Im+c0vMLBa*92IV`W-!Kys`|MPXY!?-k3jo{K zv_)O|Xf#uaq?i5&IW5pvFvL(t=C>%#Tn4D%Dw8=voFfgpXbj5F3@<F-W#?@D50HUl zP|1`m^Yo1(^TRgC)3TvsbV0j#lcsl^?gH@9U+5Q5xZ5F*WE%tW#`*JuwdU!2dxpqA zt-E;6%H{0c4fNL_^{Wbs-<4DW7nAI0`-w}}72}DQ7rsjC$tC#Zz^kJKg8+i_c^w(J zm$oU{!!=i)=)-lgD!~$G(Gq8gmBWf`WVL|&0hOW7t<c{9rsVAu9}-~8Ujg=}fQN#& z;P|=ozJ+SyY<RKj2S1GUY~R)g@4L^xgfTa*?_Tor-uPxeJ|j*4A?9zG+kYI_8rDNC zg0ny;FcVB~*}dJa#nna*vcP5}GpuH<b_d4)tYmT?4f<>F2YBuO#)*tUe}PK~%)viW z7#ARQ?6nF5KApE6xD!fp9r@g{AvVm_*z{efZB7C6K<JZq-k4!qsy0dbF9QEfTdu2V zTK-*Iu6D4peLI+aO0rIm3<KXqTm2s4!RE7|G+k=013>)5M0dTbG}QD~wJ(4=g3S6@ z2sVe-n$D<5d|^j>Rr?rnxJ*052V(c1eS9vF**hY-+lXK3b7OW-GPvgyg5-00%J$nA z$-i;ruF@)JKdqO&PuQaZ{WZM%yE%OO($m{J=liQ+c<%`Ly|Jfvh^X&iRAb{KM{NX_ z>Jg7<S5iDOfnOu0()Mm-Yvkk&!4xfz_SrU9kjY8<s1qxvEnHQAa9g{W7y$3<jW#2_ zxi8y4c5)z1ZVeg0z~JVJIS;fSXpOkHj44X_f7)$&uzAA7|C7Ib<K`c5`7!VbAHYCk zz_s1MKnvj+#c<|j)s9elXWuv>s7zbn*Qf)^V;oQh@&ui2>uCXUk*5Mv0r|Vr&dcGP z!wLn3L&HXIbnyP|-z!;9cAMO2r<=pa6J?kW?jxhta!>NI;9L}}WH`A9Gd4^l#4V$+ zN2ET!R$@BOZf+~MwMp=iH3u&N(uFpxx45Rs?hp8~809s;m%Dur#$1drsKHbRjhven zz)K(Lv)Sv|Ad#hJ+^L<u9vg0IVB>Rat__a0Ra64a&D|?t^2c>R8yfTh-UP_~l<O=F zAi)!ActW}+)YHTU?VC$77=;SKh=4ldXJa#=l&1-ucKXbIRkiI1+eE(7=fz!MCEKWH zZO$T%TJWrw>;V@+C}~twO=Z7$Bl^>kM`yH=0W#+(9L<4VT{wJ&A;7({wbDOr<FL=7 zta^!UK!|KnOK>pCtP^<2lGKaP)YMoQ)L3)yEu)9Ctfj#YLPaSk9jDEPA)_9bT2@H* zs$61ycx+a$;dMY?cUrsp>XlGutp`%C#GCJV*|XQKz%Zt^z#qY{F@4}_8i8u!yE%V1 z>SKKcKH7j<QXF{A*mZ^o*t1dpb?Ru;deoR=%50ERUW4;y3U}B501#?L8CDLPEl`~= zamap`Vs;J4D&XoCuZrRtFt;n6G_4Gjm|oHBquhrcLA|^ndVEDXiklYYWcJ>d`qls8 zg<2gz43#Hian;wzBgRHyKP2UO@CX#$ID1YCzKRlWuj{}>Rpqyd1&}M1ONpW>o=O7R zF)x(v#}tLGQ?g^6k_DpC=4@wMHW0~R)_BIJf~$O971*^Xrb*szjoe?$Fuwok(#D2s z(-uDj0K>6W$dd;?FV4|YNaY661y+^9&7`(b>wp#fAOFU)VwJ8=U8i`&lk86P$$M7~ zznviM`DD+O*+H$=<URufiI}S4w8zVaT~2qDcP;{~JHvGcw-6?H-wb{Nwn&L-3$eO& ziqSy<$k$>r$G>dwcY_Oj<)sd`|DS;y-4{q+S~vul32f!tfhmL#G=T!L=p1!2e38Bp z)<}Zp!vl~;F`ndZ#y109-TB&+G)VwyTs=6qMR+}lKU`b^m}>@WW%@S87O#N;y=l~o z%8mESELM`)^fLQj_A~vX-<oazBMGCJjUCv95A3CRyoo*LascT`5(v{I))2ZJKrewe z0E3M(jXodR8$dEr;CT*LpK?S4C20KKfLqOI*mk##m->uWGt(URU)5mF_=jj*0Vhnh zM5jJeyd9S#vt~2m`ZqNfYmnt)!e8-w5e=Zii|>()zNRrUwJc{8XtC!WES@qQZS!|5 zkiZM%?=qnemiK`?s<IJ(U)v5wB3X6?i-~_`gyh>@R2NgibL4B7K-mFaVI6T<N+rGs zXY_e@z19jtB_6nJIFRPFftL--LTbhpu0D#bcd?B1{;c2MXsO>ZSbl4;{N|wejV6rR z{El|@t;X{mP3Aj>=%3bI|4b+EZbo?(o#Qu=E2%n#>kI;A5(AmRtO#{x+z#BvMWY{= z(dz%fWcl~`Y4b*mvF{0UnQ~a~58L7Xmq5RlBi@cFd_TM3&fId$8!cvB>5to6Q!2+! zxA)nasWX~#bS24hELbWiM_e7`l)&165qY(g+o?>O0XVf7PNr;MPEZAN>SI_%wlY^v zh0e-Iz}I{Hd~eaqCxz;KT)!?{nJc_^%V<aQk@V%})@X`O9TdJXV6<;Y@r}&1c=6CE zQi*$V{xj(xmC|7j2Qy9VT5wNNnSvrsg@G2I_7zTli;Gm%7s|EcO<4}Y1SQ)c3acd& z*yDD-qU-q_EOfERNd)1GsD(H1DYaB7D!PczLDvwtf#1>Sq~WJ)#|VX?2WMam;2|3- z;b9R_*skQ_=#>J689|9SO9boe%cBw_Bb+@BUIbXIG56k>{EZg-x2d5~6ai-60o;$R zp4vZ-85+VKNkx}%V->{q$Pc*f^uoY~j}1D0nBY#A?Gp*%M}+UyZXoPsN8dRATjCxb zLw|`Mb=l*1u+jA)6C`I#_MB+KfM#ZR?qq-_Zx^4CFesnq7TknV$(wP#8EMA*zy-H| znAglIz-1nwv_McUsTRz$imzHR<MysOT<9JIzzum?4amcl9!9#M9AD9Oh#-_V+g|hk zUl8OAr`=9F0hsjiJ@5@O+k0p{V=tt?lB0n0Y<taiYH7q2zOdg=!Oh--HQ$W#r6|8` z?ebM%`i)}#8Cm>4{6-*->Hp2LVlY(Wx5KVAmLcH?L!oK}sC$h30MJM#GVnk${qm}d z!asA0<*33}`uujJ1qNC;sl4CIsm}5{P#=Fa-!n>cFFYgqc57RovVS=Cp{)LUrx|g6 zuTVIXoM#k4sK!U0hIK#}Aey%sMCTe!xUJ3S%1;CC77fbCLXa%zG9fLT3mQOF<t7`2 zyeiBpvoAt)w1%S_INr74P8N{|PH5=?4CHY-a-+C7qQc1Ib&7B%y@TSgBc^0ne4E4m z{S=)64A2H@)6RhQ@^Smz@L4$T%w5i?pzEJsM7F%-$W^f%;7L-4E2Thu_`VAu#YX#> z3&g{UJEaWqpcClzINQ^!LNUm%O7NOWnZ#|UWY^DD0xmoy8KYz;vBOE54u%#OEc#4z zx+rkmli^_J3;HDnVR=JT7&fOI5oGNH1CBIY;A+ulQPR}5p=4hCO-_^lCf+`1;Dql5 zzWV}^lHhl{FMLD?Gvz09`zZePj8r`t^HZ5~9mryjWLEbxN2ZylatJILbHaVPRX{rV zUFv)p7;pCRUEp{YxY+xbZs3Q%oV28fLC-l=R2Y}fL&`jWjC?}e?k4vbD)H<R{B8h+ zKQ9xG{g(w70$1tH*NMx5z>JWUF4d|ywf`HqlkZKIn{lOUV@=rp8<1k;h#qBN^zYRF z_TQb@l0yYqz?h;Fm*O3bG)e+4iMeA23h~E)$JXYDJ>FY^Z6;l7uStylygIkNHhD(y zV3pVAa^}RU!X^2YfEK{z(=vUvURD3_f~|urFbTL)yP+0tTc(M(+Zu4rZ{QquXW5-e zDe+z#<(scs11SD6DX38ajA8PU322tgd~I|E5)q0ZE<L(7ESx?{zb}fiD9e0K@Y)Qw z?8Rafu195cL}ik5Z;U&bb?|BjuRyfA(HmAxu6{}MhlkirXkHHJ%JwgWe6lXYN*wt( zBT<;jX}Uyxk5>1W4gJM<fIbXA_f{LsdoNp5IYQ0*Q1dRB?57}r^4`fl6qO>2e%y-w zmc5}CIVtE0WxILzTC4t)dO<eEso7aGCR12C+cRPRKV#nlCfik&S;3nK;UPwdi71Bf zesrkruBxu;dNd%0L@+$W2+E9xa1$ao36q;dFmcR?hCxt35E(>eMqt3f8HtD&K?fMg z_yLMDJVnv!syeq$SDka}ysEq5R@Irc*1y(1#mxA9-lXgQ&)#c4&VKKG_Fh}5Z`7QG z3uDO|ao!{oQ7vI~&Db%&6!6ysFeX-x7ZG|`N;`W|dScXDGhP=7`z2qjnU^$o;?p&! zYqWe<=Ye9bMJSffOoRipAhBhFTsp@B(OSGxf2>tImYutV88R=<4uH9**-9)_6Lpe% zVQHm462pEh@YD&!#{6}rg6AANBVkat0HM_95y>gJHAY%=M!adNx*~)f!hM>~^?mSt zjPP85=S5hkjhJU>+%rp_j6cCJEC4G>jSNmQtaUR1=3%C9Hjku064-NyXKD23v2RWJ zJkClsN7uvadNbC9E3v0RIS0xhetDvXSU}7@`5-a#B!j%Et3X0S$BdZW$VlkOLdncb zVk3!>)ci@!WNze0t$YiMCvSj_8L#k|c^L_7#64@oJ!`~?gfNjI5`i^)-g>j=t+jKW zYs0))zE&zy;PEILB<xw7_^NSF_^7Xj5(&cG(mYNKQ_mS?DxYD-Lo8R9*2wV~Gk|#M zkj7!oOvAP@|4c`qi~#x79OVO7lEo<=rKe#C9npxSabE@P=oWKC$yE(zr2~sViqe$Y zCQPA$6Vvs6qyC!ly7{`eqkbvj+#Qwfvd|H4x<*|zvb6xSaNS`UU{(f5G%TrOe(9|A z3@s+8Gc=NvG0;&pINOWD&KYGl4Oj`LOMXHdstR0rMyHjEuRjSqW&Rp7TLk2$fHPIx z#~3*w8%D?)@l15KqvTHA{g6UK*hXu%;hL>@Crn6`_DwJ<-9%0>n)8=Y#f_Qz6srEW zS+p-|2nAsk4W&JbtfDhf8>{h=wKkEpHdt3PL)!zupKZOtBo*&`&&Wg@B+!{NM5hp8 z7}-~W(pR6?>AW>=<`$HWIKf6GHE+W*T)m%5>B3CCv6GF=uc-8PEiSodep%xeP1i$+ zEb$^sGX4rGZ9CD4S(<+fF<+QZ3kx%_%#DH&N?&Kudc(Os=!)Vb68~K@#>`CO(ge~n zSDWc2P>LIT&P^_+obhN4%_1>NY@r|+c$XuvwE>vWks0bhYi;nf7U#9$QaM@@7MAvL zX`h#-IZVBg)or5ZO3wXu?DN7nuK@u9U*628NTK1u^+^k*XiPAxpT&IJ0{xDl2g5N+ zqKH+pFhny${+!|1HW(657(ApnO9L*<*;>}fR`}W4_ziU7XkMD?yGJQ9A=1rL#O6{2 zXq=PF>aa3#Npx;B#RWe`Hf9Uys_2({kww810E{e_2Qo3A71}oyM_8PkouS_Bnz+B; z7hR5gVqwlO7_#<-R48wQj(Nu?#U$3tW*E7+0}C}!3{-$?wBU%N1s0p#C`N!##uv+E z;3@z=VbVzC7-B>9U34)K;Di#9&>I;^g^cufs^O2IJCRAKR#*axb*C@k0D<tFk$?M~ zB%+gQqy}ouTU4cP?JFJ|4*Ce=tUoZ+YnJ38!1|8x&~e`)3st~EG>%*l7!W_-Uct9? zA%+j;u`V1iMu;Yko-#=c?S*Z*jA^d8oI0`qk(3@;5|084z+&Md5jmO2?4r^V?Y}S! zKPtm_Cq0Cx76u=%FVr{_H@clpn8XZ&I+~I8@hj_OLe^L$2}n$dXJv2fO2!!L7eW?F zvVG54`|6#ZKN7MqqKL9Sc1}`#PK_Xy#{qJ3Y-u^pf)Gaj2)`nyl}qauk2m#7oLE<$ z80{Hx(GXZ~g%S<I&(&ZKJQ(vFKyf3svn)gcEig<ZHV1lNtFgoxD$7hRD{V8G9K^Wt zNFat#7-@k&2<K*&3^X!AI5s@pItA<-!Pk7|DB2TLMAdb{R|ezNCRX|Ni*a0T8)iC2 z%JKR+|KiP5OML8#!&DQRh6Rv=ZHB@}Eijt~)=(0OlpsXw<iQFMEy=-1+R(ri!oYkP zdx>HSRG0kuhGD7zS5^>J`)I5eoB>B>q9Oq-LN5MR>=;uuPgOp~bF4A(70fy{GKcvw z0D)*&s0Bfg^<6YHakON?MoiXZGGiJkYRlnoXc=tzs=8;0Sk((Pr9#Qn5Vgp1Ak^4v zK7`1^5OLuTRebFwo)WlB)Ma8xoM<=+(lODRo?zl21Q=wJV2LSR6{^CiYk8BjY<g*S z2|qK*T{LRgr_8g9{YY{oRZmi_;Hl<RI?p6&({uZP8AFEhlnqg0G8BtUOKqmVS_-nc z_$X(w74g!U{35)(Khz~|<|D@tK;G9fnfKMx9F1k}>Qio2DCdH&!l4;0)tjYxvz(Sp zBA;uP<Y*^z-;4u*hN7BBgu!psdlc*4Q;Z3mB>I>tW=;?;Cn$$`WbZH^U@2Ic8hU7z z<{H5{l4PzaGPfc$$M{sp!q7Qcn3ZAxKLWK6wDTdR!;iU^I2=@Gr1to1q&%}6n(Ky9 zV$^UdJ;q4pxL-cgkEZCcH&PJ)<;bEuBWlN}A;<c*Y{nOJX`}A#%cliFkb(Yk3+B00 zW42I}MG6uE5&#Sb>K%<hVPMbBd)1g4+tpe|HiVc^3iS0EbE(+fxg`woQH}h>oRyAY zgh*a`gV2n4v#W|l(~>PLQbbc@tCAhUpP{-Ks@gARv7(N1ykV?DI^YtFB$d3WzK{&c z=@<3M8*5^YWvxw-5@d|gF(CrOR>asl7^DAHvcbd*^w~<FD4A2m`vUktDO5UhCMj^J zt-R2<WQEyBr9D$M_5kW@DKmF|%u7Rg-@vn8ga(6b9{3hCu~aRFJ}W-}TP4cO$XwHi zJc7ws!GpyFkEqO^_NyNHRS*5D-V7Fdno(A6(2085iF)WXy#V__K+Iv;A9_JFD0yid z>M!O5o*v9%g4DrnU5o~5ouX#(Q57}t6(dC_xfHYuj$^y1j2AG)3o1as0{}eMLS>z^ z2c460-@-s6TShywXlv{2xr~l%M&!-3=M*B5PBN=w*}#*6D4nL4&E!|!Sb8@PKhn;5 z+Dmz^GxBmIPA<bN*5ScFTd}W+$yZCo$^sndP$h#5Y7y!))X~NANs4~aK>5}{`PK;e z`ptmITte5NbT@?(yg6TmBy&+;YqCE^kM5H%0+KGix|HJOqdW8cRO5qCCn_@$cf3iT zD~P%e?0w}dg(C?h06fzN)AH(<<<$?=A1&#Apb|E2^2>s&E<(u?AG`4weIqH%5fAKR ziuGz6QDPVv36*$eWisYCie*!r5H(5F)eOIyI5Sc180)SH#yQMY%!YTud}Er8a&@%@ zklK65@h`g>G?uvojo8q8`6!RRmPhCoB+&AZ7m~&EzJaIc1EqcoN*(f#)C9e`kEIcU zSYc!+5hIerKmy|(_s}+|x&~R}A3cP9d>M@+?2HGpJxF3k(&9z#k~E`{+3VfycyOjB zF~D8FOhO={AK3~{H1g#0AraOdih9932KuF$RYjcWVSqbnnj>8YiOR)}Xv7-`B^qE{ zS7P|33m1`Fq=?EzifBaTO4_<;WVSLvkMwE>A<{1}L8^>-?is434poGy*wi-@MBc4O zfQ_83$(#RLts+~kV4@h9=YhGhV6}~oY^1=%*`;3KsEb3aa-NHpXK~@%GL4olwDl*F z1IHGoE{8;8yCa8bXenowfqn!O%BS9yAfP~}f|02&0E1;_i(nCX%O;YdlSDVefNHYY z(g5%B*3%E*h0&;V6+x8_s0vI`UU{FGp_ywroR+CFHNU1#UK~hannsogQ#V75<QTI6 z!U_7;8%Keeg!X8;$%>tg=xU<-+5k3jY|S@~WU%IqlXGE&W~FUFP?nOwlgfla7vxa| zv0xDeCKs7^Hvf;x{vmSne_~;2dd^ipdF!xD2T=9fH3wl?&%@I5a4D{%M9Kvf0}qqD zD6y)QSUs|Wk=V;8Wj-c)k#Vfs?*wJmp=3h{QZJ#|f+l^UZEV?=h#tbj$|D`C3Ug8x zww3ZkzpFAcqxBst^q6QB!Zj|8E-?N)t{$eI6|n?;6=P|Vd^=S){Mpoa6u@3qEuzwe zP5mP`%!=l$ts!=~Alj?>Hv~xklHoR@IKvn*(}@^i0N{QmqXu7WM|j7~mZP(g)_x}3 zzcDWKdEpFnc_16fd`MtJ^wNnRXFWxgvc@~(b{frDCatlWm9_|4+t<t*(`>Afv!!At z3q^faFR)0F1uluoN|d4X&So-Q$PyV#*hg>Gb0ld(EKsY^&_qIvBZX?1u5b~H-~iJX zKBWbZQawwgRJ}+&u}#@25=FnI6OnwDiA0tr0LZD}TwI=$ijlz!^&>~5F&45lsVrac zFP2iWV|=1kZGi%PeRSpkLO{L03qvztJhxw<b}HG3&z<Ej=YWlP$uG2&UT=wxe;J68 z_`eKAVRO8~K&03guLL#-q$ml{lMKQ22EMq^b(;cfG)bSDVoHF7zpD*#*9UQ5bSE<5 zS58#nj-Vtyvs5593DyxHp!OLQ{ICu!89p$Pyd|=a@7lzuyj&%aB4lPNJ@Ahz@8b&$ z%{jJ*F^Nlp&<FU=nDEIYlrW}n&rJlxnH7i=(S_18QwH2%#3=72ikAeEKCd}3m1G*l zSZO47ZX%`61o*0$9H}sl<cfA9Rou6d^fe5EiQLX1l-K%&K>v=>)KSlwMj_ZfV#h=- zoMGyc*&hu{>hJ4^NO_pVky3YZQy$hR_Tw8(9gUo+YB$1zZrSGtRU^Yx7mSJWc!1xS zr^pP>d-3^T_-!%a$85UK3(WEu;C&BJ_6~Ar_#k#JRFKS{Xsbuep?E*hZ^}H#8lYG* zNkQfcx?rr_QGd-ivpk=o5KR5aNK5w=i93~AC8!mI8L~;(1k8@TGIyT(>gimIq?~*e zn8VXRo!EGZY2>I4j)Z!KX5eh1u<uyuG;&Tub&@*YG9$TG|LM7blV9wkj4?r~vsy;c zXpp$8M3k*@bv$xLf%&~~p%in^rA;x9jBE7>T!!h&026Hyg1)r~IxJ_B!j(QDi77{< zj0FQlFIIqus8trX06C;-8AJythe3h@8f5B;+$zGjbU1|vxJ)ELKC<qrn2m*StriYD z<P5>Ee{4+D{s^5KiB&imIBG3Li0g@%@NP38jr@jlJh)1TPkiNJMPZTH@KjPj22jM# zqEr)36k|gz+~HYIMSOMQ!yIWD`iX*h=_B*BK!u^SgJG)8cbG;lR#_odRzO4t4q?RF zj0tJ1sg-W#V#7O>?LC!Cn#_2w2)Thzv8JA=LPEIl5Sbbe&sk3rkNPEpyjFLMA#3@_ z5GkfBM?GMw((<OV6D(2HNQv&GPM{)*Adk5E%In0^I7!Kl%XW%Vh^$EziuV&)Eal&! zK8+L+w^UOtMd)dn18M9Uw)C8}TiFP|;wBp*)iS;ri(o46Lom^|B^szrs_sJxCXcia z%8{J8B~>1qL8SdTvjrTbNZvd{lyi=s$jtkx%g#CLTN4l=-k_fJ3$ZHL`M_gyS%XdR zbwxmPlc^C)i9xBgnfcUVxW+~$9~zC&<$*?yqWK_N+DA~?X4E`h6Gc5>R>mrFvGV0m zDNqt{;M;ppN8*@!BR_R6@g6WkCJ?ij`DJkaT5!>Rg!e5<FN-u9;vEa;yl`(oY{sXw zjZKuUxi;Uueg4QS?Hy?0=%S=xQ1Hm;oCu8^T@>pS!k(P46k^tx?j-n_rsxdJogZ5m zzWJbcZ71H)rrJdPG4_=tydcQGSP%q(%*af5EDqR6JZYHex4$o42(#g$P$nZmkU*K} z&JZ@^r43=|MTptxPw2FmD)mc>Q6{m0^L)VDFok%|C^9xGePn&z{&bx$+(Y0V&N@%l z#LGdaKCE-2$+U1Z=$q3C)FKL{qy!7NyG|WnqnS}}WU?N5L8Z<<Hj-<)TaO^r#<cXn z>iI&Wd<Uv9Z{IH&w@4n>mcDysJ)5XBQo8nHY2V%}bCJnPM{_4QcR4jLy%)MDxuo2| zNC)3w`m(~o)Y84_!P<)+%xsM19mI&m0S*Wdfix9Tq^d9-eA9z9#7a{~Jx9x6Ql|li z9&-FrQ>r1`ZVgal-e`?F=AxVXqc!SSY0nFoa|D%@qSRvrnOtftPfmPkic=GBVp`XQ z&a@^^OyRmwCy_#>v2w?x%kkXogPGZ4t3QbOnd5U?qPqon&3Awt5h625N2@~5#7PQ) zU~ZzhlEuI?Tc(ad0hw{58VO1p37W^n5>pIHyg;KAU;~4Z4I$1-W|d4Z2JnJ2;y9d4 z^>xECfx-#Ci78V<r~D(q2;9@%GfGM$EuzBV);8FH!DxV2jfXOhB1D}f%n~)wCZ9%h zQX=A!pQ5E!Mz0v3wV9<-b#k^}5@Y(Ju?B>;KgP|7LNL5yHqja`)U0P}Z6;IS!|O-; zfU^qy%5w#^_!4u~LAaxtqn479OUao=bB@{@>zm`X6YU|>2w8D75s&a8LJmS%NA8Ob zUV>pi6)p8f!Fe5m2irc>W)O0}IT9<^gDOoOH5NMi1RyCam<W;LgUaX+wWRq&=dIQ% zUv&;8JZ^GCkxPkQS|TXP;;Sb8#2-t#2y7&N**f@EuzgpqeJj>NaCAbslpudSwyxm& zlK^jLcS;cRCgy}E)GWjpiWHO5XpKf@9Xm2|th7uW%anPsBYsrULVebz#4j5SqZYPb z#z<daA?m1<IJ?m7+`GB(d|U{qyrijPg(H#<fgDRF#3+<n0!Jj6z*qY~jYCB>#!?8Q zW@BJi1`36(9^~OqCX(@*rJ+WUO)SfmtAIQh4K)cuXImBt^t(PT=p{R-t|vsJ>&G(N zC*ZYMU+<w${9?cxgOW*~CxP@k()p!Qo}x|r`#LV?4>(%1bWvV#0xLvBi1;l`A}p+Q zmzbFj=Y{Ifn|Udz-ju=XHhZBi6j@+rVm_cb79yYTiH=00w~-D0lwd1YQyT1_feUXY zl@v%q{#c!XY$Ty5_ZAQrLMD!x8ImIOP0Dw6{#m_Hl&Pc~qliZXZc467BH3XrkQz#g zM66YkJ5D7VL@;EcS-z;CH&SB~*qRJDUN$OM_=L{Q&@-b_PNQY(eoUg$7LjyofnfL; zYY*#OeQ*SNX_#pgu#_n%2KuY7pzh#i#yx@@Fyf<2j%_EZ+#`u{ag_6JAVHLNoI)Z% z+;d$th;$i25Dw#YD`{21;9Px|;aYTvQ!F5wWQTg6D>MD*o<zs{Smuq2MEYkw*e>G* z5KX!nZ?Tr*KJ#pPKJ))CCUKilrlIV`vhSHcUB=Mr2MVHb0+Ap<{gSWKq@<~%>ke%a z?k=p7lctC=Gx;bBW`boW?|4#Lgs_<PT|8!5Lgls~^917x;D*czOo)f)DfZP89`L8{ z1PZJLP<m52Wj<0v&6Cu#S1?6ai7L7#ob>~fpQ+z7bH-%N^4q8eH`5Q1N}b`vi7wWt zvsMy0KQ$j^mx%zPl3P^rGWZ;NwUlY#E}fW7oM7oXb!_3}lz7f*<kBK9qn4L`&n-H0 zXC!NB1hR&j$~rC|*puk%abh7_oYUBwN_AGUO(YxQ>c)~%&Mz^d$mG_atCDQc=UWK* z%fGDQG4f11!-91-lFw+_)N)f;3dY+17;sF`eNV}(5dzU~Y4+f`2MohOy`f+7iKDzV z2b6UyJMkgzM9>Fs{UO5qF$*vr&cbpKjFrp`T|G^a1rm*_ZsSO@T(%o==4Wzz8n8hi zcQqxMwm;`kqt2m1ol7LDi`CfUPY8rujh5O8tn`zAQVji=JE?*rnfCj<O_N~SKajTu z#qu@rAm)!9L}LEcjpp1oc}9nQTT&qIi`a-0gMmgS&rSLGA?74Rm#|sFM!kS5Kh_9P zYkexk>9JH#kEMEQjAoR4lLQGN!v&KB#20&vFH(sW%&|bBY;4R|_cIkc$~1V+DE`GO zO*zE{jw6tvg4yFN9kT-%9PCSLp1On-I*HN@Y^q@LQ_qNsh6<^ni`fjI7OBb~3s{7( z6)#2qg*Kj(erg#;Wi*w{oz5WuUvw<aY@+7V0%%D(U8sRHv^e;~zY=bMqz(Fz4ZK)i z1p8lrp)q8t9tTVDg-rmNZ#RCWTmX3pAoU6Z>{O1|X=FoBQWL5l2z93mGtY^S{i!3K z5#N!*SSdAiW=kV5@g*Zdo<cK30CaI{-K0_VTYvHPGyC|!R~#5h5sq<=8l+H*iAm^b zY~rZ0v2KmzK32+P>?1K^Toj=fC#1NqBh{}{=#lZ91LlC`)KDE4k^z<xaUh{4@GO~X zsZaSUn3Uhtibbj_E{QD%5Kq-A%ki8e#<?czT&mn0g<!6wjS!#Jl}1KO!_sWbT?nYJ zm^w?m2z3I9zYnGbVjgIk%u_UQ^DNeu>R2^c6H5^u$5c-9tR#WF!Gc5dw4L!>>*7ts za{_UJWxTY!nj)3uHTIHkSdbhPt%UTuA7hVLigOtPsQbb))O_Zuty?%UNSO$Tnr~nt z=!tLGcFY)!*O&wt$?^xVZw68<J=1=y%!x;48JSq(#1a)#T@cEgnIzy$?r~JypmCDi zPcG<btm2Yj3Z+cV5|!7`cn@ysX$<4Yxp0w4ktO&^C0}rAQ9u%ui3l^{#N?G$@zKZ4 zK`G8Mq@vt`)v@4fvoOmQ=5q)K5#PSbn5$I;ZCa_1g5z7cVS>ySrkTwg8LYwb7YW@X zlbVYB6mdy;IWzU=*uOv|Dv7ToR9MKoxTG6QwH;%9;F6XRdh$rOE;32*j1-R!c)-Ts z2@LQg?Nf9xj4-|;DxpUQywb@aJw|j8%8g^7uwfOe1c?e#p9~MCi7dw&*+@;FZYtL= zq}YU<LUkiU0yq{xZI4_B6j{F$S%*W!-aT+_coZzfH#GX?c3q-KJm3a&;iQoT8{uW* zAuogra-z$fX=#L(4=N-DL{XPe^g2<F#LE360zNrIxlSNcULrGDIe4UF)l{^E!ZJx! z%8Gn!?joFLVuEMXciDN)s+ETFz>B2<eZ(RbjUpE*Zlt<;Ojv{pQvTx1K+1(|W#!8@ zg`w;zQ!y)Q<ra`MJLqHVK*M>tw3!HIc|@>@InCT)Br`2F%o1hcNH(Sr8DkiiK{p1Y z4x%#X`X@~An}w*UqN5?rGWpH*v}KAr02mat7oBq!pOb|J0v^~ciXj*KC2IAO$1F=% zQI@hS!GOnD?(-tt_m2fVFM)w~zy*1!Z5!e7M7)*yxMauF{a_ZGt~lN+UUEu{fqbD( z3*CmD7Wn}E{u%CDXo_`^FbuJ6G8=gO#K%?eC_|-e<Vk(Y_?#sD9A%RMy;_DfG{8nS zW`*ON-WlKI%U^JbK+83eMalS!ZgwEao!PFuY+{<xnIY5(W+sfLYbs*}38<~v#FQ{) z6Wl<W*|#(ysNLB_uYx9m`zo@DYU#`-df`^acdlg90i`7W_5p>!IZt58zled3qce;m zGhJN}gd0^Ej+q_(X7VXGn`T2PX+&gTL^v^nM9I1RiMYffd1hBJ5#iC;MT#34G<Ij& z)(Il)MWKTUp<;v|$f+1#&SC5z;qHXUgv)#&bgD+7;Sj)8UU7rb7vmVe^0`V#GUvIG zP^m)9Fic~1){M*~rP(2OC-~yczeo)t=E^fy+I?o2@r#PLOi#HG%BRb0h82iRb&xPh zikOaQCR3F_{`1ffx4vhwsZHanN;srg8gGVF0kMm<d=Vx<t{bt)@=637W#fQng&FTW zM~=nE$PlPY)-U@4xLif3zBSXc&OU{iIh1=EGE?@Z*JxxGchUHEpaxE0Aq3OetX$p7 zGX5@<9dqLG=lHzOeJ1@*<u}D|Cbs)y-&2(PRfWrpnK4q3PLx@p7E=5`#JhdbJScdm zt`;f_klSw=#sHNcKzjudslmCZQNAj--QPkMFi0iD!I(F3tLzwWIM8<>v}f3>7qW<- zt3D`31kGm{2=qWEG1bPwEDHNZN}~l>B5yoM)D?0{3FQ@^tQ?8eP%0Fm7XaX?D8LY~ zM^B#-)KKF?DLHB05#Ta)XRrh=Z~TrE^iA|zYdbDUEk2#~46$byM9b}_PM7^7qi zQCnHL##EhTF>+;iE>I93Mpzn=eH~MvLI}u^(jz3tNXD4CZf(r__6Wa6a=MmKGjAl3 z8zE=Sg+Ia5R000-6d%v(GEnnC9S0uOg<Ky(_!Q#_@z)@yef3d2WF7grsN4pWz62Vt z3^7?~hzp2%lAxXxb)=<cz0C~s{#n)In)k<IGu9*=_Yt#kUmrsSNR4RPDv=ud=G<2g z)V(GOW2y$8;#u`f%hy=bi*erq(6k$CG;ud8;Z*nGFx8C*pvvq@th|prvcha-Si?dI z)<CrUYN^!_{Sb$+m^mW|@M$I{Q|N8Y*LIBO)X2gNO(5e~QHoBejX;QG3N3!2CPs*& zijOLSYF)q>Px5M}om-fw^^toR@J?Yi_JER&h<PkB@kkRn9+`*nC{qb|6KmwPb&OFw zc@MCm<{^4bK^0LC=BzVHt$d9{JP)HWNHj8Z9!2P#m}Y8AV;m)xy4=`Z#ehYA$2RhQ z%BLN29OPk`0FWH4&s3k$My0%D&7e<nh-vCs?a)q6$U+Gm_;8SEE0Liwo}<R`>Jj40 zYe8&3kNfrt^Vk*9x!x2jthDz>Yt%6uWy?z?%uJ(FG+U>Rm7?d&o{zWZo@Tu_KpFD1 zv+@R}=1ZycE}rX?JbWZ%MBgN&G%_LWrGyzt%rcY0?a72N*SkIiB~O)X2!YRb3l<n+ zrz=B3oZTcbvjkqtwHqL2VO}QAqtekrNeV})`kR`Y)Fe|UsW^vdW`4=+F82;BeGi6Q za=inWPeQ?D{VreI(Z^h4$HaF=&T{6=(Eoeb^O0i_FgMlNOpr}e%fP7}PA2M2B$=>c z$g0tG$iPgc5qnlZE0VZWQb}o)8Z)1L%L!&uuX(eevxP<$X69YuLgo_&%6!LMl>I|z zedyb}F)d9?rZG6e<{F`924IcRePf|9-^{cT_oh~`r&^k)T4tx{3JCT2Txbzpc+SU_ zTCOZjR>{On#2~Z?g`Q@oECDebP4pS|VI(URte4&qjU-|gm9;P$^{0-NW{EME@2mjA z3=N~PV*$!QG%7vT*N<Fvid-#XwwO5Ug)=mgnp|eF)AAolY36t0YvVK_qKP%aLKA0b z0ShhdC#8UTl{&BVZ7o+-(|7J}_7#Tgv#XwjDT?wBCZ&&7-lH;-t_nxFOMdwR5A2(P zMZ$&#U{1aiwDgjjDS&-5=uc8JE2S1{<b1PKoA<RnE!+6GKa)K}%n}9trcHccFHb`S zOjkTNXb`qgM!tn3SPP9x4$ocLiM{YpOvcV1f24@Ki_08yMcMTyH1-nL7>aoD3iZz= zzoow4x59$GHo332HVWYs;=AT!RnbKcD4#xdM=^SWd=CwrX+z2=iRfF4O2i2Rd=vF$ znUKj)MUm@RD`h})>bv%mSsGc8zBVDgYdeLRrL?OceP?90I)o$^mA+Wnhaz|Zi^<Fd zFf%V^6O%RJnKLM*O`LDvRL`tg^`~Xnk$ZzEbY`;hV`M{!MX>ZttEn*Og#{Y&Qn6ac z&fgfj!$FZL5%#_db79D*86oCh?s661Pq;qu-D8180!w2=R_=ug&1GGy<^AB=Li(y9 zJ@++>EaI?@b>`}0?#qB70W+y@zI>_?Fozm>y<1o8oTutU{mk?cmeC01CDyQEi4KgB zwK?A=%u^G%(={<>i6UPblTY;uPbFr=nZ_8YO`+y88{jK2rA3%}mJ3taai43=(1q4q zJ6O&&Ec!^E;@B>D;!M*u(?fG@msT*h*hQwAEO%u<NaV~U@;1a|!igkk5_&0WKE<MM zK1B;efG0$IW!|sM>B@k`BEE5)ekHtU5-XZsojjT@CbFg!1%3RYb)Y(QRQW)T-IaOd z+UF=v?b3-{2dk03zU!G>#}uLMgtlgpF}2LOD^oG%n5qy~P!47Y!;F@h?DP;8K{^4X zzHH%QdZ^&Ju!tw>0kKI*@v%!DTo8x;nmg^}ghuP;WoZ7fUsCh?2qs5mXiTHhl#*m1 z8sWvjFYQX7kJh~Nk4*s4u|~_?d6>sC5sW<;dn5Q_=k$!3B~;Kc9jjv>k0z{NtQ=K` zk*2>M_5(qxh=$UfKWtm|h;g%x;zk~0_b9%e=ougZi<otkOhU!dE{10y8%9`4)McU4 z>O%l-LC69djxgt{Coi{n`%+$bHyVWbNN3JdM@ZR#O9)chlnQ|@oS6~<G-YuXjwPK^ z>`TZqsR$W=XrSLzesh?i4J~w5Txc_S22<8EGGLwe_jz}R0KT0Yojb~3Y8(~gfw+`| z5(K=(an38gVi@CgWiTc3z94EMt<~JE3D4b{Fqo0KN{MDwCa_2Zu#`KOwOInWc7RuP zd<FTQ0p=OgO?S#w^9HM|IHG=Ij+MeWRtg1h3|**rEBBre_`D%91zq#UPc_g3-swr@ znwhSOfU4<K<)%1f0)mv7!mFvSurM1-4ov-#f+U6<Y_vm-dZ2NxN;DW}cu|?163V4r z1S5o^5!ROo5CVb3DnLkqdL3|qCYY*l&|f8B8Gc6!-du?mZ00CEl<o*Z5*C>s%150! zv^Fs0c$8o1wdQ*4Ur-AXu_#n4Ek(i*UOepw@<kD}WHWKX#F=5I3(*)M#=a*>6kFJu zA#pn3?FU58xk#K#CkXmndd?Y%bb_}@^d%GBE(^v@s4$n!Ngsth(R@oZgalzH<{h32 zc@Q;Db6y7&Km|^DF2F*1KO2)HH4w*XU{yKI5I4!aOpJ2wG3Wgwe99u?OH9RK0apdD z;LitKQwSp2MXR_mXH~`Qr+2_pkvVsi^cLD*vIgy;*zzzGIMQd-S|$>(7Y@aJh~7Yn z$g*+^2FWdki6M^|h0P7cKqf{)unJCOfL~95hs}JsN{XQsQTeO`6y><`AO+Chm)260 zz|Kw8s}NZx5C)SNkJ|Y8*7*6>=J~G8^R1=x(XRPJ6`i0~>cmNqb%_wcxP9)2IAArO zM%+ab8~|iYHP@L1AtxzDq4P)^0vV0XqZo_NMmCrnd%D4C{Q)-46ebC$V3Z`HEqc!D zhgb0~Ym^Bk8}qfEQ@K<)rG=QXN)mR=t7FIp_mNqd3F^=fv?QUr=Ec(a+Lga0H%}uA zD9R;an4T;BTsW^Zm6?iV6yUuCH|C<Mcdq*FfILZ=XH%Xp%(IZU#0&I8i51a8nWk7K z%4He2cgd1MTKeob%y3D~eBtr7g871_7AyG~f{QKhVL7CES6`9iOE}DYdFIN@Fku)0 z4&-OX0TEJr!jE!)<RRZj!9e8%zo!oIiTKbIeSl1qX|+Cd>OBrijT?t+8aJ538?M4+ z<?Ei3L#IZA8A|J+r@N4uh^L+$NEEO~U!S=gfruxb>M<3v5E+XjF((u{smR&tjGkG% z#zbst^RL5l^_J*4M-z>xo<U%uPE|p&n-G8?+Hy9EjdU)+69o<1w-=#_x@sw8Aq!9j zJcqsp>)X8I(04u^Is?A<;*jQIocYnzlcw$PoOp1K)AOjm&qhbOpXjLEMs(Dlar1qV z;>J-Q^6`|)6)+Ku^a3NIybYI&*pbKE6;B<NX?KKE?|_XXS&!p_1Xc*)>j1clm6Qc1 z{Lz<CHApg>AS%ju0Cc44m5wZ>L45Hz3DroO5hC)d*I^x<<>Nx+vm8?l$$-k&k*}Kv zSV&UFmy@poc$E4DlmU&<#L$c;kdjS;NB#^)CxjG2;=WkO_aeZ?kt#|d<Xw<QI%PVt z`O;C@ydC-W64?+7>qps?&ug7Jri{hV@fcYwp!)2Hi++J)ZZwuGJcQ)1h!^`sxMC}q z;A9ISA1oR&o2X_eVl;Rmw>*WQC;8ORI1mVU5G~MWp+F}V#AH|7F^@qd1pCe{%m}3h zVB=T^poEEhem!NZue1<6Rz$N6<&np7J2bnc0fYdWB2_7Qj0$@!S3WO5JR_0?$Nlmi z6y+sNOYV)<xl&P#c8s$E0^=f7hKoG(A)7kVcg)cvC%16UjTGZi-_b|~rx9L}$r|&7 zsZ12=6YL|^{&CD2v5-r1cs$?NT%8Yi5nR}q=aqzhFvR&h=AnWl>l}GL*K+{OaF9qD zLI_2#_A!43re_(5$nVCnTqi=m6CMEpQRIk9#!>qs5^_NWf$SJNW(_*>D_Mt$JA=nA zSrwpwNQNWc`+SUr=VRU=atu911d)t>jBF4QEon69(ZulQtWhTr<~EcIcT8WG$6_=J zXQY1nI2tYaSC&kVBUB%WfUfr*bJo$*e9XHFj%WTM4J(H7!T*>~Uh(E-Bh}-ShqRn% zN;ZzO0m^YU;bHVKpLyd1#GOCKs!>&tM*~L8#Ozq;o4hq&T4TpHmK+(Gs4|-?6D<Y@ z%rfrR_Z_2x!7PFq=P3R3CI5)XMl(WcSNi*ze+=vCNDQZ<Gg}BpbZHmLFv-+rF*58s z6BAy@it|!$omukXSoS>}dd{CP_Ye_YUKJT0=&9$d_?U@q0VU!b>Ly?iwF`kJ5#wt5 z<zVEi$S9f^nS$t@E<)hUyz?Sw5<?<Y0G>5LUw%y3SC6TuiQvwMJd6Xgk2K*TO&Z;f zAVdV*O`%IUPYp{GQdKcTVsC0p4_pdO?3HufB(dau!ONj#;LwxxDnhB9%OM59x3nx} zqyLiUgUb<CLx9dea#@(?SmanLge$NB2PK%Ox!{m{aDkDc8H;m-#f{ujmI;@<m+jON z%BUG8iuznYrVz)tMNiP4Qz?Was8IomL%Tl@EHWY{miePhBbiwmWG)SsCL=nH3Al8h zl_~U+O9wy612tHP)d9^9>G!O>)xm^wL~h<$9>_LC0$u_IY%CAtn<)X#_bd<e`|DEP zf6`BNEN#?d(}5^n5dkZcve$8mHLj&DaRFIuIzXSp#KW^b#cG|1xO{Y2PKU4^$>Eyi z)RU%65XF7!X}0qvfasQt7O+mueyAoRGw={0&r?4qx(d!TQJ*HJL{qp1No36ohc$>B zh9ab%V%*5Y1NaJjM3c!xtxewED|8X(p&9{>pD+nDt-Q$j9)+6D!t_m}a1=RvFG-Br zTXLJ>h#I*!v)MP%Tqo~L%S6sCf?RWWQX{|c+Q&vyCNhs>5-O;G1?fxaCYWcyV*%;- zm-;b{&@+F$!~;3Ik0w$kCj6@pG+<3jwr1$~pkGpxnDi}KWG#-tJtJT3ZFxe##>i07 zPcw3M>;7n#5=QF6P?Xs+vpn@9%PG0NdStXT)OLERS<jQO<y0#P!M+w|q3Ie;l@2sf zl6_6bB*JqP0(HMUsOG#}nvHzStw#B|zTZ@TExOabL+NAfo^6m2WXxet`_79H&!Ii) z3r`WrY3X+?8i|%Xs^e!=vbB;sMX8ud^>XFVmAAD5Cq+!qWX657L3Cw2!QiUORO7Gt zyp}anKX!%*3=*|SG{)#irsz1Q(?|>>OQdLI<`z~I8kQz%lxZoSF7f_wSxA+!wm>FJ zOY_BCWb)2Oc#mVG`$B&D(rzrYy<WIWf0+9vAGicuxVC(ugB7T}GC`|ptlG-td`C>m zH<y}TtggzrD}b5G3=JfY7wXrjf8dYR0FBUsxAvHk$;Kv)E@UAZc?B~(L#>xEi{{A1 zb2Rj=LM>=`V7_~?;at-a`+%1=92E`SoYsqx^UAkIdZBsFs2)YmYqSUp*SraHR14E$ zY%uba1mbM0_rD4aO(<47O^dO;XJFuoK!EzmXcnOw#D->}X%?XQUbs-TwOm*ywFnKy zMw~_L894{y+*nbQjn_aJxQe%!*-PXWbZ*XbUmL4MZWwze9h<v3&e8}A6=#B4O%_&9 z3Vnyd1zxxa74rTP${CKUBq=X{pbZVMu1Oe*a&skpHCnDQC#P*I=)y6v_He+Bi0u_& zig7xVx!4_Z!Uk$uwqpTepuvk~2L@k3-Zrq^U&6RSWSp2mXddx$H_!>EMhf6UBtr2* zvWOruTbBw_UhLF96IBJv)OPYM10<^`rD4$b32cH9xO67B5ni)Q^0hQyOZ4@mUQ6r1 zbAEcUzLR??J_ZdI>2?)nC>22z=O)LevX_At$iT{6*cVNZ%TTliE@fgWwW6G&3QL?> zp=5y%4&b9wbdeah;dh8l4}|<hP{7$ptO!;N&X_;Uty6?PS@T?Zs1~7_!vO27j55X` z<W@u$RRMT+-1^6u=yPHu1^W0^F}%B`ZD<3a5L-=_vS7`)l&_6~Y|pAf_?qOUI1}{) z^eglF7*mZ{+xGaZcYvW{%$o#C(svA$gTXLJK07Y8w&}M=Mh^f%R(1%2gkT~|UQ3NS zgE};b;DRe}JmIrFr<PD;N}!AD!r(Ikn)qgp*P7^S5$^X@A}mGDs&~XZ$0B7sPmHJX z12NoW29&7Vjb_B)oB$I3Se?jZQea~l>po5<XoE##JO64@(j;BS7IBERm{|9YD@n{~ zO)4_8SO{-EVJKzbkxi%hV{0G=A<_ux9?21#Wh~dEEE7~x*)qkyAv*UYz&B*E)6UEk zr7?*Wc;1uPe3Qw<1VXiu7f-Y;VC3>mKH;|yK!nYItVat>@Ej{}#zJk!(gIDj(Mk34 zw56s-YMx5ZkuD_P7$ib=k=If;c{9Q}ui@xw6E-fD6b{Puo^s35((PGV=B%hrGC4QD zc`MIS&OR^E$I59d{`HP!;36lcmRNdO4f=Y>ekGdIR_@R}GcF-3TL4>eT~;e$6xd3a z?^bBk800Ckk8mr5f(4$HF7OcYwN$GyUoN}C{e}$UfKmJ!<7T;)9En-UC9o?|O0~iq zW~KFIrPpw+baiAk9c5z$d6d3(r9G{n_$Wj|5>}|42_09SyV5D~3O&bas_rJ@9U>&{ z%4%vJne#|7QIJnbO4JB(^$ip=c!y96M7&VX3XP@q6)PKst#s5R2qJQDu2zL6mU+Ts zsa2qtW)Z=g>P3ZwF_*NJJXmJyYR5{}{8qRmmVou}t)#~xL#aF~^gAo<c2?+hR-tAA z7QzW4eH2f@BLko$hm@(An=2EQBlf&|mVd<WSPr-l@R}BbnnwJj+Ifg*MsU?$=}zC3 z?eit#i7_n2fq$Sj6EO?LOj0aHK*(WJBe}AZcT7@&x%?i=?-7-$*k2vU!wT*TaV}XE zqhKadE##WImA1AkJ4(NDiNHjXkx6JoGA+sW*(u-U%)c^WBf|bks>rscl??V)*mkg* z>k^C*4ri`s2!s@{kl^Mx_9&<lx}34nN>Ly=i-G*;!aNgf;bE4jNorPewV0d1F+@>6 zih+5eYw1Eb@In{W3tc}ihF%J!jHe%(U-11~#V~eC2nw2T@+221V_;NDHW;gb_&pkw zE@Bl(V8DyOBBL7Gim`r=0->xgBs~kXAbhuDj4n(NCOSByGq!Epwr$%!W81cE+qP}n zHs6{3_Ws#>?`F5s-IcE7Ng=5`Rbas$@4D%=2}XyQ2fZo2px=}KO5=wnMI*6Cf?cYX z?(!d#zNb{{{k1luP&Cc{$T!a+5T!>P+29`rlGIL$L{{8}QrCm)$n=m5TInj%ZKHNJ zmn3(&h>>#~*w2oroVJXxP|?l~SnG!FC(_9(6=2Ch<5egpPz&v3E9RS04g!zT6Vx}5 zEI|Pi1JN-=(=-<l;((Chko^rm)ee_Z4#uLaodJ^@Kq-AHbKpw(d%YvD1@+<>61}Vm z`C~zF+T)3#$S(A>#s@NS9m3RHEVAw!dKDI#;qqlb!$2)f9#f52wVs5XhB1;+Dmxui zNu<VIos9m-n(6B}2Ag2=ho9)F`kB8GfFmWGetKyb+pof}ff#j~OOyaoWaSe{qJYxI zv`kkFov&}#2)&Y}-43l36}+Ud3A&}Pc+56Vk~-Oxewb=px~MhHn=yjsgqw%*WZ$q; zfPq(u)jHT(gJQQQW!T00_p&`#dz^JIWLo@JKM9@ZX@mYFR;xs*qxI1^C9iZ3zqUJk zeI?~gy|&=2>f%l6@cV8~ep)SM(gXE}yYCSf?v3i*E$|0V;p5fM9Is!AU#+9(pY}=V zBy9@zL|YbB85Q}&nKl)>iXCZ2Ta-+TQk9LGRv<a`mdVeb$FJ^5_=M@16m|7l;*T{Y zo7$qXq{BC}6Gj}96WZfLp0m5Ai#z8NPpG>Ulv~;3AGCzNbCEX@z_9A`m-pvg<K%6` zZp3T^@2Bb0ZG?GFdEy1L{B^DccT=eZ-|a9dIi9QrF}Ck%yc;#Y`ynQYGBJKG;lH`W zJ*g5!k9#fe+LFF43Nce2Hfs4Q9kIKKzO6@X^rxE1pmE%?shh)7G|x3<YkQmMy?f8b z13&t59T~e^aWeKuma^3<%AEHb`|9pQ@5*n#X}T)!_@7(}#t*{Jo@k-kML*a?AGMQ$ z<Gm-<SF)I(o+;X28=czn?m%C}GX1*iczk*Seml}7?(v^j`>8fRO}=mG#m~mc6PqvF z4^_7h7tWE$-xVtOZ@<GQzq3iQ3AGFRtRD{cT-uT^t;iSK-#jGk3LZJBuc(RCsT0e_ zzT2(I%@XoZa;~);KA*?av^>un)4Gn2W!kc?v^~cy+OD!XzmtiqI_@6FC)u?<*Q*O{ z`*xqBPi_0%p4;ac_3aLi4^wu1w<%fnY#yJl7IJ%TpQV~MXZpSFLQjvo0(3oB&9m37 zTMnPEm9}k%tG@X*+jio#GI>3}F<bVXA1xoUq%FChEN+VAq&oM3|4bfB6-n&5JU29J zHGc1`$Iq^j<4<zC9*@hWW$$fXA1-Bey(hEU`Yw;HQ}kU&rRI8mfQcoPEbLltm(Syq zp4p{e%rVn_`QJ0)J08H+;igBYm!;<|&(31gTcEj8)5~>LoyV-SUSV*-<9%fE8-xmd zg>MO0t({#fd);=o(^DEdd)w{S=g$pwn|>qU;^u7CzUp`G^S2WIGG#O*Mx6CBre_oy ztFQSfi~H?{#x-}<Tl2|fM&Gu#<fHqwe&=#~siWM>@y@Zw^{%Mr%L}mE?zZl=v3uin zxA%3vi~cryt9VkeEo{hENnX{b4G?*;anb9sd78*_vja@7-r2#n(e3(vzrL;F>))-^ z)$S?u75&_Pg2jll<*vTd$M9QvmmIL?ZeO$bm46V=Ks4ho`U-XJ`Z|8Cx)wR9p0&<e zQ(mvR`Sv_z<+!=|_B}!G{LcF*-wF3f+V6VZ?-IYUz45iab@ceH7YR|f+@h}3+4I?4 z>1yk5TdnfxetFx534P(e)UD(#Vz7d9qqF%X?_QZ_)>-s6dQ^T~o?d1Bc6<!4?$lJj zKy)4L4DIAu<k{$NdPtp(&VF&p-}JVB@ptWQbalQp?!NTo-T0K8z2J4et$8i=Ofr|( zl-B3!)Tnx`<kj^ycn+MBX7$Xh+4mY>fok)&;o9-HwCZ;?_(}tQK0RV$My0XQufLyX zvE6=b&XQ*OY<^Uqo@V-NeJeh=Yu;MTYV2F_dcS<S-mZI1-)_3@wte1iy<GRYzE*ac zy5=nPw|*?Xm~X<I^)^0|X34p>cFf)Cu6irI?BCit*`M{6zK(Xyy@GaCz36wp5Kj7y z;wo8Nep4pFR-&rf)b-VU)L)=iyx8~~Jbq8r*{QYB?QCs#I$rMDevGd2T77-Kc(?d9 zwyFVTn?5b%%WhZpHGOqI5ubZ2eVTsqM{!trw%_ZsG2Fj)XZ*L`R%f@TS($oIP&J-c zqBXy}pE^|?UT?QOUD@3BHot;jp|iL-Yp#3iK5lRFUHn^K{3B-8cVTaOoo|&rT^+>V z8B!-Xf5NihH?8b@jIV;U^EN*Bw9VV#+FV=j_I@5;BQ{N2s;u7DdeyvijwVOr*nest zN^{(<bvC{qPU+eFx;*@zre+E^EO^UaI#+#aEUylC$Zvk8Z|!e?Zf_wd)95Vx?7uo+ zD_&i4@@}@JPL6PM-dumGpDJe2x%4l*i=37{l-@3O#NI}4X?M1|hHkYz`_{h1sp{VD zd}5AXE~QSW0?+JvExrObiLHM-U!7WlJ{x@%kG!zsY<W5wcGhiqiXMn#+F1EkIBc@} zp4Lx6wd%Hf)^5Mt=B|Hazb0o}a<sYTF4c<bownZlFNZ2+sldWk?$)~lF4y&Ke;}y5 z^!GmNw(>T68(%v&wXgbC-vOg}?0hnuzV=r)H3xQ^daig4Z7pv_UfG6q`^A;Jsy+Xn zP_ycGJm*$Zw$|+OwtQ`Ga9`k;>#Vb_x~<NDXTp>$0Td}&X>E3PJ6oRSR}gM_jbB1i zVGyl*yFWdzWt(m;w|Cw(PcyS4J>-g(KHqvScdTA@TVLP1>Tmz?*PS57o~DnKOOvPR zOXg)%6@AUF20-KG=aRkB&DPiXiCIP5&*Lia=5E9H>Q!GMQ%9$($(26j*SE3&oxOJ5 z@<yl2>EBuXNB`=VHoonSbP3B=Pt(&Kx9?dS<yzgg*M#0l92E{sN{@6UehEsu;Z<zS z(9M(ep5`wsm9`-uCdQtna1_~<%`LaZ3HIZ)F-QGoyZ5Oi$NS8?(of$a*P5^VC4JTG zid?I2(bMV5r^ddStR~xPG|9DY!{_1_x2sRK;`d_5`AvIyfVa>Gvju+Tm3i~G(?|WQ z%#;01?oDs2tL!awSKIUM93XcW)D!o{xAyh5+nn~2D^&5F-GhFk%BNZJO*(RixDs<2 zR^|B8{#jmgxw@k5*Xwfdirl)j#ctc@@zt~ybtArvr|M;MBiT~6QrVKW>f7+j-SW1| zr|_k46K92AkyGJQ_&Tu}@)EX&uh>`o19;J|{KYz%_p9<N_6@a~W53+nuu$yqa6PIV zeJV%waXcc8Nn_pJdq-F)k7Jo-=`}xF%qhFYxv6%gv)J9}uKJjoX;X~#?f#fJRnKZ! zwX^nmt8=BdyleF<0?fYpm3Zd0;%|C5pViKuanIfH)uF#qJo-`pswZ9=v)yfezn}hY zdLORZ+xi4N-WYCmwbU(>wMbv4t<~j!dYb}5Uid4~U$9+$EzfMZ_ckk7=E{(sL1)O> z*fZyfKVPh8_AGj{v<Uhz+50xOt#;<QRyu25K3B)I^zA}w%&&L5zp8HJoBNi3ysX{; zuJf@KqT5&BRkPIPq+BZ=E@!W^)?9ANS>GG8d#=4AC%5?JeBTytDLdK~tv#h)Zf|bo zE8k{qi`)xd26u!#VQ+W~UBz#J9&FDt&$`<kIoh?~+nm0)x>qWI)CuS_AG&&7xt;o6 z%Zs@-{N}CAZ`w`YMsNA+^rn;5+UifYt03U*vW;zUwEN*PN89z)Z7}D~&TQuGdUw9J z%g6qU_9m|FSKO=5XWo~jWJQ^48*6*x!#;;Or|&vAC#p;S^42wPp{Mby`!=eR{^G~^ zE%bH<WvHvOZ`nuqt!6pud+Zk9m46f9{-(S$=hC+fD7$UOR<54A<86Q2=^=lu&0l;L zy)>m_jLEVn|4mv^SKU+ZiSuloQ|pspJ?moc^Lv8I^2$=T@3nc#o#EesVT+p4Zrg2s zIjJ$X*Y5+g+$_8<yarjt6*a0<@wUB2Zt}LUFYoGjk*8F^uk>nYFXL(X$pFl#ILXV4 zd92Q?tZaXM$=5x2PUfb{TlW^fKTdgP*je_rz0IF`X80|3*LZ|^$IL65ui3|Dia&U3 z$XjYH0bDKQehZ&dtLEB(RmZCZ6=we4uZ*3O+m9P`r7w5mFXyk88}{bC?Vp)fudO%5 zT;EPW%Pae)o|n|gRl9EU+#OHzQ}}F2&X~d_E7#2|GncxnZ}C&$Y@C~K<rDLA<B!x? zOir82?uG~aOQ_#^N8MAytiH=n=acB<gXkIX&Rx-RciLy6`kQaS<#w5u{<%+w+rloY z7yb4TBJo>XUbS!O=gMV0mWpzvQ{0~S<>{<hnivs(r^nT)gwpk3&E2Nw^r~_N8=w8v zW{vWHeEYIm<7VIEc15g$$Jgc(IO!U5c@}5iXY=*4b+&@1+g0=0{TX#tc3D^VYwV-= zTRUouRcEuk^u99sh2^*YZfw<X76WnZeK)JRtmor?mgkDM{2g(6Qq!gYFO=Z%?!m-& zzOpA;@x%V&%UjZH&n|b9z1v}Z=CaJ~=YIB;DR2FnNpI2H?cw#LC-uQ^;am8@KI6-5 z%UAO<@G6=!=4w~?`1_Q@zQA!jl*51H-P5%9p>}4tBkt^%uU)b*xYgzR7SQuHuW`<U zN2JoL>ci0U6veLJ;qg}5_rY-qO0EsR^W%Qg?y3(sT0YYepdH!5{$0mlr{bnB<mmG` zdvn`eBn(@5vJla&@a}nv%Mm=YF<*?}vOJ3))Kcu!pYN&vs;7$?rGUWO>FNFozE$p2 zcWx^m+q!w}oGV27CEl?vpVr^<@px13jJxfzy^DLBolghzc+9twpdC-iYO}Yq<+c9$ zNN(+G2k=$8>F@sZZW>#~Y|=05$sYyIt$uF`U*>$WzI0W<_168Eztky5{WCmT9EHZ_ zUvYOk;%DdEes?~q!|q%C-Z}ls!ng8m|0tUoYt7yMG`uX}Tm6)|lCJ5q_Nh{B-jzAI z?Q7#-`ypx}J9-`BPE){Q<09{jyVLD_`-jz(t=^G!*j)KDxEgl(tH7@<e+h3xm#N<3 zTm7=Q+Gh*+cLlqQ4x_!d)Y}YLf7RaVTloRJu2o#~6+i9dL~+Mm^0Yi9smSR|y8I9) z3t^VXFLdO8?cbK{<lXhgT787{NLP^AKeu}EwG@cnL0B}mH@%U2<t08$c%-Buc=vkV z{x;kHI5M7m;pb(DktT)u8kv|NkonBUWpF-mPe#&qqM9Ld7ww4@ffKgsC$hRW3E51E z*jU)QjldR=QnL-4u~RSa&Zn)061DCCdgq>neYbnQ+T+FmM|^lWcqfjtEatNx-THNB zUoUvb|3b1aq4Zt{%nY3B8Egns{c8pn>tWZ?XyCV^d?Ij1CIxGP96-<${{ADvlq5@# zBZ8NtAx*YT_91gh_L`*p;9U_$6`nJ}IOx91|Db@t4K(3Eo_#@eMfHk?9R+<r&A;KE zcS{xlX~0!_M>hJynW7_~3l<2E7821Ym?JMjJd8X76(3y}i5~?aw8kQV<PW-{!f#p6 zqW+0neWRfnPNUkYze<EWK6E0UjHDV)rLGEl#f7NGCJ&(YiJOo~|A!g9anAByhvF3a zM<eEHKLt5L#Rxe;_?id~X^bFFm(&jNEdni2a8uxSOcIlU8pCs+=O153q6~zqX~M>F z*|FR|`VRch1IEVe?mrthdB?ns5hf;#n54}k3=rc3JkfDb3~n;vgwey@2C6=SzY`2T zCPrd3&{Lx_8hmR0s79h1jA|g5Eih_rSXBd74P5&|#PJ2N)?v$&qcx6jvm=x`0bl#Q z?m&3a*7piJQDH|50?@p6{m2g_JeZHtWF}?a5_>c5*t@aJkZgvs4v=&Q0__Mqf%1@$ zZbA|S`;w@NvKA->&2us`TyRW}f&(M_FaIP?S5#<M1XvYm^MzZJiCy9!i$N+Bq@+-l z@GJ6`MQ7Bzga-?k^{n(=fQs>JxU_1*hEu9%Rm>}#mdRWKIw5h?OKTO>1y8G$*(<YF zY@K-{(_!>KZHY}{+T&B+$8iZI;`GMR!3ba%3oVMpBPcLU3uzSMpiuLPR01azz$%4U z%i&lvm!LtLM%(Kby){gO73)WPHGoP7ngy_UQz5N$psun(uXKQ{bwIAP15^#c+zIvm zTskS<qj-l19MmFE#RsY=`~{2OgD|7zH}I<u)Wg2P-r>VV%2P}z84vZ1hsGt;SInnS zK?!)0GT@>N%GCz8ETKkRro<w^XQRwSrHy1eM}r~NwyZg(=;)V1CzYR2|C`Sb9gta^ zs6>@7|3%?bpbP;d$~vh~qJ{|<L8Ml3H;pne>1<lMSUwFhdiq~ZGGc^L0~Tc3{v|gg z!oz5qQ5-uP(ey~++oD2<NC`xLDNacr5kDfoMS$nISqc>r)KKUmL+J|9F-0N-+D#NY zDU?l6Oas3D88ER%JQ8l93PoN@xS1CIQw%9rQX#Djm25=w6b~v_TqdzXYY{{@3g0lY zW)z=B<qp>!=3&&QLFgJXi5f0WN21n~4AyewaIV&9(6d1xk4(yUD~Vzr5pzU)4#3&3 zl+325JC}<wJ^bew(ypXKT8p+8Zaw0{FvJ#_H9T{O=9txv+X=31M0+67o@fvurbI=V zq#{^Z8=^B)T1|-_DgHp|HVMt8<#0A^?H@sx#-u2k|Ay3bXf1d(gCabcswLeKPen1` zk;ekWflS2;6u@k_JD!qhphg>9tVmmvz$TSdJQF{+RRYHZJZ+jRL->>gHXdkNz!XHI zn`)VB{A60vD5aTFEw@Twoy<B^eModR5psHb3%b-JhDWsq(ouNg=|NV!tK(77Eulw4 zpO7XfRp4aam0e&!U5%=vKvlCq=VB$8(2UllqVZ?4h;^-m4V<D{SR3U$LQN?xlqrSG zG@(&Lv$k46P3Y8Gsa5!}2$@P=w9;FpmkM_JQ%kj-3Tv@a(DYAXriy5#k!nPxj4G&Z zvE)j%m10W;h7~%iyetS9NdNDFRnW#S=l-{lOU1^A%l-%2=98*SD7Qt5?Q1u8yKcaD z|INVun*vH~VmxBEozTbri;zk*l_KqXH)f0f+!i9X#pZw_*m1bSy&F+I3+@!_Qqn2e z&9xXay`>V@J{<=<IuL!&baC-Vx+$44qh4Uz0joRl?(&Q{9YaFk@{RZ(gn{@57!j@n zNfSgc5kf_{<Z42!2(rQq3*vT$nkCKEuxT)J6@O$a!4I8z?mp!!lyV*nl-&Y*(DF{8 zW^LF^Q;Bz^kYVY<6cTBf`~@jVVv1yG!ugV1sp7<Pn{h3${#~qbEu9KzgtR}n;L@y0 zH7r_{5V&N5k<`g(lGG)t`Mj~w)J_Rdrp423%5De$6_tr1ZdEtnzsmku^2D50QEkLh zFo>$w9c8_Wqj!S<Q~C#HF%Pd&o`!80%P;{=fSWc&eXN?_!{rgB>DBzG<DYyhAo=$l z1CECU2zn_XP_(~W%Rr|o5X3G7q%6^2;UvF8Y(AOQViFex6~-!3&9t&nP|&oJYhFHT z68JMLZ4(~FI9N`xoGz4e=et(~H%Sq+Cm`z2X>NXiT)f>a2x<QhIP+UaJ~&u?ZmBnt zMLtlaeoTwNO^u^lc5ttR+kjEI6WDSFa8DdO>MBCR{9O_hvZ9cRknC0dly(x&`Q1V> z@IM(ulOESatn&-FVHhB`%YaDD{sE<ZJyM1`H1{<UE8xY4f>mFEMv;9rK8H#S3{?mj zD{#C9QX!`lV^T56*kTbSI?FJsCko(_eD450=b9zL5tM;zN%hVM&!(=$WvDQZ<XZR6 zWymL4y7)54N<C0!IpXDB*~xgv{MTd|;w7P#7=bLLa_5$4&=u54Ndu`u9^A`Jco9m* zwI)QfbyrS!&s>DhoHS16%K)MYfdrv*15<?wG6QjL5@k4N3Or|WLT57id~ud#HpF#9 z6*Le|se(}!POBNoJ+R7XmE=kI_5xMXip2nojs9qFRYH|+71i2GrG;PQWb4}x5C@;c zjT6!RC!}<ei{9N}j(vyC3Fp^?s1KxoVO%vNNeL*^*BJO|X5U00<|AQ4pCQtP`ccpE z;D|($dzDTSWHlb>(l8uJIu06rB?8K16v@Z}aA$dnG!+S}eClOMtbPyKL^B6{?B!6w z1>HblN6N5SJwksw!aw?nC}6Blh2HsgzNfbZ9w)lWK^rX-3c{UE4kg~@y8at=1^ep` z_th=g#AlPZT)gB!Yfv+_MH_d}v(OA~{*Av{atxGDDPRhWnXjY@EllOwIgPRx&^-2P z9)faJz<kW@G@mup_c(!@!+~3W3y5OIv6!rxj!UhoF^>*~#&hb(WQiGAvF8FLTZo-p zk1LV7QL@$HcB_V~2+Y^^TikJX4an@6cOUJYC}oZ42gB}fjvK(kvq3FWK=n`)dr6Ai zu68`zc5D7OrMD4J{B6*HL9wzh(|ETIvlngNDnp%0xw3!<x6zO;Q;mOVy<x872fez_ z2ZLg3$vm4lVOA=oA=66v#}Z-TC>$5da=;}0y-O#_1199dn#&lEH~`W7hk*cqD2oaR z34P-r-y&R9IEW4VECv(HA!?kheSP{caSf+*>8D7xY5*x|Jk0<-K*GPE(U3ull8*U4 z5Y4)s!ll)G6T|)CJH~3f=`}LLZ*L`dD$$xY(B5n^`(rpep0L}{aL3O~#79O!W|a`n zZ>qTNZi9m*%x_?LxB3Fa&tYcxhkra@yF5-4WduGlTptS=EusG{*Iy^cHsMbMBO;SM z;cP1gTo;L4crlSB<X=D(y%bURk?0tp3%vwCD*Vjrp8SZy)O;?><ke84*v23~*`+!e zMeO5XEFiWd19Ov6PTAb6x65&0Ge%xy0BZq2ec18z4f-oa$JfL3@4PcI%XsQ+izh{A zj?u>Zb7G)yNV<(@lbzLO@%RDy(}(G1$8j_)v*N0%1`8Z|OX<zJRzLfFxX5Or1{Px0 zhsD{eI`747O`F{}qB4%3_v9I_rtqgMNv>-M$rwk?_h2AUiP^0zxhS~~(b5u@=zM7` za>AsmNKs<GB`zJ4ZUH<<@ALu_JvAS{55<lT*v`RQV_RrA02R|}&g5snj1U|W>NT_> z#DeA@dkhm4(>7Ng1{(g?<P#4p6cnCe=Ys<d=Yl+zWL{v9O{d=SAl6G++}6U_1{%#2 z)3MYYyn(RC<IMulG+gS64(!x^K2$oyPi8WWQihCJ|Arg&pNTeX8?Z8a*dH%EYJ2-i z2=W<5QKO_yeGQbuYHppSv$tvNI5s;T7N`2PU5LEw;$l(hVQ|gaXYh#z+bcSoT#n}R zbIzquO&9vwkS6lTQpP%ju59Y>w>ZAHcD|uF(T_4x-z7YixBS_EH#6U~+^7Hk`EEKr zs$6C=Z+>p+x36VyJ=wj-orO;GDN?lbiglbIUh(p8|Ku-QwQrgW=~oRQ@(5Pkx$#ZF zKhouyqjKxO@trkub3T9kTgiS`&6wp5-tD6MqpMZo&84Qs#GBP%ULd=fedZLTr2{w9 zxRm$N@)9*u`ZL=$nUmOZb~8#lX~6F}pUCkkmDdD6vEdXaH-L}4-}~?V_1t;ySUHGo zZx`V`_N@sU+Q+uxdu=DJu{R7^h|C~%Ja@OD^=!J3za6VD{H|t6+yKskz-N83H*YTS z-J?@f+StgLxbxBw^d)?imRZC=cmd&4fZr=D7S#JL++A44L?%7<$C-u=2KJ^rPx)-9 zISr|^df8GNBwMPtnYKsTdE>QjFjA#->&jKubQ4%RgN;T@@r%woMc*Ugw`8W$CB!<7 z1zq0D`OCUXS+NtjYsiBi&(Al2BR+Q3QVrXlrk!%v(Ct!6`S8fpOMQ$|&h~ThRl`}@ z<~0O401v`DrAEAV#={TN`V4vwtoCEh)qan=Jy7*GK!2bA%Q~yuy((^VS1FIWx94^E zi~7{~h_<z49bM*Be-O#W+(So(Bw_}%4VK4~deiB5$1nG1p5t};^T3)|zSz=igqE{p zo!{yv8(K$vWcK-MK!1yd>KAamoF!fZZsQ`|S%Bp;!rEX-?)tN!+a}092`~G)%lGb+ zWUV%|y&5JNr-qw8_T9eHw^u{emI0PUk2kI3d4IsTMGpJ3Cfg^L1;;fGUjz7bCug+F zPtN>}#{lh$FpQx&z(-38AaiyQ4y7PrOCaL`1yI{LTa=Wkbd#r38rheQ=Me^5LaAGb zK~gaLA^f{tYzyIqKmZXc;$eVCeBhGsUs6Wr>8s<s85&xp-D9(xs#q2}edFni62-Sd z+iAsX^0FHVk$rtz4`}U^!MmBrkHng_&us14w9P$YZZUax=1u*!;B9$TFg{Wny-PE< z$slX*w0~|!h4?MVx;MEl@j9!U>+$g3##%X;gVV3edl{QJY^u_xcXDO12l#BeJ@yj{ zmoLmMD=SiUrM~_vi{nKvJgVJly{4b2-oAQpxXWSp_CBW9Dq0ExT<7R%1^t|J`e_9l zYU+H0$ix=o_W47I57W!+kBL5}k%-*8fb;3*|0$nuG@a6`QRvnibA!hYD#j2x;!bsQ ze%t6Vc7cNO4!pxf$1}W5Z2ol!F2-{&J2}wgNPMm5A<}ofOt$5<qj3;JcdEXj1x+I% z89wiX)7a4d93u@Lp&iOsPPg9~0DlTq*DYV8)rzf%|1Ve(K1M}Ga9tX|Ncp!Ck9$DZ zPo+QpAO6&fL*jR4mj=cIGrNbhLtXNgbB{&-n<rA>C08(*-n;gjk@|k_CtS`pb}qlY zx3O0@n?e3BDSX${kAz3A1C_Ay=SW$f)N9W>iIvy4NsbqutV4dK#Sr7yOVpCMB_Wp2 z_fg(MiZd4D_>o!cGSVn^a#h$*Tfr_rX|sLEx}k%cGY!XD2)?%^Ijg7cTQslF2G?Q8 z-I}?@8*F|OE}g7N8PHfC1HJx&*V9lyq+oSof_xZa3gln=#B>o%ku*f)LCCmRA&+iD zsXKzZT8J4vmb{QXN3<#5O&EPMu`QC)lqRqo=+5g2Bd&)Z84-J@W-zVAAWlY#OL`{p z9e{Rq+in7#*c-VU3SwO7!WvWHO<;B+ZmSwC1x88TxUxBX(<=qKPiEfPC&r(Jwj)0B z!H@y1#*TPvz0ylU+<N1FsXp4Wc9GOAzyssadhHB8?)xf-Fu&Ik-0j(jWlc*0bz<4{ zR#>ceXV$VM$XPN^bZb`b!LMDF{GP7I*=ilqHM35f{Zy1*=EunPUfu5NkLO`7Ir3H( zo*m@L-AA^@o>~A8pKSVWokr%{*c_+0E1U<K-_xmA!PuDGzF*hUtH@J4BKf!>xp-}l zI?;C`yQxJj!N2Z@FJ{>peO#35%zNz>!Ho&Eqw96~G+VFNhZoN_+Et(K+cvzfmC+Bo z+vjx9#zW8n>N}n|%%#L;x1>8=V;PJJVTh1!>?F07IbXS+qbt@Et$dr!$^PD<73Q)% zj<=tlrzf}<T3-rRtC^2+Q;l!hhbaBMj!_N9Vk!dY_f@z(#2oJ^NF3GQ75B8yx9ibr zO6M;0Pp-Y)-zfJa0>!YoF}DnEgNg3-bOv7m?`a|3??-iHD8E4@VP_nGI>+fbp(qiK z*94&_x{K4fA8P$C-EMX?mR9x7Tn-ZZ5+~*3_cqLyb=+Tm{p{C;PZ!&aYnRy6F`mUR zd%N~T?ESYZ)iz{)z8@(PH^95hp8nR&SXj1JT5)omv(KkU6H{A=$2)db;;}TjIJUE5 z5#VgkQfk36^{&?G6wVn(SLIILm%)x{@9exrLhv{Yy$m1QHMJ6QwldC-i{jtJcad@- zz4DapTTvjkP|aN|{wp`bTM0nGRz&HG7Ojz_Zl73x*#l0piWUQ*+z9v6aNB+;&Ks|D zt9GxqXWReh*!_2oJ|~a6aZ}^dL~$`)=``Eb#&(?bD3e0=lwgTc@d@DA6}C6!ndw@# zZ*F_IowC`yXZDiCJitby@zwKouiq))0jhQ!)+UDP1F>cCD$+gKn&FpVYxwzxrS*$l zbKK=V&*}aJp{X7_0H+nMCy#xM1-mEAtN>HaM{q?EF;|f>fguN8SS{y?bL-%Udk=P& zV*7p}kU1^sO#Q19QXLK}PK+z&T*S~uM`gRJu8U>BJDP849u9_^Fw737$rI><A38uo zJTJi2-#~_?!}R`Fb$==B0@6ttb17kG8-afh^`U-XyhQj5bUKl|y9+eC{3!9ODQDf@ z{3Ywdu19oZ<~kFq%b8I$7A)dyo?SC?1vw8YmZg}Kqlw?Z$?3`0GvV+f|2lB4=e^UP zn7RGCSyY?Pa{Z_6V+5(%HEs-)_-K3n;_dsv*m|=x#~YEAxX|Ng0u_C*VnE04u()JB zDH;{cb#p1~)ce)h=Xi0M@NT7Shm+A1p7m+A25Rcl`np~vielW&kcJGo#QTdsDy@xV zDeVq1<2ih*i1;4^mmka}ov1!^^wLud<?vO*8vIq9C*NhbShqJ3c978C?;mcDH4kNC zbB}|GgyH@gQ;@K#x`f!A#P2v=elIQdS|}(fM~~&V4(TDLw{I$zhxh!(?(Z7oYPg)| z-mc4umL<W5R6}#NI?3*KchP*3A-@TdHpalo=AeV=->v7P){(6>Gh-5`<=Rw9XgbDE zZWtb)j}d?TSs6ZWr&1>wpTVMNbM!el<C~s~E5%eN{@V@RxDa@dIfxmYcEZcWoEZ=2 zZz<DSZ;yvm4Ju|dIMJn&xX-%jW_ypd8gbQA|2WU({JkkRgbaniTk%f=*ZDt;Fd2Q4 zi7*~Tf8dCf?Dx*Q-bKEP_uS{qTG%$|b$hO6kk;2#SaU3T_&YcOStlofBX_NEH8}Y^ zROIYhrc*b6!3zHk!P)gHex8ImcC`8F5YJZWnR7eZp4Kez%fo$cwY{CS%V)D1%%8ws z4+-C5*L@${=&#nZUc5IH|2Qo_Ey~yYjO~zKl`HqTdsWwK+o?KV+>ho>Mm!DFNWxc@ ziiOYC7=+S(aR)v8DoBI=`3v+vh3=m;KhXb6Q2x8d_O=f8cBXdDPV{t6u6Fd!whr|F z3t<^7_5VTO{T~nx|Lh%TjSQVk|1Vgq{|nZM{{I~1|H-Gbsk`(4^7%h=fdsNMNap)c z6WU^c00I(%``@sP!lHsEcIu`^Vq&yRbPROv4$d=b);1`rD80;I=hvx7h|&J=Y)GP{ znG~;KWS6a7TU?zb^HNn0BhGJjZVuc{v(v5>P)xmr<<{%qtl(gx$}xeH@G8l{QbsHo zU<vtZq=oO%j|znd$S>Jmchk3Q-w%25w}4yDH;-GlUQTuzDQ7p)I(*8-X1;l(9NLLv z7NOEsWT9C?5xjp9@9eW#aPLVx*a<;NKD2|(*0ZLxdoK3!nsGSkZWga&W49n%SO;D| zi5}cXlE$0jZf%Ka<1Y4ep`?8WbQcPj)m~1_O*hC{ZFnDr#xIf721(`X*UiZ-`F?Am z&kL}3J>DzYWpwT_@%<g!=oUAaS&NprHM5#dKN0G5=kGpb>pus*`^%(HbR;+U%XjFR z13m>E>^Q%c@_Uc3=&Sg$zMO6j6Lj^oXuZHbJK0ku`rMCiFMWC)XX6h518q`od5x|u zKHsyk=g2YTjE<p`3w$J`-k7h!sY&)aSXZ!3w7Ls`4PfM>CJ%YBIq)kJulH*|7J$vJ z*Jb~5P3xEA_-hlM*0>6NHkHxt{XA*emDiUrjL*&R!2CYiF75&9Js{Z&b?}AfT_C1^ ztackk!`<z_e)hfS>uzghWOHKPcHIA3eQ(R<ZLq_f5VZ6fEjip{7T6CU(udx&7gs8q zuC$Yi?(RIgu!ryV*%b{I`D&-<x<C7bj*GduX~z59Pbrem)w>1X0v%KbZ1oy@z0VC} zZ_%y#xxWqfG7r46zp+BVYTwYJMwOndi^yKODmpQJg!GJ;8^DOcNIXbY2adzFqqZHs zsD&b|X;VdNAN-CDpqaZexG6zYRAX^68>YgP?fPrTZtir1Y$AjJVho>LrIv#&Ih;F^ ziaT6qO5IV4>yr~xCrP5qx%Ve)yPGGy*a>6*b<6BO0mn($v62<N;Q5^v!7}Fw(L62C zkDo_~BHGsuZLLSYQ&=7V;7RA6Dm3<Ri)RN#Q#G5R2>!U^7H&a$m8Y(N|J7^TTf|+R zxe!Bx<uElwcX>2Rl|756?N42yu^k_sfK(Y0-XRUM4aGQIE<=?{K4$F-<MQ9Q^d>DV zrI~78JSFf`fy$LiHCgk@ZM8{-C7>c$IbXqre1~BIqoc5g>{Mm{ORp7U*gKU~jNaDR zKcQV*QdExtF1IUZRJ|i<q`dGJaU7dycKa1Mi~#y6=vu{47Ba^V$Gdg~MuZ>{TYA*F z#1R@Kbafeed#)wemjog5r_{>;bEY2QS#fGr7SyoNpi0w78Nxn6E4CDC&_H<#^Pr$n z-bf+~v!-879#(ls(kfQ0u~e{UUcp*pZr{qm2~56SZX4yn38Sh~ez>2^cMsvtb|?X9 zj2p0Z`*Mi+&IRN&q<4qT7`T&zB11a`C%}ZZf+K;mwGa(Mibkt24v!ca3auj_7KzI> zhFc<Jm~eV*_#Mv)bLNJ0s(^S4)=^#=Dp=EO$Bm-Zjlsm-K6&JRZ;6!Dup?tcyM7B< zZ>{EG?=}znVEwd^Cyc<LeE1lo-C^42Zn4W9jyW`skM|eM(6qghws2Q(@}xYaSd`;_ zU(yD%y-CrWlmKO!sTrgRai)klm`ZvQZE>S8$XyT`j|YO$vI$cZXNGdaa!0_=SpOw` zp*Es8At0(C7D%~Uab9$}Yu=@WWRQd$VACY2(}5xxjen+)fo$~GYkf2=m|SoHIS%9^ z8WUq+A4hnX<v{>2lt;8pBIv;QeZUO)6ilDEk;Je)iBE--w*6P!a$MRb&0t&`i}~*h zx=XuwFr=IitV|i(GS07rWj?_S(!42X1$bUWw0{my9GYd2O@m0My6mc=qAZI8bl<RF z2+wS|isfG-Yk$UG9u`?xhgElCGsEjYxpyV<ODDl?mHQ-jFKf`UNvAc(+IDY=RRL5w ze=zhpzUzuDiw$K9V6@Q2wHX!XZL%&jWd9`qn{X-Xnwk||QaSOaD4edTs9T;?Rt<Mt zQd!Bmr0B`Jq-b9T6=1wnR#iWPR8&`1)IPrdin$apT`bY)3THf;MXdQdHNs~+@-=3g z?;oEjZCxW059JA?FefZ2t}%EJKb5o#s6)6f40`DX)2?|Tom}ul(5~EHMoerLuOf<! zOC0M>Y*k&}sj^p_H)4=l83vGo(8+8MVFXy@#q}c4I8J#aB|l{fH*$!EAirX3YA?I% z%-%0y@v38;orSl4QcOs5RQv9`bu-<jIoOUErIljiqA>|RCsEyzrKdB}y$SCarUL%P zE_i}3^_@==kn4BTVe7ho1}gBg0Z+aFL4kx7c_j>Kyo&b0-akr13OpmAnYaLulaz3# z8aj~{jR{jlU11Mr74EIz>gWxpPX8v!K$<;KRG}aF=K_t^1F`d;Y_Yw!qWf%#?Y(B& zZyj#!KHA>Bx4!vo(V0E*y%DQ4z0V<R6Vm%OZ9;xcWsyex!d!?!!O>%71rnL}oa+BC zuKk}pjSO$cdKL-{#P9(EMDqXVS~){oQxQ{R8!<6;OFL$!|A%o+Y;3N3{0x#-Rycl+ z#kU|JNi6yaR4dhL&`@D1Sp84Lg%q_ClgU&ppy4#sH$vkf92P<NVqOn2BeFPr&Pw5S zrr6pV+<waYlqWNZD8Mq*DzsWUwUt{SQ;AZ}yk>jk7fE0*zk0vC`||jEEk3_H`Dc6H zww>lU-?E*e?03m9{s=M*%BzAEDDMCM4Y_-eCx<K|<KdTbw_3MGXSqD>a~&AG#IKpr z>^Uvt*J-*Q<K)+PP0IUbiFcZc%w}Db|L6Ohl+6h(<>dRlbV6N=!}-s>R!wA%H|uWe zW8<vLxNod=ui?wo74UG2<65%=py*n?{sGguo7wCBa=Y&IdDGX-rFY%y@1@@Zh`a8z zf5BgOM(FnNe+sgudX<v3=L9n7rxE@c+to+%TBAIt$0)!igJgaVyyyP8Wg=!-4a9tY zw=jHj$SOFA&<zm+y^^sX2Fio>AcLM8tovT<kfyf@xEdsX9xS@95p<VI1JX#-OJ@N` z#tt4j>h+?)x_p^126s5UoXh^1?2m*6?v`6~@~^KMJ!atytbd+lok{~sg&J%$)!MQT zxT-!5EZ7~S_Fy^~s5+3x=#2}xIuc$Csncn4oq^xaZCmO8RB-2$^{`f}{-h-FepK3p z5W>^Z$4RtX&Cq`T{r%$mos^J|iP-g0K{)0eHQ;byq-+%lzVz%NRT`fsRHBG9>=9i+ zjLMp3s<eG|5M?H53{%#NA#?f{0~h6t_ke+GSHu$PE)u4lESBg&CY~TUSsw;n<mu(! zrby6fkWMqrN>v1!A>v$xhp6{Cu9(L)dby%)6>UYZ7Rm3P084+&yE?g3s8CedhB?9D zDWSSzRvj}vhk8;XCWx5T&^{j{Mj>LS>NO*qA)1o7fxSSOxe%x)NMX(@TtGG*vUa8} zyzopc(Xd6ra``u8ri&H?#X8aHkAw}9cf3?E2t8u%UWBAQ&@(Y@ib8Z4sMapbj(B$A zoIG2&Ne`oy8Ywj3vAGg_C{fj}AzpEyM=3c)S5>oNiwYr)q7DJ<{2Z!Rp<(1saZ92> zBL7KtpeIrpMn~8gZ-rKjK1`AGBLs+Y3e-Hor8Im#5;q`5m)3|qu~nf#;tup27^vLt zc?wejx>q~qPOFe#ofI2Ub>dP@JZblQ45)J3nEK^IbpnM7FaJ!KKJjnDG}?sK5p`Mq z^Et<~5)Y8axP^se%)XnKiai?}33BDTe+g=kPXKg-VStUyt;qy!{PvOh8s-j74@D1o z9Rn0i57eUi6mxJt{IOONL5}JUuqy8!q@U0T85g)eEN6u_uJOQY%{ls{uqj{{OE*SN zmwXVNLfH|ITrSCzRu~nUk`FGN;AP2YubgTw(wML<eX<0iVSI(*c)j1MT}^d!DC$jU zYzV<eQcg^KXg_P)d4Sy}d=^YXbE?yDotEJ`#*<CS-`XT+!6DG(Q>6{Dk22}{;G8_X z4H(%VBq3byeAPm%2zVjX*cm1*%jbB?ATKXF7`++@pHm=AFh(^coE}eqoKqmS)3N-g zm<Xp0`ves<kP0?_?E(U{QmX@9N=7oHPFP1m=EFuvO2DfzD>)*5QCRDu<6)SH1dZ@P zO-3icf3O(}71NMzkYoY1R4xK|_=!!xK)}!4FyQ!oV9?hNaUSJVg4hV_S<#KmKTg$r z5CzkQUj}hi?$1gX=mQ%`kRp@dMlm`9xFgmBbi>l0dqFbfi;-k`;hA_J`+q-Sz1)2v zXK6+sK7UGU=c@E%f1#O<uK(`Y0Z}+Uf>7B^vwln{)_KwbOb5@T9hZT%U!=@X$yDgY z4vX|`O#NuD>mmTC2Y0@&^o3V-^V*$zVHK0P9|j^!541bb_FvhBbPUttd9h4L(DMfj z*Kq)05G9+yf+xg@!!&v9HI0bff~46*e)dUOF^@LH-I^QV^6XRd=Tq~)kHm{BkCr=~ z)-!X{iy3(xx)AjLj+Z`N(1)NU9J=uI(odE`UDVtS8Tgs!;`f%9`3t1%R#eqk)HjCi z-TaII|7s{`{9r77Vzhk5V0uP+bUHBb3yQ306KJ|&qb-}yqq7WeY1PI4+88CoQD;`= zi9B8&$SP;2hC2cAgV03-vDj?E1(&0TtKxU7Bd&ZEGsYAJR}-GZ%P5&VS3nqMCN-F} z@5Q_sOY&!se#Q&okta~mf=d6|2mOi$|Mto+4dM4b{kpzer!EfdTm<CxJpJ<A|9ZWr zDPLjkxAoosqJ7r`g_*&P1BPbYkR^&v!QEn!X%b*eyyAVzEl%G)gTJPOzp8`17!Q0k z1_AfMUx-j|rNLhbP;W)+JxoY<)S1Fh!Hz(SBllfczDoz}@V=(^+TeZoLwBz4U<Ypa z-%48$Fp*g}C3nD?PJ_t;!SVBnOwi9cN<0WWB(P4?&6#(VVV42Q1Z~>52`vHNzGK=~ zeveGAqCaV&OOH2fQ<(<>*(d}$LxmaNbjdYAk<;{1zVehl1d%~u&Mou|A*k?IC2^VZ zmcwieh+I40kLTZSLfGWxzV_ux>QZU2W{Iz=sv!7n7@^Q;L<Ap?;Mg?ZrL3Mz)qnHn z>=*egkI3JEzM6fTed@w)KZ2Jw;u=B}LILv;MgRKjZpH}9AgM1N!jZ=$@}+_ADxFY| zg<`#kW{;u``tXR4A^_@tb&%$r{RB%~Y{3C9V?ZTSQdY7bGxMCDi})&Qs)<Nh-iwW7 zLGRIu!sF&Dlf%Vl-{IJw{qr{A?N4tWF!t`2a>*%4_z7<s$6Q&Wj+$#45)loRU?j2@ zhlhVP424O>ysIO5ncWRiZG$vN%XDmN1>pt2O86G9()8Jrk|rbdN?OJFd^~dy%@#t6 zCs*Ig_<tVa$oUAr;9T*)mmM8$%EdHjR=&x^zdVI49@`ZnW`*G_oZ|U__xy2V^gu!q z5AjAMp$kOZqMQWeQGaS07_{qIk~Z;(6qOAB;%TN4+cz3!of&1FVM#Yk5a!KZm5Q-V z&|Y^%&@gzO-*vq+3~Xmv+aUUfsIP7%Q&o9yf&^{<X+q-~BvY|MPJ?B4FjazoMNK|n z_Pn6&j>aN9Y|Kzpan!^_Mbgp{3%KMTYY++WKXbs`aYmXmgtz9*U&7WIojhHBU?aQ$ zS?$aJ8|Hl`&Y+T2J#0C_KN5!1?~0Q`wp<>n?7LsP3vyc9Eau;}7C&=TWQt_+^30W> z7t|3j=C(m__rY*%H_e2}nPP<KP!>8<RyEFJ{2ZB2<x{Y%dEz^T#SEmgLIl|`C^Qi_ zjxEq7lrqXHW)yxY$xO-o0bAz@gv@LAIpy~NCq7)+Bor5G&&U<bVY0WoI|^Tr+p+p> zrex^IBJ8yVY~@jxxp%qVMn`SZ!nsMXG80ebKJ2}=SAZ{>v*PeKD@)Ma*lcwb+Sry> z$WEJeuLM#?W1s`(#^vdC@osGw;r@UQn{3)&669UgNTeP0d>x5;ntVV1F>8C?_j8|I zQnpQ?gLbqc$QHhY2R`FY0cEkbXh0Yky`o9bQ?o^YK4@K33m0NdC+A**swT7z_pX{7 ze(wSbrg<W1@AO5m>Nm>q+h!A_VL!)d0-|9yL%>^&-c{}g$aS{!9|k*y3<;L{pu1df zZbaz~CS!+rz5|BG!d-~q@6FgA(|O^&z1`kz@GCHHHN!+*<%ex7JCLvpn>e+>__ACq zAv}rkI9N`D90&a>R9d!CPQ4cPVO6{h(Le83Kqn9+jRElD#doPv=%2ppPc{++<#+)U zrO~_z<sXyAKoQbr!8TQz>OJb5KY_Qh>35E~xpie^`=_E_7~|5>^BfTV^FUyZUcB)) z0m?FR3#;`g-=LqpPNxc=xihC0F@Kdj%G-GluTASYy)bNM;R0rdg>rZcRw~6taA~iY zEuMMDb+(|T9mceT$2S^QI4n0+1DeWcq0+6LS2my>fo;n0g}JS!S3pa?A7<?9%VX0N z88rxA8lzX(B(6&57|k$Q;m`-r^Q&gz*lqpd7FH^)2UCK!F(0+;xZ<ANAlZ{)q+xu{ ztyNDnr?|SG+3zf&2OcVQJ12vyAAZ80Qe(!oL4YINCWOSKm?Q`h{&3nnTNA{BAxQEA zZKO|h;+0o-?A8jWmWsjeh_eqc-IZw@1Q6U5Y;dvj0_f<l?<1ZUweO8BV`jzu_JZ<d z8}TiVh21qOEUe2Rsb}>T3sqn!P<dfdaSMoc)T9jogaQ#{ZSdT8oEQ-J)yZ6)clzBo zMwTs-SLa@z`Q~0HOIG`-SUKB7pOsF{^w#@P+jZb}&d;?jCv66rah~@>_zpJ9N(Op* zCRg?!lByy0&w)uC5{9<%a7P3oJIkm?Wg`~gU&m#%IMD-qeb>4-BL`9z!J$&&!cmSq z1qcb`22sBcmBWGo59^CbpfoD1R#CzOv&cZ%`{2<>=j(F|34@<rD98n#<jXEt$R6kD zJ@<c6FA8pQ)+q+0xjl_50&~hV6rJtARm+|H&Am&}4>Crtwqsp9t^c@0&%o-U4~y7I zKyUDN8`x8Xs~$>ATo$A~KOV^bw%j#o2p{u$5W0DX-nm+<hD3H*pu2W9P06Ce8*mx> za5$iKzs-**6lU@H!0bi-y8&v%GF_JbbtD-LV=J4s-)}LkOkz5x^Dj)0#0XOHU%-!| zcemK#Scc{pNikWJ8e2&eg}XW->-nyb`;3mbKQ#|Yfzv&Cuiy6Qbf|}u;~(y*cpeHe zj^I)gy;Nm_5T#8BA2xQb3R94?l1%r*5;TsaU8srOxDfOq55w1VY=c-&J39k?Tom_G zVO{-0XI~ydresmMKUp#S3@p><DdG7}7pC69%i<i1R}saFLp-TN&n=OU=|gMwjC#!H z);d<!BFg(GNt}uGQ&4Cbk{T103L9v)|Ij5V!$|?n87|ubAHVl~nfkI6M#TuWr2qHm zF)II?<&UnlzG3ca!A@9VW#*|@%Pa4ypBRCa<)=OW>t6A>!SBfPYQ#5=^2A4gP+UHA zKzczavjK^+V5-_i4%jUmqCFdfQoRY*H`@^3Sk=|cb(Vjpsdxfxsy+7ciYitM>puq{ zVfU!vnKpegiBjAC%BQb>br`6YyG`@LLARfdxFZUEeMJ`Xq-0j2jOGrz3<69Pje#|c zloc_iIkk&>4ALZ~rE-mA&1&TF7_l)6%izMOK1H+0hcCkKEbzU?KkuoqA@-Ue-cw2k zOJCzwiXGrT*}%OCka^lNK=Z_h(vJ6}{@8u;pnFd81X_|s9Kqj|_ok7aMhJSe9}?j8 zsh=8PR8j%-9Fo%mJq+8_{>cZlFvk{b;{^V)KM<uecVG?E^ANu+9A=uUPb@<OGkRk( z$S|&a$ICVBi4v-fzDOr!m>>vM2O7;&?H-`fre>yZlp5H^8V+;|2iBG*7P&w)#9olk zl%xb2z-UeK#=vVhqJ=C{z;xv?(}ySCl_b#m5ibC7_`13TcGOCn`O0O_L#6U?zvS77 z$bzwr*he<CzSJ`foIkWX?iluPW9J+=TAO~B`NLQI>Q#P2OllwD8eVCZH@d0oyQY%= zsn(vU#a4DjzXaPo?8e?vv8()p_=EVg+;?+t#E2@U#<kw0!pZgBT(J~GcYOq<N&Kjj zFb3#)T}vsp+8Y_ljfC1`{%&$e%L9JsDg4tC=B4Bs{jC(G*Dw1L%C2`_!*OpqQ6m@* zy?VTmrH8N%hfN`pq$053B|RlWQrcK!f?SrVEE}TxpsaZO==^^JF*I)Do&C~o&(@vf zmeEJ+n+H05D!|Fe<2#H`uMEhhG$3U;#k1q%XX)}s$H?qEuW*SHO6j)gmedZIYbNvb z{wG9h;9vXNWWLnv2D<$J?iu}pQ1Qg#ttBHuF!HJ@Z9=c@+I@2EAsIigGtW8DIPh6Z zO=uV<V(>xRX~ir;j?$ko<)%hZXXY`wi(lcF<OS`!(bM}MzrY=y_MwSUoUl<q!Je}l zfO_>0iq<rqDYCkJoZG?D43fx}9ehXBi3R!u+&sOVQNCtf!inz9#N6rRkNJTxH4^T! z8YGZSsusF<3mT8~KF8$!S>ZV2)_~@GAo-5wm-PJtiIb`(gbx)w;h20gB<-~1+?*>e z39S2nJkF8Eb5;CkeDHL+S$MVga@O}!4f2u?(k*q{;@zuDe8=qeJGaKyVv(=RdFE7d z?6G>u@UX4er@&DR6nfDFsqi3_9<~auH%NqH1BN}>XwXj0!|G@-Q0pgYJ&&(qRSC^3 ztASv=>61Rap9g!>AD?I*J%4(G$QAYYEZ(_PD&l@%F~l8XP`#u{XjMOCqu^i1(qZ;N zlJ;OO@{(Vk8~xrqGaK<rX@C8i@W_UKnaWmvOUYnDexpx*<1!KS>G=Te4n90lD3Ot_ zeT9u*K)#34rf?aQjbINnwgZ7LL48o(Da{6EW4%LMiJdlL2c$<82D(~bj8=>g>M0yN z?0(tJzOf4ei+ClIw;*sSt(khU1{PDt?dSCxH&kKrQ!l2Mfn0XjVfN$yq!5SC4yE6$ zbr~r*`GbshZ<Az9qz2mmd=_|zKiVPz-bWyN5Q^~OW9QGqctD^Q+ved_I8XOG6)c2! z11iKqOb3oj)9Ry3N&X^A^T(9T4Ly4_Jo^mIW&8g3hgh16D6yAJ`f14ayQE$J?znI8 zi2v2k9sW%kw4_L*h3J5Bf<M8BE(3`WCjP^;RNPw9KlG~25CJ(D0kx#T7$eDX<fgs& zcKp~BmYny^Yi<Ep4Su9;;QGgyL+ar?`$vA)t)KgWyH{T7Cl@Vu!aSI~!$-NV2(Z*^ z{&kk!0kB*`&!OZ^l9dJzH^-`eEseMCzdIeg2&baUVG=H4!giE3Bh}KZ@TFL+X?0{S zE;unwBvQ-XE5nnan*x!JPiZejf_|8VAY48i_^hPjba3=GolZb)a7ASz=2M|`Km&e5 z6D=7pM;Xvpo`gC1jC>{h(!^77oy<ywL^P)_BAPni%J3}U!_hb<z9OeW$|Qt+t1!-e z&i6@AnAQ~<R?xIJg4Z%G^un&VSxLM*o}dmOlv-42OnK#Sd{raukzV9~CBL;bF6&4Y z$f_$2!Ksg$=p=2|a%u_igj9tM2}-e8raZn3lfh)LiH@OR^WZV*YaIN86Iv*}JY~`9 zVnU(>V+)_%`-;9T!(|6gj-I)k=jd+BUL5ph)JYpOkQH-3*nYO}>%o*RMtFP$j~5v< zA%K!%#E3bZen|l}?DRV+AVWt->wP2qwFG~nwnQHd(@&+uu2_K@WM$Cq=a6sM+Lg*M z+-f;K1HQ$?vED<zi@kTY*k}nVr=>Iv?huQjP0Xc=I$xMi)gfI2^|TRGKj9J{Ssg0C zMtcC1J40|Fm5+f-IvX%7c<|2q5=!{at3fe#hxuF_fXW3{Mi(nn-i}_1oz+vG_=wa7 zwGe3uqs+C=^{2*Wo|Qurktr@MCQp{K)hF(uE4K(kCd3(caLef{{&k$!sDk%eIh$8U zLm1Z>UZ|48OL$gK1)&J=2euD1%9E_(JcKdAgiMHthy+~8<Vlsk17U6a62i2n1jT_l zX`_U0oEQy$I>M?&b~hOs1saSO`mZP2bT4oPlCvgsbKFlmuA6!s^NMPtRMLc-Oe^(y z_>`+op>V_wc($?}#8I}tB9LzgP}#!^e{g#+^Dv(OH*pMazkCL-f4UJo0of)f#-LpZ z3~Zl}nD{scwO`&=J$e|Y3GJKGP%p_55Mm7IEC|p|Sfv`(Y6jFP@T>5<kpsST6TAd7 zAJi+bCgYbsZJB)4WvM+o;(D?Lkpi*15gEv*-e_OK>$xc-F|gyjME_=(7)Z0@NOO9E zzXTOUGkv?8ZY^1<wJS(DvqRXaPL*5QB5_T)H<=wZK`kS*c0k_Ef*uxO3n1P|SUCVp z?V~xIiT^H%2;;VS6r`~Ah2Io@?{n`eqTR-#vB>tyLk&b(`u8KV)U7;2;%*z6IdnGK z;4h(y3CwK>1g;+f1iseaCuiD_G^ijXmzjTDSA9u-l*jt1@qM1;uQi+BfT;Cvj_;Kg z8?$NGrq<jerCSa}4A6EfLi40G%NPC(z5z#}OI;n+j86S~9WHN5Q?iJ9n5{U1Rta9I zk$yJu8p{2U74?MjBaG@dO)0Y2wjz)CYynnSRM1G11me+iU<@!NYhaDp(1F}AHYD3H z<9u&RekCobsW;|8W!82;y}QF&@Rt2BxZ{i6D*Xhp#a>t91Zl%7LFHWY#{~G%schQ8 zY!&CYYkrid0hB-?Jy-%BWJ-B5u6pEG5xCMe{TiOQ4whKuzj5qX_SL_~=|#AD&qO7_ zGB2PxP#?4dy)MS;NC2rYxlV=MnO9@JHOV~SPvJ|%*Pd9{r`OW`-A$(nGDgo^sm0bs zM$d1(kD#T0Np$yYBvHQQ%W(172(<#BwJ1?lp|x>P_kDxlDXa$tzf+n0g3y1IwGw7? zi@Cmit|ddmI$HYi1e?&-3z-g+1-<k!jg**9QP?RzQV^Ia5!coiijObbB_rC+SoWiR z=oKIs2VRL!Ld?{N;4)Jz$VkQOF+XGpuV(ZJR>~#VQ9a6y<)>=}M7jc->cNZqv5{t^ zm3E6C@9I?s6Y-Wd3r24<9fF$hN9zYTfp#ul-2uHyo`!Lir})-fHED0_3XbqN)_lq7 zjRoUp_HP-d^u&K8pWc=`l|-2yF1+CEXrYA7?*rFS&{{sI$!7JZ297_z6sYt1EY0qI z0FO5v7BWmri#UP!S#t?8%9!^iE>Y{%xkshH4~=4(#I>T{di2Bp4AkZlu1XE5^mEg| z^<uZ|WREIJA6063I_MyjQ_^{wk4<BQj_+AEqJ{eX-({kO7(5TnSmm9TvIjDEcmUot zr<VVAOw^oW(|iF+-KP^gD<n0iI5BJ~{ZuaRCC<%I)^f`qWm)*5^gdxe8$0Aiucj^J zNY_)%P(+KM^knJjBWL3a$e9tCZQY6X=1wMfdBh8M{Nn8un6n7z|DF2%()bDF$=(8# znwj-SS$Z2RE=GU4EEq{-;t$zses7t!>o8VZy=gos)tc1u+-6QaU1rXM1QjhqF)p~; zEPwh1f{N+ny-QyA#UL`tEV+_Qk`km0a=m?#(>LL87!SjFD#@#UU7u;H3bi5xSCie^ zSZz|+8*avyJEK&|==6MBB!$HI7cqL?AF0pXO@$N{rNu14?~k^ZHTfi&<wM<uj}JoK zhhg<<>Qzhc8eGMLzAe;n4kDu%bPiqi8y`+yN>-8=!N;t1Uoe(EyjsN_%5EGF+|%L& zK92tCs`bd>^BS<G_C~<Gc4&AJekMmv%v`!PZ^5Cj=w%pd44aEkYol*|KY<v9X;0)6 z2jJTHx*(V}GcAl8(zm$+?f_?KyFEjIpVOa6l(M3kQVwM-8V+H?0=wHKTMMT>JA&59 z3F$c12>C$(!pr)P=j+({-)2V8{fJniqWs?!qd&j~ghdGhx#rbMG*StSn#b}1XC)-= z-j)ZH-+K4sy1&ZqNbmAbZ2dX2>PJ_is-~5Jt;yXt#MZK}^+oIs4SCxE*@qP4&t(HL zCan{)Yphl*?UhOywn}E&$s4O9Gmc*_wxp<vpF^Z578UAtNW6A=dA&2PKQ@F%O{$hR zyaoWCE{AY$y~>1hEL1d3GluB!QWY&g<nq+~^<~`x9kog#Zf2IQ6+cSGgmSX>PW^nX z3Xho8s*()sOipGt$jp#NVs4UoqDs;ya{z?i%XNmwKH(O-)>mX`Yg`t{0#W+at3&xP z$^?sA;BpNWa}5wVmQ%-qg(DeOK*z;c7)H7<Z7|X|^sTZgYocX^%p<+Q6>lod+6fc2 zO;py;L&m#j=2T6+6P6Czqo?Ux&|FzVpS=1od>ERbUYJn%-G^XWmF66bONW&IThJ1u zy{l;@|DP-SG{unJ)X{`BVme|cq8u>gDRF*3t*Z8a^?+$TmRO?AaDvGAou7GdfE3ZB zAz*S}@1p8^e8AU?o$KTZrE8)1HL!X+kTYOUOOl4>iIBD_&esP?QYrFRtgy!t4IL8$ zNG@qD2E1$l*_?qR=Ametgv0Q&nd2)!=ym9?eE`uhgF)^WC`IuiQl~LcY0{C30n1|$ zL^(ph2Pz|%oTUCF-4xJcGJ~TO%Um8vnq|+z!XF)}tE%xT?Qsp$T1C#V8;P<Ii2D?- zr3332M8?;mGNZ-@#f;!cY*J)!No6USJ5%?{b{m4!t9T1kqM$m+YqjO~0TULvqPU;d zPrrNH7r&<w1HjbJ-16_jUSG*i8u*p@-+*5>Nbi#1!Ke6^EaJ-kUJk9btEa5+IUyOh zMfBJqi>^jhN@xYxC-u@zVxVtz_yTqryoVqhCFTUZdpGCj27EzgRk9R+mcT!VB#9uW zFcDvz0<$Ri1f{AIB1l$3SU6>QyD5`0#5-X5HZGf3Iv%hoX|O8<46yd_<2Jt|Wi*pi zc|8ovy~i-Gt4>z4m9w<QtsR!pHSqWXUh}SQ<?ia$cXvUYx;eOmI9)u5XLQBE&c;$9 z=A~oa9Rn*Na=uuk5UVzFA3{#DdNEYg^#atUps@9>?fOx5xEHChDxPhmxIU-%DrJ~; zI4s6*TdH2}C5JZTT`8M-=Rj;gEiBDi_@AuAPTB38a6mp*f`@2Sd@=xiLWBDB_kbR* z=<b!V@U%oodjrg636-3c7?`X%iQgB}eHB~yT8H@(=d0RwNq42COo$8JLoWDX=rm6= z;){}xyoMD%G0nt}1nM?Ynqu^uNNB%_;I3hcHWSdZ2eJP;mJ{!+4?w>k*?(eKHgeDm z7D-oC9}-#fTtZywsVOQ~&XM)Js4MR9K@MOA@$|py8!p2F#sHVM5M%>9Quw86mwpOC zmoCB|aCSm-RyEovWrKRd{Zo$$`=l<d!N=W$j>|XXSoOA5nt>HhvfhnXa$@DVqWb5I zntG?ozdv;)d~Yf}$M&xM3F1m}3;JzFY^3b~`hAjvRUNARrB`w&IO6duRnoreD^cMt zMY-FeMCpZ6iU3|v;FEV5{8`WW-rHXUGQV#(jBOo*M<)D$mltLibs4OH`4XD#H4nL; z_O8)ACVaIowwr`aB_?H5j9ftA_5xt=x!{HcnG(F|%HS1@0SXi@Zyypq6Ts^y^#(p+ z?X1An+gC1chpp^PN9BZ7<-h$2jRf9?Pa3lE14D8bGL6xr3B9S&*m<s|5>RSQ68e4O zt8Sc;rt}|>^2N8WpJnGC5t3bKfhpc&hh>}FIB;6(Yj8&Sdsn{TaiL7(7na5MXesn0 zqO~0}<7E6Kw?kWxbH6LFqk)&XL?cKPdHdNLeDkJY!D)A&{hgf<L!xAfm^j+T4$GT< z9mTQ5iODlPv5!~aIV<F2a}=Wo5VJAFn%iB<W}oi`TX}7}XpPN{;6qZx-aJr#68sUx z`A+=pgb*W@xf2-eYuynl=4G&4s1n>9QZU4B?hv~R(+h6UL<3hbx0nyGa8Pes?SUSg zPK|y`ip`{mcCbEY^HF7C7ONARlEvbG;X(k958k2JdwqO7Z`oO2U<?`KVj;0%B;t|C zdTqZr^NU<4eO5_(2qJ6T3PbtlQ5)a?9nd`?S-h<xLjG20xryK?arHa3SS@Zd2c-s4 z(<SUOm9mNV&p+miSwMRn*7x#sK13?D@wCocQdM8jdMdD!h{Q8#=XsKUBtj37+|!Ar zki8?{j)<z;MvseTcRbvhNIqq(7)Il-PHUw|Vs(wV@czm%Gyx~$b2|btEsWA0`H#C8 zBN;H~(ucLM53J>98RRKjBgU*=*I(&aVy5yr7*1_R(8Pv^r=OCeTH2m=r>#h3W5i2- zLr)a^*ZHa6kmnLqgsb|j%DnoCzxW#TecuhSf*RdX&0^VJ?@Acp*NgF!4`@WFMk?j+ zl9vD+#mjp1Mzi_10umHz1DkC5L366MY4P6dhbp<hNL(Fg1Z-Sd0s?-2UUph|W0g-o z8!)Cs3kUd|95A;RKh+&jaIhWn{(+J?W&XVd2O&?tDq6?Jpc3i8{P06Q&4~8chVnQy z$Q8#EOLjjNeD9(Q(u1vIsKH!19SkahQ_hW|%o|~eHOD`tY`R~myB#n~bD>f~zqc;; zAP^EXBY+NhF<w-M>_?w#5(5i}XE#j4clSW>KTQh*s)yF!i5W@UoX!86GY_BRFJ)NX ze;S0j2W9i8gn0q4TJ?5U=B%(y_684;1oF9c<D}##2j?M5`^GSijSbN}y{Od*z2;M6 ztnY2KwZq;!S8?FIwXfAYeFFgLd1~f*H#XI>qrWeD-YdA$&DOj3&9)H2dvV6T#BUBA zK<$q$?q#rq_E}^{fs?D#3X<mH6J5gx8W%Ik|Apu$XzJQehp*5E+;nRJr{fH6=7WM# zQ#F+eBUJ+1C;=gvv*KvA;~rmtj$*<d8XXgWDDteZ<=1%Yl&$s4=p6_W)=`nrSEWQn zD^=3+&(YhD)~+u=#|fk_8tHg~HmfnpH-Xz`<~p<K#%IM=@|&6AE85N1K|b3}tr%GA zM-;2q1CGJm0)ur;i~%8G4L0hiXbb^(AJy2;S#?9IVP%1uFbjkpHR0WMGREjRaHfTf zkU<F(j2<_sxCw=kONtWl!LkKXS20+{@M-QbcwUB>(+Z9+q$utVXQ%|}5cMI6rL};k z?%<Tih>#si+w2s|p=lJOXU8#%0+w7np{nz#K9VXhRMg{K{D`r2dQ!LvSjj|$e2n*= z)svX>O8altc{`WdD(Ie8Ds0~;$2eV4hcB?09hI5Sk=P3iN{p^St<t<My<}YStS^jM zEiEjdnX%_z$;2F66jzWqi3Vxm&;m?BM+Lr5fHm#8L<d5V0kG$dS)D$RhTXWmTX!EC z8B?{;e-r2mjed;D)&79|$C?|CeI2XiAhLwX0?bgAlp}m6WKo9%HP?Ge07uA|Z3@|! zo&j|7Azg_((B`=%7npSKiy*y+uA@>(VNmS(0SfZ52tLy{#g{AN<PUIR*c=iQmjoDW zh6#Zz9>LvvPDU=vfm<4snXa$(l4Q?;2~E8Ohe42cda_(xBa2<;M|<m^*WhXr6K}x> zO;mK5Kgxxe38P#Ik#rx)a6<&kuFEkn8G7KF#Y^IGzJE>eE3l!fHOAfL#+}i7;WYJM z7u)zmRTpD%wcbGt!Y6-dAU_1uvsX*&UhKxS%`i7ClPMmxJ5Xs@Xue2W@3UaEn%YHY z%GzJMXo_JU!|KO+SI_)z!v5IIT>4i!r=T^$rF0RNt>pMkpGBDR-t#d_hUq9qcx1RB z#f>0@{%*$GvRu1@635`B10C$;iMZ1|uOZg{VPZ0nnyC2xQQ{8*7bc*Rqox)2kCZL( zg@4AteMm4Hv4&02><(3n%cAqlqc({;ViTw59U<K);HfBumkg@2YqnkY9y0~0{ut>A z*kC;h*mq_OY{C!CM$Vo^GtUyB7qwgHz=xbYl5n7CuIT*LllkCy9yuxpDYpNH+A>$7 z@+@zM&&M2~sb(I>HG0-j`YQsQ8+~lzOyar>jsPVh-qZ~4_Bf$MtdR2JPu*iuT4Ru) zIH|yfQAGTAHZ6KGx?HdV`JqP^Ywi^gQ%q|0xWw+D6SV*n>24F5JKaP%(wwi8Y^7OA zvsgHdQd9+Srk0ja)C8fgL?O^3Mp<CgPM)_h#|biE4HL)^v_ncc0IFq*3Sgd7Q;6N4 zW)Txl$chF#0wTf{U{NM15gW0E*-0i3d%}?gcD!n@Nd?y)vN*i{=(4*k<Z(jab?`{S z!H&-E0rGINQpH1`lPE3H*Amn@JcSiFm<3-vu?D6~*o|b~01GZp+h~9YH@%$kNR-$n z(gB@%SH%*h5op<_4T(Q0aF4C&?FM(#6E?-8MDbA|;>G6^1+5NkI%NGm2Vy2%qT<k| ze(=^?;M5@LmyrW~iuH%E|MMqG?ofYB;LyECw$AzlMvb~&YXo#Up|^laemA~~5mOWm z9`J}bL)|&%OQDoL<sLnV6PiMe+7^Q6`Dd+KkBK@fLhveDbdm<4B*W!VQ=%X$jyl!k zX_3U|+5F;Vp?vSWAvv*a!sg0pCP^mrTWzdLz)pOv5W%Hhn~$<~#vN|MJ8#d?q2|Oi z^_0T%w}^H~@L$+WeV3R6bxY54Q_p;J7EPoR&|l_Y;UrGUhFGTHCpYZO<VIg5HXxIo zd$VzrVfoM?iP))FVJDm6jXOd1<$!p{<SaGb*c#s0S^>F*g+5=j3|mXC8uGd@GG=^c zQ7*f8rgpa+%*-3Xndy}1Vy$>tE(8oS_@t$=pWx7r%TB6){>yM8=pZHqmepEFzy$en zVlmrzZE3H!`yJ-mK!fp=)W78g=#|izd1kcfp{cZFsg0)M)p+GQ7VyHfO|+^h0;d60 z9gl6^FjL?_Ry#ITN>-ZLM1721P|i*d!fAP_r|}(yS=UAQOdq7`B<%a4{P{!TeFufh z1>sRgfl&v6_9cf+^JqT_GqcD6=v78^%@dy#*ozD*BgsbR{3KB_56>I<5ol$8MdkqZ zYwlF1FF4sEPd?@06e4Y$y}`v-Np;~6=zOu6Wn=m6Wn-L*dMi8vK8uggIAecYQ>o>g zKK`bGu+}_(343Bw&i)8A^Dnt(>Jfn5wk0igK07<JDnUNteo~?(JaYtn7w|jAnST*$ zJ~@|)A<7v7Fd89C4Js?LMius7mnT!)zfbdduMBxUy$uWAr=Q4Hck2NADnM&N%hN*$ zV?c+|KaLt;h)H2?Vj1kUs0UKLGX1_P%Of-sF9Dv?ywO~Ma!)~G#WSwET2AS?Gz`T1 zyF3=t0A)a$zYm@PDhCKfEvL-Bs+FkDkK=lZ7WK<7YQ-havZ;dZKE%5@6421JvGh-L zq>#1EOV7bvdyxq|y<BT}TcIhc0SL-;uqBHG`U)Ep$hb9RXUV5v-R@!C?p(F=Rv~hd zGQ8Gvr(p>?ua;E-o-#fWYT*%}zhsz|R)syr9;IX*IO@kLDsJO<vjBGq2hj=OeC$PA zfP^^XzXK#0f>D_jdBD*)s}kHFWnd!KII{IiqM)_=ek)(!GA}>RKk`0?C+)nEB$?xU zo3t)DO=)Doj~evM28&CQT8Om?x*{%qg#C;tcn~tJ^LPLCh#JTq${XUK{bww?kOr|B zkx(7+UtShM(Pe66u?d#e*0i{F)`tm8vulgEt?=oWCxZBi55c#V0iHU9m?bG)FcPYI z%WJcQo#u)0>U=k;s-Kc-KJ2(G-8b^y*vL#<F&W7egylD5y6ebpSQpA9i4v=31wxQG z$dL3==*MGe1S7P^lP-nw3QfTpZ!i}wNup1`iA*G<#m9(_U}K(n^LS2^lBTWF_EK_T zg+p3dJNgDZr6{x^Z;r6%NjTU^Ud0{o{0%DzCjq;BN!m~n&g`f-h9}n#FQ3o0Kl*c< zh3@V3O0Ltz+};7cv@mIiGqi6oBBrSG?&S&e3tBYf0`_%MV}9&Od3Xdn<tYn;voW7& zwzx;Gn(?j-JMS~K*b}w#_0w^#4a-Mhh<oY`L^T#2Z9UN4;)h{}tpgrA#BXHCTx+5d zwk22sBrNTu1q<{G^f=LB;n5WEENTMC3`f9L-HjuTMin_ZuKv(o+p$*U<z&`8-xZnh zJ;J7YtoB8{<XK^Wd3qSEAchWS>`%+tWR2DHcZ$iLRM_}o*tntYKIl6Rt{MOFIlKLy ztShK59}f8b<pST&W_duhv2<a_k6McM1Pu8i5GT}Cw9*z>ME5)gQ-r0x9Jt8l0|^tv zc53O=0?|oIr?oTQBbCnsG}+J?jl?^duyjHBQgrJ@o>sg-5XB1Vo*^jP3KkWk;F6i~ zk{Nc7MPA@3rLHVR`-&bcYd^(*-MxrUb@jM7vZn}aM=MvOq=rp>U^=bBqsk}O_N!$a zT%h;iA3E<p`*5RPGF+Ujk&I+rsn*WfyO-t*5L3*uzf!W2QfC@9?;T3?g8(<TQF?iZ z%#W*b<d*L-)CH#nf|@!iGY^O_YL_8!3W<)1ocb#RUvFo_>F|m&%_b;?KF)CrmvjUN zZ8ijvRxv`!BwfygXmZhrC#KuuyXg`?VWFUv8KX*kobPNFMux@rt}Q4r=$24{q=Uv^ z!JM%A4N9IFA1WpGm2fUP{e4-&&lKgG7-2|ZuribHH^`2f`u!%jZw}{3QRivxJnd;n z7i*a_p%~_1KajlkFN-$4`)q#2&xDL-3D41{zM7wV9m2Z5WkDtp^9Hz5Ic$Jd>Sw$< z7?@CyK{#0=kzSFD7I|kAkBFhN2H$XtmeDV=z4xkBGvbpj!9E53Gh?+@Oq_QNQ3{)e z1zgD-49zis=Y~_TahaxAeP_;@jA95gPuy^4IXtPmo%}SWiJbw46ZZ3nxEy*~OtOGZ zav|5i?-locxPN128CT8hSuO1*yn5~I4OGD~-4`%rA67vHr}D+km>&u<47jLipCxHu z)M$_DnaR7abp`5R0!Bx;NdxV(;b&shi`x><>NWaSQAHAdv8VYBVor{Gpw1Ne?2>1! zl=J+m2xWO<muEgCYbrx(K5iXt+oZ9=2FHb#RyC<Uyl%cD?INC~)45Zl8nG={kwg>R zEdB8HJjiO-uiuNx(j^SUdR(8CB=(eAb3K@qbj%9d_0$(~s8zAW4{Nie=!0B;z}d?V z0c$lWJe)Lkwc*QBQZm_tmLXxrq{^snPYsnyWya6ltqa5QDcOKuQ>Yt04g(M9MnzRL zUk~OQ;)3>|{xw)y^Az9Oq?T|D^vFGj`VgU~`Rl9IFByZwNad26-cWJ`B=Z8{J6FTP z%<Ic876PGke_vq|B(uAlWVv}|j;&y!k^mO$9Ds=F(-+Q0>J%W6ISxWljAmzQ2s_i_ z$$FJIE>lIe;1%6`9AEiJk|g9rUP87o8dfqb3fj@}gu1_m)}DgI{y?wd4Lz|f8flHF zSuaAVDRe3{MrX>GyxtYTm;2A8BhRff;1-(&k|&6F-))2YmUnW+y0nhL?dOW{s3#~i z&UBL!=(rr8;$)+EI27$q%~cqpe(OQL@f%mdDbK)7GnI`AO6ab6YF?~aZt=_m9LWc` zso%SvIWg%5$r4aDhD&xZ;+1E1l>k#vn16j6Fu8+-7bw_(6i^}t4Q}*h-(UQ^(YX5( zx~%Id`;bf+K>Z>ok;0-MPi@DUDMvO6T6oQUwqIp_tKUsrgBH*U?buqp9c(FeY4J73 z1PvI-?v?4dP>(a_sBkr|0C$ni80C|0`)?O4yBr<fw%5nCz~L^mT~fUdy6aPj92W)v zv9xB2?U^~BseKl7#VCVei&8~(l8i=ooI0p7@UnAa&rYc2Kp+wdRjmbI`($$UIthO_ zAPUDrzTzf;l`d?zDQIT9$3%~<+9;GL>%e+!;>CEr0uznfdCxA!H+Tvc{I+s)AeFm! zbpx&JvuV(~!{k-rD+caeJJW(<Ci$-+`0P0Drbu+%TAA+{8~zh<@oFIlJhBcRT+-`z zTS_F}NXJ;i9E~~FA<493Kh2j5gFktJn^=J!e(9qzpt6(TlarFWI@x9T_3UI5ZeOZ# zt%fLtO}MEDmufFmbw<I8J0+4%Lx;XN%QtNv6YV^DKCwx4Y-=8u%6SZS9#?Z77k^z< z9Mv@p`zg&OG?LO`rF^f2wUR1Qn-j=iYa5X?$n~J3&v;t&#&`9~SeaVt{AJp`?r4@w zWeI>`2Vp!4eclyEYQhtZV3s!oBs2X%c&ro5`TL2nc|=NMdT4M@a2)c-o{|8|=NdYD zZPghY;f{FE(PXDu@Q+rs>7ZviC;Xe7<6UuUSnn_U@eU<86z%OWuZ}r7?gPzTbd!Af zrR;*aAs;qeeFYDkG(`|ncM#Y&8nlDfPQg4?a)iF2+CZ2jEh#E5MpYs;{-)!9(`MDw zAk$i-o&G43FqZV85?rAI^%hNRUjSE>SNi8jA%IH?aNmZi=D0mk#%9+44`cP;oWVtC zALFfcJVP>nB!*|Y&J}n+N`-F4P5#}@qH8HKXM`)!3rRQSErHNEsZHKqn4$~)Z?@YP zFxGCGYg(X0zxTD{vS}TzsLJ_-BYq_nPYvg6`VqJ9gc)!qJLfL@6ekC?9O-o6Hy;}` zkzBT)Kpqv>>TbX((0nYr|Ek&imqHa!5C?buL@3#aWyD-C4i#@=Wd0pY1_b`dso(<f zCXa>cq*h8KVEK^+|1(FwV6*~sl%bO|;%|&kaMNZ@160C;#9uwXtze5^+D$qO4_oIu zd&PdjTpO?T{Z`Cfx9%leTm!6kHFr#}6+Zt;%vJR5-kL=<g{_8HvOkeYL9`k)FiK`W zz@S{XZdj4<!hS$h&WlTag2h)Pvvf5nvw-KvGIwe>eDj*<A52B>ydztROD&p87=_`e zC&59x68dk_&_gzn2e@r$Am?N*sH!5^nJJVC*$NJswuVhlB&M~4tV6oPYZCh$cL;Y& z+uM26YL(2uFUhCv#NfxUgRm?IUOjorG0$Up;1fVli>5|FP6SwDBc0l5i@O8J1PpIX z%)KGzb1KEy(OTCH#twUIGue68^iTxFRwr!_k2x`0bc~wyVl<1$=gN>pvmsS^y+o9w zIMzK|t4Me=@9P5Di~!$|u?YC>8p;UL4234MSnLLwF)9%zv^6@7j;NTdT+?3#{m`P- zzox5CObZFkgJ>M+HF)+vRh6lq!n3|O$7>F44XY?VuxRoWq8Ta`G)!c*{#rbtgjadn z%y}N(8f^AjWc~f5H{`9N*~xe0t}Pt!(9bov?Ro3q!KUQ5<b3a*-u#Yb<cHf6ugE7} z8@@yU<V(XDnqd?0ioqF?zV;9EDF^&}+un@!a9c95;w|>Q1{s1YM{0XoJD#J`1Mux0 z?cl5kW|E?Rz9<;Ttr;AuSaB5}W=51f$8#{!M_Cc+$}A9ma12c*LkFyuie?cDol2jt zNjN3EY{`IqUD#X7Ow<KN_SUj+|LRkJinAoJ_OkOcuSnkZGIuX;dB=c;d;<shg}GN0 zbefbQX<S+0s1HnO;SI(o<|1qw?VK?z=XkHD(h@Ewhd*|-o;I;rF{hu(Fk;?bDh6GV zH;Y!SRqZPA)#vzk){eBO=ehirS;4#*k_$N1Bg3gP{MwaCp@?na>;YCcVp!5Nv`wj( z+wr>jY5bT|9V>0k13f5_O9wwhsj_}BBVu<3DLK3v8xi~uIf82FTP!9ca`RL?5K|+( zqi+szjtL7mⅈ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%0AnVp?KC#C2$?yb5p2OEvc%V z(`M&+-!CgCFTV**q8gBBOdy-LTnD5ZbkcW9vidx3CJpe~t|09(rB;#4(v~oB7%J}+ zo5zz|QnY1+cnH<lNg%*T@mV{*wjEEo+0Wwd({1?s+$sEhs}+CW{|J6dwm#iMEc<z4 zJ=a34+JnS;xq(=(y$9B_Pu99|v6EBVjcUHO6Wq<U@$jpl6cqm!KA|oc`YdL?wga5@ z+BVz;r_ADA%e`NCu(5U$3B-67s+o94QIvsys{>qo?PT!xM8&`mVJDFIrajb@MJ4{7 z_jr7-VZ4B)6msYZIhyX{6I#L#^AYGXK#q88FAp`pp>~9rE71_hhN7wjo9CvAAK{0w z;k`Uaw=RdUUj<V$P4ZZe9xxt9*k)yZf+zH9M&r58%Xrq0sY$`Jf<5b%+IJ(NZL&Yu z2_sjYXnoqd?HeH}|7co9s788W(E%{I7OE-e!?Q{)CB3l-8QfCZ4(XI$R-!KLdwePQ z9_V~bN+Va)KI-up0LSEYiMgT*K5RegRZSMv+wXk|@y|jcaV=S9am#4}j{{OdmxRW> zQW7YEm9_y~cAofj+f}HJmS6;9pJ&>KF~<l{`PD#OOQrH?bqcC<_j)Yzw}gXeTz6SI z<u_Z~^k1^Ew#y!N9Ny9DG25qI!Sp;c#08I_ZZFS_Y)@1fKuYQyRib9GRQGHYe0Z{@ zdLJj(J2#>ft6W62-_l|JapcW8Z{NUMssnukH@R~KE;`|itxBWF<7-(D5_%c#xYXhi z)9g|_wP1fA75WOtfFDNk&*5n})Z`>K<oJeI&f*nO9+3_@WM_MIjlYFyicjSbMTUGW zifJG&EJJa}EIwkBZhq=7v!-m%TjeBs%pflycJ4q<>{!&fKHElaDA*BGUIF}gd=kNn z4apOSJ}RkG@tv)CCIg3Z`vOl^9%T8u&j=I7R+3H-nhQuP4J6Qt^$udiemsJ>C)=X_ z07*v1$SmfPQ6d@=_;cOZ`f>Q?su(FX1AC}G_+MdNPG#fd_&IZ`JqICPUGS#QUH|f) z(|i%VyxM3Z@WI9x@Ug~+4n?Y3TtlIA#+fzMmnce0RfO6aBK3|6mvn|s8aPoLP9civ z^MwAmjWERaIeub<W2+9Sp+nfWD$?-GlF2O$nai8{x*Q-2o`isGd(2c}IG@ug<f8fq zA*Yis(BOG0)^SNa&vxnFbt=of_X+dW`uQ|B8%JKN?UJr?q;UA8%buxJcb^>pz`nHp zP;LSsFn**f#y+pz7xL^rJT3x(!5EmY778>%HZ9z*h6YfXI{Ew5_~<PBE~5Et8qgAs z2jp7NWBW$I7j!bUPvY$&t_OS^m(`YgL28@7RR85VrSPT7)FZ`$==x8==TrUX>{66t z9#-ograAq7g7alv<xRqolRtKUI-Ui5GgWGCJR&vKHOfA}o%p{gVT(Zo--p#C6>>Ll zf#k+lg7^hE?||{BfVNe2QXH-STvDeenA~>FaUma|X@04i2j~UxOXJH^3utb6Jyc4a ziRpLLfdeaXqP2>lxFNz}QmrRlkZI^h;wH75wl6I-+I1TN(n7WRLFKFA`yKNAy}gFu z9je7UhQWMVJoH_+hh}OoVux<|QaXmyh6qMXLk+0Y@rlq<)FA9Q$EY$i@8W&3>?{!S zNjQljryXjh$){k@N`bbQ>M%3P>)W4^DmgQ>){UtY7iwFs?k7IB4IoSxXIoH0@_b6X zJmmvVk4E7erZSmh7?8OTh4dcRV$U3UKFgjF2`qTsHc6e)L5+ui>Vpt=o!YjVjwHR~ z#mVjDYV?cf&(A^>iDt$Z;=z?GOeYVff;i&lrr8>_4>d%Zr6*8*azhc+1;{BlSJ+?+ z!dO}<){CU`bw#QOeCfdye5l?VYcgIbONWSTvqfEsY7a}XW9E6HO3BeGRFpo<vu+?8 zEUoJ=wgt3@zlYzf_5@)TLb}#QdxR$M<)5r9(utArK8(-ux>Tx$R1nvCg~nA4q!-u3 zV=o5!H}>4e8))93hFR4-uG69xE|aHZ9p5pkjT-VEtc(m^fbyz+vi}!V4oo1YPk(8B zs&F{&n8T^D&(WsXGI~6=y7PEP&AzP<EM5!tPau#O`rP<wRySKkaNtJ}<};T&BIE#} z^#q|>XZu18pP}YcX!|^H(0q#8R`h%th1bd6BiHWg(^KnP`W-b5sN85lDyItFpe7^+ zUGn?x6XVUa(CB{=RwHpU9D(q;S&i^nTo!P&n;hRW!r`kpTBoqE&-Sf*uKohP^(Tzu zO<KO7kNI5=gmyIon=|4?pws$`%#(U@3AE4As|Fs}W9z+lU9jcee0*_snOeV$=29j8 z)~l-=h5f9@o~a-VZW}VVTO<ZI&gN+M4}5mpRXlDX4XN?yPzzgVej^Rjn7E?~Qy)HA z&HV0V?1)u;s2<6qUTDvp3L+F?cguu=PJ7H{zCa5M65|(W`Ft90B?Cv9Ps6W1pXT!F zGedxj3`Z^!qPBT-l`yRwj$GuJKNqp5ZA%l5xpX8<YhQR3^Qa+6gSWSzYsu^1efG4w z`goepRP+IVgE?Hff}h>Tr`^@##CNA)>XnGcZR~eqJr-zggOnF2`1yVI2NL?Ar5ye0 z1u%MmhpnF!X=#_SPa%!^0@sJZ-T<f^{X*Y>(vJhmQDAv&u(!U43=Aj>$bb?&Xl28I z0`<L~Fx&Msq>B8OgDFKHFX7|M(9~(yTo5*5RpM<Rh&vyCX?bLWY7O=>=U_D=6eBa| zqaTne`Uz_;iB#)RtX9I47qt5YZuC{_0>5fCYIzl(7TqVk9O5JJ$QK9$Fwyv?SrB=~ z*>RKYoErvcpw8^MK!dq?RpGXyo|8Y?Og$b~1dyHWuqUDG<o7sCM-aYu8svg(wV<Dn z(=(wz{4*}h))>hb(E7FtQQyXG5yoJ`*MT_=FsHfuT^ie?H02l54Kb(6F+&5wPD9vf zE=t^iJKSyHBQIHmq8K60#D}hg`C48fq-t%69`--{7=mP~R?q^=v0d`8k-}C|L&BzQ zX%kF{Ⓢ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�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%0Dn&{! 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%0DwLRz+9D;UGG&k!taE|T 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 nBUw1e|MvMr93@2oCO8UDxMDYF4WSB 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 Y;NNS|hYo>C|g= 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�&GxT<HlCl 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ËbxX-G5a%BLJO=3l7&J7s6a3a<q)tr2q^R32|^sVZwxQc-kQiOVw zKcacal3>7G(FunS?0W{Wl*>rAsvZum+vSmNXH!D|G5SLRZ%l|Ud@wRU<<|v0E7sdi zweK%I*F}LpWXAtV<$F*%4Y+^tpHry=jQX+dt(BmaDEcY<Qc*LY_L~r`YK7h`Rya54 zUn^qnR`5rj!wS32D&6=PSVa%C4y13V(lsqp!jPv*F*V--a-_JLU%~K$NJ!r=uJ02p zZp8Q#zTEl}4#UeV4~wJ8*$q3G<*|5}#Xa&KK!Q&J$ye~`uz>ti%`#BkTdN=NmqAKj z)cy(4t1_e8Jmk&UZ^7Qs4&^MEZ96j@S~}H8Aa@igyYXixa6bXmEgKa`K`#Q~HcP~J z3i!^f9C&AqgPQk4?Rwy22){%03-;DTXS;2I+&b^p+=F6Z-tt&e5IAaM#jA)rWatQb z^3r3w4bize`b`A4lS?{<fOeb!8+%V>3bCeLEWO4c;0~|Nop9zYFsI^bZUsdEZPVWl z-cEdV%ZP^~NhPL{|6R!$O)#nX%8D;L)-tOmU>C+ocfpf}!7AY4?D1g(Qx=A?Fo?CW z35I_N7J-c>lhTf$I<AT;iz1q>LhYwOSDhQ2Kswnic^=~2d`zT~z7AoGmE{v|9zt?C zdaG@9N3F>K;%s1*!Rj{a0lk3iCM)b!5l+GfV`prcXs_o^`XAIE5s5S9$`Wee(Wi>= z8lOB)UdiXY+ClNtTomuUusL+&RX~y33*dYxfq|EU1u~I8rFG9T`xme4&N56{EN2$V z`62xk+jLGFW`^n)6O;zn7Z_-1l_r#0f#0Xi8}|w}N34z8-bPg$D;XP}up>YRve{yg zRg3MNE4ct@g0^!VZE-SZI|ss(PDUmY8Qw^~NdDA{v<-OcqS6h&y4<~j0r$b5Y+e)J z54-f?#GUmgK22hTyU8n}<4%9+gsXE5jx4eQZxz(B+&>@}y4FI=X<Jndww0rG(qBg1 z;xWkv;MeKl<AjF~5gyArqv8s@ogO!LbCa8=Mhv)P`^2fsN(#P~9^X(o+otIz(jHx2 zi<g_*rhV6$dV|>{F+*$lK^jrH;1m@=p?B^DBf#LGwYd(g2UL{s#TFH#V$<PHqLwpv zMy?>ZF4bruEx`tJO`sF0ZHuXt3q=)dCy>X-*=Vns$BNLERhks(p4VCvASyj~^|v<G z2bW4)(O&c-I*5LX-asi#FV|uwKY0{E3aB=;jf<!1+FGW3h)zydIdVT61K5yg=dNMG zpF8?EGxg5-Ofryw#W~}K2?KI8bEOdQ)(Bn6kkL9n5Cg`_a}K4u5>@lI`GECDpQ}oo zXuu#p!1F^nX9rg8OBpW|?t*P>pvZ~K;8zY+%+2!^SRQ90mWzvanYO&3^uItEC?@t= z>>6xi_X>~$Pt>7_pbSE*-Qk--6^jAmKcn{0PT<LD=NyH}v)`jKL<t-EOz)|cLF)M5 z`M(RAF0{C~1;b0s^WhNeG1R1S17P?JhX=b^?DFairvsOT={umaCUs|PZl)c35W6r3 zE(UGDh0ZrjF3vGedXM^Gxg0Fl9bXO%4x!IG+~s>j_}36cv7H;yJ(XsK&TH`;HM`-C z71udm+~Fncc6KEq!R@j{FL(I*2qO<~+<g}}d!|6I1M={2JP#;r!*X${B6lKl_Pkm5 zvT)r^S#2WztonmzUykaei`$8cBSli7DwRBqu<Z%7$o!lC;eMp~DEDggD)31?{CIM> zBodv|O9oUB4we6qx#OXHmS~KJ61mG(fDM37-Wsy^lOvm+eL6QPdKELC&pwS|G_unX zJR0}@lcOp>t#feqd2eF)vj)!LCgh0T!%j5>lS3Szm+WQlIeK+@E}o;$HJ#npns%U8 z>bXYAHF)9io+7&lZ=KmO4bSVWe0oLVzj}2+qmQRr<^?ap0+p#3op=JiRqw96o%+b{ zsaF}DqCdAcm<24YR(h0jG9_o|z5cW}8k5HoM|fJjWZL>urtSV5XlsvU%2VbPtf4{j zxtkhOZyKjVtQ82-FS3ZwxU_hUL+(&9rf&sa4h6Na0V^|j=-PLHm91qRl|ow&^t-i- zo!M1a@acd>fooMpH!!w`nR%U4t1C8J?*-NBd7C%0y3XD-+s&2)13P@9@)>%e-6+LG z*zb*MdAn2Ke84sH4!A%`B$DacsQB6?NX<wM%5d2+Be-7DnV=jjH(b=#>S~!5x3&EB z-<4hu?5+oP*XnzC?D%Nz(Y+pnz?B-6K9vGb{(h@4%=j{+7xs(`<}=x-E>i85<gLXL zC2`S{@~y5;FsgEl1G=qURX~vzCj*TKI<Mt6ESyCiSbPY61E{rFys2KYx9Up{Y4YGj zVaXwwj}|J}Wmp3}C62uo;2xf-bx}rIGcIcALhr<=n2bUO4{h{bdr>kkpNUj*c>;Ng zcvx#h(JtNj2bBMh2;?y+nvdZTMu^Gk4cHp(^13U^YnVOR(ykEcii&sRmmThn(%d-8 zxUuS2;xqFtx8#DTnY|T^TyCYufa~VtqFX4>hAs|n4p91U8$)<7^vCRTaBXvsnA{H( z@wsb`!jMh#RT^>qqRd~+yKf{<CxtXMyu6b@h)pT)0X4!Rm%K?eU>xyoe7MDEAa!<N z!z53A;%KV^T+a)@Fe|uQawqE~z_HH=p@-?&RoR4R)Q#9)zBXNOi^<;(-YVcAB!$kK zcAYo5mRJFc8kQGZy!}mI`Qm*Tut(JHE3M;v2X6qys=d|5!_RN~(P>#gn~em>3ScY_ zxWl4Ndw>&nn;FzzCO~;`**(wotd!Ah2;k@^&`U&pzCq=YI~kCuJjM^IkTj07_d?hj zq)@Yn+=nYKhPE9o@;#N^*A(^={>hwoJtO&eqyiKY*E<rI0YSqc%P)CNoo8^ZReVL+ z;5W1lyUJbh4y^<T1&H8H0L65QazCX`Ww@d~lUpscSVnApX_vt6lxt%}x7}BC2}d`Z z+*WBgrAu(0MPxBc!!ju4Kk>ovza5z1ImFG4r}vbDe-8e&w0gmw!d)2xx`#d7C~`5G zS>c{zhuC_Nm`ba>;mITe?wkdBnlbHH0k*`nHiq>GtkJSeYl^UM&hoyS-P116eHZh7 zkn{O+zI*^uy;=RXyaU#t(qnGiU<w0vrpdLkH0xNIA;yT0RFLi_;f66W5JsX@E)77j zsRLhc|A6F7tD+Sp>MaHoPQnQ=fb2j~cn@JzqI6d(fg)8rp*3R-5O$M;yIYBRLdP_A zg-V^JQ8pcvNMA^AQz%G=7>?^jNt#dMwMlJcas;6(c`6u1R8|)mPvy+QwoES>txl95 zi%yUmit@6o9>l7zl5UOeU{%nol$W%&5_e~_s}tTdtl?eD6curIfPwIb2?`7Du3Ak{ zYxVjS-1kFaZTe~=b-tQFyIFYpdO0$G**o_foqJYPeFs2mjfZR|cg!efzOZ4`ovz_~ z4S?#MeWoF|xPh!vw_rM8D<B+n<7OKnD!|)OM#UaguzuNa<lcRl-hlST5a~NQi>gtx zq0TlYL$i`&6rOu7<Pr!`roMz5ji7SB;gCTEcF3U3=Pdan!LlWcxv={a8v+{}W}LTb z@q8H^UZ98Ni)%4NQy>I$Nnz>pr*=uY8y-9>_)F=<gL1_c?*_9YX5c0A=@KQ{AU&=j z=vwm3kSlVqyH`Lf+jxRDj21^ZY?TFo9>OfC*D@a%+c9sUozE-yyaMiW%_Uq0kR9dR z1`*TVYt}0XeCD_Ur4nAOHZqAI0zO5XeTp{66s;jIF`9(UG2fc)VIL(?g{o$p<m8dR z7JFCh+vvd_;8CF{)dp8#46#&u4D#r51QpwmDw-mLi-1JQ+bDqa8jwz^5rZAn0XcC; z7Vs!KIh9*R;~;woKjee|e3}dH635SnT#9M<R8*w#8gL&H)6G3`T~n>-Nt>s9JYQn| zP4WU!tVcTr;VWdBZzCEd_hRddpuMQV;DSHFBH#w@RpyZkg+-&hNb5-2i^H=^A7j8F zMUL9v5kDCd!rjAjWQEhuzxv4Y(cu;jgVoOH=yP&wFZj>S3-{AiYg_~;ht6f(4dwu0 zXUBDj{!|?&ABE+p$UvD^kIz`b@Q=XeCY!T(Da0uPDl}LTe-@bM*S{o<%7nH{0x6GQ zWa1->%t^Y;8M+*rbwyHibEw35;s#g;ZvfsDOn1hr>Zwdf0Jn>gDe&Fx?-YNE{yZ07 z4duf%l?+a}@{^0#$+EXYCHnYi!>Mv-DZ;r>7tj7>_g>}*O*d!&jk23WSEmfZJI;a| zGC&pPoNsP(7YNB_ebMpH-bBxuoXoo#oM)-V05W0$w4JIdJ-a@dbx%Hl-1C?`01T|l zM02MWa#`4Q^M*Z8@52Bg6A;@DBmpC`x|XswjDK{ws}@`G-u1dRitCKR6<f<y7bz0y zdM*1|XuBOy3RD6G*o1EGA$d^jieh9{m4%Qs4^*VQV7j)NeJiVwoC8w6X!O?T&e!O~ z*S#$78f{)59_)7*z4$%v>|SRy?uXj)hgtHcZQhv$e}d(=loTnMuLyU*WXr%+4I_D+ zWiW~Q|3V72)#yc(-5(Id9%8qGp_)_f(VdCmL4<cr1Oe{GxpO~xcaTFu4=qcQyn7s6 z${f<U0wcJFsdEdNy+;Rp1{|GwisU_Rc?>pVh_j2Vp2y*`8{54Uj%T)F{0leE!-ezz zLo#{gb{tN23AjrLa1-l@<eo6mNE-GC4|_z$?8upHchdhCj`qBawBI=lyV!0tdDLcw zOwNn{h2KT)g2TdhT?73x#C+xWcEEL*tQ`a9$vvi+GvCdzr`6$nfZ=)%bUh@urk97* z7Q8#!#{BA#u)65elhyX!%E-H!#mX3vz(Yo#ZdoGPZ13Fvsb3VV(&EeFSfUt|9(x<x z!f{#A_L{<-GbNmTtTeCmMoO-g`u|sw2_}^*eefSQ=NnDI>@FsEF}d&I+{N!pPQLtq zgHw%~%3e>(p-`7W;t#$mU9<_M(osG=sbe2+tM%71T*^9QZ&l5fb`JnqWTe?mnjOfq zLG;;$xfV{(FM)7)u=LVG{0QR!A!AX^GxTsE);mK@bQ@Y9II45Nzba;TRR+7&sRMdY zKNI-fvTOP;P^z|NU*>n%EQg;paCSF&cb<3C9es!Wm>jsJi-@6|kq{M7q2ZJS0C!!L zSdp*j9^%50_BprvKIgXZImFf#t2zL-1CIaG!G97UWe94@9F{?gHI3v1bfH<~*J3yG zaL`<|vC+X>Thszja^H;E&gq?BaGO;wV}5Wx@L$pi<#|bXFTtn^s*uHPNt&Zsyr?hI z5jNa|UkR9O=X9d+#coCfiBejBr2B1ldD?{tJ3w1squYiDUrMM5xwb9XFy8X+wAOcu z61-$0`j{M%*f$i7hi?gQAHCF{hZ=#0E>tvtOGnxVW@%xh$<>E9x{sxB(MjN~eL%8@ zts+`25%|^Gm9_2D!+(Y(-wGC6Pup*E_3E(w@O5@KFSeU6ZuxsLtzX*a^BNxGi_`=G zd23&Lp1u|p>Q^X}uibK2`d;hP5!Xgv`vm<<C9A4xJJ@Y2kG2_Tyo7_JwJ&rM6PbTl zhcI6{sL?eT19S~e$b#4nJri)%=iIob5TpM*4;IgxDanDc$Y+08-6EWu?HcIj2-m+6 z?qTZ1aljIg+pvXh|ANCshy<AEhVRoF%7~_Ingwa}EC2blxjSvx7Ce}SaW5hsz4L&s z3$XheM4qG+QPIllW~2D2aZ~IUGsK<IhF&0rF8JE4038@Qz?V=CGb%iSZawYZzYiz{ zIvCQAL`@K+jqqCwN=6q^|7Q{yuzDm!VGI`8{t^8SjvhSVlW2ppj#=L|7m|rYVRueO zZ5Hb6nEIS<L=&UmYr<aVr9pJm9QfqfWH?=fg7RpXFpCo)HW?A81Kw~DU)c6J>BpYy z+`}CG;s^e5F+A`pJlo|v;*gmyJwvK7IQ3CNv8x&c$#|xl^Dz|02Z{NiCg1~Vwdk)( zdzMS1N{5g9sUvxvofyE9m7!CzX+lGo(*S^Ywv*bvS^pR8+U}Y`UvM4l0)#RhplpLm zl0iGwI_!659uB<b*}zpN`V8NKqpe|oINEMx$z{PVHUoG2W?+M}SaO!Hi%qkgZ;$O_ ze`?3;e|eQd*Ko$S^L?oXPNFyp;o!G{L4qkS2j&yI8_;)WHr^a5OzvL-Sa&nAS%QPN z@<YBweySB1JoH0MR8farv~c|V>u-{`N=Em<CpQ7;&hu`8T3o?4^|IPnG={5J#Nq0W zzGU!d`TyudnIMnRe?37S<N0+F^0t;coOtP}eZ5c)x>g4$E7`PNw!_9$&nla}ad`HU z`mCu>=`@o}BqPqa0(nwAx!eJ?Ia<QqqJG2B7|4Z*ngSTeLGZhV<#i5*UoPLznU+6` zXyh>eUu}-6^74}OQehvXl#LR4Y~XEF4{MYXjc2w^BfG>=k{Im*4MJx+IqP@euiL7i zjp`{!)d??YWA;X1%ueJ}68vfGI2i4Q<dl{Xp+!C9_+Yr&wP8T%Zck?x#lv1f#)M{t zeXCMp*V}}?Vm~E*(xBosDHuKnRcSu4tu-(Rut}Y?Dc#VAd`sFXE90lA$5Uuw6K81w z9_~u?+Rz1m#njV4E#IW;V}V3NxM>rs(s~TaH7O<ZUU-KWf9rR1J`d)|^pF>c^&{8( zd-1QhI7M4Ry5^H?J}K|#C-d_2GqLR<sIAY;xnTnn$s)q`)2?p+5MbsS7~F(`RkW!F z%!iI+*8WpN$&s!P!KFA%yqQN}2pDJu<e;#byR#B)M(0qqCjX^x_QJS~(TL~roZZ=# zzf4e_=yPC6F>T~fB3_?KB7TO6+QnHyU=IHu07_xH*heqBDN+~fdZaE_g)FP{k{i(% z=-S#H1`bTLHBDzF+ZH@G`nH9u&Y$V4;MLiU*Scw_vy4<nt)iueusXa@1Q%-vwW<~6 zkhrt^*BRf<T7!Q`$>tg@+tusZ)f=8`*vzt+Wq#HFU6jT$y{fIp8y6ieL9=i20`)pa z*`jW*DC6~QBmVmhVglRFs;NKQ3RBmrZ{qF`BUEc_lZFU?nX+v;_f|qk-zvpcnofH~ zjGCC#jnj$6iS(^f+fhYf(}`DrbP2;v5L-<)fW9=fOzzZT%#&JPHeg_)Kdc;+qUkq; z@@~NCAX>ykyvuw8omCrC>*92{?xIT`BLhhK)VCP{8f|27ae%xvK&Po?3iKu}!N~Jm z2KhKQ&=^S0?1~NpXQZ5wns9yIeP_AcO=hl28cHO^<-wpP*(5N7d4ABhUG`DG>C8LS zyCmHW)b=k|L^mJyw2UpD*G>tk{J|kwrIhqzlE}Qe3>1kB)x3VasHP934RVH?VLI&} z?sWf9rC+p{YM$a;qCqw%$>wlrxl`Gsc?a?(bvkh;meDKenf1?rOtJ^69au!`j+|#! zSsAq5vr8%~gN7Cc7P@eI1x6jtXfRVdqy5Dl7lS(+bbD-uRQeJzay=>y<A#JDCMM$G zfiE7~B34&XS5#A|rxmd<WAlMrbzx^4y%d9IZ@tUvKMxh03V$XJ^eW~_Fd$D=Y+E3e zhtcnI!H*A+fW4@g0?ha2_U#t?Rts*k=w+!ya7{TjJqvl%ryn<5nlM~a7^dAYf|G^} z6b|#j;T*`p=Fwdq&SgEu%Z`W1g^yDV?o1=Et{#h@<#};LyO&f)QdEc>>K50G2+ zXO<V&MJrGx(B^LggB%|mO@U@doog6?-zpAu04#ooGGZ8Y*}(8T8l$<GQjw?hDLM!3 z1Fep7n5os}!8A}#Pj-48wbJ)ye4*)|-V-%r+omnc?5-3k=NC0Gwp|-^x2Ao7)b@DV zQ%M(Y0lA2i_Z^e=sso9UhdOOuzbn*)RD}=sP<TAjQ0u}}ZFxsw>*-cn&l}gOu`k?F z7iIw>d5eouT=_OwJVI4Bp95V3G2Z1{CR9l)b#EvPJ90x+ugS|tWax}NG>(@*I|#(w zn3Ww~q&BZ9HAN-V-Q|73#Y+u#X&K?t1*KHArKMJxaNbTxOv;pGfbpo&m2}R%yY+5D z`bj0p>EeL#01B98nHwxg5>vRDx_^qX43R>tu!M&ITcCRY7bO1#2v@-iYNVlubIp6G zF3@fu`T58S0eQ_{M`o`gv)7Qhk^i|-hgiWX@ZoMQsKG{=%04cOmsEv36h911yt?tU z14%K3-7J2K8*qq6!068!Bc$0o&$(^XqQ+>Bh|XG%Nhf`xrYV{g&(6q1g|4VzTxUeO zkgC(1hPBY)JH9#O5Ia_*N+xP(o;fkDN*ds~ayeh37qVNuSuE#4!4B?S$H+Uoo3Nu6 zPP7WT(d4cs_d0Uy4q$it5m6hhgUhMoDPjJkHAjAq5=QejxDEi39D}v%SU^g1jSc3p zgrFq^or;$mukF^d(ZCC2;UF)C>TE#Fi?o0Wl(WTE&v|D(i8w<qcE$S_L!%r;Xp^E> zBIzPdW%6JZj}qm!a2tE4BO;xh2JvbTrEIQE89gphN*C8IRe}_sH7fMX<Ld&loi}C1 zYWDy+x-h3UM*OPM;Nz(I&ablL?g@4e<$Ass9qp-@CF74$<Ikn=pQ(yFkkJ@W|Dn{Y zw<f;Pk4P?dt<m<|FLEfI$es(tT7;utolb?Adylx9=5;rK=lfs(W}pA)&=**%jj4)^ zJqVrEP9%2L`kmdnXepBGz?K75q6G-vHI&WVyU=AUx`U7tFZ${HM1}z!FRbugmRvQ- zXRezWWqg2MG77t=s4OO$f9s!f2<oWwg)6T4Qn*N(aS4?XIvdo)`c{7eWL+MpIAkB1 z<ydO4jpk=QaBBGF_R_wyk79C+S`4A%7kKON^g9m=3KzDfzDt@w+IK#TFfvCN3Si8d zT*s#8-HC=2c^@<6m{rd)P{=V*$T3jJ(CKOBQ5zdE9@$j^db*5hR=SMb)H4FlOmWvY z{rZ?L>pF%CR!vX>B{yREl3I~JKMOn2Dw6_SlzXebQ_!(NX<RXDi|MzFX(v2w-{D=U zZfJUJmvHcAV8ceCK)*X)*==kFrsRMZdn?gw*x=J)0NL$G?T}tKBwGO;QZPy*+jTX; zw&(^b1<Yp1aj$?O7Crz(nusCi;Alub<bEN!hKu{|?e2!uB!{9yqMeQ|bUMddsmE=L zptc(m4Ya1&SK=^wc(@F>=*Pa`RmTsu7ew@}!}Ge`^l*mOOcu;S7ESgRuIQIo!ME{& znYXmIIkDV=>5ktjzR{VzlVo50h$%`@@dl~%Efk5;vmvQ;#_N8aZEQOgxUn<hX2OzO zs9lt}%eBJDfii3-N<>h_kwSpYUfoPbwkE|faf$V**wjUoiC*Ka@Fsa%kGAq!COm-I z6^%N|v^0Zk7F(^e3o$BQlkX}iu5K1Ku$9~y`>N}$FzED8?L3t85)=BxC-f_TdRH`( zF0-e?+{>l5+c=^xIi|?7d&%K6ADoiSg@3v{FVOF<xMEjamn!q*fE(EynB(vt-is%P zRGZ>U0mYXB03^rf=5`O+9mI~Q`wGcx`Q-V!uB>d%%Q|51gV9gWu(0=MkpZh`_?5+# z`+dq+^Vk3C${&3>{I7s(h~?X}?FBzCCa&pEyg&x9bs&)sS9(^=qY)LH9k5ZJb%Q~- z-}c!ZZu<mY1y<UvtfaGEvFu_22>@vX<Y1PghaBB~FU#C~F(QfD185FlG3JwPAgW$< zurZ)V6?ikS(1L;{w|8q9yQWo<VqhRUcoIlMn59Y?O{93}#(*M{)^GgZrL5F3XK}Hm z4}mIt=tg1=+`5C^3yPBv!pL4rfY#lmmWgI4T8`ZMPw@0?hyKL$t6}_&?;B3hx?vM? za^8s4+{ieR&pTe9+nDp70(Yusb96ZsJ)s%T8KrwJE>b!7yf(DLF*~Sj{$0>l$ma6t zUZN7(;vOYuovmaqvYQIwqtld$p-$*-OC>WWjO=}6E7X;`lC_<=R|50}pvY}fLAR=M z%HXvF*ho9uKBR=zF-RRgfm(-Rgv(4o?*R{}ILeZz!rQjsGDcf@XU|B$AfQD%kkQB% zWRrZu^mMB-a#PMWgwfL;9|Ab>P6LDL1UAg4YvTca(*E<#MN^<|hl!$AG&BLJBLLoZ z(_r+HZ(rQ0(5_mC+2|(f1Bh5+wwPbvO!Yk<aG-4tup4>MOJdGESKrwItPuG$uh7fU z9A<Nv34GZzZ}j_xt{UJrmx%ON`Z~bmj`w(fm753f#}n0FUaMf@zL8D2R0$^>D@q-K z%BUu$H_ZZW)49k`mJe>Q-0Z$#qccmW9jhZncFoMo+1}i%1XW1y-H=w{HetoEO4K?< zNCpzioIz^~9%o$l-#zRxBMazT)1lunJN0u`bMsTHoe1~O{CI`@QHA_De~Ypj{`k#- zhO8R=3@3Ya4@l+WXSm7WxjTMpSD+#7ef+UX(Ye!>-8s=p6zh<NJ#Buh0#OJ1K@Ga? zSUC+`!u-7nV;^DuSkd>*iTDXPd5966=Pl6J0j)Iw{x6^{9LqHAra27riu(4m7r+Yn zl3YbU5%@%BpL2s9W<Rx`z%jOpmITx{y7Q_6(;$spNO+rf&$nAa{P!d$91<C@Q?xxV zFvkCI67wtzy2GhG(A6m#KSH#pgqPaYjs7!AzCoVT>NGs7M<Bd#8iPODiprmr;??#@ z0u@CO*-z?`W3S%hrezwG$-^_~&dT&92M>hPkyV#?rlPldm=Q>qcaxO_LfF_9zjk8e zA5wal<e+eZqHmZ3ee*|x0FirN_(*6)PxyM*X`#M3*Nps3I9*$R65HV3>W?D_XhH2P zB?%Ki%{Krz>k+7)bL&Q!+}!QeYd>zKt%w+Xbo>whAGi{r=iS{Pp9<<@avPF$qm!X& zS+E8sfXx)a*miy!ty%Pv13uLQL}o+JgdUPJ5y^0-@;!K|Rv{XceS=4TP+|@GeV&wG zK9OXol}W20pBNtZv2U}F3B*43Wdc1MUBi~a=xeQ}QKp9%l`%3KHQ$KD8xwtwS-CQL z;iqnZTeNl~@{l;AD~lC+AsE9kiZXdlUc)C9QB5NO3<9&LR6m0&S*-rc#F}{Ni~%xL zahW=Pl`vDn5YoYK10I+rCwsqv6d>$mAc4~ARKQbe@;Kno0%;iR=;?MZnNW7>mj;4O z78{q61<X@+Pgr+njW(z!0Pl-*@EahQMU?Xpe4J6ZDKd})W%v|cl_pS@j4rfZWV|?M zjz0T+@Y!qoX0I_Qs0SOxXsW|Wdi!>}?}OEDrbLy^OP*enQ#oW^pO`vI#tY*pCzIz{ z@gmAWTJK}y-Z$O=D59IE>gF-t_IPR)7)X|iF)n2XmHA!f9^36(E?KF$wY1WgghzCk z2XmubpS>>4DwlI>!$Q$FQpi8I;5zGBxL&s%kh)3lba#YeIBUM$kcx$OfwMP#v&zS; zbefgbN>N*ElhQCl8}04tSyNJb+ztC={t43E%FdH_!WvyfnRJ}A?(K;K(x<BH%oLoR zk@_I4ul9{{Z5frt%S!ct%*kQREGa9$>R~oCpBqzYdncbwI>&a@F8DKrIS<X$pP64} z-=@Ub$N~7;sHl4*fAuPMRZ3qs{@?g}N4dIx+t;S8>(^VqKi>MmAyb%X(sFNAPffV@ z>xBC@$vn@!^(JlkK;l<wHy&5&=JN|P?ty++gd|K_66=#%v7`c)PR)tCK6*PKN=njp zoMz}#=$47PWhH0*lBsk&P``(D|10`?9qlGwzl#l#&aHTZm89sUR?D9i@hvt7Z*@?n z&NTI$n{@EIPvm!2RY~VQjfK%YCp|Y%VLn3iU<7oC{y&`+!?Ru6A;)EOp+1xzl`fzI zjh9b(`@sJNC*WWJxFE3v8@gClcfuty-Ez@ui+}Guq_zbby@m-w8F-IQubV`5Xi~^? z3S%d^fA-;UDrX@v*XW#R2;@xeVxceDjNAr+6W*6bPR3R;j0sEe26_@MUkklthqK%O zLFK(BP(dn>OmrUp0A&dqBlAY?Q~>ZmGWlh9Ayyt<UX{ILIGIG$&(|_^!O)#36K%5y z9X}NhHFIgyzkczf#k=0O+x5I_)gH*O_2Ax~seoy(tmla)ySJBlqP4!>ChW-QObsE~ zBk_IQMQVr)m6@(UBq|C?t(Z|U@(LIl!@l`VaHJt!DOL*BxmE>&*2<1aO@R7W>?`e4 zv05dhg5{g7Y)drzja0ncmpzN@nLbD9i0GB`GQD<Xk-EWI2Inwv?>W3H)r+E2B6arm zsniPNW+C$A&gR~QpFL)^cbOmzcJcJMLR4T9iGPJZdoJ6fxhHw!*ZOU>5;KbbO5;N6 zt<NGID=m8-E}ovtSSZmlxyk1NFvS)v;M54I0lh|xd^@ozzuCzjfQt-lcwyix;d~E3 zB0v|Os2n7)c}a<V=gDxRSiY&?<n#zmxB*tbMdnE~i_W+Ois*x=ZKgl6=1~HG<e+fc z!C)Yqvj#{4NjB~+_f9E#%eK`foIDb}N6U5G_vW14O#Yef@Af*-Ck!rjV>zfj##I5f zSdeN?jX&C)U_VJN*c7~bkN>V$KMa&1hjSnNzS|%bbVP+W>W;?7Z4RN@kL0fKXncUF z$3fx!XSZ1oKiQq+qmz8ZACCT&&Bg~U{O5p={GZPM*+)=Jo$<6OZWYKbxt&LE7evL0 z+t377H_Gm9*lnL~>2@oN!&vrYD#vIa^2YEUi%(C2&oVUR#^PVQi&+5Asv1hlY9AfH z`@ugTH@b)pn<LvWPO1=gP6t*~mMbq>Q{l|kyN=IQu#9fGY&7wjaP`qag{nYT#o+30 zZmN5?J$5%8$2KTuDJr-ftdXQuS!7BjuZ8JjT;S+q;;$w(-lb5#rwbxvk6=SC90qXt zRT^-k4Ty52B89E$k&dOBKdb+o+=<k<iayoerAY+yxJH%E>Q;@`cE<sYv<U%d?*ID# zfMW{(aw!0SLrYzKX^JdKljJ)?K|^06p`c)X%>k-um;=li3O?uq^m+PNo{?_h7QR^c z7OxUA^2L~{h^Twbj|df0+xNxQ)ExN4QEBlGR|k7{xhTR#jNmXVMYoGXu}fDEK*Ii) z$I%-Ivc&@Om*e4Z>$-HmCwIcSEsYm?;ZRpDaUSEC+|J&b0A;8}^fty2hT19gV+T)U ze1PEfaYt(-Ae7-o-Jl{Ac)^TY>4^8z0Uv=CokCbhl$r%2NS)-PEX%C2bR>vEET5Yf zqJIu*ubcm|cs7;D_THe~Z|`*yp3qb_(;aU#N_pe@$UzPyo+g-z!X5V-*Nx-VHXLC* z!|TXnjO$k0rH^pi-<JQ*w9oUjvpZ>`55oilYOFg{bRJj^dV#{Fc9+IoXvQ-nZ5Lx^ z-IKwtuH^xKO(dR?N}aq+ah6fe2DyRcb({GddIj7vI<Q)H&;$4!pE>xm0JHADI2y=G z420{-tn;`WCvG~wiCbbOO=7`vkL>~_t$k;9+5U>){1WTXe345$Az6W+pk(Q%Z7BxY z)<oQp4rLSDh1}93iZ8cMYdJZYkXR+KV^;V<u!7hhOHQ<<Sg5N%Y)$_)A{&|jb5Lv8 zrs#JPg-sEq%TMoO8Cre*B4~(`P%GyqvI+P4Iz&jW$+`bU&<M#dx3(3{_MEGueIxIM zf2`*KXu%Y}Xd$*`5g?J4kuJ6cV7FJ`{}O5fE<_vc-JcJue96qTJ94|4*$VY7-ceYg z8|2s!0io_4GWFbzqBp>r2mU#lHSa66k|Z_Yc~%KdIz7yM@WTL<akbnW@FkK;c_eJ$ z3F=$1TrS`jp3P)!`7-xWnY*Z5dLPh`fkIzu@kRZ&uzc(}LHeH*vbKbV4ojv(UAE}_ zDQh#BV>6hKP6*MqR`0<8gw=v1uy|shm}8%qW1nb9w#dR=hiduG*5$=s+xHa|MnBoh z7^4;z3(hPM1FIVClmWd=e7qfgz2lB_%Yjr4$LS=5Bj;#K4tjCC*d6)Ni=zN9h44}c zMf9G+K=1{s?>mNzPQ@H}Gp~rx$rH|SSH`bpAmp@Cjz^pg;~ctzFT2_0z>W(+-`a99 z?HYbj)oiJJy)FE-U3h}&^xa0~FnFmrJb6ETsCI)Ff6<9#(QsPMpK=S&67dptTY4IM z_M+mSK)o%ML7lD)AKCNawB`e1&Q38h05OE5ppfc;I}&vuqv2LXZhG7kBQr!`i$<%9 zC&bPSYXRrbBk=LbvK|AKBeZ@%)|TO)IQc1~zG)Vmv6V4ATk;UHAtX9Z;0)>06tTmJ z@{5LM(M&6^R$DSI1bA?%LO(PvI46(JAAP@|pT@syeQNP)y^%O~ag1`ASvj>+dDCF$ zl58SC*oZ|&OQWX(eUMtcofgnBMYJ|u9EJ(rP-M7n0m=Xt5*b-9PzrAJ^T)raG0_SA zo#N9$Yne}ZC#S4%Ue*-gMjIAfS+gjzh_@L4<b-sm#jZeh1+p`Ntd<9jKS91u$@S$@ zS+HB?;9C|J(2^1K+<cTeP!eIhA+iVzvZMrq&4nGYm*TwPjqra9^m|2%wLA_`wyO7b zNAO1l{Cq)RoVmGpy#rZm-9B8mV!Oo>VT&%eX<*+>001MvHlijse(S{Ny82%?RW^hf z@?C5Nb%VXxs%D#)&Gu|a=~pb1zI>_tg{kPvRh6|*3aYo?T+x2xEbRMYuLiXINX+HH z_aGz1^ee(t_3bCVmL1cN+2Yl-)~~g<FS<cX#1;2StXdPk$NA;wWKWHAO`I-#VJGSF zTL&*NY~!5lsa2RKH`$~R!26&uy-(7_AWYxqNT+||Ij|frh+;iC+hO;C4{`wHECKw( zwS9@ZSpZON0lPE`Ot6~hQo-@D6d*YbM^AA;<uuDFiHwtgx<ImH(%oY=^+!{%7`x=w z1?hbwXq#R@oD^U|7;Tmtd9UC}08)B7tzfjoXjTOZM=zwW!X-Q`VZ90|8a?y`ND!_b z4C|pNAF#n=!Ih%UQqM4=&h0S=udKv>q(vE*KER6Z0<(OqYQ}sC%K;1f%HqE&B-73d zkS_$vTUKH+!&6S{c&8%iW!L)~*Oe9)_|SX^w1|69x`t*9yD`8ZSK}1Cdv4Ip2A*va z(SD*`c$j)|4mYd(1&b9sL}^D?G1=`4M}@FdOBxDGXn+vA0XCfB#jK5}uTd3dU=1jw zLYtz$P3c2`KButC$W+nLVz-N6#W~-BGwuzexbqd=ioCLzh5J!+GhTf)(1~-{MXPoQ z&$E&?D`_*=sfK#7!tO4>@}7^r;*g<kjDArYUDC&dL2MCWeixMPqJ%6;$P#6{aF}A8 zH5!I7D8I|923b*mLh!f7Y_LQ}awXhC_drW{UV^s<&qq9?OhEKOM{>VEg&uVE2v;06 z9Ld#B*+y=1l$OEZj`9+@$&rT~ag@km8I+PTra)mEe$~_}iu{*IpP#c3$aX$5J|DRw zh*F76uBzQtwYz4yQNq{K3JeE;V{3R|MH94J*hGs`ux?)9mB75KvUk<>uBzVE{&vlz zyOOqN#=omi@2Ip&WFbE}{48R{Ah}0R+R<OhKKkT->XiGbSMGB}Fz1tty0JXrNZovj z$Y8J!v>Xo3;hkbExU)=1v>gF&r+~Kzg9ZIidLO4SzuD=a_afO9<Gby$6D}E7@@WQ~ z4&s`c?xrPP%}Q8sfTcEfEG{T2<#cuGs@RO$&M>tfv`64=q7kBWsXb<f7D?h8g_UlT z2go5X)(h>{cnBLq+MtyuwNFNUwX>OIdY%)$lceitUv1n~SC`v0D2J|m<2TZ`WUrHX z3_ZSPS9%Xk24={53NZB)^s8V!!Sw$@P!G`=v2-)@8gBF9O-PG`-k*d5q?SWJ07!Vp z$A~9+Xrde|OaWu6=d3<J_`TBXghe)(T;%^XGSg_w<>6zi_4MPv>YDdL*(-y*gI(eE zo$*wJraPn~9jPk;`vO@ZgUaNPxa7crij#pLH#pF&xK<YPs8<E;^=coR^&E%+4b2WG z!aY*GM+Q0%;Yem?$>a;aCK!}m<S=(4hsUnAll4GiUIL`)V1~<+cRq#(oC8|hbBY94 zB&&3I&ZmH)obAQ#Hjr|o*N!X1cs1nllnzuzJ{(0cJ7OXhaF!#d_Qb>igPTs!D=9C9 z<gn4BJisT!^l8e&jen%zJNys)$80r3Cr~4Y{9YQ)#jPB0xi_#R%27BN1c!2@)9wt_ zG*I1g8op%l#jHL3@0~$EFO2^Qi8~kiYX!(@QN5;Z!WGW7b_S5_KA_UUyA1#=8-7hO zAXl0JLmjjq#U*?<u`lE;C^Blge*8Wek$4{as8+x`5TFxm>P$i!48-6_&c*xr<KO)M z_cV5{0ym9_f-f=|@FO_~R(+$Ig4XW<Er8O0PUYeyPfswOvQa9uO&KG{BhMlYnH;%i zIs)I+A}T`n9JNNlwF)N#%veSqXAx8DhmUDW7yn0$le!0w))T*mCtRFJx@eI2<wEBI z6UNMmp4ne`c575)+H`acNRWh*yX5B@$VZ8FY&k7L%4xlEZ?yfo*Xa<7@G6A*6a!it z-qSxIlYKu%S%(Pe7;o>Ug<fb)2gHmHbTG$YVr6_kG7LBcL`;qjr_<pS%N>JXhp#U= za79R<$Z^(U)Dc$HcYle=nI#;?I`Mui0%u4*I`wsge*?xl>7e$Z#;7URvaji@lg|g- zz1w>|PJD!$?d=f<7eAPGO7rq`>T~nV^QBqmOL~Pp%~~SOCMff#9!b|5>1n1%&1Lg7 z-7s;@*L)MxUy=s$Y%p(JZ)-K|_gK^1C;VI5C%~%!_UaXYAn}$!Gi{!;vGFLzB;q1W zQbXp4gfoT>XdMGZLdJ}bNMKH96O<v@Yws5jnot2#G}(Cqho2PF(LwZS>v+~Z+37jD zxgDD~fyBc;bjCaHPDhwmT0F>jFh_T8aJ9=`j@fhJ+LzC|gK{ui?2{u1jOag=-r1NJ zm+?)0B`n1`=ZaV6jSisEHR~D_gXpGntBo&<CMv;C+g-b~%|{m^1ieKk+_Z(;G%Ia; zSZQmt*{FoJxE&j&?bsS^r=e;)wnN*o3EK8G!dKk8?im_-g7U^&+SNyP^^yHJTHIAc zT4L<c%u$KjY#JTJ7e!3N5n74!p#8)=c-oTNE>o#GHlL@x=T7~G6=-R^`{T1t7zWFG zXUg$1T8drkY13K@@)9AJP7YQ6oGK8?DG%DZT0NvQl=UJ%iweh}LSG^w1`j`qb2;KP zcnX!X;;AhF{sSLyIk8WH1iByg^9deK1&;8)UV--`37<rZHo<$GJ?(M6#9qIzswnlf zUFR>mCf1!jIGXg%ZgsTm6(5Kz;K9tk#u>n_Rm;vsDIsa2rk#>9(iD+4LKEB!ypV11 z%Li}CPFMOEz-a3#;~fBI3{Vx!PN0zD+GH0GznaF-5z*ZIkHJ6>`L*%rdTwZ4c$xym zS9@OuLAgZdS>E}OYd#AvpQMye^2d@mmcTJs?+lXp9XaE=xbc%&A5nB;1Zm|>spF6^ zmNc=;2S@VU|Ky3E8paVz#;fkrI(U-Oyug#q#S$Eb+^{GZEI7(f8j#Z*ZZJ?>_2viU ziT`rq8Jn=Ug)p&bFoeDjKs3wMoDcMULWEKA)0%{y5%70V025m^Cq|bBx;3ilDi5|2 z2moY4&6Y0;Hv?pr`?9g6xxlj%mes~%EJOH!dDT7cEA9nc<5usL=S9~9)f+~4af(nV zuQ7<k#r_Vm$F$|v>q^-Ksg}9&29#3(3Vv0<$3#pN`2r3UTR3<Ij{&m^CAVy|IR1N@ z#0_hBL!zhfe)wkq6Wmd`wIL;NgILEk!3i$-R7$B^BEaA|>jlJ8R1HgwEQP0yknirX z9J?mfdR8~d_ATn$C7Q1J0>N+tUXOTp3*-;iNaAVEAGm`EVCk-lUeiBgEGSPTeY;X4 zC*-iNS;;Mpf95oqYV_XX_g$}cEDQ%-GV9Kz-43DZt4^`5WoVnl*Smlh!WI8M>`;h0 zWT>xp9#gGNG|0&H$A5;L^C9MJ2;S!_T0l{8;}qvwr*9-{QEM*yjs^!QXd`Sa6o<ZU zA5b=N-8jf?8e6t&a1a>o{#G)IzXb>i&^4ldpFqOYAwdm+=m0_<{9-S>Uw;Mv7uTa* zL$#t^^X_Z+4%e6LaBhH+gR-Mwy_{xu=*_&-1CI_8=>w0Bb$H;>NKqIWv3R$3${-oU zCVzab&)_LEcYH~=xA!ue8l&I-VftTP!^eXF-1Uc^n>09+yqp$)L0I7T3g+~|V)>9B zFoT;Q+{1C_Vdkl&U7qrR<bnBg<s?SDayy7XS7IM@<^MLyvQCYpACZXLw4LEB_!Zt& zvs7n7uo~)-@jh<@sF#dS%e^s%)@5fZNVuEXQDI5P3tC1;zcAOub9-H*7J?0s(Ooo= z((i+OyaiT~=oVo;wh=8*H+O+heq&NLM{(q6lpD#_byA99pm^XDUH~wV58!E=9^!o4 z|Gl=PD{5J=R`q>;c{p%+yogn?U$}89Fp+XsY)5+^?m5#16K?bdiwQlbf_Jg*AUg?t zdXi^orl_F2N9&m**e$!G4gH`}@Hh9eAq$mUQSKWQ`*cz%0I(8d(l6R1l9BZD$G?oy zS*A5&-sVhSNa4oh?=~t3dZH?6TBfIBmO(|qOmLT7p0~q8c1|!)1J-#=;135#$0JJo zp%Q%9Ox(Ta4}Zte0BXR19f$zT1X-LMb{_IO#S*&<^l_8^-d&P?c8hx_CuoIVF$MM< z9_&CF-t);%KK$g9pZxO8PG>hUd|lSHTnBV*m;Z^(LmRv^OFZdK4fIEs-b;0p-c70E zfdG8~S3s!0och!0Alkg6J=#M{v`p^;7t#+=TTcLH(wp4&q~T&By(4O`9iyu#M|r~! z&~Fb6dU_4GsD)h=;ZT<N6;m29jgH`tGRh%K-#;&a?xIMF1F^E-*#%7E_2PJIOfkCY z*_`h9KGCI-t`zThXXxV|Kvp|n0;n(&!7CF06964eABEX=;ZBfR)zMl{jkT_Cp*gej zB`$oOI1C3OSDhBW2D~6AAAgOI8!<#Wm5V8|&aX@kJRTgc*!mDocYf=ssFx@Ct{Xp# zxe|*xf8=iTkKlw8pufN5bUJ{EtOBk9$W!1{GHT%E1Uh^P+@@^=w1UblM0M@KVcPZb z*N4AoVs_)lTThM_lD%Q9fZuNA(U0Cse-n7CfEk(~hS2Gv41gD-y<wPE@(}#gGM)*+ zO$cm)KwbsK)%Q7Iu;sAo8-gb}t=xDOOup#QH`9(W%}Un{?{zQp6k;REak6Z$ouS;3 z?v-?>6oDhw%+7FCbkSI{$~=nvCuO#}I*gjdYsY@n(F{2FS%8yCK&h%2K^r(TU!XnB z%8;P53j?%U7=9SvmBb<{Sn^jIp%$*KAY)Vs<kB73)e(WW3jDrlrQ2r@FBsfh?RZP? z9C0dm5WGB)mxX{quZ*}L(%ChH6~LY1l%OlHR7LVSK^MBfyF(Xvr#l5*TqWoz{a-2S zy+C@jlS1RJ%rqZHms@ufEKkYeQ?yQ34U91RFs=hu16HLxTJ3P4S;_jP6fanfmgNhC zNn4(9=>Mw^<b?&e!^-|P7Z~}o(v0=})<IW-0i<lBNR)%A5pd3s=xcc7tFPM)!K$VM z-)Oo}XxmBIYz6$kJ-~m_{sr^YYNcM6eKsX-xS-K-MYb(X20@AzKOpKhj6z17{RrY= zJg7p<(Zjp?uMc<fOL_Yh1K2O6^>v$GwzPfKEs4$SFG&7(FWV{;Jra4l4|BQ6`1X=< zpkQR$jSh981Pf>a(v4YNab;7hgs+ulYADNC2xckx%J0QvdN2Mz+vD>!0s}cfZ8`@0 z8<n*;zZGl8C?3^?53*+$)z6nOxO|j>4-!^JJ_+s{PO!FPi;RWjZ=`SeB(v|LH*kWi zT<|d!RE%)Bit_@M3%jO~d9mGSA-UwgVZkxW;0C+DfBdJBUoas&WX*)jj3DVI+m`V` zHd9tVOO`%E7(PqjJ-fVlE!azBFY*1kOo^X-$uws<Imk?#84j0)K1e(U%D!Ytf9H#8 zis35QA>UW>K}Uw`WmV*?$ht7N;uT(0{6)oICfUnkA}tJe`l8F3e);(*L-N;CCmG;; z32=Px$^M@EpLHW+os!#_tOqy@`~)zGLRS`VWNyZS4Xop>J!8QM9_uKAn7pxZag(Lc zG;3(d)L3ftX?M1B%lFPR_2uQ3Qv5mey8(G&0trr_^q+<%5Cic4-0%dfLLZ7M9U&pY z%jKBva_ig1oV540i-E`#KN@B|Z<Y0xIv-zbU7RiJWDJ0O9*qG#0lvlgmK|>8Y4Mji zDP)e4m2#Fe;kC`L`{nL~)!!*Dq|?^543>dqg`RmG4mShqf6snnt49`xwuD)$l)5B# z^&pkn30&@qa#<px5;-Y~t3+Jt6}J9p#q#TQSql#U+WE{}DI(kH+4Q3zt&ZT`pf%TS z8}Woy?!H{{UGAPQ<>TdlVNyx@K|v*pU30fLb@1<T9KxqrvZJ|oWdKgR2O03Q2S>Jm zH9+&kLl>&F%>1-rDh2#jhF+42hothr5o!3~zpqCs;Gj9QUzWmwEkC3;vrAys|78Cz z3zjK_=@g-8nj0hunnM^fA7Xu(;*v%SC||J2d@8Tf($XptfbLX@C_KCr_lt242zzL# zM9d*m9OYqP5-4F;A_xRp0WFo+Q`QCrpE+nca(^SzFtSh?tOjPvEE$!V4wyQ&>EU5} zS0~Wr;t;LDP-f*np?)DtU18RjEeDH$2l>Q;!f7MMVf7T6=x7#g0en?pPaD&0n&Cj{ zv^^*TYtwFz0|6J>7KGEfGEoB?Ew)AU3GfSy&b!0#R1WL%;D21jg>uR=f2z>Aiw&g~ zS+6bl>tgnTdo~UAi2k9{c<_reAPeS`ald~2AN!}?d54?ofcn@Rl|anZO9b`%d?AIe z#cswpc(BA@pBBeA+Qav^{r^JO!}@Sg82B!lUF%Nv@9%k}YOp-UF*TsjcA(il8aP_T zw8Mrh@zRVej{cxE#>$b0Q+XVV9APLL?Ksx{Z%)wUyq+lWsLj7oTAKGslkUVx-gRj3 zFu<RG0a?KGrZKsIL?yB4ntUvqKClR^OWF4_lNGN}SF8zQ(mOhaYBMGkV-<CV786se z0h%WiMmgA<d}&WQxy`n$+-Az)=>+uPw8*qowi!_<X-OcAJuP&-(3PCQ-8IsLsG_i= zv=wl8#W%{VkH;01qd2D0^BltP;_t&%^i8kd4CCaA16I6CYzQe@t$9sr>R6XC(>Yp$ z_aYb$+ewzTW-M$eYsSD;yusCf5p!(R7gps`QzJE5x$qmZgI*l>_#r1(Q>0Z%cG5NX zW(nYGQeXl}uGJ#*LvfA|#ioS?{<9dIk&S)`v;w_AxUrIUDuySUYeFCTZ4UAO9%*3G zC{~a;h1g4JbTGFlsyfE_@CD$G*e6WT$}RGp?0Z=3u-Iv#AR>Q;JYId3u3?xH-nz{9 zGWbi0crsC4RqrR}`{pN2b{L87RQI(lX?8+Wn?SDau+70||1#v|<F6x=1wUPWt!|O& z$HzIone0^j1@uO9?}Mn*gL8AggIl1;G4{<$heDfL9}Oz#$e`azzBbQ!gPs1|EcCcM zogmF?<aBrQPSe9pj}Z#_EBt~5Caqcf^;sKs2qL@6IV9tw`84;HTnZTMx_ovon_6|- z!p%wMo98p#kWoaGSV$0C&KUV{@aAOZ+NR?7?eoXK3?!K4A(^Ok=1p3sKGj!XlFCLm zn!n-Ei%SB*dA3_l_1}|m<!J|mDKbSUD%~c3>MPHv43jSKEyV1tEI0o8tN|1w)`=Rt zUF`_LO3np@Y|397l2?qubCwen1JhH9g4Q5CXO>8wf`LqM*GDBkMxQV*_y;q}1EcE9 zk!RL`Giz9xIh@RD)^$k%F!CP(kI2Z#;mO~g_Q7VxmW0ATdDg5wm*|&;A?kEF<3Zy* zf7<9ZKfMWjI|pl=O00GlvtAmLnRDXdE<QvoWQsSsDPAEmOxXm3InWkNe9O*$W7_^{ zgz|DwOUlwyW2O-LlpE4~AhFX;>=gb|I7N^;Fn|JRC-iO?{~LeJl6W9~xkK)TogRmM z3(9F_f*&ZFN@DxGJc{xB5>(a%yC&Y9$m;{nw)Z&Q+HlZiw%a8KH+FT~!1uxPrn^IV z8)dnyykumM-Dblx1X(iY00=hDGB(`+$syL9e<DMlD?0P9BRRiFreByyBt8V-0oLEG zu>+r51M&S^ox$;M20Kyx^X38H_)YWX7jbTN9=O^Ki5mu!8^y(LzSOv3sbK^$-fWFg z{~G+e9gj0B@a06MexKr2J{l3&bJ+o4Td7;24_{*3px5)p1;!1pz23N(xM_iKE6|F1 z;{o8UV24@hiw;I>g}2H@u#?D2f^h2^?`{;Dp>MHxxN-3S>Lu$4k<P7h!KKA5mKH>C zw;(UR$hcuiapRKW#wCS;at5&bavzU|Mf8Zm`ZV1=#oX8zr9W?5zt#V5n^`Q*zK-rb z{|UVLtzfUWzA+^?ti)>YVY)W~>!$$e+K~1T1oB6^e9Qo{Y17b*5Ly!+G(o|c#Kl;M z`amdSH_+eAb4i04Van<&ynY?5C&2>FHILf^r$l|z(S1iT>549yC%1h(hSlRSIVUn| z96byx4GI$S9DO{bCA5Ia0_V5d3PzPo7w*3lmWeZf$|~+l_Wn*53ja2Xcwz=qH0z_e z<9E6rVvz6cu`733S1Gv%8a#|4jWA9m<YEhBNYM|8=^k<&Mx1tVOqVz{HZYPuZo`2B z(h<_7z%v>tue~^6QgXQyETVFP9j2qOTLVx94h<2}vYy~f@22T0&?>ksMEemGE!R`h zb%oyW4r@4OmIt(j;V8i&s~Rf$5@H^Py!3(A11Vu9SkO~4ua5`B4E-{OA9nO71?m0i zia{^s=Kv?>c7iAN6Jf2KfP24R0IG)J_X&C`F?X6)p~DGsPG#l*!Ftj^%zma=*AflM zjEE;(OtCw~7xXEB+NUI+Z%Ezoo)q~#9TjvxRop%QgO6C}<_)Jm|9-;%yJCLRs3>`M z=Lmm3Y!HMk_Km23W`6$c;{_%|@9q`@&de?|$FO4Oum3HT3{Ddqg#W3KeuJ*$Kdfk6 z`$Hv2DvEq&4cbDN<^^W7#W^zM5Aqo;Br-CN!L+d%-Dt7V{AJrGM_#42HhvbyKBfaG zqLE6_2wy_sauOvY%Z6I&9ImABuK4Wc<V1vqV*sTZ^*)y&ydlYV{3rRjW5A#9ETlWj z=3Y9d+#ee{LUp<S-k!Z;r=9KYv4gd_m>ftTtEF#PeS322g1p7}zBC+l77Wsh2FC?k z`3mmI8~ef`aallC72)EGPf#%6fLt<HzBO(r0L$v=FRR8iTqW-*Y2)fb4*zPgYYJY} z_sV))d0X7S@Q^cy-4Vk4MHF-3(PLNJqC&d}jlsu*Fb>xQup!?o7BM^W@qkX03g(8R z>1V|5E?7P<^f9S4?D3(-2pm_y&+q}=-t<{cKuq=}Yl+2$)a4kEE_|gMz?0~RARP5{ z)1M;Z8|a4oz9XHUT`(AA>GC@4lFN+scn;IZLg15tX$<S#C^j!08Y)D?u=Qz0i?KUG zytLrh`%#L!YrS+L^mZ|N@nTQYH96y&F#H*^@qHBb3oQ;G;p6cV`gH0droA7__I6R+ zuRHV!!!e#^bHXTUm&|VA+p+&9XdJ<#S5PIQ8;PIIRrHyen1xHawACd0J;6Tv!EW#8 zA$9wSmh-1?ANovHc>1d8G?4FAe2Zm&hG15ihC1(xd`$9J6#jCu!f3-b&i(s*$Dxe_ zFEFeu?HCYkQzw81dL#>ncD)Ye`iv>qj<psta^q3QgjP{HfKV@Lg1rvDK?f3_$O+yY zupDL;(d^Gxf`;7)4!0dT3aUU6$y~xuS!&lDlrgkB+uV3IyyN|88Xb|K7Z&S7!^iS^ zb`>Mu9|wEJhct=dmEyqT9JGr9um}gdklGJTxRH~aTi-4qEs3uj>q0(uW>AaY`#0NG zC;$==X`cD?hQkquPmUE-KCy7l3H*E!Euyko0)^|tAAOAi_?%KvU0eo$ov$2B2NTm` zidznhPCUeGZi3SZ!YQ8HAn-UUlApSBSZ6W~BJNb?O9tTdQ_+r+Hhl#BAnwfcC;7yC zlm;F?otsj56>;{e^QJju<>2V7gh)29hgqQ<9Lde6<mR$Rjv%_x+xG&?bwOh&?<O7& z@<%1vtU4}<OYCmTc{^LQZ!NKJEha8<tIeO_tuMFM#=LUuJ_?0@DyRY3Wr{$*JIcY! z!7ITl;Ekr<0Zc*TZvK6fz$0<g3!?DKMCH4^Kh)9}Ka2GKQ*7n52JkY|Cm;u)wwfoa zH-*D+)|cS=R=|jl1_W=tG)Gn7O4=(mb&qJ4fssZU&PH!Kgp6pZ)A8Z`72b<oB9Os8 ztNi6ej4Lh#1ge!j%kIbq1W}z1qDa0Y?}31FJ{)k7%ZxGrcyk~dhMI?iL;t1rY#(V$ zjKGB}Y^Oc#R==Pc$bw%J(zV*P-5zpCm5eB*O40n5(KjWPx(@0J?3E60KG1s57re6$ z%0fO@(WxHl#D59yi)Bmn2ap2rwY!tI-nA;!80H2WQqZ?bZ<FVXz&PXJ8#4mqEOjpM zCSj0W(9~!g5Q_%`C!Qyh+BA$#rQsI`n5gOy2CPXPqPGh+^1OtTRmUlHvj1>$3|Ov< z9^>3>k4}mC6-+3(0batFPM-;%0kH}-SVuQcSo+D<GiOZ-6?t)k)-ucE5zA>ft@!VQ zzfk*;-~^ZsZm+@DFm6&E@Q<F)r-FKcWLNrnAcnL0Neh5dvTzOWX!n7Ha3*vCL`PY) zk+Xbwwp-x`{1%)T%Mo8b+)c{WnhziMBgmKHDWdPtUk<|_Ak6_I3+2edGXhe4tWP~> zYbcsi{#+r1-`8z1yFp<$Ff~E&0c5T!vNwe)o$&3vubsjtL1UT*GtGz8?%Puu*C-QA z)SjSRo<b_;ke&>|iPoXoa&J1w-E@$<@vzn?+&cRE$N$vLO7p-u@iy?Rir`HOFLidl z`PI@&yb*2~aJK2uj4rv<Z+Dc=rq%mKX?_D-{#G;z9dr`4L;1iMsvV!4zNZuH1$E>n z!{ODA>D}Uk-|H$wHfLngH&FFI9xa3+$sk?F{q~p&ONglY_EGU+=a<#Rr!}8TjoE=U z(QoegzgMb)?SIvYt9migCkGU2BO>pCPrm(&=lieI8L3IF)vzn^?(~A_R{z3Y<He(+ zp?SA+J0ljcQCkn&vc4n5G8E_qASa6$AcaFxg|mg}N->Ni`J7KKG};M=3j#*_k#7Q% zd2HRluQ3%|7)Z-hw2AK9tD<cYWlQabhR~IT$b{o?RNMh47enN4xSTU!dUk>cB<1bs z=~gU7{|r;f77o6gk>|}<pMz=PAwev+QKT)apbI?>Q1xIWIkB_LN?^q!wxQ`i$7~eg z4!{{fjqf-MsHkJ^d^R1LF^sfFVA4=41@uZK8l}lRrImmgoZx(F!~FI6<6i?Gg)=F5 z{L`6SG1>_QJTaE=w6c;R*f}(%Wh*HPiBGo-&0T=!nFee|L;$lt6(PClftTlvuA&6W zIAuhJIP!MHkeLdI7HfM6DyQr#+;D2Y>6Dr0#?!Z%ivT%x(cK9xOyB3wEJGo=SSD)7 z17eA_k6#otyVXAAIPm~BuWgp1jkhbz=>$+R27ik8lkO81nuHtCDqH1fi(=f6femLj z4tiPi-vr^5L3`#TR4_EUb2&6STPaj27)7y|(8*vA>(oE0av5~xgCg!mFp?xYmUj0z zo(3r3q#_pDRZ<g8>|cp(G_f%x_5H+=DZQH<uI&jA_`AWG`AL@_|1scw6(=TPP2d4u z6qAYSH?aHcJ$)D7B>g7vW&mSQyj)=@D8tDUHN_iVAX{K?rPsb;%u#liURE+=atrh} z#IqNU6jed4xEdj1dI|^oq<5%>l-Qwh5wVg%#E$?SO=M*fgmz<wZYJ$x6q)i1iIx0> zrT?S8B5!?^G;bp~0L@~Qa8t-a$~clH#y;>LX&g12q|w#O*Z~i+XGbF}qLCTkh?}7G zh?7s6SQV2}tCFH*r2`~EL#`A|8GsjEz;IRFB(1<O2u%WvLBZwe;2a)L9#l3{KKyXl zv8k7yZ2>db3F_=c!HfEb%J7QpJ^=zKu?ezcFLTdgDJqc?MG~#YKufoCd$3SYfZ@ZZ z^#lo-fvT~F6!q*69$uyc(_<dQ8V*+QRz)SdBX5(!DvF@Y0S=a2GgXTMT%s@*Iay;Y zitbfTg|^Dw-*%*C2ZhDAL_&ztq5Rx+Ps)xGgUca0mHFVHIq6X^J8&cjUBkmk*|6}_ zF|tj;Sv!KXG$|6b8!gAAOss;UR=gmb#s62{Ivwl@#VN5aq(Od2kD?$ylb6FMio-p> zyu(@oa!eE%OQo#&A~$g4H$`|K$Oxm-v$nbf6&Hnu?5is@lYET#`8{)r%<lphhI(P4 zIG}U83X5i8P=Q>S*h^{|n=Y^#I-Ic>@<j>1<On#2SCn8}a2<GR<TQd}gx(!<4C%}~ z?`0a8ML7;-J~QC}VO8L@ms@&bP$t(-?})8s@llthgINGJ97nRhGGxG)+J66WC1S%l zl=vSy{0H5Ntl&K?mCh~=MZB;?yd8>6>imc7ac4jzfk|dq@Mel0{u)@`J(nJ#|Gy$` zz;rdv0bQqg3-pv7D8C~EktKq9k15QN7kAI<*PO=m)+zQ$BkcX&A89azn0qyxA(xJf zA}1?}i~=u`LFOqy8;Cr*Ig%jng9!OBhDrW03+0hna_My=G)7k#V+gHq28TA<`xtrw z!6Bz4Np>5U0vxPx?N!c6D|62Bs}gd`KFe1*c{$R_^aKzeopEXxZ+%mzI5dc9mUbZ2 zk@lqW!vwLSrV0NvD7l4cVKr+Suiys4sU>R^oHSizF79$sVaL>OXck0_F^A_E)pIoA zqC{#I%`qGu^;h`3az$R^Wp4f-5S>4pE-3(jLrYzKYmW1}vfUX&fP*B1Xkg>s3}WX` z29Plv-~yRb=CFsOwxu@P5@|i`@9V(sR#<DTDr(<9s>LE%d_P4NY1m;}e8VEeFoydu z_Ej)a)?GnrPGUc@V*5?TSysBeR3~PAFC-G>?Ncka<cmCSu2de=9_Qc-9DSh1vuU@$ z8xH-!KkZjL*JiYMsjlS~NCP1h>QnMJo&PXS5VW&gcR4BV8`l^DZ=;=IW?q*wPEw5a zkgwH4RfU29wtTXqET2qq;r>JvIZiXxuPUhiri?n;Jo^8*Q7aXyZyd|$_VkshXx{*% z!luHawm(a}0B10ZSZgcu&@0?oYmK6dE&!_lrwIl`-G!RGp<t<o6s(GoKe0Y88t99U ziLQ=j40SZ4p0p)xoMtIWY_>ibGx`fDQp53$4{vowhu}DiqU1r_3}wCBOvnhVwYo0f zstOys0J}nf8X@pD+Vugt(3rZ}h+jo*_Hy(UfcYR*qT^-(Z4#UM4;nB0l6gUus<a1L z_@y1o)CR*p?fV5X^cb}&VC&p`1l@cDHSjA~?s_KWhQxMFZecs#MrbN?0NKyOug*aV zmOygW8Xoa)ffW911Ff1hu{UZ9B%_S1sYn;Kjgjq_YD@+6p&))~+<d+d_TudLJax#z zCwn*BN=Bjlyz6@sW%gIVJwF1mSnDcybVAs<G$O|-95XsU@8u-o#zEm~v(3PZR=qPc z9^>it)ZiG1ftBfCIj;k?1i<(dQ0FE@$M%zr<Zb-XjfM(XIe&aw3J_LTSzX;~biicx zzK;SFt~g}^axlBy65u8Go<e{e5WNOav)<$-vf!exijTeQ&jnvZUfVZ6-qZegL->iR z`oj+U2d|97vF{%IXt>~goAGDC^}R|}`v3xQg#KCNmYK%|>dz9CMBU@hq7#i3z1~$t z7HZ1|$WEORPF6>g$3<=FM?uJ>AFcqSIN3R?7-rm0=|ZX~?OrE#FYn#UY9Fk7+M$l1 z5_VHYA%OGF{gWncTU9cUBof-;gqBfSE-cpl^A0ZD&^u3?8?_FOOVu661x9owOzp0% zT%&_=+pg@6x-$7$uc<Z*P7o_Pqxw{E;rV!=?5sP173*Zr5Xr5Ly7<{)SW0^c9sRh= zpT=4P?k;hrE8kr<81x!QQJwwN=%hCfDwU!&B7ieza|Un_NC1ivgwGvD8kwM&`Cx*I zVwq-BQXi(T?jGJ&0sO@z^3bH3aN><-5NUP-W<w_&h6BzG1@qu7&B47o3Wv&<bKlL) z%kI`g6FD@IOp7ZvFxXHDI4IZwifJbM?e@bA%0+oEEuK7k)iSquj+8_G6F(cCSSe^Q z^$Tu;YgB=+fzSL!8Kz@!=UTB3hTPqnvDY&dGD-<|n63xYl`l!SiAQT?n!4+<wRF{$ zqiND`(>8bg-%RVl#Pbv~W@s;$LF(PY<h72bdvmySsXrJ#&xZ`Fo^T*YMmur-8K%eI za_w<&_jSyqFDiU?({Kp-`%qF5=-MP53VCi7clMfhr|+Km!`-2Y7hosTxlHzllTI{| z4&pOp6?rAS)4{>iJ*F+#RK*KCi%P=w-Z_xp%>&)0o}F8-RP;9OobW3ck@n`K)9)4R zcea25{yv7xCTfFnHDAWEf$|iAgSV+u0F0bkcv4GCdW{VCvhhXykYS(9_RlN7@b`H| zrIGe_ffdNq-adp7)MuX6nSY8=yyN)PilHK8)u$U0M}to!^vWEvJ4Bgja`*<w_H#Y4 zd@DuVuEiPNM_%iK7mS5pHkj+e=3q2+IpByG5dMvy)D_CKAFN((V67Ovuhd^<fR{KA zMr!Q7WOY)ejOXs7V@8bU60m1!jP@AX!a^MNG$7F~u)3Tfzi=e5!8f}?@ZPIR;i?jd zjPfT*PkMdQ+v~(e<%*w#1~`=tD5510<fvz!(v_Jw*=8UB7E@3QWF#wFb7vR$4X7aV zz%Q$WYJf^Vn+nPo0?3L&W;;-8$(f;6%F0*4?V~vF4q8~&8IQwEolg*`c!+OAI;F#n zyFC7Uq}jcgi5Y1w#$t5TEzjrftg3GMF@^>i)_jiqCkzMkur_pHHr)KpM}KK;NX!%x zQVUI!nF^E-^Vz+I$0E{vl@^<_h{{*9X(4a#%mwv;6^tyHiWaBP{sE{wW0z#K`^SG6 z_-cu1GnP5#By;b*!HkMIb1c_mXaFzGRA#+`V@SW)rpRkgK;-g=-u@)?7B*ibHu2lB zo10V2t7iS|1oB8!6t+yTcPYLxV~9El4V|^WId$HV+RlvIMjY9ieco+!5n~Vo7n6aC z=teq4_$`0Z6bKDJs+nn&a*JVXa0#?F6fmNd1BCeRCgnSP6mLLLE%lzt<jV61hVcOZ zhSLG>f!F4wg%uSb`M*_RPjksF#G~UD^%BvYlV?Rx4`@+5+`LA{udU=)mDd`nw1}dh z)^9N+XY<V5JQ|z(QL~~tB?G^s2!1>GY5)fX4Sq+nO5c-MISY8aTQOCnd{&fp)v>5O zdzAPdN!+6evC>}I)f-j&y+&bPy~wUnVAphUus8@SMc^7SP;I}KXg=4%%(*)8=2}tf z<8=3r$it~<y*eJ7zvm@TR7o|j>y|_noagmb{hPPT5NAghBJg~uWxml=p><%b_EYjQ zczs&JB35ArUv$=b{|aA&q8=eGzWSb7b(FPhcX2R@&v>tj(&~Y(=x1p+1a-UCPVv;C z+k4Nw+T*I^B@z3PMZ1WYJ65l^rpal99DbB611=a!K8U;%Uj5INaPyU#L}p`gV?;D> zfnJgjcC*unb4%bH{yYrT*40TA)mr4jyM?u=J6X#^ob5s<TXvcPTpfkoGl1K<Kp$|| zy9EF8`n^8o{przqMrxkkv8+)BKOQp)7GJ5})T*{6c`8j2yLe;c(YGQ~*O%-LAN(~H zs7?syU#-6XYNP2d@3McTgSEhKueQIVV*Va9V*HLi=eKtO&qZ^+is<O&WOCX$c!wr& z;Ox{bTRV6~ANh(t@|$JC3|pZ13ia7~04{8n+uS*Gow@T0s73<h%#Fj74LE4jtAwmc z^Jl+&CxkI*^(FNhL+&~sz)r9^XAhvz=D);YQ@*QWKDasY@WlbZN0$R%eb({t{jW#t ze-U-}O9+{|gJ(08gCR9o^MKt1j3L(JFpJolxW@Ux1@<F3K}sGW(gbqFZ}4loa`oU_ z0!BSn21~%$<T1ndeaJ45(_W*^<LVxZC*SwF9wl-_>&@RRQnp<!Ost5`NXgLiCz^vd z17<x8&`~k*uO!GyW1`Vs^8vLYF$!NJRk9ISWpxGP051aHZ5_tJfzCY`qA&i*Gk~9L zuEzq@{iqWM+GU4~0ayey<KodsQ+;9g3`iM7zI51>k%}bfU9l;Zy*xg`eC11C6?ySh z6ku|&I`|TJ4OVG}WiGa-HTW$ipny7}=m=4=r+dNT3o-<V{`z|e_rJsI-Q7L9PZ#{? z4(KVQxIS222Hv8nH2kAY){5|7?elNb(1QCtMD$v~za!3E_Sm_jNo$^D2f(e8r8BlE z5-r&g)xLeWB<LrzT>xBLG4L&bxu20P_a7Ww)77qsRWg>-mw@O-TKb*x3fds(rvo1= zl3gEydvvt*d$uPs0}1xB%ygOEh{lt2p#XqW(c~39`Noc`LkB1l!^%s9GVx<h0HSsh zhg9CfmyN-&`ce=>b{g_@c?C$4J&Hqfw2CFksrmQAEQANP6pv2Qg$^2w;4}}buXa+j z)kI}Z3iFpNDI?C+0Iv>csk1thl$lSiq}+fiqmXQWD}%6OmAGSNYREf@dD$aD|HZ)@ zl_O1Q!g(TYH7m-wdzZo{!zXD1Gwg8!Vr&3~_=}2<8&-1WmzTbXm=U=a;>EKe+e2d# zdr7}p|8nAsvxX3B+<Kj~T*fo!?DhpIDRU^Y2dO&6sc7TdP&pulT{b(wRe_wNEg}(g zix+P|G)*zcM9j+hS&vUn)K5FPW?BLDNidXyff1MorgHv}U;NuJ@^HpL1*!(!cVfFy zB4)MOxtvrlDk`4@s$X*px{Oh2<`Pja;}26>cwWJfq-LeJc$~EjP{GYPOGsQI4u@b2 zx}Sw!l)vl2+4i5HgmX|ynpvj#n^}g-HcZpn&?%arDc%(K!P{K~82uf+5rw-0LLhAn zNUi5jUn(`kZ%2aEe_C@v%F5>j&5iVJ^5a((6zEE-K$}T+wf(HE>x%ir%ZsMcBf0`_ z04R<U9Rv}bFI$#y<hC8Mr)%vz$p_A4Rl+UK;#-_0b`C4Dk<|p@0hOtk;=?|`JfNP^ z;1k&LcffyB#8cs0a55geH>ozA4KJpC@WZ;EX0|r?I2ivXW9fSQy_E6M;b%XM5vTtY z@;CYRjq6&|_Fl8#;^69F5tw(k+hNyJwGlva&{)pnZq{ZxF#dNXGx})Kw+RpMPI%;* z9j!sUz~zXY0}Mm33z0YMtxg88oVP!4XXfOV_1v-{Rm{!0>4&4fI|sxSR)bi)OJj!p zQnf|We|PXd{Fm!yCoTW<U#@nsvflv~EJ?QcE0KY}XdCnhPqv;V6?d(v4#4Rr7rNWS zbHl6N=Jku9jv$L0R)OZwYSV=UNfZBQZ(cv96fTDY(gU$a;~2&@68m644;%3-eYVc- zsSfTr$3*fuKi&2lo8;fTa#v}cXFsi#?Pva@B7K|o@nH^kY(4F0ocr%i^7fFtx9(|= zDe4{_Rqily)JkBn&U{3>l7he-yk#z>?cK=U$Qc#E4qBef*mpOQ8D#jV3oFo`t}3A1 ze!$b?2Kc^SwiW3ezU==o$h+tOYt8`-OyGOSX_EaUYlhtt=0Upur)krp&66B_2fTa( z{s&!tOnSnHFi;M-^#>Se6}&JTE>czv#N4~!$B97gv>m)<zo4Asf-(^zbg^GgD-otV z71$AwKS8g^hf4}8W)v?C8@<cH{*V7t$#ynva@lS-hmR-oFulV^VyUH3<YnS86|7`B zV+xZyMUvAkqqJwB7+))~Gtc1L4(@;03&1Lk(JjVq6kTPbatk$0ra$1fh3H<>zCO%6 zS?7|WFBBG&9UU}s>3Ra>KI3Pr*W59Zr6wHIZeQn4KQ;K{Gk3R+*V-y7ftK!p0+{i* z4rwRG7+@D*>gUvd3<Lu`v4m&FYi2pks?hkk<c#d72xJPnT7Q<inYldAY_#*Q1Xb1c zN7xqfl|Db=f;-tpk+dZ_>AVIn{*pc6>X3&tDym$!Ur~wv1%%*?cFthpfWpxd=yeT; zuV4~9I@>G#SB9=frz(1%wh=L~)oTJkcHY&&%PmEbg?3C$nV}PF0N>8~LYK96{DY7? zZqb9v@z87}ndP|FykfLBPbK$<bGM;{w~1{Xv^Mn(g-}<m@1iKgJN|juv)4GlkcYm| zpTJulKB$_;LFM3Y&Ywmx)>nYhhSZ`0fRZtFh7^os)UV$<%Dx|!hgdQj)RNcW(ztZT z9{>c7dZ&_=!lnuJ`z3&CcSEeM2~`Bz-IA&(?E&j|B}msh!y_|#FvlQ|(nHh>88Oln z@hIRHPsxJTH;fy;^rBN8M3SnTu~hYyb;Z~y?We)hJRtxNE-y$)p{aP}?R6b;yr`f} zEP%W6d?}GN1+f&6ozkM&eI6py{g!NwTe3uAHD?Fg(m+H*Nz)yl3U2Q6=E82pLz>;& zy>s`sGUfgMVYbn5t=irn60pOuUC1+pFDrVqA!g+U*#tJvg}cq#vhM>{@E6Q{R;<zu z6laPvpJWGdqx7yC-a#1mbhc;8?4nk0^F9NUh<B=nha+Aa#ylM;9b5$14$SQUn}nI( z8{;Qn&zRV0Ar-gZVgx7z=~isc@y`bTFu2lJTI*o@e+}H_zHsK{8;1mofbDz(*ntp% zE>J*a9njU8FVUT{vIwh>E<hUPc#^IQ%@Vr7`8JAlg9FBKgE-hy-Y9~Hiz{H~n%K1} zeywAR*T9H&u|}uv2JJF=SCUlqlG<Owo&F51*%>dMlPHMAx&u@ApjMjl-MhzB-bqH0 zfkbigt|88H5WO7i1QHv08f`vKZxA`lg{LK4{c=ZQc!ctI1F%|Hu}!xPa(!W~S;VLQ zt19NgFQ>*8Xu)J#blzqP>Tx+KX|^J+pSk<A3RymF@>if2(Etm);2%lGo<>$|mCwx3 zV$VHTIAuQB&)-})123F^mziy_?C<KMYBz%Swe4agqh%^sZ2D&`M&EQ%ecB;BAnaih zB>=v{nyD<M5^Ta5eLirmwZb?OPh1)f<ZIf%Yr}5g$BZl7Fp6yt?=rT>vzotIQ@>-d z{Pw}}TZ7^^t1wIRJL=W9SDx>vGT$*o|MYPEGoR7ij7k+9@GgWys-Se8NO+jUK$4h^ zQWu2{02@q=elSO?-*=nK@0X{o8#%`AGuJZZeS3V_AMSq!`lFoqc1+Rx*@ZfD%PBQl zj9uvu?5!%5)77>2*`6snnsUM+$#N>(Dkvwa4gwXhI$*@TTFmWMrmX-#Erhcjwl8NM z1p~zxR*~(@m2;7^k_Gg75AOFCfBB^7IG^^fi+1LU^lllwil0Sa;9I3Be(Rv<jRB)$ zCrUFD)APkcql_i><oq|$f3H*yQ#e?}F}2``QkjD?PDMfsmVHIb--0Psxhh|;(v$@d z9OmqmL0s{IRME+#;@bI&tLFn)<zjUwAp)DIMH=`#wmMQ&ToE6@wG#jXIvPPb8F4zs zQ7|FSKn?)OhDvx?9k^^9ashe`fr2McBFqwE(S0E(@5lrfgds(M#VYfN%7iys>}yLy zqs#)Xz5~FI?Vj3~*9;BuA4xHdKJLZ}NcB+$y1n`f0}Y=#HvHgFr%N+3A~J-06uW`2 zcRTs!{ofLLcntk5e3s?N>%m61FXu2iE!xW<jsz`A@N#tqtGp>b5s@e?a|<=0RI)3q zU4bUP4_v7I!@MRH0hM`>%7UUWQ!QL)73^9m;r6aMUAP_u!iEr61McA_4_R(BkFV%9 zg$PfZ{a(ZOjT8BzWjE;60Xd`lp7aKp{d?$;uovTB$;kowY<tai?!{6JU;N)t!QI}2 zHQx&I<w1Vi-sP*1`^{|r$;$p8nJENV{&(e-#ON4*fo9Ay4ZOlobTon#9wR*jVmZed z5R&9qsxFE?=9Jq}MX&ThJJL#qZ=BS=ANf>Q`BzemzrNlxDn2sLh?`+;`&0I%V+>{W zi$;@qf3IkA=JPzG6yYVFbsH8yE=YXcW{{05+vK)ZpPP&Z;FcB2$SN?H=rS`dS_>Lr zQ04A6E_rjAb<VyzlA|pg-Pz;aI{nEKf^b2L4`CpL2?SOsj;Juwc$-7c?C+oeUWGL? zEcne~U)-WIzyaDot=fsuUOw)h4PP9m10VB@3a;bxw~%cw0pTbX0G}iU+%yZM0smbH zHElG*QaC-V`06oZIBW#|dYt{!tCM1qw@Ub$N}0X4od;7tTM2vNd2lv!cJ}UY_MZ-h zRx(yM4syD>aO%kbIQZiE5`(n7Gbj$5bBX|x{|6?_Vy<+xy0LiFyl(T5dBK~UHvgNY zebB&}=9Rw3!YQS|AEqxnvw_*+Cv*E%V0uQZo(lQtiNhJlVvl52_lriRMYnPUEE>x| zeY$mmbcQZ<y$sAZ`}8hwJPTax{Yx-#`3s~MWeEP9Q$<B#VI5MIi6rX@anntX5Gp}( z1^zI=%wN`-*Z#{&g}`<8hJE6)QkW5SrE9e+p!U79cf!BPa<^XT)>##{Z%0y$oY<la zWSEEXAO91?wj3%*4y;oI!7Lsqi#0gFObm`Cl+zyr2(3?F_IPgv_A}{LTg{;0FB^K> zTbCA!XIFXaJ}+8WRk#jN31|X7e_5h$)~f1<FW3Sk2eShlYB$u=ZLc^<yR8BA{01&z zcX7LmsAjyk&eN?|tqDB*Jh-Ur0&;L(&LK@cXTEi=0!fHj5K513oib;P+#ibvSv<*l zPVm-E_k?UQO4r$wnpv3Yxm(8_optop0Ixu@y2~4PO>R&U{Q-&BnbiwGuI&GXBP`Y( zsSvXsXA}yqI~_iwyt9@4XG4EuPdpDJ<I$?YboA1KN+C5JrKW?Jgj*0q>FDGr#dA?v zpIg@76Dn$PCxuO+G|juWTJ+~(bg0TWcL!^QWCxZm_Dq;ya_C<2%h7TGA!fNkwS>b1 zJ5Xv4(!l}e#KKGn;IHO7?4k6;;c#Fdo#d|J*MZ;QJ)DmRuLs!D8UjS`szNh<GgW$G z4>Efp;L$mAP!920(?v~t#>w4EHx}N!eUjb>6>CLV9C^79xmihKMLds1yoQ6>Q92?y zd<OapVbo!Pj#hgg%52t|J-Sh*bd|0MpkMUAt`DV$|HmqQPBg#rE*tPScJ7;J&t|`1 zjJ!yGkQ*DlY~1TMKzh%cQuZjQkd?SO(~M64F(>cJAM@7GgF}z)>)lKfE@EFN<rb(B z$Qq!A7zF$QKO}Ag3TPOk0RiSf4&1JHkORB~ZqAt<EDlzevpVPD;J2)jhh>X5lDC`f z@HoFk!aMQ7JMqCg@d`3Im?Bl;-QIBQ_J%`0H$)#c%=lX=S_7Z^a#~E-yd-Jd1MWL9 z5s6Cgp6B!8bRB}V$^FI^Peph6^iIy^m=m2hkBdFh>4;(bod2d7s8JGpRibv`3Prrq zh>^xf4xosvb0>#>b;~fL6ivfW^WYI!S({crgb6r>Gwt^~Ob7One{>!&H5cLUck{R9 z0K<5I5smE-;FgabTYy^&u)^G6pwzrIVeBypgXv&tG0?1<*zBRO^Hz(yPFO1$zs<xx zR0>>gcoc=stU3%r>44mp0mTyVCdGY5OE~gr1ont;(AmzKJI4EvfSI=CV4DxN5C;TM z*3KQ4=BI?i@~}UnqHi}z%F_RKEALQ42uiDRMt@Yip%*;L02^=d#e19Ly$$!(oatu( z?6>W3x~>qH1_xJlNQAdwa!@FoMs{-0q$b;^8xGj{9+YOBM16xUHn(u~K9}Ijxx*#g z7ME3;*h5_IgUj;HuZ+hKif3N&EVI9$=-Vs2x~0o|f&X$zFAsC_!Yxy#($`x#cAUpa zSDBXr`O%FTa?ad1bd9yzO^-l{zS%uDJWP4B*&4gWxr@vOB;drm&A<*5Fu>lKnrIy+ zPlq@krb}(M1eBZo-0bg-dnb43y=_<cY}m%_IoZaz?E#TY2`Ni8QtWv6e9}vhoe5X< zx7l7>sNbG?Fap&qDyEXfNVz$+-x-1aorswSM1eKV=)i%(){6#5;ctie8{sS9y>XTH zva%404o_9|KozL-oI7@hh2XQohr^W*{5W{Ky)abOuZ<$F-4+0xS$uzDVSd{+HtoN; zIeGi5j%NRB?%q4-a<m%@4<o0uX<t|Y?HKfICq8RTW<54z)T%q_E{5nN2iBrNdy5v) z>~{Uk0I7^`#$w=45;JkpSiu*aoh2Q*m@457r3&)UJ6HjFeMg1gQ+J|)EGupS%{u8@ z>4|~Zn$f<UWeIdr^<v1{j;Nw-y^DT1J#`G@Bb}V;nI#w|?(YESz{w*^Rlop>qg4bW zj9>C3B+r+M_``hG#(~koX!7c*fyJpO*tg3J-bKI1051aMbnjW*Pac5BA|g@3O>w)@ zEZP49dHAJ;A2&UKR}W)J+E%Z4gC8BI147I=sjDl}j$iDP0US_423906c-^~1&A4#? z0^lXEy$@lXBu@8_0A3D6S=TS&WtDk#z+ApeEXj-K<z<^PS*hn2?$o%{wrswsCvj%& zJQ;N}<Dw8uZ-sz@NOv(Fq@NdC1BkxOewU?!NfpKbV)Lo@S{*IH6x!U~)@(N{4rV@i z1Txc6E~@aK`Qg0fq{skRY;3vpFVfBd|K=NJ)xNSJO4o%w8O)?zz47ah@!XCL8@w>* zZ2#Q8OqsOA&ruylW%QWtbVu8bm9O@|#+|&Qte^-mL?7gdb^_JpsYf3=MJ1eE%4JwY zS5o=3-#11^5&H6qDD9)O9ylZIog*g`EwWXAuXaXP@mIN@X`U66B;wYqg9rIvBn(7h zu@y|y)<rawIjUK-0q5XmbEHVszMOKi7qFMBbk9`aO)o2_G72@b6?q9{#a`u*S%jH! zu^(0T>?KVLeJ=93cor`TXJI}rYUv9X4gjRnh74O==_;TcuhH`^YwLRJ>XI@ylrB3p zo>R8f#d|@CtP--Sfv+m5^|2vq*XKLQ&B(_3w4GUFHdc#GwRY22wP1TdBJN^~GSM5p z4Da5ZwZ(0?55xfOo$BPhlh8Xm%X_q^yEmb`ReU+l&ia;^Zx{1DHiXFERU~)zllSE8 ziA14D^9T@SOYhOFx2KFQ^s>mfif-YMKCi5Y_u^@IoVXP%B<8?g>7fWdm?aP8$iu79 zgY#2>m(%d_ax2k^GA7wi8hjpU()8n@8pn(3Mr(ikQG_=yp@$BPR#ZDq!7t8azPe_v zALZ!R(2GDmt}MdLsC}`8d?~fYvxm9VsSoe?wE#+R(${*hA#%;oOPtqAkVzI2GEWj$ zXP{)bImAn2>g-QzId}tbM=NQPnQN&z-rNFWe58@TqOj5&1^{I_oU*g*u&bPvv7who zs>0RLPeZ>b=PVy*sr@oEi)x-ToM$=GgbTDFmxfUZ!lb-@*`9`rGV_AHHqn|P7tW3= zWnestI1ir}j=utL2Am<Y*FY$llj404{-6ZJU~XU~J*$@ooEzHRzBGG-Vh<#e+T1)s z#-lNj-f8erq)rBnKP3;kqE!~>WXcbSeik8Tx$in7FXUWA23lNcWMdvQt_~bm2ac<H z8EhU@P+o61hz=S=2M(IU#B(47?y-%B!&FWUH+I&SYl1-+vkWkI_*$1yC$e7Ivh1pg z7)i8<hRbhIf8cobhstaN6C!E_BK;(xU{xv~oCoTh#Cr=TMYct|c(m0!4^hy?S46{2 zBPReNy=>mbw$p%$h(UAMZula_7~KYb(9aDTrG^-chC4Ioj%k+Z@UYLn%}JSQPfN{0 z6EAc~$)FKgWSOasZpJUE`eg@|yn{;K2_^kAsNjLn6_id>2r%XL6cW~=Ni8{DIHIR2 z1qAt$<P+5^aX3q9ReTugRc@~EXNUByfyn>l>7DqbV7pXdh{RU<M5?c;)z>shj%s?E z<ih7osa0J0$S4v$z%%;;JhLXEN!3+H=4U-^10{x&gDfz(mAi4zWyYa60C86Ny78;b zxk0((tWy(4ALPrKPw#+|BNZc_uJ!;{PY14l`OBa))(&;X#?dRWJ|@*i>K3d-_2Isw zh##GkK{Sz~eS@M6rQhOkG*8?bsbm)Eog!it+{r*-cH*Ae2BmAzH2zgX?)YbPE<71e zYW4(+v(V#}cqGkXaeKYpPD60r#ffkI8px!Ke(@cg(hvB3Sb=E|WxFsulcvV=rpOyT zM(7V+bJ0FXX`3CTw*!QT29dRunX<HTQDT##v`vcA*LsD%uJmq;1$xob4geSz3@}$N zw)V`j)KmpX&c@^%Mn3i<i2AT~_by+}s`ze&0ny2YPwvZuRUch^reGlK)?o@5ahT<9 zh-eKSmtktQ&4+sb3htyA4^!JA<>GJT7|fn?ZaL{EAfVlP7hph>mV(9A7ZA~M^G&dl zGCU$juZs@D5GvbzYrsx<>-Gcj?yxjpg{pK2<zQre9q~L7sq<A2$CfLj%NoNyJfJd- z#WP`y6=K0PW)Oxmbv_!G$vN4LUYe%Z*@1Qw<8K4eHPAttA~_wzgu4hMyOsKYsnwEc zKx5*hi|*M3xnWTzcUN4Tum4LMA4;tMi>Z(Z{EX&@ROgltgpwWIL2m6lH{tmkzRQAo zQLDkgMP6CFX)WH4ykab#_@$NOqKAxU9lry`szcxnfVsES)q=8qQ6Jm-66hiP^^boB z`U5CjdDvdd7yVZ?<gDX~m1<nng!qh$(Fn|bk4xY>cokbXRvB%a<?m2_?6;}oGSMEp z7Nz;{rGJTOR(Y7VhB-<B+N<rGNie=_e2r+{I7i&H5UX?|v2kXr9X@P(rg8J_=&e`l zH(=wN(U;7xU}$?_>#-gJd4pa$$oLpU<;pwn&H8C}XB&EB@tQ4zR{y$rXS!V!Io~Qa z@Di0-BDhJhO_4>d5pC?fw;PrV+k&}-|MZrgBjia%ldQ5+cak}e1XP$&xhg93z~zhG z(xRYMcZmcgVjW<+npb9u{-sxda>hbpTNe_#lfwsmKG85Xija&uBh9&x?@4X<mwmaF zvVHLvwX_9-bTS72<<uEQpYJ<cr@-6%{IEagByaP#CFmQY-ZuyS?+Gl(|ISd@JpXVa zvcE$V$Xg|-N+8vQDY#zXn|JNo?A)VSy4n@j3|Q>H+L>>CRGgqY(SRj+k-{BNWWJ#l zWOf&(BLGD98x{PR4lPU{44`Z)c;|oZifVoN6J%w`hUEHW*Lv*%L-)?(VFu;~82X9- z85g^m#2RLh{;i9kb3;4hRN+hTuh9r!FfxjCLGcpE(%GJqL1a@ubEmPQ=M}Zj9oSPb zcjm&S;E8qzfAGDPrBfJ{T=6;wpzZYoQ2&m@HQ*53l8N3KI|F!d#$aS~>dy_Pcm0Tj z;W`(=xVZ_#0rEV)!!=+DuCyD`pd<TckQy0-+Ayxr<^z^uTOu0?@sRv^{##7UxQ*`} z9=KUL9yzF#b?@^|4IdRfvj__Rs$Q?6pb&r6KV_R_omedmtOO4cZ5Rs&Ob7PnWj?YJ zjOp5|c8|>55v>YT4a5+O3Fu1X*Io^W&?KP`RY}}@1$j{DBriT+GFSro<OpzZ>Wr`{ zxeL_1mhhV8WesVYgS(pl_&kOC*E{Q&0p_}?WrRk9C7u!yI$(M3gEhJASA?=ZhRB=! zQ5>szOi^Ik88Dz8!QV0<+G)4amrTs!S|X@p(@AugMJSN1%HuY%gp`+4`D8tu7FN({ zlMuWrV)Q%cNCA9IWMMg)?yA|?0M@F3X~&Yuro-&Z5!C)HRJ<rK%kgpw=siW|^F#*h zv>9og`JEp$L?h%czIIs=sKCaSk|3BsRrJAHUFlVHcB;yqKL$BT@{-7BUgorjxX8r9 zQ-#VI{a{|zedo1AthOCiUO}J(r_y5Dj4Q2kO*Oh(#Kul2dpd=YCpSAQQvFcUtlWbt zB!)YmS*Y{*=_AS9cMZ|Kn!Cr)w0vxgl);~X1L-Q)NGVQ&EmDoN=p^+*6-kxci#1;) zXGZ6QnmxCEs^(C&u1=|Vf5B#{ea|xWqKw<BTw59X+Dc%Zqhnj2-fwL^zwop5%(cy4 z#;RmQdMddpwG~dXS>-<?n0wI}bZ2(nJ*)1sGm6G@Loa$-nZ5UoQNCOJ;O5b-QJfFc zw*~@7c0hgUc3AD^{WKUKd$0@tu7IdC4Lb0gI5n-!hR2}!fcl2d4hx4o!V-|(M}^J4 zP-UA#7kqHac3`N*szj_3E|roZ15e4*Q3sMhk)pJQPo{%B7D7cHv($o1hv3S4VS4u_ za$n1tY23s69x15kX1BB*T?G%mUHb5DKbg_r5$*wB4H8koqtWmJSOUKGBc$U2H!K0% zn#-MqKhs2m;r`O>VI-HJx3-tz>`Uzm(}m|s7TXZCFE<1U=%#m$&BaOHmH{0ASwN=0 zbNzPj7(xu4U%L=yf&`NgbY}qFY-<CEqew+Q`vV;JQ7|>gS>|9GWL@~lj$r}}!77gW zCeieDr}2niVVJ`35kd~m+oV&5BX+oqd%&r4uUD!?1gu#}G}&;y20p;e;n2I=fuo>c z*v}5`%6A_T0DVqd4W^ziJG3`Yfrj_gko8D|wU#cDth<SVMevZYwexgs5t*%ddW6GA zl+>e%2YfY*ocruG`6g0gfr(@pDg8Vo^z-I(tl@KJEIxTbpaQzCm6W*(q{(+Rct<R_ z1{?ymVAjw8Qw?{1Ygej}{j>(5qoF^*KoQ-0>JKnbv$qY*2ZP$0(>h{J8y+==DV%@1 z;?!lhy4H2Tn_BYK6|OsU7ylnkhWz=dIRJn|ON@OBlp|MprZ8gz4&-ngW6Z*a!GL+T zt?ri8l3J~{!3=iH!vV)JyCh*^&zOPn*gG?J?6voV#l$4x5uOg=6?Ow&NH|%-67K*e z3v6&Wzy^}=%7a~XOEs!isjBNCb<2#T+W-H*|G(8v!a0oH`o6mNzmK}_d+Xl+GM^UQ zG3jzVH~U~_w%F<qVt$VBxh>J%0=(wCi5w9kGf79wLQlm>3W4F+L`O=do1WP+bqor~ zj2qQRP})e)JT8`)Vo>4@HA+KlU@)>E#97I#k_pBD-td$-4hMn0ZdfExIKVeCWoqb@ ze<T=zd%Al@NnxZ#R5;w)1{*LKZQ@nqu8gAyQD+IWL=CjbrxBf$h`8scXsMOaE5@g7 zW~o%2obD9Fn7(MN0io@WaWkS246m3Cw1x{c>ut3*lfd`z`q2j9v_hwJwV)PXVy-#} zcQkX<QZjNWxvkM0qxQ!7=6LNyd&o3GR_qSMBYcREgHYCy`=W!Fpxa4BOTAHWUWeep zwhy%#gxqiT#LD%cN>fLTh0Z<!ND2!kLZtYhGWuODX@1vvtF_8kokIzan;cQ(QlgiZ z2uiZ}s!2cb`;smK3yEK}4!#v^-<50MinS0Nolq_%$ln`VSMdG85N~I9N)Yn~=7cBI zEW{X!6qCYe4~@(^cBJQ6VVOFXDf41S{HUP0`m9ZfUo;v<Eo{Gtk-orG)KMvMcA?q1 zcXQ$Cg@DQnnmU#{BIz)cW66XVh5AF^5ea7KtNl=oLq#>lQV64F<It`Q6bf5C$itsZ zB;z$pLyaJtSe7eS0eLVQY7&IbwkQ(lclCl^vV-b+LNvO5EVF$AUW@hh9{R-3H+f@F zGU)ImkbZkQzf{Uow4k%0<8uChqeV*><pl?@LPUg!-@+uq!U}hZndxv|s1CiE7n15t z5xj1*7wSTh1$HLp1DazY^7)=<Pc(WPS>R6zwsIBFVE+_cc-vA*fh6Sj)fvb_5{hzf z0dXN@;Fy^qDMH_*d}rsM)(b_MO3E>cc(ln)$(2bYJFEp#LrIZ{wMufwsbql&hD=c) zw-`UgNQKGJ)?~o(vQe?ZCv<Fvo*5N#8ZBG*V-gj%h@@K!1jENzd)Uj>2S=cnhM7hI zOPPXVpuhSG>JDzUxkr!#MtpS1vE@XSdnD0F9F2H4kRVDsP9YH>?jv0^h;$i25Dw$L zR?@11!MXY_!?kD!r&vHV$#(QUS7!RrJ&7h8SmurLMEYkw*e>G*5KX#m-eN7qecQ9? z`L_Shn8a<HG7V)fmVM9s=`w~^KTr^j6Nm%>>KA-3O$wSiy4Rsi!rg^ca?%u0W+oqH z!A!8|<Q-26ix3vu9T$&nEunH-ka>b}1#m&;1SZ78^A!7P3AgyucLD|00w}$yoHFmJ zq2@{I*(;c$t3(xD6K;2gCcmwIZ<{kFdn_M8HMnj45UJD|4xH$84|Uc`BIl>(qwF#f zKvYH+l~ED=2zs@YY2YrMm<^m@;W~9}>g1Go&S~V*VpK$JRQNr%=!~6_tfdji8fq%* zxO`wwqOZq^g=le3V=s{EtYn!;*2UG01*M#yVMLM1tv^>L*=C1tA>=RrvWCaVGwlou z)>%(Jqh*2Rrmz%@wf`~Tn4tTfl361JqTkZ&!E+B7hJ$)tzu*H$d20?R>sEH+UEGPF z58mE~2=m8mi1Bb17K31{WM=5<X^Je6XjF9@N0N<XyAfx8Cda1%3j}gkQ<7=>a|Si) z3@X%_M4~#K_dWiEK*-f-rk%iCKlvwl*N?fA$~ls0r^DMcQ@%xGOWqn3%h$w*F@NkJ z67#QaH0QR-GurLgk^*sG#Cn_<3^X#iI_2Ysn3E8l!Da><^#ZQ^SR+8K_0bfk$5K5# zmg=c7no;si5+sBS7fccmU+giyNF`P<#{z}2zA<0jZ>!jDronSY@h@H};1m~_L?B%S zv&UIFW?L}W+K|>fbqOhS5TzMdpkVTWXGBFqh1Af+Y#X2!smf0TEJE0dm!khd8_!7} zScXv<O(k=KF$Ca?j>VY`)I7+6mZZT{4WyyP!5{vWaED0RVF$89FV+{q{uf|q44JCO z!BTu-6F}zMjbAAjKpp}}y}|%HmE(09+0c{Jgz5)E-RZ*2bK-qJaKtm>JCYkKqylF) zGXfJ|G9u(DG(!YH7q_RIG^&2<FW!FJK0fdj2ZmCFW1OP~$<<<D5_%e&II3){TO+xT zl`<LoNQ@X4Md-x|Demh?_3IRRWIT@mW56shRL8kwfMrBHlu#3RmIPYrQ~nAj<u|or zk*bPIVzW(%r)rgr@H|3{N1Ci-sd8f!g0Yr1LVQ+N8W}AN3$s3VA)vlu>MZdhW4>K? z1569Vc&KSIPSL=PvshcIiE6MWmLfckshsASO9FYDQx4J7cE)q9i#HI@3B(1K@zUaI zid2@@*h{`)L2^*E64LKRj6Gs0&SeOo?hDIM^O>u*ZsEuvWg;MIzJZCLC%$3ZF=N!< z!z92+mOp?UGmv8Gnf7C4PCPQp$ixySmZ+HOf>7qnBmuYO9!JFm8Yjv9<bs~YDlQ17 zP|DOSQF#rG_u!_U#xRbY3m1tLS%RNb@&%_B1tdY4h%ggQOkQafAAQ^$l;SKyD#{&L z9SgoT3$t8dK8Elx;@ejlM`{&8n^x+h;P_T<m>{!-X=XD=25YeVMMC$;q^2T2MO;!| z&P@F=_Ad~L3gRmX6{a#TF6aVNZO2$2xTIx-o;=d6i%b$cBgLaF9<VWZ0-Jb}_9@!x zMi^famC&OtUg>0z9wXWc<;F2k*szLKf<y(WPlg9UBFnKx7E;rvo67YIDK;UeP~FIo z044&c?UCz%BI|b|>u`wJyANF(9t~&W8yfv$yDm{A9&iD=aMH+vjqoyYmlwhXInm|L zv@}A?2NjY6qNqzKdYx#5#2WFXQ7NCCp<E}BDKC+2Svh!;W93w|gu*gORmzHdZ0;hQ zXJUe9)OXo=&Z?EV^1zFw0v*I67L6k3DK4bCdQ6yy3R3>!%s|S8Y-Q!kHie<=DN`{k zYQ+|iG~4Q6>_EeLxwM%GW_d)gi8;;OU?ejwHOvxaVNW)u5b0wWmq9lMqYk1n==vv2 z@SBCGsiLDH%`*8N>1oRpcK|RbYA-tGEIuO(3j{o{o910E_A}J#8IM_JuA<CjS%LwN zvE1iHxZzI(JuiWQx5Wi{rfnPHWFX#3eVnml>V7bbP3Ii%IWIY-`KElKPIKLco#vxW z^!ul{Z=osHR>IK5w#jVM<0n3@f=3xDWj#;oTgK-k>1Q_^Y|^V`SVIFWWPMgR&gq@; zO}_jEmk6|66PXr_zvyOLlH8f?%F70(8J!tI9bjg{Xu75{R*-<&nhi_|Q#Qa2q?vt7 z6N1{E4fHB#BDk+28>p7fY@iozWqjvK7Hm>V@^1%_3!L!;X8em7=r}sVC^FO41wpt` zmEoA#(QhW7g0mp&N=YLk10%wL86-;1Yz)LD7RfWaiirr1#?Dh*$e^)1)3#0!VNY`% zOb8Vt{6J2{_;L<oTM2h3L<U^uhe8823JtpeuJVctjJ_Dh_?6F9LXt7hjf6@SVuoQF zv(si|CMnGhxjVrZZ~jGU5HVMtxzg@4!;D{4yk&aIg-||SX4_bS$W#Xjqoj!Gh-MO~ z1oEGUhPd@Ti%o4BUsb{(#nN~)qzZ^#tmTU^0dn1lMK;M`mGy@_E6jN3IdUwXAVZ)o zS-<QH;BpnA`qoTOJNp!7=1}fw$V}OrUZas&+(qNtmKr#LsSr$Ovto5C%lNxcHsQqM z&+(%U_nGt?$Zv|@Ol&v$zNaYns|uGHGh?J6ohY+hEu{E?h<6*Jc~EdiT}@RMAh+K# z^Z_cr3GEd`qy~>fjq;Tv+x;zM3WHQa-0brvZk6rh4L9{22<;j6>V+)gk5nHNBZB5L z3<P>0lbCAbU>1cPBZbivERi?fOw<)}N(to^pRDYORaYt$p*IA;Q&E5+V2_?YBdD&% zvx}WdBh@T5!rq#ZUTG@m8IILL<s?F~rG12R3Is!BYB#cAB8^>)tm(!m8C}#?R<04K zlPpHAbk7VG#D^Z1Mr2<{08|J88B)53<mky5bEI1vM;&{F-#s~9OQ@OGlgRauv*yAd z;3-gmzdXgqv$`Cr`A{7XJ*o>MeF))Gj3>ljgA6+Aqk70X@<*a_8&LQ%)Oclx$y7s} zLe!H4^`xjHEj8<HW;p7cRz0qxPG4;LnuPrhV%G2IW2gYB9!*;%Qhnc?`|5$Z*F<4V z)xc9ct)6N5>T7y2Zdd@Cc72T|?q($nbRP~=-FN`1%&x>5b&y9^n5_(JSSZ07h?ZY1 zwHl%y;t&=yX9R&b!>b0++dA5_V|+x7EX>dZGWHdv=!Dt`gh-~);umUSgea=`s3NG= zIgIfnuV&i0g^5}pxrYJo6lQ%7DA|aZ$08H=G?C+;c^LOHm4G*~MqXRT7{!zK02^u^ zqSq8u5%plqI-}Ie*GR<UFzSOuJwxYFgx-m1rnWT3QDUjfjop<DSmbwXVbn?aw8IDo zc^C!&BnRs=)n~L(DKA+w=+hWtntE0{w38DuRRRY-9Aw%`WN3`XsBye{g!uAW5ZjOA zj=jP-c13ioH^mAo?ET&z>KKl)jS3~qOrt_H+e;lQM9-K#A8#Ldn)Ti$%8;j>mA7eX zzLZMu;<-M_!$(3!^i4tvBNNhIN|=$vEHf$Go=gZwde^6*<f)PcA@JF5!2(0<bY)10 zvl}F4mcVPdb_2vL%*(`iR5+R{N#Q6}e^Yalnq=xE6~_?G%rBYUjl3;O->oi}TyM+e zlTa{OzZ>c9K6pH^Okm<WBWJno%+UXP*z+;MBH+kWXEQ-I1(tz<9Zn|d4J4VcV#un| zb;!U>r4f5pKr52CR8mP{lo~Uieai`EQm=WlptFTW7G~yM;zCY3sWIO%7iE9PS?~Dv zZcGc)f@utPvAIU5nE_a1bjMg|%r`S_#J#`@cA%v>&@vmKD<IV8GoeLv>Ny|hYB{$w znI{7?5rfbo6ndJSvINAiJJ4s?hmovQuwHscG?Iu}RMf(#*9jae%o1ZR-&p~K85%}? z$A%~aQLpe=Uq5oyDRQ-l*>vEnr_RtwYI2#yPRoBJrJ3J}uZ`1$hz8aO3r(D%1uV3% z9~1)WRqDLbx3yeVP2VGTv#&5@pI!ANOi`47jO5~8^U=zCR7BEM;b`QNU%tQtJ7!>! zu%Q8%lP?4<z2s&JV8;wPgVf9lsi_({-z?R}9c@pGHa_lb%bp=-iGqI9CcbGePeTPv zS3Eap5H?jtzJ)zl3ylg6&t2Jxy>LfN`pzG}r-;0ZiyU)B+4U!JCcT#qMZ9>9`sb40 zQs3`bVZmOTk*~Kl3gHyuyXIq6(M1m^pFVa+F?xc04-K4YL&_+L=v#|Q#0dj@6ZK`8 zkV#iXk?UA1Wk7T4yY`Y<8d;FOHX*)iJB690w5uQ;XJocIgd`RfzF66ZB6tCd$+in% z+q~Ewn5+qJJA*>n#QFA3^~{=8KPbYE+#5upGn17cBMU+-f`w;VO@%oxEYOgbiq$%H z{>IoH4vI{Pu=ib<3qwB52r>UgE?4pWgzFREJvOvRU}=oV+`Uk)xvXooydPX!NYju$ z@->Sr;;@Z%=IUea%YY$)FB*tp)K@Tv8hO22SL~dp>O}p_^bwX(59KA+uwjV~jFGiD z9~b7S3Eb(L7_&r?FO3-mdWEMFGvZ8RjMOGqbD0hB6`0Z@1fJzWAUp0yS~GN^b)+3E z=NcA$Bu{Z{7d&yM=^oP^b8VMaFt^x6rkZTz%7Bo_nMverh{=Q#Nzf$pQq)m^Mc+|? z7Ki{(i1ysPpPSRU0gFX^<2e0Fc+ntMG`%{bD3}gpO(`07@Qc=g>d<cKlOyb|97V2u zj^flVofzq0HPY92J(KI0BD9^*)+{onmU-mLRE#;MDufl3gBijwqh%&LJ%mM&P5`Md zTez6+D0nU`;)!}dY*0{q?2-o;#E!qmopy3UqrK)uX#T`6sQJAMlieaTrcq%^NwO&# z;l;o&><XWE_ju<|OaRfbM$6rKIErN=7<(}Gdho^0=@~OisGwuoSI0gcO<2EJIjRmL zO@BS?2ZB@)4W%Rgux-^N#?3a03!@mjNAdMU&j1Nn#H^!a5-JvUF+2lVFv3!zE(?`b zABNx-ge<V(2=hqw<c%!ezLXc<jRs*p(mCR(BcyD=B?KvLN`=6t&P<5_nzA?x`;ty6 z_9cumsR$W=XrSLzen&7v8=C8^IM-(K6sD}FWWYM^Z1C<50em|*I(C%5)Ho`}o8nRq zN)YfC$1$(?ieZe~mBEzA`+}&6v{qxcCOmd)!eB<mDkYj#nZP0uz*6p5)@BLh+5ukG z@fGBI2AF3|H{B^$%^R$;Vwd`jF;)u4SSb|1F?6Bgt=xM?;PZya6m*Y2eyV|P@lH=F z*UWTP1XN7}l?!ml1OzD&z^g!4SeW%C2LivRAc-Ld8|_e|9%vk^5)H;}yr|4h3FXo* zf*wNA2<uA>5dwk4YKV}A>h+KdG(n)k!_GVb%kbM%@Wx8CU^7SQp>#(OlCa49P(JF6 zp|xQw_xcISuk>1DJ@zlCg@{-bs+E=^VF)h{Iz#!Q2wJdhal*uzVW$hx7$L^KCrK1r z*qR}6y2;xQh@5eeIFk+#^qKUGGZN_pZ<FXtCc0e~jGItlE}N4M3VWjYmS_kG!cNRP zJmvBrYMjQM6lF0*1x|S`z(RUI8<Sl%5Xb4zs&bkkZjyVM7>&5c9Cvo{DT|0NF%^e7 zT;;riKi=e;LJ-L=TE&Git14zcy)B-Kj6G4NHP-%;HE4ImmWQFho<5`2GLeA2uq*CE z^ae^qmX%vDNNzC<40*&TY-}h7F;vEl`I9NHf)m-quP4C6X1-h{#n6hVeAWSqa$I?k z0_bl@Ybi=#$ENC4h%6HbgGr1>ZTx&|{CsQkeAnjr*3$WC*Zi)E4p1v~;v~qrM2KMA zKK4T#uo?#ucaa2J02xz_b!I`xNs3YEIMRkdMq}eB#^SS)1tt?uH#qHmfQ>VSNx~@@ zC5dQ@9`pL)mAuOuWkSiqcu&u%Tq>N>TufOd2|M-^%Lez6S(ypy&=0gAp}OY9((#@v ze+zD&Mix*sl7wM;rtov>ywX%=Dwfd@?<Ke}7FE4t)o%ynNy<12c)l>sLf#TD&<Q10 zL~~`DVwotHW#HZ=OLA%Hvq_lYlA7_<<81}wDN9Y~^3w$uTi(O6L-VeVBFC4ooB8t0 zm6>6{&;xAA&o&1{NbLzf%Kec$d>;h^l@t6P-N7f~9aHoHGEk<~ddI2v*eNt_?CjCF z!5rRj6(%cR_mu27H5$xNT6a9%h0H`e_2fXJfIa&9%;g9~Jn>YIsgSA2SR9Etq0mW1 z&Q@pi%;G&v!~&at?G&rGM9(;yXhii40uyzr3X<J~00hyNvr%lMa{-<xXxP5J2u;*g zOCbwcfHL6O@ikcA<`p}>^J&K!@Vys1G#BH{j{;Acww*KL!5L1^-OdIZ?dpD_-C`Tj zZfBdD@ADKFb~})d11eX*L@?3|jEM3!TrOg}9&cAXx?7~(E>67z7ItMljtdf4E`+ZG z;3`&7798+LUqaO&$!vhADB}UpuBunswUh?&#p5JYBW*^A$gf_9wR@V63z5%qOfe(_ zDqp+4ZXRGENf}>GzV7N(b%avCfHI&Fni!hV08+9^aM$0)(Fq~Bkhmij^1TSKu&atv z2zeLeu1=YDZN9WyG;h1Uy+qc<!uoC&@OiDH6UtZ&9Vf_Q0o7+mT=WY}xY3xga2Jx@ zJf3dk;he2tf|D(Te6Xm?Y@nK<h|%DM-0~EHp5#+M<EFrn2hjo@78>frf|%@ToA4M^ zLa^`L!i-RA02U@X03}T1^XpM#9i_S8L=nw4lt)hFc4&4>0|)^$MXFMAf(kp4E1#zz zo)O7{NvF66MR`Hff_uHaT&XBVo8YW~KtB(a;UW)x$O1<?jybyP<fhKKk-XpQI2x&7 z5aAV>>|vfTm5D-qf_<dgKPIdZ3%N9g$Kwsn)$t}Tf(z^OymG=<lXP)Dk9nvd$vQ@! zkM$e?GaMvRh7dy0t3Bb*!1OEw5&2!1$aNz0JKzxz5JirtWSqApA>e`v0@*P(VGTO+ zD_Mt$JA=nASrwpwNQOP$`#izI^Mp5uOrWQTAd=CKkp&{6C5;9>ni&3=HR=q7xeevQ z9n;t4u^5fQ8L8i%M7<gR%980MLiLdd=z8yjvyPs|ecn|t+4grfSn~#d@SpI>E8e_p zq&!J^NXv<)WMPtRq8w)f9!5|2%o`^l?);gkMpZ!`4Hz*Kvtyx$d27D3#*Qt_I5IL( zWj0nOS`4<BW!$fCI7S77Sp+lAQTpjf{t=OlW`xwPbT%@70_&hBhJonJ7Qzvo*@ZGp zGPRlZ3_H%mgr~CNJkwieW_&o7eGj{y^Cuj6hzKvQiVP3*)N@vR%tW_<5^)Z76EKL{ zg+P;taW(yHv*)WwFB%vLK=e)*A#i5id66@TA(1KoPn)1GKPK#}$JEnAaOXoF#zV7@ zG~psm8r_Z{L<HPTp))y84NDVJRWU?jFEFMDE`=uc$|Kz*G2?x~v#w=e*OT=sLaCjz zE(O82w9I6q|BUB@vmRDMfX+a2S(xWo<X9?%E3g0uC77tWV3&Jvfu5oni*tm<joeI@ z31_^Q?dS~3s2K)|`kX^17st3oPtcxIDTF<!Q2~lWyFU*sG9o6H`MpddnOPcSE)8ZT zBRY)<xOAVEDfEm>2S3RJHCTw%7R?Xo_q4p#)_`+FZr+(~$u>j+UIGOy%(mp4DFM#+ z%(nFV>rCE%&`EVHZPa7aO;Nle0#+tvuj34BTr*wb0<u`Ji9Uykhi83?)jAPz`RFhU zy0GoZ;hI_CNmC|>;vRUK?R*I!x+SAItW&e^s!7ibJVeOz)X#ygf-_Cjr-3Qa6s|!I z(!FLltU=r`6e0B#<3=VPz*pcSnoI_2ZSwYBp^G>V)d+C>gvn6T%8Q)uQK;!GOy4vL zdy%vElEkRJCAS%lsF8a!n|%`<>ExYhk;o&9AlDq8)W|Qq_Oa2FiOl1egbFHPLHbg< z3C0<4A|M_AOh2X(dghOpcp#@Y&_v3_gn#v+!>aBa+hgeXW~ZPgG3Z#b$XXnOdq%$6 z+wz2fjgg_EpQh*R_WGk)N*JjNLs4eS%<|NaET`o5>YmZUP}}K1vz{kmvp_2e!G;!Q zq3Ir)D&5pXNj5YclL*gI2-N-Zpqle?X*Tk4WHrhk>H7uxYtaol4yBK^d$vJBkUobU zbetC<o<n=o7Y-1~pzu2ujYKmZ)$ubb*`AUcpi~4>y<9nT<!w)alOiT)GX0L(Ai6T1 zU~p9>(D-XU@5!3LkDXxxgG4P7jWIfs03Bx#L}D0OB1Jtjx3HqnurN`hOiOt%!~4T! zE>*_b0+}q$%olT!$vf}jJtj!^sr+=L-I!{7J$0A<F!u|-=@M}2+VZImR-p3A1g)mA zYAciT9Wg22Txxo;x+>=`2WBeMHIO`>s$ad%mfu$cG(uC}+G9p08=Ew`kf~_o70mDq zwO+z3nmrfKUe~t@HKpN!`R>JrV@*r!1D@G%R5WyRT2Fh<E8iOFspdJOdK5XY(IQM; z^CrwuElktCLC;e%6lZ<C|5a#cLb2LuTJ-HbhX$Sq3{gKB%_3BT*w8FA&4y^cr!G`& zEvME=O+$me5oZy5M$UjZH&)bS<24WluHsF%?IlJQ^vIl#d~K|zBg5D;>Db(jah66{ zsJJbt)nsb*B-eMyUEsNkP%iH;p`7BlN|N&O2injf)-?%3QEslJqeinm%*kon3OaR6 ztUVlXBVv0+m|~pHWGr?QPS~NE7VX#&G0@;evjc;#Aa6Ug-Cx4EL1Y}5L1-TFayQTk zr$%z%R3t+2Lb8Y;GFz7lQeN!T{!FgF9BNEr+sQW@B3VT#4THYV&?Xo|m(Jui!fO^u zz9-H1B>LW@-jmit&-v-a`cCep_!u-;q}x@Pp;Qc`cw};XDtk860y(rY7j{Gw<SZ1e zfiszyO06iSsKOFwmMfX!g9CW45S=E*ZTKBx(*q%Y5fpGX5-Wl^gEQt2b9*U5AMEj5 zd8ihlnZp3<tc)_oAmmm=7F7Xwcij5NnCNq2BnA5TRWZD~rfp~gpb%S4X0l+-IFql9 zf^5&KLin2GnK%>m12evcnE_LcSljmaw6}$!V$7Qa3es^5l!L)ANIpBxw6^KDM@A0- zK~{DMf`niqOI|aLI)geih~R=NZ#>|$Jx6CyWJ;im>%!nO0vh;cj@KIKYY}dAR3a=y zPOEpsJjWtsJWq@R`GFX2G6PD~?M5?Va83XTzpqYYGAXbyi*+9-6STpiv7LW4DZ`F_ zBOr>km{|9YD@n{~k5pu4u@K&T!cfS-Bb!e1$JU`3gh(T#dn89}X0cq8GD}cNWy=)* zhUnarA-*AtopxrXC~YRHfB`)3No>B!WMBfJ+Q^G1+7>W!`6i$6+W{cL=0Db>1qOJI z6*yy|wqs_2rrPMFdU@JRQzJD`rRPYel5Y$WA-l+HrklJO;d~^wqQOiyE)^6GiuImi z%hJs4S(=SlQJrM+$o%H5JTp1_JVPHVr>*$co5;XLPE5_P^fKS<=pp;LXil5EL-)+M zgv@OLY|eFAt%Olvb6vihqfuj!r^r6S%@GO~c;>pmL&(=s&HH@0>>T$SGKd34@vD!U z<>qoEW-gb&&P6HJ9CMht)|a_n!!_5{k$KR|`U>(WeeGO(T0!wqh=e38S347$l&+rZ zlz5JwV;-oxfp~`qNxL!+%p-FiDJBZ?DM^VMA+ElGVg~OJYL1BK>RGO_)V^YFqp-P- zngl^a4$jpo*TgbUcq}y^>ZMsk@TPiEAz{oVZ7vU%*}B>>mo>jRE{P>zJ$!TNamY|A z&m8^ET)Uk)dYyTwS%8Ibf=D05Q}D<DD9IsZYTM0~iOLas-aX4d;&&_uTnKngi$P5z zep2l`L^LC~YR`42@7(tJ67j?smg2zQQk#L8g<>Wt79$|!u&I%p+sQj7slZr%cjR}M z%2e#nx8z|C_qjNitcp=E6R8$*P2F5u+qoU3pSwh0BFV@kG$NUnWE<?1?{el}nXnOI z|0GppThm+ydvk0%n2&V{MhJ&9)-wb`a#%=kV;p-FR0&<qm}{lTk(~La{OH0w6KvsO zmZ(W;R%5joo52L4s2};Jd7^9SLOAeT7u9oJKhL{f3Z#tB`7-ofzJDw4#!d-AP7_X^ z<N{?3j7rG{eH9SDdz*!eSOpRo@FK9tsD`$@uiv9UDC=`c&m1jC4q+aC=ca2UA9zN% zZ>8TMeq}jR$WG}z#f5ypy4C4-v-I!ym#bh7wY29cvP=)2XrCcOFcZhw2E+wPT$PFB zf$oOOu?Cz6UJ_xoE-x1Da$VX|%H2An6CCh2=RA;kZ5~90#Tj_5%Me`BrAf+F!)eYV zbt-assGBo#v@ChJiSY{vY%IxiLcj=s3k)N3ZD<I)fB}bz0;2gAqSEA{Mv7~5j#DtX z>HNu^PNf`sH_&!MeOxXhbrym@8i;wX9!AuS(EPQ7Kr(xw3@vHSy0ov(w{iVYzHQw; z7z=C{rISY1h*j*#jZ2K;Ow%UjK~)~B9ahS7`5H~XxZ{RM(t{t7c~<xz*?tbCAxuZ= z;Ru1Ley}_i%{_S{1xD5S<jGJ`+{#cpmo9*QxyjB|Z*J}`NX-*YLun6ee?>mBK_;<O zp2ZZm95a>HV(iH*HXrNwBp?5n?RLa)N7b<9wrwSM`&M$>?U7T*b#*S+eCIMB{g)=! zTz<v%kFJzTrRz$sF8vz)zNGXjVpo-3S$YLMUq!zMi1WWM?c1K0N{=e>-`S-{J6tc} z-#+>~tMtf!r_N%jSC>wfj+c&<j+JgA-;R`ymJX56$4ZAww~);HM5bJ-lom@3!9%5G zGQXJoepKnjBy)4=*3v<ezmsBfke&{S-;1SZaFC^Uk&8z;f3Kjw6Qvs@yjv;UBjo;= z$e*`wZC`cYmGt{c`fq=!xv#yiwQrq%*?eu^i}sbt^zwbpeXGu_E|SmMcj3ODC#;YS zKXb^<($n`{Mlu!h;WCkXk^GiQwbIY*iO+TPcbsBW#AC7a!qR?vPySt&->R4|l^#d# zI9*PPn`88@NB6w3F@D1v$cF!2Q@ViMyo^k45@}AYTPdCR?Qbf*o_s3(D`xvkpQ69# zP)uG-zxyfVGW}O0*%y_bK>oc_Wshha>|Kui#JF5ix{-bnr+1cC$d7Btk6Xy}HnKnY zh<y9$^5LgR>;0vR*!B_mRdxAw5yguCRZ5Tj7xDS$xw1&IW%^sDKhBLSq;y|Lu|EE< zl-N?~SyI}sC0j0+C&>QbBg)!S_I3BQ4xTu1=;mKPdguN-Za#YK#M(u-9Y5AQal`8m z-F)!G!p%o+IDX5CTMnOGxZ#$Yn+H$ae97&L7wy0K;ISiz51lx9-J#<rj@)u=?V`m? z$``etaPI#7t&_)ZJ8|-=V~20~DScapJ92sA&<(d8KXUR;eI}FRhyKHD6w09+uQ`6? z_9I6R-E`=Lv)pU_k~_%hNs7qJ4&8p}=>DVpyLQpR6IUI({gyW#I)2gq+m2j*!wrW{ zP;3q#JbL2LMeWw5Kf!Sk_@zHN^wy=1h->Ro_tNy-y42FMea+?6Y+Z5HD_(m2^-35@ zPb^7!KdXFU`TOO5d2w-d@xbEki*H$6T>9+N)0Ph`U%&j-<*Td5tAADfo9bq@R6Do! z)LON+Uc09D=9Txae0F8J^1}LS>-W@uxBjmB%T~Lqjn<o5=dE4PepY+6{XqMncBkEM z@3ddLescZ(^#|7fZvFH+Ri4tDD9l><Q2C?f2g|3+<MRH+=Plm8^jk|GUFt4fu>9=h zCs&_cZC9_V9<JV2{c!c1+LLN8to=#t&uibW`L*ZOTlE*$f1!TX>f={0UahWPyL!uN zt#xJVc<W9I`>m~aw%*_RaO;m+|7q<H*52O!bbHVqw|{2+N$ZR2pI`sx`ai8xp_N*9 zWBDHze|G7EOMkaiuY9%gt;!08_P?t?tUkZit8K2FTYovd*X!yx)?Z&gTEDga*7|>| zKc{hbBWwI|v)|ll{_^Uf)u*(c-@2*wiPj6&u3h`9wa2utYQMI9L;DTw@3+176W0IF zdaz!)jM{1n>v`o$xn2H`<+qj3S-fzuz4+F}`<6br^c&0J@(U^(m7A)^st;8kRa>aN zrgqNCudTdo<qIocuK#8I>-BHdzf=Ei{UeQ!H?|uOH=fx1H_bOS-_?9y^8?KfH$T?= zc=HF%)6JKzUbp(d>ep5u-+F!P&sz_+me;OWJGl17wR_iof9-Jlj`sg(f1|zGzH<HA z^-og{OxLMeQ~O^kom0M`e6oB``Ge(em*2Gb;NnAzKUgd+ox8NObo<h8Fa5>R|66+J z^2e5+URkXC*UD!r7gw9rcUM1AeX#oX)rYGet9_>SjoPbMZd&=zEB|HXD=T-`-(L6X z7dNVnS2g}u<C~3o^X}%oP0pRSt^V=q;nr=fJJ;T}_Tjbvx%P(k{S=#}^_Q%_X8n!p zcXLPhx>D%_1Urk5TUuSZZ|PG@Ut9XyrPE70ODoF{Eq`x$UuA#g%F08PA6A}KJ5c+j z+TYjSzH;Bnf%-4if3yCf`a|{a)$@9-@zTaUjn6iM#s$siHec6#fAgcwPf;$Nv-;%K zgR4hZ54PUWx`oQeeXWnTzR>zg>)WmGw|>;xZ9RAG(zV*!O>4*2POf#=-qrrY_Wz~w z`q26hIbOGxN>>tGz4)r-b1F}&{A%SlDqGcA^}O1XYtO7bueMxk)-J34LhZe^uhe#G zXRkc7epch2<_DYiH%~SHdi6l-y4JDQi`Gg~*tu<dZ24!)bt(lr<wq|braJcZ#Xq33 z_YX^dy8M;p1C@I!@2<Y1_D8iZ)&7if{NBd<8r^2PI%}Q3zO?@Gb<VIGIjPEbl@Bc5 zxOnH%$CeH(U$=Z_`OeCH)lXIr){fTRxN=tg2~=7ipmOu;jhh?yHa^gJdh_|sU!-(+ z?CSeg|8Vsyt9P{?YW=YFaO;BhbE&jGd%e7V$ND|%-&+5{`p$akV+i9h<>!|d%LmG@ zC|_HCP5Gws=gSY3e^kC}@qxv!Q5}8D(mBgNxBTwqzo0a^pmKZVUJCzys-YLuE?H@; zT(@#)WvBkw#{G>48uwBu&6>Bje!JzjK18{GVEy{_(q~E>43)hL%MVZr9A3I@X=nND z%44eUp|TZL-&XrkEvj9-vbgf1l~<5&uU&cL%E^`Qu8daBruz5o`kDIU8qa7fHh#JB zTaDjqe4_EA#-K5xn(^G`E1Iuq-q!pOrT$l&Y4gX_!JWUlpW27=>Se3Hx_Z~@zi;2% zKGD9j{igQswBOaful<qsr`lg^f3y9M?Vz2tpHHd$()CxZm%dyo{Uyck{PIHi&&qLm zQhw@EdFiU9FD;$BeDU(?@{#4=TmHuKbou<sQ!CG`Jh$?~O1biy%5PRaQu%o0la)_b zK2!Nz<y7Ut%9ktWR-afszj|TyY1KDZ-$6O_->aXio}$|Gqv~U74JtQR)UK?(j9Sra zYuDFaTf4vZX{u45tDUO-+{#l{Ua+#eGG95TetZ3{`djMnr5ycY{mb<q)GLi<W4ZbD z=7p=x)%UD^VD(R_-lwZiX#ITauGY6&uUvasJ8V<rza#&blJYYa?^^ug;@>PjXX*Es zzD@b|v&+rO_bY?Sh1H9ymr#8^Q2oW~XR3Mi@XDK4-n;VSl~Vm|Dnb9Y{+#+k{c@^b z@2J10{$Xl?{CZq}xW3dl+&J1e-gs-{^NsH{!p3FIo14G8`rzt!SO1aPeSdYh8dHn7 z-uji+jnonyZQa^B*}9{3H?_&%Xnm*kT`G6~MD^k2Yp-9sg=*U!Yj>}Ggj&sq*Glbu z?Z>ts-+p5I{Pu<Ir?n5akG5}ZpQM)SZ`)_D|H^u)Q!0Iu-sghyCFSMv2baFE^tk2L z@}DgK_40X@%ParCHZu&4tg5s43l*qlXtcqInK4fFIE}W@;=T9Xci(;Q-TPi@DzYsb zF<`(JvSl1nn014sc2XK4>~=wfjI<Jptft)T+Gt?2RHHpZl!nRfwiv2X5HZDsGRtPM zS)$X6jnxiOQ`kCt-kTY!C_k)U%$Iyh_v`=voZmVB&R_8B`M>e=tZ!Pkir2)i#X<XX z_RIEb_C@k_S#)pqCcL}7Y44c#L+@qpf4z5NR+p)e2A@~oRTZ_YUQ?Iow03p3zEbz< zYjsY4O5dz+!4uxD@6?C&{Ya4q^`rXx`k4NKepavRpXy)eCZ76S{{sIa|NZ_IP}6aw zjL}4ILe;;4{0(`C97VD{Lyp5a7tt>IJ{r)E&;gpKkJAP{MQ>#V_5$lMZ!$N`E%UeL z`8)+JasHQli0AoXejlHOrb_%cZ}AJQeby~dPCJzHZu=vk?SI(~`%>&@0B--ByiMli zVR@gNmGkluc~n-A9M3>4FUu41SMnWB+PT{KDtPkm&a(52Q*(Bly>R9+_i6X{?z!GI z;Nxe!L*5s?!`^+~KX~)rQS9_7Z^Qd<?`PgGpsyY8ly|PWP<5!?Y9FR2l&8AYmFg<h zr>;{sszH$TOX^<rfSOfBq~W9LsCq)Js2{20*mz5wqxWE%cO#2N{X5{fr~DuLFZdS+ zR|MAtVPg#Qu}YpMKOwJ>2001OT}m&fHq~e%AEmd_t!QGq*xT7Yb~)VG%dTf5><jFE zHpk}KBJ}VqYlpTu{CS-@VBTZ4@xA<Sd9T%Pjac_sFIg???P8x87J2by@sM~_JO*O_ zTAX9Q%g%yVN9>>4=gUvX_d3%^5IjtxE$Rop^$kq@Ijd%!#OysWVjr?^x9>taAF=ny zjPzxnJSfNH-I)9%a!EcXYx1PbIRENhtoEzFhW>9;1@w?3>T&g=dRe`p-ljYBdo)2? zn9+3|^NZ+0ZDB<)-XIs?GxyVBIzj6+g$#U^U1%QTJN&4144HEtNHHT`5+{UVUyEm+ zvA=CkEBqm8L!&l~7u8GZf7H*_tLm5Pr1}ls>kpXwd3u+An?@VM2KMUr>i6l(^c9*R z@m%fe15o@``f6zYdVNrTN$>R^2p$V6=q#sqaz1$t1i6xqQN|9KAH!__-h2qYd%@hp z_i@4R;P;>xJj3feZYk?(YXTm8$a>Ox5k%P~c8hDojbcvxi#Q^l5<e1Ok^d|omL+*a zJ}&n=A8<a5gnGhx+F5u0(|N-=<=h9|{fGCgcN{c1;U!cjW++s<zSQ3x97JbnGbZp% ze;{|TlC^35-1?OjlP#HbKJI+d`8#LQIgBiL#d(Lf+uQHm?|t3-w)Y~m8&?;pOVqp7 z<?06LbQqpr#DreQd`_wJ^aXmizD?f+m+$g-!^t1?O}`F?p7P&=wrB_63w{vwlQtuV zU#sMIWG{N^hv4NNdL8{MdK0~c9-?>9yXaTw*XV=vVftPA1YL$&cQcb&T=4_^W<J3$ zu|8;z$c%fx`%msWy$^ZPJK_J*H%8lx0$%q@@>w!V9z!#{9<OzjK2J~5J?vU`8?^m1 z<c>BEncqMQf8E^Auj2Rer$O*N)=kz7)cLx#UmOsJ(2SoKC&k4`%`y8BIIu1+aQdA& z=Qw72nR|nKr~8Pz?WVjT@B7;JZ}8{*b<FhuCi`IUyYMsS+i>L?#*O4D_-~263k`6c zeH!mPZr*7=V9uJ~GQVR!i9Ytc`I7mnxosMJ7xJHR7tHEM1|H;}<+t-muxpyn@PFjr z<PY;lkcUt5W&Rwx+bjG8Z*XI}&8UPHqaEnMT{KBkG)*&<P)@rs)hzU%$MrEq3v`;! z&?23u3$#SbbdgrjQLC8lI^Cd~v<5EJL53aLLThbjF&1YDCYfSAEX(>>Kg+QJHpqt9 zFlaH##@INUV0rYHDRifKwC^U{VJ&8u?Pko3n+dbS>@>T~q?t0)X2vAo$(p%t=F~vw zvtnCV2aS0scoAM-Ml)ZRn{rDw<TiBJ?!=uAr^`t>8HYQ{>2Z3U&LA12(XeFD9b|(( zw4cFXI2c9a$_G=ybTAtfgN2|B$5n%sU=5wK7Sw}guoLd1+-79MuZ>8IB+!+TBuxm~ zV>ii?K9VDYWSESSagrxfWE$!zk_A#G6;dTDWQ}Z)8mUL^#h@{oz@(FyGNBSP&eA@b zqk|yLC>_VFr!ePP%y|Jbu3)|^bd4^s5-US}ovKSERZ68*MiIr8R0`zp!L8K`_V=rB zHiLhZ_LFFQ1vRZ^kOy-}gn6}~N~#R!RdAhDk+~~qD`y))O>LncHdIq>s~x0;q1$y# z$8`d%?9^R4sZ+@345-Pq)CxJ>qq9irK2S8L2lSvGLZcYbqh~rrUQg;NUC`5D?5sAb zZAR%F!)Wqtu(ZVutKEuO@i)6!(n?urD`OFhTM`uOwtB3r)ob-3J95^5HE0c4!$^@) zYs?x4;qum`HDwj7X}E6|mub<ON4G1XMV)SURcqN=u~w}$YaN&5CbDD8s#^`KY3(3| z4ACxPA}$i5Lv)HRkrXMB#$`(c7gDIVG{QkKgv1&Vqhd^qiwR`cq?i%~F^wFU1y_q= zUM#%X8mnSitcX>yCf3D<*c3I~uyxT8O|dO@L<_0WZpZAnov{1uoV{dM?KQOOP4wz^ z8Izr|OD1Jnb|caH&s@A?xaj6&QI?_iN~HKrXuT;7r`?G;3A73co%cF@;LLzC1_Dpv z-k5WWxK&GN8tcx6Q+FCp6aBp9bhs(pWztn{uiNMLy94f+JLyhEckH~o<gU7FZq40t z>uwXbN~hQ5WuoTZgX=!$4S0hf*RVJ0O`-M9c_pvxEqWENik1@g&X#AWb`?_zC^gjR zS#=IVk)amPs;~^@g_=97HUkPftt|;Xg-SZBp($O|Wxc4E^@?6a=WFN|8eiB@yL|5V z_*p-PTYu0W@`uq@$NU0_TJ+2QqF?c={svN{;Wzzlf5$h1&Y&ycpg<q|KNO5b{-1^O zOTkj){2DyJ9eRGP%}7J5?UCoxaJwSCaC<-eK0t=Z1S!DlMKTYsm&hVnC7bYhlWfE1 zEz%B}p5~}Rj~If#$HCG`Iv3G1<YwsXdc@0+lpU;-b+Ht9*&UHG<l}Ti#zj_PRkp$E ztnnrv6JVl5>+UuC%zkvNF>}(KGN;W2vt%xVk{f2-Y?w`R$4uZ_54&s+pMx`2;Dk*m zKLNcb&uCpj<^53jX?>4D)eF$>Iy7t8Nn6?7_Mn}&i_qw*U57#wl0cWEa$HWx8FZ}$ zuy+GpE8%p4xEwm{cXH04Gwh5)hZAUVC8zAHI&08g+)cQhZpP(q_Kfa^+z~eq<%POi za7%6(*LoE<)tb8j1#Y`7HxcPC>7}7S=_zQi7b+a}3b-SR-U8b3vbW-`L3=fCJJMdL zyiSlZ4N6MzaR@vd0}CfX!7`Y)3C1;*1h)pjsR<Bj8Jem?Q!!{N4Mp`sO~d|_KLZ6- z{TlSM?ROwQx`SRQrhud<1&g@TqwghZZN>(&Awg16CghL=lTiv(!2Yd>`w6H)f%PHf zC!m1^Y=50@WA`zZW*oT~rr;v>yn;O&$i5^toHIv|_j$8uR?JlZFM!a0?6iiIkMS<# z`!F9vk13<;wRjBlOoNzxVB;vLI1LUifqSc9-X?h0u(m<EBzD~kl8u8~^WfAX7*zw4 zn&45por$(QVi)XLyJ9cfEo`|<rlgWt&?nsWBw9=vw`aKNhWz7n4XHDPdo<kmq*K6s zGY9gNvGonyICboP$1&VEb}!wWJBY0pK${9Sz3#@b-HgY<lyPqodz}YSD$zdcxM5pf z7cwt{yz7oS<0vSS2SrLquqrm$06SV}rg0=x7t$$%Wa<VzhOygmu%n<$AjcAR9Fk)* zYWkhnGV!I~3vLYh6aFNKF#~4I`z36A$zS%@{O~_Pb5Z7};QEQk<z@K1f=e>Y^#+N< z;h~em?voTrJ7uRaNn&$bM!xC6J=1IVMT{T7e245|%y<-?aNM4NrzY(wOne&G!>m0A zht1mycF8W=i`YS!3Cs41y@6Dy*;{a4!*0TTJJ^jO!<2~2gzPwz6)B`e2EOD{VrSj5 z2Yc&{(j)hlZ%xM{*XFUqFgX%V61(e*{5k-~4#BfAFYYD0jx(N1!F8F)bs_t+a9&@O z0M$QRPblhny?~8{w69=mRqU;%cXSp!Z~EQnX&d0PkvJ#(>I$AC*v$ysR>DT=B!<qK zM{ioEO`2dC^v<_7%>tM@!)9@*p6;BddsT%k!FkK@-YQ!|&)#60tj4w?;x^g#|JzGL z5_g+DX7&t^b0G38+G-qL&G0NY{^Xzk1B+8l{gXuifI~~{Tz6a(+4i5A1PC?35PAuS z1tBmYAYi471w=raf`k|#NHYac(S?K}26ydkU8UIjQ*aff2q@xOa97uYQhcbRu&xck zvgUUuA&6yte%|M^f4t9+3zIwd+;h)8_muD43^NSz4V9rXREEk>87f0%s0@{%GE|1j z|Br&w@Q1$;2o=+;RMp4i`{nm)!)i#em_`L8G6KU)O;lY~#a4%a7^^^Nf~tnCDoljM zE(lC4jzq&z)*uQQ9YKJhVtT20wkb40{xcJbg#=Kl{9!=+5zR^X4{A9`CQ&a*cz(3w zTyIHGd<|>W*<~}l*UX757VC~g#e~JE7>O+=ATWYZTu0n^)5ku%?d7V6BP)K7ypC!Q zXbh_W-Gb$+5@r)ssmSbLrU6RB8yZxdP%fVr%!^O4qfbrY*fVWW8@z)+wNiG_LwLzt zda#h4oW@Iurw4QS={ycsK=<-M%?-3s7j!Js8I_kv18t@wXgWEvoZXz=BGI|uIH?or zsF>9DKTV4FartxxeTpNRvwiR)VHJpwvl2pc3Xz-~sG;I{5bgBx{1_YkX>%N=uU=5F z`h{~yxbx$yW20mJgJwA`tXmRiR(SsIn1)1+S1z|U30J>bbLdD#`i5tFr*V9y*e}pr z6ENMj=t=lA={2=ZW4k`_zVKU@JYO(sMXf9MH-2xnC20m}y?JZPpYa|1x~X;BVkUIl ztJW{$Wb*Wu9AqHC)o@u(1DbONby6jPAW%_JgJI%mbR=r6Y@=|#VS-SYHqOBzl_N;A zPX~(^fCbufQj<|FU=cGa49kcJ3V}cZEeoO@ItCqGJhIq2->QEghoAJ(I0vCXz~Hd$ z0Ug!H2aUi*XrUU)NeLuW2d9&9I+1{=)}rQkTbBsjvxAE2GReTKa&M@H1bZ+Uj-P}Q zK@7uC;MwWtt+U%YwXN$~jsI1Gl<X2Sv?R0~7Y(tF-H}KGcEwGV_sd(JtzLaB)YyGj z*P3cqw<Dsl!f~5scDht<F1)bb)9lE}#^RM>?QgEnCwe*uz*kwN2Iu|vjcR<}kv{`* z^_OIxdl%f^)vj7_cgKcp(OR4C?X0d5=heq_v>hCMvvKG2`L`QQ=2RVUBVBj3Dq%?- zR&41yt!6pd+e2Ngf@^Ah+V3~-?5>h4O-Q-km5@gLvh2C97fp)dFI{f1&CaXzLh$9K z6JL!PcVgx`XlJs9B<gi^@JqvEVdS*>w><~f7wZ_bHt1)^G?8sn@`=y7US^KEs&e*; z)12s&QyrhPK=w6&gVCRTQ)-OXx2+8F_3CX&_S0tW_%!=+q=Pac(t}Ausd$4#)e6HO zT;-?Gz1V47rXD&BC#z94y+!<3c1k)gDT%A}hX(LR0y{&<WtyQTI6;%Dry$V1xO^cm zj>lo+PscJXP&0-9^!vN<ToNc#sXuL5AXA+_q%GcLDbw~J!3r^K^=Z0_VKTs0SOdW$ zYVU=kJ1$<LAJ$k}c%VS^v^?Nh+Zl3AJiDrFzUl2#uP?Cn=c0w-%ZgeS+#S1(TywQM z^LfUuWvLTt)*jZbOn8~J?m|@%W53_Tp5xb}=9wVd-#9EV-_cvPWtZ`Jq~p68LI2i? z>2^0=c2c`_a$|X0LDjs)iA;OK<{avtDfG)sfp!?<Ql=AY{jkl$PPQgE?0fL<x)nuZ z>ZO(iaaEG=uvAgagnc6mqApNq6Sn6*4mqQd((wN5w7VzObT?XMwM-gy)jYF%JG1H8 z11qDJhGSE_wiwSVHeb~l-SZ^t+0y;7@DDxynyt-Np?lU}I<!3f(348-7oGmMir*#_ zAJQ9ttl-S4e#B@&b8h~Zh%sycF-WK?s1O)JJruYx4s}Jx7CRL?<^W7Uv%jN%hZ~Am z85}BJ9&!|+%2DKN5CW?L4doC5B6EikYM_j70#yq@2naM+29x2;`V>e2PET9#`f+%j zw<)u5(PrBXHR1#C@1`>@9a#~c(nhi=i#~s0E%hNWNc+zzqZ}aDBb`la1GZeVily~V zcCnn9#>{>ubuBoCVH=_MS7vVru>N)LsDQ<Xer9{T7<2hy)2-;cr)={kRs2+Ot0PQS zU4C|1&lRn0PdC1|{cU`ZiHYl|-pSKYG4T$b%l&!mkc^%(-@IYpiRBk}F`n$Y|5+X% z|Hjnl&p}P9{)g1SA3diBaD^GE`~}SMsGEYpF@(!c7SL1U=pq4^&KA;f2MK_OGBPqg z_7FdfO&`s%LEV@rYOgTwr~&C-No;|D&Z2vz&gaUnl6d|(qNp3gu|MU(C`Z(7P|BlD zAFk9nn+Gi{Xtok_NL1AzkwCy>D+y{;RsU20CpCi!t`zd6>uE5(z^ut>?36{!N$3Q{ zs+_%f@jM|ri9XePKs5&4U-?!6Js5msu=!kiC_9NaUyfV!bVsF7!eF6az0RKq3@8mW zeoWi^#v<r`B2BApwZZS|x8M0{%>U_V8mIpC@rHK0X?pRw=hv!;N+XUpZ;7bY>M+$P zm*wQz+3ZT2aQe9<GCYls?Hn6#ASntaY;UP^S-3u{+32qY@BCjb4;t=XG5=j7l4`zx z_ly{yK8IUYNp;U-h7UJw{VA7<tzap#Rt!r3j(sOLpcz$u!Tu;g)Ur`;MIuf_f#Zu^ zik<UW%0v`!SPX@u7@sAjSFo3|Q=W@*DRhMtRn3@uKRCb72Uas6;QIn)dLppC>DPkj zOBqc-MT0PhhsJ*+=1d;oLcX{nHjn+46><5f1+L3*q9LlEt+%mx!Jd(6=SwE9vmh}V zoPXR=V*VTigt}s#o<K2ROCkmAYd-9%O%z}U0ZV^rpJEu-K$iUgRhF**e*Z5;v(x6R z-bUG7F6p@ww>W!h>|XTvk7Z8m@Svy@PZG#8^Zlpyc&nF|G)k9R?-kzS_mw21FFzRl z{?|6IGoCwNc)sg?vT`nc=Wdp??>x%*Q7}`p+^t0R$EM@kO?vrv??%i$HO7Pf%XaOm zrzXRzoGhwG6g)g(ci42Q*;eZ~`=a0LyPqCCWL@g<SM#B9)jdUXl77tC-220=4yz3$ z75B$Im2Wi+9&DY-+dr;+f5?*iuX#2vvv#fZdr-vVII+<~cBU;pOFQPgcJ=jhpL#uL zT)>hbb<4@2Gg}(xJ#30Sre6MJtbWg??+q>Ztz+N3^}P-)HfauA1@P@1IJo`z#tj<T zan#<hBZ6#`cfji5+)wds-Z#RV3+k-Mb9-fS2Z~~ocpQ2lpO?($FZy^#LiZ2}6H@WF zaO7JLH`LjY`2mOUCOUva|EmD|pSCyE@n+>Q`zTXWLk+UxnxgZyuRlAmd!gieX<^@T zVj)enl96k<zVqtVz!`6UwW_-P{HXJI^B?Nf-@c>TN7fW(O&mYM{MC!_C0k#@73VZg zWM8fxC1l5s@=v_qox=`aRMu`l8Acm*q{H9oJKHIA?~|=@)^RH?&8)OI>v}$9RR{l- zQJg68<kW;Ku8Xwyp?g~FV*Iw<*rx~YmE3S$jk-}c5XNP>ha5lH?qDLhvqv{*5_0T@ z?O&G1ch4;&Ywq1e3Dj}2_uqZFDSE`UqSG%@vTRPnQSX=qk=Kjz;=`9471uaFeQaB1 z`Eb=M$^AWl#AHS<iIMyjrWxg-%?XM5-OKV%B~Z2ii`@9)RwYe=Z8-LDKgPDuZ^SlE zngAU$z=@#d#$U(5Pd72i0}!Z1WTW#+qKfCB5oj1XTVEYSbv)N0o)-tcom-%4{ol`t zdOzI%%{c$S%I_D{U&&6q=4WWP#K;~Up+CGI3X@XfQ$L<JT_C67lFSq^tdHsqz%Vih zkpH_)AX9Oj0ha?5d`&F2%BTO`hA)l7X2~xqHj2HQ6-wV>j+!!!QA0)S>&io(<u$N@ zb5^LVL)0gJ8LL0v-$@Czch}wYC}s1G(Dr0DqUTmkSmxPleY{g5Fd%+Mq--s@_a?`o ztM-ETLw<YU@!1r*BxS>z&MmVN%Uzgvb~3t(phmNq5B(i0^ZEj+-^9=6K25A%d||$; zF@=)plg@mRznDOdsXG?+(<^CQy4WP5Lvp`r>Q2|t`>h@sI^krdm=F*4cN_$U(VSoY zXW``wJJS#Mh>Fut%AhNv78Bop7!9~Woxs!@d}9hV9n{if>Y#&rY3T3|1Bp!F=*MfA z)ej8TVp@w1RF7Z{+gNL@_v<G}N6g9ox%3YQ5|$SkoMZS*{k36d#^@c*sOKr8+L9d` zZPbocdp%hC;(A>$UzJn8J}>jq!o@)@`TimwD;w*Jl0)<1M{93yUbv-T9n%ROS^Cmv z!DUECZ&=-xH@Y|Kr&QbxHQ;p!p5^ymI%|RKy6eZN-SjxM_W>ihE2t?rblA%H%lFrp z;M*@TyyS!Os!TDQ1V{<E>*N2C@3ddI>o&+MQ6P^7`9Sl-9Yh$oV4z2ZNd^}|CKHt( zPEJmdpSeJ9xVWuFePI>f=P%RVu%2#e`m)l`U7(@S++Ef4c*@h<bBh|R7f$anyQn+y z<anpmYU{?64_G@l2)9vo6uBK<k-D|*cHY>MYlYgL1<PAU{V^qY)-R8vMtg?o8eLgQ ztT1_8bXDf%U)#Ac>r`cyPSoVs+?r)SKM)nV*8J(kSWI4|cI0x!>U#~WrjVYjC(YBi z&W(#<PR73=$UkzG{4IX`O=g)4l0VCi7x!<t*V+ya9g9jGs9gP$<q3GkCCiWmo`9al zPmSlZlj$6GN=mAb9?PZkMJaS%3f+5VFg+RMioLeBhIPM;Rc*^?*QzPL%H!_2Jl|S* zE%9xW({z33$lL3D@5$@6zBTe%?0a2a=l0h*@;ZpeNx<bObqw@@pc%l}C-v6_e9#-Q z)P&U`=s65Q_Y|}!D*iAOe#rlO0Y!cePF4EHC~Js9kQ)ozO#t2QuzV0jF+@=-s^VM( zs>2_FU5r4PII$LioXiFp?<S(SSKW?4-E;_w8HPZnU$Hga7x~yHKu=TT@A>V8+)VsE zXz^2pit@D*KamNhwdaFxa%>2S74@$@9e;5Z{)i9E>u#@LgIvepP6K@ApiV+Q<*T*l z3-}!TeS0&-n&o^ekk94uxk;&jk#DcC0sam%wC6KE&!N9){If+02g+zCbP-CuR5n}M z9rb7dh;ONERwMk9hET9B(27uWg-V}c|CY&QuY5?bP%RX@2+kv<=c1$Ph>)B?>O+#8 zQJ*ELRS(2QfKcnb8DUZz;XcqG^=LB~lBkyu9s?u~2N@;dzJp}`l+1Bbf0C`gR-r#h zHe0Xj52;Ugp--n2{6d93?NXoi99NDYxm~E)=yOM|v(KG+Y&w`h%EcOe-n|D>F(V+Z zjshiWC1m2#&k}Lzosd+dB|S$z>_dTpa{aSu+K5O}#Z*rleLC@2S4ts)bL=uvE=sbr z6B6mlM0zq2MJCdciAb0`;HmFlt5#^3qz@Kl1!7wafQ|BMMQW_tM>;?nc2om`@HTb? z^mIMK7@(5T0)dgsoGO8G4?y0Rg&zQCY80GvsTyXh1~{)^x-`6<MaNbRlb;wQLRgKq zLcFF-B?OFlgugk8S%LnpCYEe`qloD?5vMQ9k!j<#+r)D4DN?}#$PnbVlp<P!_2_~T zO{(C-0#_(e(uas5uv|b$&;uEl2xGr$0%Janh#22X&K(OD87gyjUxiR)&RMvYZNRn> zvgW*6p+Q(ERt3gIM963%U_FumqO4H0%P<tf-xG~^^afZ_(nk=fg<+EczDBTW-RFS- z(Zc<*3HJ*FkFM9!=h7$==mTEPdnM9xqv48^bI(GGkQo0|s3Lifi0n)HKn#LuNnxSE zvSz@I`-Ggk0q_9|#s{<EB5KLGl75n-Aq3%k?_rTOuo*opFc>ojw6H`d81n@DN|CBK z1+3{6J{3VU5+7^@`oSQArD7tX?q~D&#|a3{E;A6NQj%0Xa2ECx9snRq2BMKwixmRH zDndoFR0{^~*oFrI9(WY#Y%Q!CutoG6<^*mS+!0a{3Fsq|Oni3&p%6q~iA3y*5fF{r zBoyn#Pvy%Ms)q(*hQ|1$%D~mcO@{}p3z(xz1B^Unh-YqSA|!LZco4Xf=BJCVMWl~) z8{p2C(PjWbAhs2>3RNR8`~m!Wpv_HOn|#nn)WK#cX9t=|1BiJ|LWhzh;Ht_5@S#ve z*Nr5ylll=0rx61&2OJV)=|pTKej<q@4kVTa9<(BS3TboKSs>a}uHMCq(hzH+bcQvl zw+`Qhh$cvpaj?i<qgFU_92*w>UvXap9#wHJyqi6noFtp<0to~O5F{uHD!4=wm*7IO zAqatuOLmEn1iwbRUAgzea8A%lFnF>wC&N}+^_EuKnnrK&>TRv4VD(~_#cTqK{8)%W zHP}=qEX7b_vXCX`zVDpf{9wJe_j~$%U!Lcj`Fm&PotgJ<X5O=zmDDXv^;6Sbi{r$} zkU8$I`*os8@^jJwE~#5QPGG77JEycB>ylcvfq?_a%R)v|oOD17&3q~OwNUBIzyZ`N z!V3=)D8TlQKyDkh{~omeACf;V)ac>eVH`Przew)_f+yBTV0aUm&^Q_b-nNcfU>dm* zz+ME{08L@QTL3stIok6&ia6e#aX++$`dZ1^h%EG69An~dZLbbq@4NYQjftZ2EpNeE zFg@?PH4`<aYK8qc5Gl+y$s4jwK6vJIIh?L$>r-*2`L>ApJ-hq>Rm3o{MWQXrwy@9E zTit^70;Ht3T28@ec~w>ATJq<LQfwRlR1!U(;UE<TC)vcCbFfVpiEpzhuzGzsqrS&X zQg}#60TR%CXg1{1J7xniD-EQGSJO9O+Q#==xd)BjiBJWo+*d|rM}(|3$TljMoR<cN zgeu=MjgMPPR%}o66>bLt>O}z`2C_;cr)cpF8Vz)+1+iy+d?~SoNhkCw9;vTWG(t9s zAB)1C8&wpX428RB3#M&->gWQ1IF2^d0djs@9x4y<CMjRA#hEm?*@KWy0Gy?R9IT0v zl<^+zy-GUfO9z2P4Ky?hn=|CCF$m+`>WrKq?ev10O-jOYvEf>jvaUhN#8B!b#XO8| z8`S(gE=-=oU~IS-BGG0K)1N|7PbP{Lre>9#LJ++qr_}^pdlK-Q(TuWK3M;}SyIQE6 zWYU-?^<kLo(2e^I6XQ%yCB0B(@nk1`HeRK-40i-X7^rybI8~B?ctA<U!*W$t1VFv~ z09iHgf6#U0Te{8~?t1pb|DtOpJsWyqwn4OCB^~=Ey`U1NC^?TH+dRN*jNV~@*$B{9 z85l-uBA``|kQOF-j!G#^Z#5T2%TuBMxll<;VGZ=G1T!CmTrRR_b3{?DK_AST`}L}r z1(6plTDKF5&B{`FYZ{CoTb)cY6-T6;khkOPvr#HyH>Pn)<gFXqwzmWE6|`+%4(Wnm zk=y!ooXL|y<I<wyRH=0<>GJ@s82jUoTzCxh>;&w)E&?Pb7i|E1_~v;~72-<m2Krr~ zr(uDQTL+pABM1O`fGafLF&;%KG}Ag>HQJmmRmiK#oP_C*u<B7Z!z*K||CCNu{h)d7 z8mso{RW_x#lpfGO@1e>XtM?O~bm3*lHTOeL3t&7|xH!-;eH_Ud`{6w%x(Ey^v=jp% z7}w*>-#7@RsO*dlVU%k{psR%hJN+t*%Uv{AO`TO!3)IvJHMLMpy{D$EYHF{VDpXT1 zsi|T$^{kp&myb({8BLf0(<O|LDYva|uOeIrL&!BTDll$SaK!|$Vk!_gHs>yNl`P}c zbwJTbwr+sBGhMVCq*u8mAD2r=+or4m-WCkf-5NB79>^ZGaJV0GQa!dytFI^uasXSt zq;YK3Aa0;TreU*N%4bU=ESKtdjd<fXd2~W-(PHcgELMqXf7DV=jj*Le8}<=2f@18E z=+W3!uBu@4@=bQQ7Zn!?dlh3tB?|T&q<!}q0COoP-77F`5njQL-By-(L`~$f#1@tS z$qOOW#g1B#T|p1#BcMh|k@B~&2uNZvyBSBtnrKF@4eGJtqZt~L%*Mg$s)C~>Is{|G z`%KGX9Xrm4vEglGjVcavu{wPbW?2Pbn9^rhnzhG-jF+XcX@)NqAuSzLJEO-_(GV9N zaR1YF8dJ2v53jJ<Y>5e>;utRx%`h)57|Tn~U5WA16y&8x2e0KNum?g3G<y(@$EwPx zJa(D;ami|6FHOSbUPZhyPu~E|)lP>sS_re?+fIRfEo!DtY6qSJgv3K62xj+4BR~!6 z2F5cNTapeM{{FTC*R&OFY0)hVCq!y)p3NZqovrytwdQ&kL0l?4DhEb(+k%+8O<8|V zquGq=`O~T>JWZa@OlZ31HeB0cm|a>3;>WEZ1ssJ@MFHIcisUE}3+e9aF?vYP^iUKO zn`>vP1N*lEBJX>6TAs=zDNk!tMs0t4L&+pwHS?r4&LZ+Py~7g&Y-?@}8G(jPBoz#r zIOQ0FG1Q!o!ASXTW`9g}V@RKxuByo-)-z_6(_g^=-G$?U!4`~11%-&=)^CaX?b%=% zZh+!_nNSksvgaYdcK|@jp9gzNO}Q||jS*^zwrlWcJaMq_>6mM71zn%vZbaexZ(pN@ zO2w3@_%oj_$eX%vcmpO+#r<QG&Gf5RA%x9~#_0VyW3k!T{D}b+r(wCS6Xf0_N=`Or z?q`|3vUo<W>z2hX=>i9F%Rr5b{tSxp;)TCJ;vVG=`ZOd#5j8*{$1A6zjc#SR(Z(Jg zK=w1_)pd*dJX@ELifz_);z<DZK<YX}zjUvF;qNQPIjBOl<X(+wJEm6+jgr{Y*|x}} z5ogP6h%oM!WZcZcvPVF@!Pv1_;Gv)i3j*|LUu=&L6R1VNzz{<SW>5=R8oEbKGd=fq zKk7Lr-F-Vsbu)X9pM>uW7T2+N=r(-+W``Eulc0U~#2K)hDgD?^b_)_R=*HFV-MBo- zP;OSh2=LjS1ERH$SP34hC#%v)Z$MdIZV4J2Q0lZ~y#)qBjt1VoMhy=p*}OI@r;&K2 z&8kn5AK}}q*_t-%tfV&U4Uo)jvo6p`tyYqP^|tx3hQ(j={)2gSM~n?gDB*2Kv2Elj zlIvT;`8W$$L;D%v(3Utd6ts1r<_oPweCV!0l|}_8De3YVd<-3}q(_9Zd^;INH;=+d zTF-0h*JszqP?FZ?YGOEz)19;&s5!3Ky7Ka|{+6GI;t7jM4|Hj~%GQ6vGa+8OtO!o& z@{my4q}#0(mha}p<WjJ7nDQ1D60wW4`NMkYi|PI^;<Wh?07k6yKz4EaKeH8(~jV zWU$j8&%-@5>WmJg@FE_%E|6^9TwYz*mZ!|8$t7$dhcyt7l0F$N{`mTpTz#mft%%#^ zJuT`z{cA!=Bv3riIi*!<{TkM+7_HQ>q$olGFv;DnVcZtTi)P`(;sFe{VhttYX$c2W zegvz?Z7Np6oq$m&3E_hANB{-Wpw77Cy9%l+oD~ppCgknVxUsuQkhV1OuZ)aAr8Ddo z0V4B#KVZvoo%A@b5t4jM4S?%v6B}F5s%I-4uK66e^t)d{BR7C}XydjGWdT!e*$+BN z%AbppM$}V17&}gqgGX2{vjSFL26Wl;JdA8%zMx&|WG7tZJ|SM)6yMM)p7U@^UG$$X zBa@ex%lW&Y9^i9WZNU**;-qgt1=3kizbL<4nD5a#s1@zXaybE}VWrbyr#GkLcFlm> zHFK*S|L9v2Fe^<8a=J_Pi!|a}3TuzPbOErRg;9-kqb8`w0U*ViTg%tNFq9nZpGpjB z7lUe7LfwqzOJU>cFt<A81oBr>W(aDrUY?B?5=jLw*?3N#AloAKi>?=8+VgCYJ=Ytb zZY_eW&_X4_dtBg~;v3_Z$YqA6X~s7L_9A-SZK^b$pd_Fu6_Q|c*%YtX42{|%=m5HF zI4#^R)kQSoOZ9_Ug1&w*QT!#e#I-F^*kKrq%-GO_hv@MOvjlEoq8MKky0kL%CsuHj z2{>5JL_B>(1Wk$-q?)-S6j!vke$hJNGGco}zh5g($8H3JuSi>;d%ehkK1(sTnoq+p zU=T2dV?Cg_#xG-?$E{le1L_bj;#gn}g))XC4=5~Om?$juo)+?r`&;b*Jd@_!stz)x zDISKW4o*oJ8EGhmj*o)qpa6=>3`IRopj4=y&=#k`8N&*uo>X?a##gRISSd@RXgi|X z^Sr@fKJ9enO+_LE8r(J$bR`Gtv%eMA(CKKLdXOD+tpS2=#$#4FXEzjB0zv|eEjL5d z$zp_*fmjXO9S&bzA59v<zR()VhhFdAbPp-%1KF}^2?_hZjPr3u5R7-&>BCIKms>6g zH$|)KhFnf;pyO(+f#Q}Ocp{dw^A*OAXzx^2u8pGJ+zyB#{=hODOvo~)&59);-m07= zVauRk2<j1n3DueEj!g<bA|`p_*0f+jNUydK)*8Lr0LU^Z8r7=o$oUXT>fnQU(}h&4 z^})Oh@v<8HmE^dgH;2P9C+Ij9w%T0|hivOpPRh10%*t(c`V+7OV5=K})C`A15yN&x z>;ot?qtVKX(8>@(R76Nc1f*Cs%8Ec}9f&W1g8@9Dq_1Z?cFQGWLk-Mf?ld9E3R69Z zul_l0Ry*`X=Y7o>AJ8>`akvg@^w>~_iD9RUX3k}N9W6lXkWHI&--`8drv3PG!ARRS z8A(Fa^a^s8p_+@#Mt1I7jZmxqYbaO(WLDmz0Xlc%Wf;i4jkt%vgHaf2Ttxr`XbYaY zRs>?FuPz|Bys6#$u<3j}JKbuA^`nrM+DvZz2~;qyY9mVeBWS(eF?`N?N@`0hu&|0- zIx7`cW2CTZZR|K!z*C7?7>}M4mzFwdaj&{<HZ~NYDt4}Getst+P{)%)j=Ve}m2^II z+93H2x=$>JYc4$0YS109v~S|`@_?WHp*V9ZT9jlB4{HXx3CUv+CB&d!G@#~%VfLJ3 z8Cqk*r${&}*UKegU{!hLdQ!|umwBTXuYgI))40pb--YjEy33YRb=ePf7|7OjQgt4$ zA^EI$Di$x%eFg|wPHg!csD!|dxH|ub8cnO17%ZyBWBE{J{?1q$$v3nz|3|TO1Ev?{ zKNU-RF@0;kFP44+)6?>wjHS0@IyL{tm`;Fn6RPdnY7eiRD3`ZZhZ1m*rOFB5%5u4A zJ+L82{3sjl!(%`o12F}*Fm~F=jx%uO+3FuKXrgk)#7<SE2f|GJI$ZCr{KES7+ju)} z2?{CRfRH$Fw51S0LhGF<4V3goq+Bs#7Q;$<18U@6b!UfRJxlv+y#Tib;cR_oTd%p- zG9V`GUj;3PlD(J21h81TOv$}6JAEBEDd%7Zl~pkj0wU4eVc|a54f8EbSS($>rRJiq z_%G7sahp>;DQjSd!F}+`P9$G_AzF&5<(Bp-tuy^nD_;?yfBg%)*NER|`f;2o0C~(X zF!#TE6vfKIuQMTAD^BxqUuQr}&Sj>EGEWL-(2X}nZ4pC}G?cyNIJ?jZNZAY$$SHJ@ zC=N0etqA9S%yThQV}i7m(+Vjr<%Ek~_hrnO;I|Fs!mzfSVUSg9GnI&tqRy_I7%Bgv za_#W2l?Cr1u#&!m9a4A<?sl}2|4h+JUJ6?S<Wl4!F@uJ#2d11x^Jai%Kr@R@{wuCA z?9F@&7{Yne1daql|Ln=2&-Su?49Ze^8b~3iF)$M$RO(5h<#<vKER;7*oXaM|MZbH4 zIuYU|7cKq*4{u%^t|eD=hmz$*p#&Gb<%?0fk3@D?*-h&J*#I;<d*rAUM&|UXLzBRC znP8{aV<8^-dB)L{i?}1bLrLEWgO2SVNear8W|Sunb)@OqL*qypKgVv^b_Fl^YZ9f_ zG*DO}q~{nVlM<dRHo@l9;37kF9yLg95&u_4^5OS7IM_P)c4!Onz_O&5q%M<7B48sJ zy(gf+;me#)Cdg%d#2Jyx!lbNEt}yf;(29cp3U`lm<?dRY=kEK+a?Y}x7nk61OTBa@ zYtv+M=tRi3B90q4F=O4n!l6WQCLl0lawyYxPuFnCbNle;h@mhZ3(GlDVIU5ktmQ~a zL|4)$-^Za{1n+x!*}(%^<k*;AE5g#Bv~oqC(F;;RGe-<Vj(?Ez+%1cS<&~CCYvahL zIuL2B7F4&Kgq)L>PlQU4a^zvo@-Q!2_A{IZvo=j4hfiD>I5|TAd{^i=aRwqaKXjdM zc^AunUBwoQ7`_j4tQDRt<K&fUoFmJ4c_j~%9MYkcSl0)3lI0U)Lp?5kNw3dvjFba3 zFIRFhK(B;1-lkbr^5Xg?n3Tp6<B-1*A~=b&>g$XeF_j!*(|RHVohD9ZaW=b!`w9~? zLN_rW6HMzUsB#X{zh~)lz6OSOB8Z!a94{Bnix69{0<!%Q<Thvh7S*1yp_2*v@IE|F zL@nk<j|=}<qpsNSHYzwrDVQ0ooK=aoooMG-l2}b@q4Yu{cBYBt4iy)u(PC5mqXil< zQCiOpu^j0UUJ)N~fI8f0P)@QeWus~A6=jsnu?)zZq$9o0Y4@!dcfQnDoK|Y5_pxgg z9*hQsfm-wkTgyrR#HTUtXz9ff+4vUBm-7)trUjb&AO<>|>2$Ebdc_4&tLdTEG`p&$ zT`@GCgSoH-MGmCFBa$9#nbcY>jQRT0bPV2oa52amK33~#6Q0yVMIq?n+~{26M#coY zX%{OoK$GK@+L3N>w4rCEmAoP^lDBe-9=jk#CfF&HwwUEoTFRK12jlT!v>Zb^U2B22 zweB(re6N*pal<_1VxWIp_&(Xn%T^8~{5@iyha-c`+VOvB)IDloCQB3<6f?ME!*d<q zPw;m@<+6z7%H{%cXwHZJ9)oYGX|YrsR;0%Bs0n;KBM`_Y2w`Iwv_^U{Y3G9V6e5_= zV?WEp!(bqT>eb`Dh;NlaF6QLLyzd@}@bY3#s{Tcx28H%Jzd(9vDk^AdAM!V}!csM^ zED&{xk8q5{fF;ij9G_w5Nnpf?2K!l+W-t*VT0{nNYECIgv`PMRMsnyHiPlF}MWio! zmsu|Qw&X>~bh*R?;@tSdGAQj2fS9vEME5b+txsCmb!EhVnFARZmM-628}GTh9F3wX z&QisT1*&|zoVDpX<g>7Eg_a4pohaaLPzBs{$=@})@VTAW$hcKJv?gPOBaid)qv!@O z=ZLl>g1ai?5Ah<I)I~s?_!VxIZ^itGq%d(;MJoDynS*kL2?Qk8uQ18wyu6%4iL#uB zx22pHT}>+zK#EL2DU!fRO4g>#`nm}yMLrxYMSO)j3(1F}ELLXnt-3~dG%%zgJI3cG zwn2^f3U80dyu3mi0r^&j+edjxL@vBN+_O-N8nY)C0;BIXoW}~oP0;d6t-L(qTW5~I zO8JMlm7qN!LmFa3s_eH#U;&tL6eCz1D}c$dtQuA*L#R-WfXEZ#WAmLlqEJ>cg%bZa zCmR$B%=cy{Y&Y}JD#}|CO!|nd;xpV~NuSSfkvxi1DL=;McR9TIsAhv{jgJZEcn%TD zj0)!?@3JZS3TG~lP3sYyRwk2Ic8w~0ba+}<j+$1RN!H1Q84+eojSzTRGZO$MJcuNn zp6xXJlcck~prC;|9m{|QovylM>4<XTf>aV#LMcFY(jmp%f8rdf=@cgSJ_ftM!4b>M zvhd8I<Wpjj6iAaRcuQvuwRDP)ld0J7x4?W1FdvI+Lk8(FUNfp@FVvhLt(iEc>|-eV zSWKtSUxAHFC*(wT9f@d0(7W((kSsUJT2f$=auwmv@>GUofr*$v<VaT(A&u-{GeoxR zESy<__<Shd#IEJki7PH7c`-aw6<dV-2saIqp9_77(&n3-zhY;hS($l693O2M8uesV zf!yp^>g@oz2_UO4b0ldF*gY4c<N)lx6)6J!pYY6w+{0P!;l*{pON<)pZXh2bqeOgL za)IXLit{tqH5SV73>if;DLD^{e@1d>E^v<uwu7le6?(?xAtTfflK}`oXDsKUhC&$n z;mP+o`B4r!B;QBDU~KR)vmr*A_wX_Rlp=s!%1804R4Frg$PZMB#9249zAjlKCNt6l zuK6m_GKxqeiCY>A(P#jWlo0|=d<<<a-#d*_0%b<gi3^E$f*|vD2+4AiykZ<OJ;*|_ zS9c8g8nSK&w(cXTzDKq4B5#Lyon<QOS(t9HwU|91CP=d|3&pC;`<8GcM2=cH`?u<C zBP6$-pREJC0rx!S_hef{da*O2C>n=nh0l8iVjhj1o(7}d=f!;4JNv4l_`LJ3vh#P@ zJNGJPcH!H12H($g;``?x;rorF`2LUg;r-x_XTmJ-ooB(%+gac}$buJJS@7@gK=9m? z-d=X7!}&_MAnQr1(Q0HbWu5e4*|Lc2>xM{>AvKB9v<4Znczz>$yCJ5eziPrwKj~D` zU%|UDhB#~hcdNSB08GMr;^^0~Q7Lz03rhM6CU!^lJZ=$7BIXa)(qo)P6P-3C2PciX zK4n`3L06%4LG?GWdPUD`LwIMX9*G{o)8B(>(aA31*^!y$u#f=y(lWSt3hjlRg=b== zJkNoD^cN~TX$#E*32C_`a*dNipO9nh7_;cEfS_9?UV=T6sc|xW1FK$NF7xDK$d8wl zYb(%yYehCU;78vrA-hQ{`LzwL!b&wm{E9hE`(DT%6%g(3m7$@nx}#FBVm<(D{E|ki z-6l}7I07|qZ|D}XUjmauBTRS+_x3_u=mXzk1$&v}5BL@j4acqy$0E@f><uaI4Ld%8 zK{4M?-jZ`32y*lF9*%l(FQ|Ib?YP3uy}Ga6r~Tm*+^2E0{^E#B3^XDQbs2xq3@{EC z$ww<s%4f$mu;Y9*jqNyt<6}F{U;hbroXvQIgx;a4-hS9|wuN*c>g}OSJnT<)Qb%;F zH__WKYKx>cBbX{9j(Vp^C(y^O9z$iGp1ubA{dBy9a%QLps764j=P|^37VKc<d2|{J zsz_jMD9uT4Lok}uJF=mL?W4o#BCE4aq%b=TrYfWCUVCY&TUa>kSEe%HLAfxSua;*; zJ<aBkH9SDiHBTlR4bsq%V1YIkNLPjg&hppVTYU>^ee3p^NU~fE+Je)F@4K1cEa2%U zK$mYZ=LkrgheYVr>L(c~NCz{jaBq(^vzUvAoPEq=&kX(Xq?k9i)6<YqM%)>=L)Zwr zgEYEGQLo<^3=Bh#+lSN@C_}eFa+C6Krt)xx^6+e$9tAwWY08`~2RVnQ+veluezT$+ zTg$GU&ykD7@6pmbXW-O8X$O=m$``QGFiCj3=bn<UF_qE+i$=pJyo_wf=I<?4gzPl> zdh{aj0I&I*;;Ua@3{kC9;9;}B2VFR5Q5tg};5`#*F?#=~AaTZqLrhxy-;iA*=d*FL zw~vXaVF~sIN-$!Lc<dmfm>BJh3fS*YjR{yLR7Yg2N27|kbdAO;ztPPkFpAv2A=ErN z+VQ!fydRZ2hGrZkDdT6B83vBcY)?KUr(jM+z><QqCB|I}^!#DEM)Q8G2EVW5K8@zV zJgva71B}HBb^dL+`0<ALmHGHv$yzKd&M-cGfE=iZ`7RFoFM?Vj#S3-q#=VQv98Tlj zhvUu1UA{s-!`ojw1-A;t2FvA|M4)J}`3Gx~mPoC$EhlT}uoSzdJ<pJv|6jNtM&HY3 z_8EzEo*!|z44dDx4|`Y2?A{Gy`2QwM^kzne=($h^c-?||cD2OLN_Z%-5No!dP9Hcb zb!lTh#iM*QRVPN(!B}fPo)65^%7#A1$M|p5P#7Vjx9;|Lko!-&ECJzv=Vv?%V#H0h z;}8BqMrB@xcpurmPfbmN)C4=-bOIWE6Kl~as94I$_SeS%+&cpBMiz4cfAdx5EIX2a z+X;5ww!KxYSO^uZWILJ{w+!JV(o_H-+tFj^UEBc73EJu4am+dzP5tFKHiq@-=f{~F zj&J`*C`uCY*Zd3yF)42sVkH{w^x0{kAMT`YAICm@TkSy`j}m3u<6%2GUyUOPfI>2$ zkYK0(f<Spy5n()8%8g_{j@eSsq?GVt&`CF9l2Jr#B6HA550Bqn%1QDA94@L~J0|vx zPP{%k(K?dwRSl!{n2J^+(M8Lo$0B$iSir^70fq-OfCJWJlaM=t4x)i>Sa_z6sG+mk z|2MRN-hx#X0k0z532<g7nP(XgX1nBE>c?|+P<vCH6mNN?MVfNaxNV3z#3eXsIXV@R zU}eDEiVAx+uo=w&s-SJB@am&^1(2$@Xrpkwv~`0<$fUo;?2Q|kCt()tJI%g1p>s~4 zrZ&)5&qbBGuV@2d&Uf^C%=vj(x1;BG$Pb_|_h41AJ8;VjAhe-<$_bMsnj#pA1yIj{ zeH_?ZfqmoIo8$34j$=Ojpgnt;ax*KwqD+^a7H6RLFz#(9et9b=Z{_8!2LD-8vfsDW z^zzFuzlF|&AWH#w&XISqVpE#7(PUjE4*0fD#T!cv%i|$$r8p2f>DhKZQ$JdpI9xt2 zy@DdPmQ&LA!D_#Y_3+?skZJbD20f0^Y6;f#HF+-pXqy)^vcQnK)%WwSAj9}(yYWq( zrG4|nIex3%_jC%Dd$R7O-bw7*t)NL)(9kM&;#HQx=Z&BzTrFpZo)OTF4lnepEEFUT z$cJ25J=but3o1FNl8sFjMgbzD0o?cn9RvD=0cGQ??XY1t{eG>GTE8NGs;Oy*9-9q~ z>-WbA>6n#;S<q19j(D7|5Z~6oA{rd({*Y6h#h|wv+W94l!j79*oIHbXUqdPu>yG;F z%aR5sZ#LAgNQGXG)gQ<T8Ko<eH>YAo7G#{uYBYs(Z5qvD%ZD`w!0fI<ySx0dqI4i_ z79(wLISNE{^B?dAQ>D$N8-=OT<3O8}$YytxEGs@%$@1x=NR}ydGL4cYfXHIECC9xB zsQ(V&itC)CyiA8wFH<KS_yFLW5lCL@CJY*?Imh}4qXiZEAy6=M@aY$0ZW74Fwju+5 za`YYg_(wqgMW7Bh$f=~*jfd2!mK5feI-aDk5fpC}6KFlE^LSFkS@aCKi3BPQm-7_+ zl#4jX?YC}>6Vs&Pjd9S4Hk3qoXxYkP;i!+lr1K`&Y&d)+z07G_p4y1#y+cFdw4ffN zxO__bnsITa+=_@`gFU5m|HiAKh0@Sfar|hIcVNh&)6!4`c9gbW=xC%cbP($%;FbIO zjaNzA$k9pGD7IlAGKjp3R-;x8oBQQD-ZCVnk^r3-LA}}Yb37>!yUne6`!?=EzqcP@ z&$e!<bzXiiL~Fj>rqHVzjj>^)7F`j0SiBmKx%LLZ;yGwi&(H70V@?|dK49#LS!VPI zN0#>$WIFA18rXd1<4e%6dW@4d8S=`gaeJ7ZC|rOhKg4~J_*GMCLx-^ezZNyVSp+=W z(etmGG0mKsfJXw|(9A;}^JKBh_q%$PL_#+=72%F+w(-qH#y49-FlAj$^&6m&FSJaB z*0f74;o5VcIf{zVMdlcgk7DbR+IXq1i-QJgdPopZ3l{J=!L$qb#}h9X7<>gLpDaK- z_dQ7FFMd#-x7cdEN4!KXQTw2x^y~%ds9&L*%2_S`+J0zztD-S_7r=!33Z}h<y1t(0 zt;@vAphqZyMxjaB!H0D6CO#@TRe|{!3e3>%yc}F(qj${^^Ik$$tVCY?;A_T<X>K?2 zV(<G<TGFM^pB=-MmFv#XGFVYk<%ad9BHGM0-crCB8(g>ySs;Aqo{x|<VMnE2slU~T z#>8ef8NBqOG*jcit<}D(%+<)&1q<knuye^X%tJrQsN+bHJ6~m0J6&-I_l}ir2dEpo z_&?QOv@y=;#Y^>mJ+hD1==~%5iKoyB-7zUpz_skc3y}i8<vA7_TAu$cdWztuYGHky z=|Qrh!1SPOu<d|sYlyOvd?bLnl%^FKnT?I>{{;(r)B@B4bs#u1P|!6tx_^RYUnop) z45K}P36x>PpXxxwr(&K%IW<N-&I4q3e2x+&Gz*<{v$hSYwH&kpYti4I#r@<&gyql` z52%dpJ`A!h<`OpEbCo)o<E4J?u(uV;&_-Oh+{0+z@@B>IVePG+t~KW40~ake!<1I5 zIGt9WjqO!k_(zk!Vn-6drhh<&_-%=ST$EuaKOpMN{YB=}az!_6$Txp4=BKe--9O8s z0VJVC&-VLw!Y2M19FSZW!4-b?+}I6&6)ti`x8*Zo92C18wARGbq2)92e&^U59nuMz zEAsN$PTcIIM|idmH+pNBr;-VMCDE=|hrk?L%&-SD00wzyaY~_j3WF2kRTz*%8xEnK zFu8Z*>|6&4!VXST712PwF#htM_i-;R8u05#2ki`E)?Ubp4%+B_ikTyFT{k<NXu=C1 zj{fSbI%Eeu%wo1K#O@bpjH~A$%g~eV-@jlxJ@kaei|ZUG-O{5@58!wsDTowX+G^rR zn;n>=n{MIpAosDe$Xi`dyZJ2E&Oq<nVpx-SSQD7~;Wco&#$1Q7HnXm6b2hfAh+T9w zYb-6cEVnXewl0l0f7HPUHtHC;B7BbdR)U~|^{(Jy&?i1)s<5sbY-2B;Y)02=u9IG$ z5M8U|&^-P6Q$@+E>k>DNeEax39;nIjp(?D4b~Qb!0ts$)twIkoOumVLR}r1j<Cz6c z`d0Llr|Ga7wI4X?OPHn&pN^cu&_~;0$?3z8)w2a1-xP5o{m!Ro^2U&v@F{9!u#H2< zW7}xZsFuUEvprqr<7<#*Oq(+4tpLUj@6@L0=}?qkLW_Y}Okk{D%&XvqWTg9-rr^gL zolcDVuBz^rV6vxKKHX%RbIIw^=st7M@24=@XRcQju}eqLqCC2YFi&Jl=GFB-#ZAIe zNJz@0nhWqUN}G}Dbksf-9m&I5W5WV9<L;^I2g@l^e)TIT5F4hT8XZK@YHV1HqIq?8 zoayZ}u)`hi?gokHqRT@uqD*n(A3f8<hNXJ=`2hy7ZPUN^Do7jE#}7KV!MzaLaSz6! zcXi@$3&RegyVN$E)CFZ$z;R)1u9Mz_fEO&fHjnPDcVGeCv!~$=b1Cc+Rfkgis@2@D zqEV(c5sEYSyK|v4hl{>EKIVxUMRmRkLu?Uc!F$y|WkB1n1u{g(W6IKM+@@?C^KY(W zFrnK$eNms`PRpl4wlt^+(>)q=E%Gh6itQ<P&}UGB*_AsSN_snfXN4!~Fx4MTQRiMr zheU9SI`7k?^Da(w<CN2zhN9m{(CN(QDWD#5lsb@Eng9Jz5M7GV`yRDwgkA_Tmq+{@ z{0U?W^68w<d<C2o=4v*(sADpI`T^;3OL$Z9KGkn{QydBEf?%H;?dUl8!3WV#7bg0a zg6ylYvfRDVTw%U{Fb+nyizcFIYe6KCMhDxF1*A64NqgI{fT3jL%h9tf<{9YWz~Y|q zf$DeP(Z*JtwZNc(U-h1hHI)JB20Z*^4nrtqUq1*UV8#(V8IG`zNWw#Z`w;l(L1a|T zk=R!N2)h>m(7k)0v%FaSPztt!dozB<mZk_%2y!4tBxQCDjcw=fssqWZr4?TX@zws? z@XZIFSf!wEpEJ+S2}W}9p?-r-<fT>v2+H#hbr^Ide5J*|Nsq;GcqFFeU>nqd^Ahl6 zxhan7(}4Q10Dd5WS4xA)kFOBYNx&0VKF2Ry4-XGd^&G!gNY4jVqp1^QPa59--;b<? zC^q9Ov|ib~j+~$s?8`l{5J`OKJ`#|qQCKL^cwtU4?8blham)~i@z}aARR;OZenhVs zU!jTnam>y53MK8wQ8(i&`dbTj`s8~|o0OYdLE39oKa@OMmzV%V`~*yVo~@gG@%IUS zT8N&>(jYG+!QceFG{}il$g1^n$w%_i^^h-G$*O9(<Y;hd^$zCP$cwkC&Wm!%8Ir>M z7t=ARJCs*)rfxDRIfH(Tu61(ZI9{=x37w_`2a)PVe^`mFOjkBnJCw4n^3Y_wx2x-9 zKMBCYhWLKm?FCrbSj5H=TMVmsVmm4?tp>qge_-S{Blwo1V@ROo%-CcXOM+p*e+L#< zdmu)w2KJ56N2*2*-G&E)8ur^5=8pVH>}=3a{CGCFt*#5xuqox$4>Iu{WaLK+=q3MX zWV%OsS8^~xzYeH3Oh)#N6vp)CR;%hH8QbPT5$^IHzlg^R_$_o_Q(0QWYVA~U8vB-J zJSpiVGJXMT+{-PVX){ILQt=L?9zD<#qMN_y?hW`E84@P;XY72`H0D4S55CZW4SzSG zjwgO{OxI=^s^u+V;}b8STDgqIa1F@3GyCxCs);VA^d;C0M$1rTmB?3CRrDlgXfy*s zb|aPU?}?K>*GZT8nwu}ZsANBr=G2&WlHl*LRO;bs3{sa)*REuHXP0SAO13W>%OTti z$(_0Is)nZ#o|$+@mH@l2#--Y(qBv-`acP{?rjvrK_4kKc_bt;5!!jtX)D|ZN;}Gg! zM{rPKq&9?+f?6zX9Nk7T1Yzj67aj^v7d)Nt9EGPH9#Z(jZn^NuZU`xa6vFcmo`<j( z!d?jbAnb!M3}G0;2!s(Ihxg4IU9T=2?Tjcm=(+IZ!m|Q%Y%q@<ft`rq=(sxiXb#{w zW=3E-Vz548egyq+qKl9{vIr?xFTEIneqVKAzXKn`Os{vb@y6EVvbrX7a7|u!vNb{A zod+RK;W0s?sYo~TSmRQibb-y@S8VoP8`U)87KIsEs|x_hR-the<jzrW05q~@7j)8B zh_dks{BB`v+tm<kfJcC53p@?*?11NKcz*3-Ym*6coe5zEgc%T~L6`=i2|_G4KxlxF zhmePmgOD4$HtHO;!n+-wPI%6{My*Ye4zM1z7A!q>9Y*JkS-XEMzx_1r+xe}b{9E{K z*BZ9APnWCwmVx1J$omMM@S4Aq->~)np5GV_-^y>%HXeh(4bOUb*1%(jrx+e9Jh|on zD1O7vh=PND4xZicyi@-Fg5R>%4)fd5`@WUmvhQPSg1|c$Kzt26_4oZZ{D#nfAHT77 z|3~~5ZTlm@;S4<8@SKOI51t4-928Gl`;X!`b&lr2I~Sf}c-F1`2l1OUs|%S2`Hrm4 zHsF1@_qgyqb8Ay!Hs1h7^R_FD%Ti-prtiszy@`ulmacF$^9Meb&gulioMS-1K)O9z zv7fa2yLg=+0}}*?V7*}?h4@P^L&Hfb+&P4U4ypq1=D?st>x0I<qpJKk<)~*ey^2mA zc<O)q=ghF~nE+e#(f6ZH^dd-Z6=ws|=uu$6!yM9y?Lyc~0t3~M-%i>v)Ex^gh4?zi z!C?Z-v7Te6kDWW#ncN}v4O}9<0F?$1h1sToFLcLhQY`?tnXfTg0Jb)9<s2xOvN}7> zd>Udr#0&$U40KALXviUQf_#kqR30#CM&I9}mjIxa+zxMpn219iI14b2fwNIGp-Y__ zJF7df7K&6eB#D_J^v7vzSB6H2>J?DN+yWL<XxJ9zX4qs^#I9Sf^<%i5xmXlO%<UBC zt&F%$#6J68V$Z&prZN8q{u^!#=$rwgEVFxt+zTtN^~tdN0DtwK8K7pPPX>BpD8gOR zmh8ET5N{E(=hoihTTn|3dt?|fx?^nF!)e4xsy{~I9-c1KL?d|a721nvM=y?}4jJaw zYQoan9_0`R(L_oO<X%HwDKF~T&;pLqx2>?>2_;7(IJ@XJS-{B;8OloSYsxFi*B;<B z%F)rTT`l1~V6&$5;XAz--&4=yJBQ*szZ>2U?npPijzJ2?f~j3BQ-6j9vpQLD%SRAA z_oSYG9ruHpmdG9qxfTtiePGENFyGr1f!&F|cn=;xYBkMR*b>2whrSoyiRh`N?|V%> zo@DbYGyjI>LKZzU?77uqg(f^&cDP)QpU|VfgL`8(9{=oS{yzwy0h?7z=Oc_e@me3Q zjuH1E{F-Z<7Vp70nu<RURm;<O78>Z#9t=&ipM`1k0t++f7Z~0_KV!)(dWwbF^g|ZT zra>0YrSGzE9^K2r1@yNp%%s0&VJ`h83m4L#>_KL>Dz#R+gJl)c1{N06Ei7C?1s2-r z1{SWS)ht{?*RgONUCqMvbOj5mX(0>UbRi2j&;=~qNawOppxG>Zgl4jE3r&ln@Fw2- z(|F8%6CF9};A<GgV|m)kqU;yA{>-8~G5QIMK8?{2S#%dh53=ZU7=4RH@#|yy8y0;5 zqb)4Tek^a-YuNYP(LdJU?H6)LyhYDEBVey7zQ%qfhO_81qdDJUIbitYWIe0i(v@P) zHH~Z~MFxvLJ6h*9wH1>^KRcQ;Rn1AW=;uarlGU6Hi+)}-=ko7ZPNqe_Ae!@~nv-SG z=SFk>z;bG{EjbIL*aUtz3LDTXAi~E>l;4*7$3KG3hbq59fRS?56)-U33i#)aF|L45 zor<{vE{wSXW`sT=M{}<exFxGZ{805mQ)*+<lA^l~kGKV9&|h?nxCOrPO@|tss_0n( z{GtCi=*qYx{P635*7!1)9lD4vb{z`jOMY!rJS%F`8e6#RO&5q?I+zvvfR8!0m`}U% zD$*E&ro0M+I6m5?<<iK=lE;qht&_2l{Q;|TjnhJhNSVoUf<=!>b!iG|6OBztjl6XU z3~m|>E;M;K$*&UhN=ce{0V~HfX27@!))9@wX7Jb>*TpMqdL98{Yn(=Z)IKs9PehMW zN3JHDGv16dIh-&Aa@i6P@4_QKbAOT3{mL!uS9iMAUkTvl90Uw4xaM16mZ@irNZ~m3 z_RtbAHU!x(3TTa9%DzPl=T&5gJW0SiT3ZIm>0-YTkXMm~pZJ=L&$KF{!N<MFj$#xs zL;aH2*zhu>w=UeK^eW2Zn-};B@8<LI_hL6spgo`($Uz{T%pho5&>-XN^fQ>#a>z;y zYLMQfRvz!zgzx#dyY2W>i?h@p@o+iRAJ4=e(#T-HR)jyOiMIf}I$YTncF;WaJL>X~ zXztIe$W)O}lWmz}MxuzBw2A#_Nmyau<}9_?GK6Ukhp)s`il1~s7xXp6wHMSH(8C!S z4^BpYz7rZy($BEtd!!a8t^W=4Me#jw9u+!z-O_a*<AvijM;%Xh;n&L95LLu1Yz4*= zYnM)BPJx-%oNW9L>7OW!@C`A-zvwGcMo~U~8!&Rg%?RjX-qcJW1Toj)Fe^)4jD*~1 zG&+>@^D#QgN03nZC^`!2F$-_~fSR{nPfF5=&9p2xL*T8J!(u=1A+e>+@fTZcX?0qw zY)fm-jFH<bT9w>z7s$vB@2D8LWx)XA*&=0)kXtsATN)!b(+Ig`#mMbR$k<w--fRp& z`!#otCb`<=Z<5@GkFF&-+13}*$rXKh6@A8rMOys4N$gWs1_>@p{W+*Vq4kq<o_z|h z0x)7YN!sO-u;s9N@jhTPVAsM;K!3&t<|kK@X?*h6=or8je00qo)JvAbTW!&c8ALzN zSC|+@e<IzR1YPz4k$Hmgh`!Xuhpw~Je>?FFrs>6-1pr*kzJ?#^BesUuI~>RnoWl`{ zk5OLO>A=CIyH);i(#x0G4;b~)-peW@^^~)v>60sZ^D20Cb%3AvF-wKk>|IIh$L`J} zOW|i5GjNS<S;mIb=wt?*l?I$;!gZr-l9;&&a}Fc;h~!W<p~%g#X<@%B0L}FG>_u6U zFNM1{=fWUkv(lUhvl0P4^2cBTo0TA&m8Xw?V^+d2D+&O<4uf^LXy;#<FoA@Nt#04g z9yxP=XckNkh*L%UPi=0TF4sZ;fI~~QeGh!p)s^qe<d^URhRg&97&U6tvBm~%bWjrq zYJy2fHKD(mkQrP^!oH>1d0Dn1%m4sfK%>9iCj99n`y4OR`d)3ft+tk}yZ)oCyR{Il ze-eTTQC0)~!-6fgto@~lH5P<mqrZ2)=l<qj64bZvJ@`!KH}`k{oO|xM=bn4cx#zmI z5Kq!k{UJ0r7LS4(ocYa#r!S}C`b&trHgdtFNz546Ig|m>Qe-A@`8SV(IaH4kWcG4m zG_;~>oYbHA%JCGxSoqpB{9^4f@QY&R7oKTYMlt)^7ENLqZO(8p)V{NJvvX$??B&0u z`QsaiUZj`pODf)_mHa<n<~0qGOB#}v@Uk{Vf1odE0zS}}Gyz9ui;WYpKh1={NREi6 zEFSRmhC$TXkTTkiF%Cq({=#D%SrD4<=n1O#@Ast~j))o2o<;Bdsnkx#mK5#5S&t)* zu5ZF?#dQrT8Zxb<j?T}gqsFP%u*V`MrOOIKz-+2xK=F)UjaYH0#&})RPw(c$6P)NV z6W^AJ2RO0VOgy+7Hlor!JX2iZ$FJt<HT?-rU$_TR<o0j~kS~{Cglv&znm+fZuyx^= z7}Ilq$_}gJB*`u8G9tyiM4g|gANRM}6ZND1Hmhd5foQ>}t4~>@Gk4TG5jB0Je3wVo zTdL{%cFX<q6$rdHK@Wwyisj4mH2q)9m$ddw@O$HWbW=~5>CTMBi85rExujQgkeI_u z?H9+++P2zbXLF*iU2Ap|M=$2D_#FOmp?+bHVX&1^Qiy)wKa#|O5T7>v*?-R%JhTTQ zeeO;0im_PtZYpBkdLBX)v?*W;m#NY&=@i=!@L43)u~(^$9apB)-p7`#{W*Jputlrr zUYiqIf69#DqNuIQkZ~5cag|6j9vz2%u>)rydxvL?<R$LI*0a@dM;?8aJLylbi2gK} zwmP=WpwE{nX<LYrwzW{w9jz7g=c^k1*|diKY+X+;{+80V-9c&FHdETRZR-=f&q%PB z@t2}M5!7bK1orF<Mq#|;6oJ8kP3)rY`{DosEWA+iLhNk^zP>NUy&sl*82f_*U*gd0 zH=?(aP%K`Gy}d17ulwGQoLBNbd?~J!M-I^UdcA8fvRO3Y)MU;pC5PgTqd7-P-Xs<* zqNAc?j53^jkTQ-m_+E})f9B0tuQOhMB8iC;^sZjbp#&=3c!Cz?lIjy$z^~V(S{S(? zg*I`hci49FUj)IM!<8cP2D*3(U4-i*7)kF#a)!1#ihE7l+sNgn?TB5<BeRxVgfF<i znh~TX*^BxfO4^HJqi%0c15q$701(>lUnve;kIA6@@czFlITX3X|3hz&<Dc=iNvFQY z>&IAeKuL{MW_;Bd_K{a2`TA=3KS;|G2%gAYM_~A$K-EQ%aAOLhprWsKB9T_ddp#qn zd4T91lPZ>hDwcsNmVr=~fdZC+0+xXSmaR{Y{ZQt>J2|+jnmxW<MszVFHTJu0@y1iW z7b0^@Uhr%BM(M5(^fsRAIvlCap;6gKeIf4LF)r#)oqQC-a?P3F#s;Y3F(ebjV@Mvu zVdX|=&ViDlK%2#{Z%q@51SiQ#vFOvHF{*#zb@nHsF-BDPh%H{~I}=@~-~6;;Fv~aR z_UItb?d=`on2Ob>;0Z|!H==i!ceqG`>~PuI2kEb8Tc4;OZMgelgp%88jXf#n`GQ3C zsOH$y*QRQEIYQ{ykIK3JKiOipr;n!Z(%5lqCv)$<WZB5T_P<;m&5PB$Z6mqc|56go zp+pi9iHGmJ%@hPXm-2(h@vU<9PmX?m`(H|FIj?ph>i5W^yJsxk5}C7jB_|=m{>Y{D zfIBHhX2r&x(eo&KG@o-Ri&sXKWoY8x08Tf;1bGjiAvto-i;lha<)?d<i0XLu#n^D^ z$c1NmbEv(@wRgX`efY1ppFN+_H|NBLi(<WlzIxZj^9g9Ryn158l~Kj_!lp~<r^2xS zX%4u*{ID7=Vsm8<?HVylMpn@za{Ro>l|yrO0$mr+QtR6uR-zX^Y>h679k)eh?&ts! zZ{IwVdRbB)o!Im_{YOvXN(8rcz;YQ>fP|_EW5huzwl>R3TE27oY0}WZLd6;{LwY3V zOw&Zx0E+5~5qC0A>7=nuN3fxNL~6Y#&jsI&&Ip$g%N?<5`eS@5($zGX&%f~s+iBG- ztLzmB1~BcG#h<A2s3ix85$5z>I5@la_Te88m84Q<BvU&<JLbXs^xmW`FHwC;3oA|z z)Y)JCp~aYYL^|u_LROiD*ZNL4vq<@A^u-MMX;Hc&%!GOpHjfak5!V?KmSDX47)_s$ z*NE32jCUN5cf9JWwmUjoSiXS&ZK7WH<D|ny$EEDt9P7}n(UtJf1<tUv-^NMRB6@6~ z`c<%}*vE{{Bl;rg@>1hFvvt*uk9iZ^kf^%B6kflepFps%{WLMl%pJ+qA)2|zs3-@C zG+q%1=|gOE_z?RzJPXGb%AUDfA@M8TaiYBAMC3?9xdDRe34Mb7C+tB)kj|`*fZZmV z4*Gr@xd;svHXug`z_Q#=uh+zzjuX*dgrDUduSQ+q5~*AaPh@eh&8mO!i0R)-;FM4n zEuD#E%X~QEZF+#k#^WQiV;#qgNUo?KidzBRkKSb|_;}(gJt>*D?1hXmb7O~3nAh(( z#BPj<TdeG!y4fMBbtym)!L1yL#+%gM4pqfy&@gfsM3SgKG97~E-d(M>+3u<yzpLpi z$maHuS>D0Bn#TL9&sr*}Cc?^km$6<+R8MGrc8x-srU%AYlt$duvg%WqHDhwtjJO<o zt0yk6wr}q^#Z*29DqocWcaSHDuJ0LQ!1+*y?>8G)&_bPLmM%bxXoL<vprwOT&JjD3 zor)c|@`=nH2bpy$?%|)XYd1G20TF$}_p@V>o)omMofZ+xCMF?b;;yET`l~-CM9kBD zdm#Md;vL{*qQCm16i$>x<9J(6z@Mm}@COM+s8#>_lN?wSa`qiqcZf&tsUDBabnK}= z+k0G{-J6AzbOZuZl!J{cQTtr%?D?AuVm(DkL9WjXm?eX0;jSoJzFHAbE06i-SGp~H zO0Qbocmd&_q`?(GusK_WQrSww;MfaCo{<WsmQlU(Wvq6i=|OF?CaP5$)lrOUH=8C3 z<y{=vtP-Q@*jsPEyjOB8a3-bXz=b_$hAuxK_FrKkg76*KFiZ5_ey^~^6;I#Qh)vRE z85vI7w;O1=pFJ3<hvucjzPIuhf3>FwdYRA7I&t@m$d$8tBA3Vdt+4^?O@G*schm1T z+idULG(b;%^wfXT@#t*W+zxpMZ#o{C`6Sk;4Yo6Hir!VQ?M>PXu7t~3hs)@I#%gZX zrjr$5lbLX0sj;drd1QL6$0BWl4dMt5oLG^(CnGZN?pe6w;>F0zor4j-d3naj>?0x3 z*ZX^CaP|=~>p7gW7QNz(_r;vCoU^g_4IH_C+1nr6r|fter>>)gSMcHMSMX(xsyp5R z`9}9Qx2z&LOe~$asV{OvXHVq4n|>d;vhzgb54ee=FEWpkj!{w`CA~WG-R2ev^U{y0 z9DRKxzb5cyT=4`#Drej06anjz>MMv|EHuUESEBQUruzJ9G+$KMeU<iTp0qg;5C{2? z?+TC74S69b3~`<B+USKbU6Gf7#Kx74v@UuNcj16!v)I??*kg0-xwfP~dYNO-QX>32 zt@J#fo+<fG8$HjW=N!kLFXfc<_Ksf?J7CQyEbXzuuEU!ygn<jTx>ixzN=-UqJ+@e{ z4Mx;=;aBL`Yiadan=kB%9sjtZFVj96@xU<f1=vPuK3~ap(iI*Ttcd<#o1wK?0{wXw z$;RPScsZLesZKUzqC9lL6HaMkOH^5G8tMurTr&fj?!VMZQ-cduH1|n-hS!p~j}_V< zr;NIKnbneo@7TDunXqwJ@jtLV-%VfPe9MgO`g6F3B7~=3;wiVnvR!{n-f=XKGM)LF z#c8GQ+4QmGr2kn{PqvKI%;!)4XGz1y{RC~JpQ@iaxvt1cJh9RYW^iy4{n(Q<q4@*) z-(HHW^QGrl-_-Z<%kcj6$Eo+d-odzv$V9dD*B-BR#%nX1kf(pY_cxPI|JpzG^snET zrxbAb&%*S{-36H^ce{b~j9Y}JoZn5-Pe`<ToV1qD`!R<sZ@&_E47A2>o)f)@Nb7vZ z-sQH_y%iDXnO;^}s!zgswKeWQbX(T-cJ*wXbp=>7RX<~U-=z6>?zhxF+O~`Lsm0q9 zgi9Q5dfbE}MsF;UqF_jePX>sZwntAQ(pBrs{FZo7g*9HWJUNS@$&c5lOVHzJo~Ac` zl%%xV5O(`;OKW_-%zZHXAI6S0(zgXeiLW8-gWcQHWo){hu;LoYAs+46JHM6oVxHD` z0Zqr&*cY#iIxBnw8)rXtCAW&yidetRH?ZMVZx1zNZO-c8_9dRZw8#a;`_U`IL)T=) zi7yEET$73u|C1uh)t`&J)?Ii8eL`U)mMb)mMSj3<3;}$R7oZ{v;`DK6sA7>%Fb_uN z6G2#Teh>ZumVp|+e6P7LUZZ3}<VVGfbT^?})k0Lh&QnNj1O}=+d?TPS&n`vi%Q&?B zoUD3*uN{BD6^?}Ptx8Mt?fdLm{tz?|+7up1VTG$Dz;)v071fgDSN4!Ni<68kiJCdh zR6NaoTwsTi1<eTh(}i1_ldbp>Ai)`j2g|#(;#JRSx}9on5Er2a_(_Wog2pQq3A-id zeOiRZt<f<eK{s>7f>2}Ij5doFNLIRv3un`V^+_IBpBi02jh~>gkt6MMMlzO(N&Idt z4MRt6H*OMm62=Zf`kA*S!nzJ`&W(*5o3I|wz|hS_a5moWdJnh8os+0iRH~F|qCnop zB*!<8=Vzj>%<4Pf_$DrW@V)H#CLHB`%a!&UMUBD%g||g=dVB|{>5g~Ba`h>|aprf_ zeA5O1usNt<Am=je-HIcdc{Il=MNskW>$pk0P;$Wc!nW%YuA2k!775^1p+SE_S*q!S z9~y@Biz1IIC7#A}$yLdyXeR8nU?oW-@pNu2XgJywo5K&?*nqeGWFb92sa9AlPvPFn z?gCI~ZZRcJxZp2QN>AhT)Eb|&XfG1V=<g{`n75b{D(LSR5`I!ePc+_Y0md7M@tzj; z4^Wps#QPY84placv^3LRwy#yVK0xE}lxb-ud^6yyQX}ZtOQe*j9Ey$Ku$flvdk$>J zn)RJ-`bty|_9ZGG>AQ|(6XTbZ@ECo5PM=?FPu{%A?px*}#sAK|0NMB-(@TT*D53zb zqD5V8r5Sc5f&@}`Lao#tSF7*kNCE9D<;&<;OS9-()z>19@HcgN3G#~fr5aP@QNCF3 znb_F{o98+9#JBI@HFpbrX~rAzypi7!lO{g)ca*SU2jI3^E!HXjQsdVk-qgPbZadqt zmll*(-%xaB_e_gzJDhDA#not=Wd@!Vp?CxU4>`K-=N0KSTI_OY?nE{u)vO{XIensY zG~>0@<nm{{$fXzY9N`NYuYt+Ob4msdjVJ1AY&-UW+528_#2(;a0$b<a(<&Uq>P;6* z+FQRT&hz%P`fSnfirE0SAhMZ$$MeK&f~KW8p3_8B0KVyS?41$oITIUSusNT`dF&fJ z&N_Xav)PRcsmX$Kwz%6nNK+xd*=(VuxhaJxVH~82zx|ERg6|AUezs^HqT_3lj^}eY ze2tRYiI^qbayzoUBtIvH3|TMzpO|l<CLjI8(@P~!cgbCRp10?AD(pS%b9wlH$)qK* zTcNJ&^JzzyjMCHT0X7K0r#((Ay|J5@&|-FVNI&!u^s4Pwh?n$M1aZM~LeEdh<opml z|4csHygg#4M=e5(8}C8=Z=W)Z9sAMH)b*Gqh86Q7=sk_8vCt%U$KJu%*=r&*V`o?6 z4B&`Oj1hU8Q{;CoB&FDJ;S-fV8ijhfHRiK42E~Xt87VcZkn|Wtsr*)|Ct|0+Ux?(< z-<zT~p|{4$EMhGBn-=kWNni7!ap_jlAXa;DR?^YX&}I!oi%m?F=fFmY-Gw3Iz9L^U z4vDR5P%jo7i$$F2GNSLaG!NVY?q^w*(ap&{9<c5%wK<1>dcH{##P0|4kfi^Bl1>v& zt&y2Q{pGu5#ZyF>zDf9_5{i{8=`O_)x}bh<R?+l(-FzR(dM~Vejg^dlY|8t|H9I~- z^d~f1t59ik0>pn%vhUEicd)`-YaI9Vo_TZj0l$7Zfi8xq()cn(yi`K0%-R}PW<h|W z@qHgh|B_3Fs8lq){%#nIB>kN#O)h=u^>wuD;h8k-J+b{|eE_ER5k!uqA-{olAz?_R z-X7Z0W96bfNg;iT=;NVJF--wi)eV?eqQVvKu7c~!kjUqmvcj_n%bkm8*R6?4cbkpt z;#>jBM%5S6s=2!WA&1QTl((4h^K=1AEE*N}i2is%Gk_y_=ZwKVI2g&*-_EmIvYkb< z<!xi$gHjS)D3*t%?2Gy82Fd6v=2~$fYk>%c1M<RL>@?yv;YsW5j!}DFI-*vm2T@jn z;t7u%x2>uiuhoMuL|(GIN<uM0WKg$UuoArYN;2VIPqBhb0sZJJtjwWeh;yj%fk@&W z1i%tJI{wFF78w)-+Yu;3NK6Z_Cj3$zaP)w1RUm^CAo@D|NeNr_0@Gb2vD4#(f|u(} z7D@4~B7o^~TP@)gsBx!fA-(pSLsiBV1oWZ#*pe<bYwn?%ah+8&I1F`~_{)qv;4i=n zA!@n}3T4Gx@S>x?%*YG+!=^N2)Vi(s?V0pDjenjSB+TYr*8>?9+e=NqmK^{U?_gI? zJkRl+-n)BK@+-UJTI5x6>p}LD1W=~;Eh{WhRYIa#M8yi)-1+UAaTvTlZuRy|YF~|Q zU15nV6E!PhJqjU8B`RXZBh&y<wPFk*WCIHOCB7hK$899fC2CaUM=sSEl9a{mrspS( zFt!Zdp7P2Sj_>ruZCTCB_NnDiV(SW4cyD!DBGmxc34m*y;d`#hyba3}qRF@1N!alZ z%#bV7LCE3*H7rsA1jQoXw8$R^4}Lm+R&Y4CSWmLQX&7UprI>AHv280YQ9GAuiR~|? z;b;i9l@bj(iR6C8nuxcdm|eEgJJ?Fwiz=Smnj!-B*nT_V)sOCsL4Tj$ysA5g7J9QD zDk5qX;V-02LCVyLJApWjP>Yg*AOYp#L9ls`CcZoY?vPk!hcS{Muhqa(T$=8;gRbom z^USIx{6KM8Y-<YsX8E!)l!E^mhW}E)U-OCZ<C36geoGU>Z`MOa82%#46q4|V8WPPD zT}KJZ8VO~cr%q!a{d$RN<szusji^JkvqJS|QJeSOuA{3`B~gkdL~sVWrqa^d)ST*C zT0d9oNfV};O<|ZX0~SddNR|1EIpeHsQp~7t?K$7m(ii)pCE}vhK-J>;`shFMR7Fty zQOFNjn>)x?yaA(CYnD`3O^lMH!(7j*(KK^P65h|m-I1s1$423YzfSUam+zx?pU5LR za0O)kBANd{D*tZE@1vaC&J+1!pyc_M-s4J6rM;;cf|=A{#78rZL^L##BzD$&x_q;` z^%9azT;giTk0M7ng#F)Wi}xC|1~tCTDul)++(-eL5utNd$@N{+$GcL?E%i@sE?Ibc zU*s<f`7^sShuY>2I0H1m8E~H(p%>JDoRes&XikZdEH6+^`qe)*!_pDvSoyba1jk+{ z&uBSb>h>oQlNzy(d(*!nf9{j-)35KL_o>$>`_kpVb``zFxuRb4SLB1fRQ<`<Ydsb& zkJqRBlKQ8!!a=gkZ2ii|s7v%1QA7dJ?qMvriAA`h&QdZamMJ->>3_d(sdKZ;G?Ow7 z`YP=kbM?_jX^XsBVZkQ5e+_a2kE?3+{zrjK8XrZJ!Q+gdoZM8PP%Kw)a3v??&Uw-I z0yTk`7R(`Et(%&Nqlsn(Bbg~rN_vjw>i->;*C^Y!P~Y;JhyMycO}tzntVoW|0e%k1 zACc4X<w|p(sNfRO`M4mUR*mK(%+iopD(m^<B;`?NduJb!?RCqspeFzDh-}gvt1GD? z`7*j7?M=b$n`KU>Krr)NC=3&hf)pHP-anY2U_FYB+Pelf&-V@{Tzr5kpcl>se^GEt z9#K4w2tiSQoS6@1D`Y?xtG3J`+2RSQzE&V@sVr+(&ra^h()Aaj{{P_7Ka_Jg=WsyZ zQ!ura!i~S4+REJNTlwuQ>*VcDMtctLpkHs8rU~oDKTK`n=k{rvXrJ6fy8gN7&&+^6 z=A7DuZR3flP1H@_#Q9lGq~`lKDYx9YWNlI!zzpq}W#xCch>XA8M9arA7cFV-lIMN> z8)+j)WM3rueJ3~AL|<&1TiuW=wkabyu>l1N`XVi1zr(M;nv5b7o##8baaNMG!I0rQ zNpeXG_#26B#J!#<$k;)c>^m|?n^rpt{d?@h_>NHsnrSJz*oMf#qLHsbP(rkx7V%cV zdvwQ3myp05YzSy^l1SsLX^*kmQ%s*ysWxRrBd&S5f&hClGQ(7!LdUw}9jHykIMwEa z-o)1z@nmK}KopWp(KZRDOTmr)ljEIT?}oR*3QuvMp`n4dAM~Rt(10;1gG|g9Xx+^E zYI<FYVRZ2YFAPbPeilPd;6ia!Lz$|y?BbDraC3yJG!Ye-r|3LXt|&l1+#GjAjG5VH znAvc1L<ZD5A5B3$Dc?@dA|Mr=q<m{r`6kT=#FOzF<y+OQH*kNtjP|eiwyGU#Xu-C3 z`}ND(d09bHy$C8oc}mmsDQ%fdY=4<Y+o9>_ZR3ol*187aB}owZXsb+><4;njYD%4b zya%y{ccymu5}r0AeB?cA(k^4#WaK$HyLnFTED>`djrLd+;g0QT8w=4ZbrAc}ApLPm zEw>gFFYBNCqhU;!*PO4tihk;2zN(q_cZ;$pvlK|&>8Ze1r>6{I@5TN66AGF-`o^ie zu0cm<E1aXuYm|cnRt^};o31*K$FE5dJGtF7=D7>ZtI!wdSG~g`j$MrDFX1k_{^311 zs`oJpN6*6>eGjE~{{yY+!%(U;5;8pc(mzpNoutOn2HDeuz0~*8hOhb#Y-rnYHlGS_ z{BKX;tD)p|qQJ;PO@H8o^isR%erP|LOyNk<b=r}@-cih3OS`~b;TvGqpR<m>cyGVL z;}*{o9ebdCXyv(Co4eyIz}s{c#8G_#z=OEfgk2$!)B>V=?;-5<fKTESRDnD2B;YAI z;BVAj5|j|n4+%v31?ZQ##l-Z9Tj5vqETkE3=5bs!*FW-u?i^}r<U2`vsTli2dO4lj zxtGJX<-v_@4*%Gt+(VQRK1E%8vJU!g(-fn35K_ZqlpH>ecPn5eqIXt(EnYl<7x&}E zYV(Cnzl~nBY4q&Q8OU8r$@jX5Y5z|Wz{L{RTnsYwGS`RqB6dyWytd+C_{Z}QSPp%| z-XUL>Rt9p{QJ#BlKoA&|mgUxGlq=euDtEXwK0n+EaMlByhzU-v{`9*9=i`ReIgr~9 zLl`Umx0_G;tS5OocB9Wz=0l%}&mVspK6^6p$v<}4)A+nA6Q5VVn}yGNQuuV?g>qvO zpWjR2^Dm<r`22AapOtx&@cCc{UV6@f&xe!v%*jjPbN6S$=i@1St|M^5LyXVv6h5C$ z;`6D!5}$W{5<V^Oe+oV)GV#ejb~)4d+@Fchw??w?c`${~{diHF!sn|gd_FdkfzM+} ze7>(t!sqb}ybPTKpC^*|{DqRjr~aAnIhw*}A$NfBc`Aj^@gzRm_DFp0|0H~_`80f% zb!Xs{f9z7z__TCq;4|^ZEPSfnNqk1|LQCP(*`37asy}An)7@?2b63tJd=_@6@$&dN z@LAMt;`48EQuy?Ae-?ZecPH_Akc5P=)51o*?j$}JnNRu!zm)hypQpzs>z`HVk5tV# z+z0%AFOA=+r_@j9t^h)#YhrWwVV8w5+fJBza<Rm$lxDq<Ugo&ytv|dTZ>uECF01Ya z%%u!-T?%F`33KZc66VDc=HyZK+a<)YQCEmHk=RDIS^d-L1P&ZC47MXclj9+Ab?3iv zh;gi8re2_QvR>d`D&wQvj&I?P%94}4?<hEdZ;4zW77!H0IUDT$pfT@zRG=B^A{R6{ zGem`5*h_QzAz}(mp{3F#G?iD(3Og20*i>d?@iOIPs%$CzSBgaem2wKd64w;MeOyz; zm+Z}};<a{fk6C^5s&42b%wGpn^3hOwd}5>S#;iF|oQfr|IN3|0AHUa#w|f>tuSH^= zRtS03-)0L1X*?>d#^I3A>1mNgD!#kk?eI}m6`BN@)ltQ1%4v%2_w*%K>2cKCWkes8 zI)~*)ajk&2rwvkAQ5$5RI>L>IWgtpg*arP4%mj<*17IqO2wSBj_!hGzAP^h?NK#a) zGQV+Ifnf~MKw(!<;r|4<sP>A0e9s2FX|iO?zl6{6OnkZ;&WTX(yT0e6U-F)&y~JXu zIBEEks8oZY_&QI8aX2WB5WonOYe;1J-s-q^3Z$!I`-@U297BD+52Cvz3TOYCMb!#1 zqp=a2h$5z1p%t075<glhqt9ZrNS`X>Fcja8ANGpg>Drk_Usq8?lYX{P<M>f&H;yND zyVJgRPJZ7YRu)0-gp3vx-jG;=j`(B!ZsQFaNw*d--oRF}P@~`ZT7z+jHX$SeaxJT- z#PgWcp5JBsPPV6*?S;e^cb5?<1P2R>8>yjU6L<5qka4)VC8<SknWBC)>o3gg&%&ww z&3x}K&1^q5S_Cdq9NX%)I6C>37~(988bb}dn`15lbCuZY7B`Bk0TofrVr&V^{K#6> z5bG~8UX!3g%<X6(;;Eqi+~)1Ul%NmfY!|jHlWl1P-J<YaH?kmJN|n?R<t;#F)*duK z78keLLxkX_RidAmdQlS1=5r?gE;U^h8Ha&bzegfb6L}$Hh>&PcBGGP{tS_Vu4i$&% zT|rQ+FQgCg*7b^GuO+DY#jS<Lq2^@qZ1*JAClhiPz)wl2v3<@!_?{clsMQ!s4qN7^ z#YPvh{+$)1ZPqrssX#C{PFP-Y80oLdO@ibjl~uwi0xm{6En{6h?RQdxsH8|^lVu>i zPTa#hKY9zJFvHe}-4M;S!hp0jQkDx)2fUdA@jPSRz07k6uM1%Wq1^F&ybnxzGcEnq zo^!tW*`OtA>Y%ulBL@#Jm@?Q>3b?^cvQ11baKrXWOo-T7BT`1?1#RfsJ!;6WiKQN6 zsD<8tj#e<m61fERh)s1oe)-}{g#j%{1BPa#T_V$^?Eecq#nZq;IaKNTMCFT!0H=p1 zHd@*Mjrn4+tj>GX*B71BBH0Mc8oaCITB-;hJK%!mgjFdFSE(`N>vQb9)FvJ22sTHj z3qO|C1rrhCUdS$-fU(RNf~A`hs(dFS^IOX=jueQXN@P*xZ?guZtN^bjgBB)VUu3S< z&}KL0-BrMolixIotFiF-PKt{_RgTUsNwIZu8Q%IesV^$hj8|G?Uj#&TkwRacr?vyp z`KhHM5TFJpJP_%~1q3GOdNCogD1^np%~qv$PnBszXX@7c1l>;Q!`Ue7e~rMYtMEyV zQrCXBSy2Tm)xfq<538<>S7=ZQfe@jx-6T?+w9>nQ!CGTz<WdIBc&(|Ka1W0giF?3+ zELDU#90lI_J-JY7@Cl<LrPRp0HGu21qq7~pN3aBKBBYvghVs_JamGX=0a9y;*T9-u z1&nRI4fx`wUjfVnR}oZcwQ#Hhf?!b1Oal%$L5wp7s(^u7!a!Afx9luZU8chYAZTh9 z11)BETA29EA6fd`koa016CE+pYk(Nk(jYGCVZW3c16r)VkU=ce04nhi;;8{J)m7%o ze0OilK9|LmH;Vt9A#XSvvc!!dDQ+-tVk@b+y0nvww7HHjQ_Qq<I&urI1++Yfi`y)I zR<0xkirb1XzZ0QT;z-wFSUwfD3<`5ua{Ki+M)(9Uo0+7r)OFPHLr5t_86L~A{e>pb z+49oLEcmm)FHC`N*PhJ+e_?D}9p(aCB_frHFQ1ZD*%WML42`D$>Q6*O+v*65i^Yx7 z-f5q*T8S}EHeo+4VK2<w-4vQUWb*jA%>^)!5+cm?FJq)KnK;|yzho94jLczwf&wgh zcH<DAEcoHRyZ5Dwuzwg8ptW7`PyvT1NGKlUcN&L;;+gFKH5tBzm{l3H1)=H{Q<wsY zxtYYI+>=RNNs^W8O`TkCNS4BqWBe}N=qKP~;b+1}cKxMO>YudUYoEH_*Fs9tg5J~R z8&^i>G$*-xEjY|AE2$os%Nt?WCtgD<iO^#o8PWWv=Hz@$=7dqbG(;I2+4N336R7=H z(`SwE<H#l6!KX^I-KIuQVj3vag*9S~Xml;qx82OBZYE*xXJBVvR*9HblO*DoD*$o- z)#76UHX@A*j&E+mZ4jkxmXPjz9Io#~v#s&aLfTBO?pR9Tua(YDOVxzr-^{uaw@I&r zTTH7x@r+PFzgd^_5(Ok}kIYT>Y!P}E<gQV(HL-zGp9w<y4oX=A_>+0dOeD0G-c{v+ ztJ6aG`P}()+F9JP(mN;}6rjmnQC8<!OEd?;5bJ|K$b7p|`o4sz^jZS*x<tbSagqxF z?E=1OPz?|yqH?h@ge)Tk)CE6tSbgG;GB7$}@_y!2j?Pz77`<C!)Niu?6`s|BEcU<J z5?==PA7=KyN?g5DiqmdWPD|W^01RoYVKoct@jr5{lA*b=8mxm|o`0CTZmO~()?Z4? z!D<@qaQkDx7;#Y_HR`l%ErE}F;_DM^|47##)brorpng;|_O3Phdz1?5j=z!KMm=TJ z_ZG)@dYYP7)m{Ozm9#jG{O8J${SJQ8d*|f$#=I3$&{fKJAS_Mv;@H<*7CCJL?7d&9 zNLj~C6U=2!ur%AAQr^Yo^SPL8voI--f@6M${6$muPtK$giDZw%-kuB|N9)C1nd`-x zN&D-FxxXH!ovd3_yIJhCQSHNS$Z2wc4<iPBn>BH-2OtI5T~JD$eDllBcX3Ae2@l`> zvSc?)<H;SAxx)gVa)B5fe9KQ>EBxhfyc`<}C<-2d)2*YE6-8fF<*we^Xi9yUaNa@D z|CBSyKrrtl6M5)8DiL8ps~8@WO1zT+p~k-X19oL#>)&$Y4HhM-4+wx4Xf#C_0<-rW zC1KC=(_Wc=u%$6)EGQ)>E`n=jnTln_fTqINZ#L8Zz{ri>LDqGop_7o!d5_tf2FPUP zK~o?@72*gHy_@>6u<K~Y4AD3IFdOEm#YNE6tc=UKvW7luF=yzrjy~(@6QSCw-8}o~ z&r1AR>}SS7bW@7(qC7&_AVVYvXCcNn(CPWH>B28J!tIw(k9Nvi>s+lg6Bk)nZd{a< z8(|I&=s#}Z=|)&wWHLq3Pwhmq^&IQW^?uhWM1IliPvYA+ETj5oo!@(3<Z1eCEg9Cz zOqUCy^Kxq>cev`9Vf68Oj<b0{7;YZ$Rk}8<p;fh^G348~Q7ah|ANtO0u6+vVFL^!Z zL*aMFdZ7lyiJ8LKhw28Km<c>53M)<j`~h*Y%h)u}vA3Sjf3}wAN6v$@yKar1Y+)li z?|+Cnz0cP8#-Lt1ki7b0u6U{B#Y1OfFBm0<az0En+eUs44yJB!K|&B}i|B7E>0Nbb zoa=y0l$`>9E5bm$#+g{|j8`i0N;O_-k5|&OD_*0-YwRR{$FHwI^qHDs{pAC2C-0cq zpIeFxCq`xr)F=?(c0n^O=6LXTUNQasN!4xy<H3`L#Qyl4TGTPGj{atOw8TbLiP87v z4u}O5LY5jyIoqkkSZEq30c`)}Mn4XZFgu^GGcyn=9E2`b{>mO-c|Pl6T4sjiuIM}( za=GTvkG!lwXE|l58Wg4R4XP;J{;c$j$%zLQu|bKiC*jZCj5DmWfi7o!sRCR3t%|Q8 zIxB8XCIFA-<K+E6>bF5*62FfAoV$KI>etkC1AY~0YATIdOFmAnKLh@)SN-1sKN;TX z>-#SPOaI{hH6!ibchU2Pad)k)XIMFX=yb0&I@44^DHiamA=60SehJ4Ho`Ee+C(;~# z+^chth5vTAwDdQ($fi>MQiGjo|E#&9LXDfxUuhox8D2?Ots+sWvP0I~<o(qL%#_Fn zSq@u;$@j|@-(<I~5lUnqx4h=zKqud;m!kO;JmsBP{#)}*kj$Ua=3%#l%Jk;?JisvB zw9X%ynQYyV@R_ClJlUb^{CgyPQ{1_9fcRv}b!>Mm2_?a|eXC-jjZL0;2%*15$>4}= zN8vMozPBRfV1(|F@RfftQb>{#VmH<*A==pFu>jzNm}?BhzZmONV*QHmt>~-L6A}@r zT}?Oz77RVdfr@4%dqgitEGvv$!zTV`US@}hA~B}_J3Wg0xGI8dBU!G-YgKEz$3q|2 z$N^Snk!(OL#M46LTWg{m@Y>l2$~O|ZiJdJA5gu(siM^+k-$-Dejvz!{twMWbP+|ty zHxj_Fz+)x@;9%lTWx)C%ZDGVq`pdK^&=>4WNw=56)zi7X<gLzhdojIU7(nUIZqM*< zw`3j5$r7F<{pbijnmU<s{mQJ9DS$6|5=eUu!5|Er+`voXbq-&R+A#~Rj>--sO?A2< z`K&urK3ki<EPS%4w#5|Ho|a<BZeF{+M`<}(=P5<Z#{fxez7a>~t?-VCH(8`xN)8L^ z#rjfQ{&T+vQJczFdlp6u8sxc4=IX;2!jtBUKVH0>J)xk&E4uC|b`7+_xa6+Yo&}E1 zyCCK9fw=AMo=dEbE?ihk%U_WtS|jqpYrcS6wjO_*C3YHy>qNe<H@c8^0$MyT^G|r_ zMwYCK<9T}GC{{Q}XC2l33#-UC&&U--ebmMROLRtmm1lu<<nIZ)f#*4_6{lE6F2j6z zt<8$QEu@O}KQAkSOeu?&i+r5JiH(0fs?e^nh@Lv4p4d81ku`eJ_P<!8?(owlAbOq& z2Ap57J1X*8V`W!FH{qBbKSutp?Fvo5mM{20=V)_<dwNBFN$;WY*!U%mZ#|3AgBoZt zZhzhNJH#A$`#A&dow5BcmYvM=W04Ly9N+#m{|eGnzDVTz(Ufl>`oW0P?34cI{hZ-? zF+X6!VR3YQ17UJ#xM_MUB>8Tkc|>`kKVEH-!wG%)h{kEKvSV;FUfh^^funmFFD_2K zkZPmUi(K~hp|@Ky1wQ({#(Pjt#4s7wXPwV^+?wgXg{Y?R*m@fG&U@d*QJo$H&jf>b zD-uGCXvnJ3OTjqjJdMZsBB=W2_26+fhkxE*h5P1M;}mW$L+J2E+8X0%`6+2XUI1?7 zdp^xdygkF`V-l2?M7D@quydl`Nds}IsKu{EB%{J*4_=MD%UMX`PEae~?Ky^^R|{i4 zYc!X(I3qdOpbd#}-$xyvV;{fg)8=|HF#K<Da*%o5$XjF##ro9plIUGj6(YDgy4rDV zTScOi?W!8>Ea0XPURTDnR}sd9^b<Z7>D!+*4BDU6;?xh3OdY?{^f)DlD`fVSGP@pq zmQO8(&$rktY;(ny9bQ@<lPb1@DbUA5pJMtH>3{Aa(pe&pMbhM`^SB%3KUN&jx1YC2 zZesoaL|J_wL|x_UJg#Uys5*eE^-CyS0$ybTuIVp6LqP9jph5o<=z#v}Gw_R$Sy!4_ zd!ESv8iwQ)(0XGJh@HTyN`pmX6`*e|1(qcnEOXc6(eHYW9r)b3@hU$Q>8IsGvHsCZ z(rrJRI9kL`4;ViYG7<5C?QoL=+0wcI`Ixp3LFwZFOCRe$wM+vTyGb<gecB}ctd}nL z2~!&nVnOol+m|fnTjDMWKU|g(2EiHLS(b4?D4M%#yXkI6`<j68I|Gir{tNKOjTi`Q zs~M9`m=+ZoVj_bIvHX~4=K3cK<U2-PS^ktx=}%cG{VB1>Zw#_=iU0UB`zbwi{_b_= zI4Zj-?);e)8SLKEZ21WWgS3Nn3$@K4*gR~7y3JHU-qN7S6MwKuF>fqnf6RdXjkiDz z`<_A^R&dAF9#<=Yb^-2_UHClin-(Wq<8@W8Rp-Rv{z*7&H&1y58w0?9CQ4+Sm=v}e z&E%cjc}Pb@0?%&+2>?@*Er@)!rR!Z1jNuE?gmYB#>PExYWZ$^_9^r)=3%fs#UXkzD z^hdfmt|9%toMfjqE0m#KM*9t-rjULNiG0nkzlQ6yky=Ee8r8I6FFm_xF?B-}Y(yLh zy%M~BT;3a*l34x=@SL9sPhlJF{xxjD14$6B=9n8KjeQC{Z%<4E4<;AQ8Jzdvg#zT~ zw6MS`k1-Lfb_uI|73;9zV3%Q7k|}(nbVzilNtz>BCid@Ud?s-tZuO3BRpl8bn%soF z1$)gNMK6jCD89dJc(bJ$6SKgoY{#5km27LP(~{Wgj8-P9olwKLjCuFqeu<kc><E=? zFM6H`+C_~T3Lhh~A_9UN0E@%Tr>LQuEv!y27B@qOBOGF8KqHwOnUEa2$r5$25iiO; zFo7rpnj{!g&hwSg#wWH#u|zM}u|@3x1O+>`;I`44sG1Z=O+gf@VMZ+NsBhtOe?-sH zySeLd<O)>f=Bnl<tD0$66;ZpL1PZn9=Kx2d))O!eP1cVR;HpK;fyO~tBeQ6YWCbFn zX{z}&`8-UbMjgl-BTQ}ILew!^>#uN=?6HCnn-Y?p_2)RgojgApDd9Lc<(t<<E=cVL zmaWU$4s2d$p8d@{0Zj7pSf;#On3k8_4Z*37Lo6TDmPE{f3!*&JN59LAd1KOAX%B=E za-hxHV0u48rttN({}o%Yfj5;cV_~(N%_u}Ui>)wgw|hj*IvHn$0JeiyZwmWPvWd#c z2SS6AIXg*wF7@?gF>HILr%*G*DL1j9Fa872R@|4ZUr=MCRSiM!X>ZSy7<b>H$lQvA zy`uMRMZ}%g5;>nWqJK;jR`mW}iTw%*M&dqv5lU1TbWAf%)jp49``1-V$kBz31C7;M z8wvH8XDd8w1K}f8z(O#5fWC>Tx6@~f#0J5;maz~HusJ9Y4!a2%rsDx6t%HJ})~E3L zMXVTxm1rELeEnIy4rl!yU>hgE0xZ^OeoGdt$X~wR9zpVqjO1JFVhOa6jpAykntlD! zQj}@P{<_^F#*%gn$3K2cp4@i%Iq*f8DqdHvshj+wLUrt|YjBqAt3BOoj~1Wl#WDM6 z5qgAUiMA-Vb}oOLMU!TIc1#(WN2A5>asJ+g=sIhpX6t4qFKTHWTop}gxGTWA-*5$# zxV~HLj&Ixvo$Q5)TRx7BI~@O`KG$L~JY73qv^a4dj-X!2lly4I2mU9C@-=qgOTb_g zOnT6?&yerl;CI}}N;I<4cO*JUKeizH1^OG8WN*CDM3~G?V^WrTjs4r$XanEBNZLsU z6;k<yqShYkv74jKg@kUr5j2fR&o`xpk!zv~0hYwVqzdai>$y@5mmeX_6UpIJH9J-4 zW^bme*BrZx?n$C_61cBS-xVvrLyOc16R-yaT!gMTGrD4q(sV6nV}D&>8WhEP6vh&Z zXLebw(EaDa5ViCg`#Zs;EDm7HwMAC=bQ0${YK$|+tl>}MW?I6UrU|YAMo2f+pur<j z|D=8`l4t`|;_7>(xo^toy_O6Fk%`#Xcv#X{v2h}{k!C0SI3^9(9!WN?B(4_`;Ga0y zo-|BsyGa3RLO2b<P6oz=Fpah}gp&v;CkggS5@6Y>!zlvnq@&@F2Y<>^qp(Ob?MNxA z`IMee6YEkqOoE+BJnHbXAMqZAP=*uzgfF7aX-6&ijFtE1=a?Vn^fRYPcGt~mGVT0W zVb020XMj%w!R!<3aZaA_+~46VWaJx@da6E=e`Hil&!uLaa*9+X>+}SM4^42LuH;Pn z^r=2+pv^h%99}>*1)mAA&ST2NFz)NOI7jJIHDGaGJ7{q}OW*kiEY3UW^IiJ<h0?Bk z!Q!mT_^hSRtMn-*{yaH8MC~;3A^hy1Qc;m`dEoP?NFTj$ak=S((bXdqPy3auPgjE` zKI8^3YfsnTj7S-oNvxT_eX2ahv1(YBaz-xB(ylIZX3JB~NwHL>vrk8sCMu<ozfv(n zA@Ifu(}4DeesM6q)>9O>rfOCQe2xL5-}wv&Eg-Rbvc)>(@r%plC$+b1N_z;3=R|u< zHco#)Hd-7{9hCrIGaGGxjvIANZPb-)G|Pu-O8aF~+E>k9I;ZXB-#uf7W|-2TC(|x} z&i1_7?a8LpY5O)Ln^LAU<uA^3k<OOqN3~WkvxcC!9#RtDI@&##V>hnwl!aR1kVw?F zp50HdDfbQ{gitLXEHqvx8DyRGC+A3Z4ai?)ya97QZMWcdUdZt$*;$^;z$uPB=MO!~ z)7b7ktf4I@R~CNKtcHe@t8pc(c`Bot6)gC;xthDF8Z3}WX--_UlTSK8BL<EZ_J=6% z`V>dAgGGcjPP8UjM4_L>RZg_YMAQAwEY58I6`a8=)x*2l<$n!F-6;)(%V@I3ddKyi z-(bTF_Z`i69XeS*eW5}6Vu!HTSqH_5b(CmIv|1*`v4@@%Sm6jw0}hPZNnDF~ik<>) zg6O{84D3U@1;)?mNMUydez4~w)G>bA9${!b$-@b>fvGbAb^zcpHb)q5w6HSBImsV9 zHtNZM$8N&oWOx>(;c=$maZL|Tdc1!9uwgW`*(MJdAG*QLNsKY4c3ZNB!O82ATMk%| z)p&0|${kzOCI!jx8najBZ<)O+l8bMVTzqMx{>CcVNl&_y|L^hr;X^o6!)idFJ-o#P z>z|JixwHH8SQ^>t)cN@TeEcWDbH54C+|LY;8A*yg?=9?}4^j$un-vWn<%$$kWcqt> zU5bp)Q<Y>bJbBCxE#k?(QgV)`%qdTz9#8qQ<do0u(jw~8V(!vE{VTUvM63vm!o!uV zPBS16S5rJa17eLgSEKzaGa#qQfLvV7nluA)aW(Gg8IUV!EzxKG>p2-vsU+P{20fb& z&`xGR?i2%(w9gF4ZA<Z*Dt+Q1Ch`@$0jSc#M@*!z_%&;+EBs=d`ALOjGET{4iX@XM zO*5G)Q;~!7G3TPM(*F{D&H5LqO*iAfL7-3i_1U%XDHGlY-!#?VMerPQ&y2cdnKzgO zlLT0VqYLam_y*G%rL!*3eD(ije%$(C_WV$9k`Vv-$Y+@!@L#D>MSh!7q51V!HYcNS z<Vn#<1OO9&?0?lZWobN5)F=T>e<Jxh@-__qHEP1%C4-da^hP+GyqFtzQeOUv5Ca8q zr%|J(g2^W14ZhD&bkDq<44yknMnc;56T{#OGB)MIzI@MK*u9}rO9Ykpe6er3_|BhH z-xs((YqGwI&t9K*Fsq_>{yD3nGka1M)hO99j}Qq(pFtc&Tp#YXIepi!qrV&7Y`&i% zDvF>HhpPgoZ_q*Aec9u|<#40tl%kfbqOon%{AML`U2L1(5}6a!uf^?W%j`TL%Zf8a z>DU0G5w1vuN6Bc@j8}+w&1PRe+$F^tEgdg>3C6NDc6LtG?busmd$=Ove1s!~&*Vtq zarxFBF>C0i8pO-`+ida0Vb_N!AsD|=deCHtP)dg1nyugU*Qw}992SWq1-YZS`W=7G zo-DB*JAsY(R{wlsI=+>8?)Lpqc{9S#xE3IKnG3PGO8R^Q8*NbXZ)z0F-HnN_DzUT9 z4Kqcf1?+D`iLdjxkdjL&BR26`$pG}m?wr1y0j=akf6glb{qcQpvT&6Q(A<e_bvxrV zt_?Zj?=AgGv873dYML~oCc)D=e>!;ndkP+P3OuP4H>beymfD9?gW^jlOG{qVat3*# zCtSA&bVoLTY7#&W5?4J9jG_{T5=X4Zh*uUyXAD#_U(dQ<w9N<?owQC9s-EN2pGwB5 z9}{Qe9k>ZtjKyAZ#6JFblOo1OE)y;8?#CW|^wBf#h!+nHANr&3(8m03gr_g*^&Q!q zlUQ_qV!0KOYh{#s{U{&7SL4;{NHJAL^~S69iZ+YZUp-;dpP{$(iZXP!{MzE|6Vzf< z7ftrAqnnCi+uRtvWy(lSVwuu_>rWCvEAgrJ9ynz<`Mq6yS@G+4TrU;$^(y7;C-Bwy zW_P^B75mt^!6th96}LsypUMuO5B3)w#jsN)K_#GnURKg(8K`kP*w2Pdqiq(rFzIho zqe=W#{GZ})#*U8(N83Ibh1<@7!tr0qi^YzNlq4~zrZ9*An1oSaaM#f!2366di+X$4 z;3kh5k;z0NUkZ_^y1}M3=r=rv>%8m|k?IBqBl2^LaM6Gr4zkM>@8P%`c>FTq5w53w zh#TOlJvSy*!eou2>Bqfh08Kxkaz+}Jv=}Z|^nZHJk|NkJ-?&}a&#uML@JcINqE_h| zq#suKLrwqa-;V3Lt^M2C`K+&Pq5j+FKYQVdVrzfJRT=X^&X-G#O1JR4%l)p+$tiP= z8N~iztfcUrj9dr1pgSZwET8JYMtuEb^!1je=2d-D^c`+?_n`GYatUMxU43M#r<y@o zM&4-dJGZ~vRqbr#bL)eIQu^UB{obB>cxr9u_IH!?y*`t^i_Ssc@%mSB4dPK;@_QBT zlWVd&I*Z^F5^p+Th7hW<*t~=B>Lck0!||rkc+-URDF0Ot;%ULhy<>D_cK2WZM$)hM zsHnDUMEx9!zvH-BR|Iv5{*0=k$Kp*o&4L_R-8xiv1l2X^X6cdn=0o?hze!GxV}c9i z#+#1OkljF{^L3*72(b>$uZ8sc?xP9NXb%R04f?n4<J+QeNfK`N6!ov_yHB%Y$IOB1 z6OhhEa=l06O~)JbTdzg2;{m<$TImL$mRFy^IkIWyig()7ls)i!CqE%x23yt+`(B8A z5jI)hzQ_$&N?5g9C|$)}dKvK&II3UqXJdR@F2I}=_W~zlL(?W7Y)tI-jMKKeTfLO# z<xAfs+0zIQot$c+d_LZ#P!^(%Y^K-crd07uC;mR;!rwO&3HV9)#f$N#Bk`z?%h;-q z4OEXZbGvO9yQ=N{M}#qM91SG86u#?q;{!>X_$&^~KKvE9H@v9->c=F$BrDYCn5AoN zIEI0XiO+L<YX#htIv4OQgQ}zRG~ah#;ONRn6W?K<4fDo|BSfjE`>fF~eZOR%7(ZkX z9S&484<WLFN+p!2w-Bu;`u-0LW5nLAybUU9IsrneMktK)6V<Hfq<s3C-DcRTVHh?; zI3rch7ErtQbl1_XOJM(U?Cp#K0+Ip5ONWNF#Nq<I>;bre#@@E(4CV}qLr+4<TJpl- z<26Le>I~n>_7~7xJ(W3*OVTVMKeltpyEViZflyveJuXCaFoNUAV}>z|gDGuR6H|!g zzVv?VaE8x-CpMnon9U}x2dZ_c<=%q*QT++dev)WEQLhsNLFCF|nBte<0tiPJm~0jr zy@RnHTfE*9ub<E)zN~uHDQc|)$Dg9Dv1gFklK3UQBDaW(IGnrWUqRy)GoE|&!q!+> zX>=Y$8;2Gfupx@qh@*Sq?+E3Tgz)|SxWUB|eF5vx0zwC_3Rq?%)X?121NsB^aidfW zQNF0fYQ;A$$7Vluf_7Q6gZk&c&ui0&TQt$6KL#oq_z@1;@!88;FW)z5awb6L-v7|= zTxA$Lp2xJne6^?N>-<xx+0k8h8Ikn&zMUC;zm}4+JYPFKYbeQ_&YhmfW$XjHp1!>A ziZ|n{`G|25q(znwcY4|{V;Q_IL^Ei&XC0cD_ah9Z?*qq9#LRAu-Q3~moX919hajZ2 z;(ElC4exf*Mg!qPco+Y=(9gUT9-_1h-wjoB%s{p4T}S5}&?+He-w)*u*s=3Ls>pk~ z{0YyN%P^7t#Mjq3;t`LBKE-07)%Q~5GRNLQj>2DH-m-#N{=S!@BO|J>-_iAsA}f9C zN9^=@F_sz*5JwEE7>9)PTYg4zi&>@bPmWHw)S-kg1;($;I<9&knevFjj$C|Znfm<o z=*=NXfw(8eOPB({^71Ty07aVsFhI}0KTZ}MGAlcFe=_A+#Y9}!AmtkVIsF7IxL`f} zG%#n(Q>8nW8;Gy+l<E(p3hzL~`qN=OGoPai&bl<bs}Xpe+FGB=9xz*PPNh`H)|WWC z_UB;W%Xc&IkvgcZLWz4lYi!bMvVumwf@<rRlwu{CsMUiX%HdCjZgK3qmujIbVO%PT zl;LC4DXJ8-6KyJA=UEsDu~sb4VzV^z5vyd(7yaRXG7R7Ij;^&id>X8jT1OXPnlB{e z`ks%>jE&nIT~+kn_W{izGs2|w$XtYub^TBRH2fenOT_Y-h~x!oBt>PqT-=IS6CLIt zogqIBh#8mD*B?c^5tp}z>P>~*T*2W4UGUlS^+&#n15WIX8PeEo^5ySJpJb$SU<2>F ztlw(n`WqV?LmG$KnWr)zrRmhQPKI_sJO7at{ZouV<AxatR8`yLfF^#B9MC&#$pQUu z9~nl7mA-`m%JS%VG7F+R4p-4z>NLj1(e<BFg3AK>g6|>@BQ;d$`%`50KqqI#3~n<p zgI2TCp<kc#ORSRh|BLTD11Po>C@0JrJ$7F*<*?P9Fv~I~j891Nz=Ua}^#nz({);Tq z!K~pvv!aK-pR6d3rHepAJczgiE%uSk(fNxB!t}e5t1t^5qUT1v@7r=mHa6TSk43^o zlgkbl%L|>CLUzSG8UF$QzK(jg0_^zVA4u=@X54#^pjnR2h6z@7tq8D$I|D0H#RQv~ z5wo*a)1RO+#6FL}mo_qwLsFPyrzc%plS)qNS=aY*YJet%<9`EklkG@eJ^+A2OT~Q) zcvRK3@J!~A9N@qlaKKTfn%b#GlVUWK5)Vp%WQaoI%!HZ2D+%6P8e__@2r~f-3D`+& z4x71pt=is}R{OGAZEJ6<;-i`nNrLhShzf-QD%Kq*SWq589`moY_L*k_r2TuppYJ0x zbIyLQz4qSgy_!$Lj9d0tTaKKf6lI8ib8#U`0kKN)Fy<$}PhmhxD3nJBg<~z@3!jD| z{P`4#7M<MxG<~u03iv|gN^~i{h~kP(;opeAo(Nx}0XKj0VR|qrdObb97#{oie?2TN zreb<#c^aYEXgvF>n=cV{N(rd^;8SAuM(_y{$`wvPx>`~V+t<<sRJ57@VJ_N)&bz{t zmej(C|6fjtNeyvQm#bWOpOnUhOd=ORX?mejQK%&SX^9{u`b7+z0RlMd>!nVWf}pR2 z-83sV%+0T$6+k?;de9C}tSxt-(LDw&jQqYCBb2(MquD4W`P(Dx-H`PAIv%>qRDa!^ z8_?jZ-sCf^yvUUosX%1L#68E<$UQb+-P9XUd!2>aYwOw*B;bTM!2Y7)n|S&@N!f6C zG@_t_>4D4?Z^~vON786kJ=U9xev*cvG*)~{G$$O5g&Q@FWMwsZmIVFbRVAiiZg^Fx z%q~N|yb$^FLY5zowoy@l0j|jYGIDEPml-`?gClW(9$`wsCbQAZV+(gV1OC_!ikobs z9)-6wah{_S>mmGzkW@`sBthb`4x@6KKBXPq=?m3(2xjqnO5!)0E_V!&hqdep4JV^c zjBJj!yT$kAMefZDUFxq}PKy#CD?DRe&@6W}%hoMoCX(N<ofGz<<1hfAVIN-CN(+T1 z1#v_||E2Yxr1&p|zLM_0#Euve9h5`N`-<UOZ%A}>m#sBDB)TXcms{k0#qhIA6<Q!c zS{bi|DcFSz-Wa5y`AXrZvzD^<jt;OJ-w?(s7;MTDKY1|dBFafutxZJZuQ$8nPw&E~ z<4M4u2n;0N+`5)Fxss0-m@A#+Mh>L5hi#?cUVtO~bSGtKx|~8imm<mmR&M1VJ&uRP zlo%A{m;62!!w@DmWHK?HebJuc8b{DU@tK*+fkC6ob^Huj^cp+73-tzAlTAC-;CP6+ z)LV-k>m$;74A9}>*;k18&8L=q1g{oA-QjM2<jeF>uTk|HTe^fp$V*`-Hg6Zc<`lgL z{gP02;%GS(8i|oNj6iPWUKcR%lRxn`-3ynp28l_Rv2w}sxj(jD4*>&>f)otXQHjEx zDwd5I*{qLr03u$-RPEx>WXu#BkU|qNQ*1yEU5S}uXDOk}!Y9qaYccRNER7fL|JZiu z;SW#`xVV*1vr1dIQ)$^0`Ym)oVFRd_2FZdR?gp|hfDu$v5--(MLws~f3_8*;kfj=J zBFs3F6|x!z$zz1!MXD9C$e$URg%zf#Mhxfiz&2fpp&f1YX0|QXvp`e{pEaj8C1X>W z2@BHmnbtiA8_3I-VK8dNlw$AfLL#E=LT1mG<PI=<Mt_p&KoBpNR=-XXI5gmZJ6}+5 zD!i-mvAb;HcF9jc=zwyHT2uW^;Q=W^i{UMKvoFYHZ)<NaHL=gNzrurK#j~7nE(TOU z&j27x!&hrrR;^|ZjS6p|jJltiLx-YjE$gY(#!T20e*bK^-5eSTbw?I$(*A0Fw7q3h z<1n^Lj%H)T7B<ZoXRrlLm*K!$fJW?+Y4d>jth(Bm%zvM6GSdHt8NkSbt%D9<==bKQ znOeE#rT?6prYdT3(_uH&&9%!6A#In-Esi@1ECz?&RMy}m%d7F|3Lfi8IWT)!EG3%> z*^enCgX|8Dp-@(1i^l|W0AgBq=olU2n8^j@iyg`MB&K+{A2~DJk0F0_A59TB$>)-< zhg4Rrutr%A^%<ga7Sm1zOJV3L%h9t_O_0K!k{(jST~hR~EY!yuRqaG@EUSjY{4HLG z*?>DG?L_DZo#`h~V%j-CMn@A^k6G~e3*l4_A2Z<rBd>@wdnZXV>}K2IAp$vnBThcI z33^{H+M(yvYO1yQ=cvo~k+C4##;5&fydavf7ahm*SvhuiVwUPLqR$9UGdRi>K0A8J zhp!Q(xqvy29i50Vw}PL>TRIjo)Y&s$T0tJDaC3xuV34`FsL){BppjeIweBh+Q~2b+ z8)Sba0-%a)Q`k2BTK*+?LEe!_1)LsZ5SdCm6JYf%NK+z6;BJXm<or{k^Nlc)kvI}7 zrFOKoTm+Dg{yvS~xX-CB!9X<~k?BZcP-?rqsN!yN(k-sK`NI<ux42W>;<;>Vt4rnI z_>C!<VsFue!F)7mf6P0_4k(^*&K(eLnuMkN0Gx{^7(~G&QKnF&9H@n1bip7Bv(zq^ zg4z0To7~?grTL2@=LTSx&E%%0;Kw5rA*RZ(_eT#>6x^ZACqT&|&<G8f4`=M1qFB)$ z@?M5xKszCL<l68}!>uj*5Rt}{T?V@3_NnX*U1feuRLv?CjFnKX@YN3ybEsn?qb}H< zDjQ3twRHtZR>gJ{&v&X#7|v;mJN8apx9}>MgNfxH`xY$Pd}pqRfi%TiKLSd*-2p!K z4-}5cUBxeYI&Lcf^j+L{F_-T>PK??VBT~{V4TipQ9kgYy67d(-Q~qZo7^yAJlVJjm z)I};HUX1*cFqn~-99oI&j>qZI_Cp<qbuEIs7&@^we}T><0Hx0oP~sPa(n_ZjA?1JY z{E%XXsf>d^dw_US)zq|*eeDjzYRJJKeKZzJg&^C-y$fSNejU{pIt#0ccKB=c@tE7m zx^{)2gPa7@`2f?`elK9^=l48Gi7@O0v?l>*4ui!@Xp&G{1jpN0e<Bu1j$x@SvM&hx zrnOGhj61ZNb)ZA&i!RF7X(rB(jE&qP-8TR9{<On<V7~OaJJx5Z{NwHf{b1;ahIBrc zsT5)J65(+@K;@yBUPs+TeV%UD8&N65$Nh#hd6-y5p9kAAHRrlsZr95lt@CobOh3E< z=_C}?!Lg70k@k7;W>gM0$#7`7oczx3!n2N*Qs*qYS?gf^E5|XP%E~ZW>2L~Gig{In z<MDb!3TtbuCpvun{(eJ2)HT>p2ga|!Oee+PMk9b#$6-ZRP{^G8Gr|Z!`#f}ceavzO zCF#Zcfs-ey{95>Cr1DZs;n>-RVSFUkb=jfT1m?22vHWd-VlA<T+VBeCW3FXYQuJ#r zvC!Z3CR?~)U19}BWkIL#^u%T&89%E4we67_vW1YCC7Q)L0+x5Y9yfRWOlZx~&Y=k@ zmkDs^nG)kk(Qn3c{v0W;#`!&d4BBrL^E+kC?-<SR6ppud9~w;J{Pyolncw{}(s&Q! zdB+A!@dYu(?}QtH^(tZ&QuMmS6y+sjV2YHRS5BE^#)Aq8*|x~t5>Q%YXx_0AsgH=_ zi8!WJc@PAs>E_-i;&Ya9&SW|PC%2TJG3|8!Se$yxp`eTT?a*`h3xuQ$eRONRORh`# z2~3jZq;{s^OZY5{k>Jpi&wYNF;@fAC>mt=SoGN0mFFP8CL@x8&ya<U!`v?+#7;%-c zY6Y-r*8n&^F;;wZ%8FwsqqJYJx;|Lj`o{-bTQVoDPBURi<a1gHwAzv4MqJ<5KSvRP z4bPkWF0BLBcNZ*FcvCFDTYIY^Ct|Z}Jy7h9&(V#``oN#@0E3yIO02N!^Z2|jkFW4f znwRwfv=KK}`TvMjjt+g5!y6@N77GspmJP^h;M*!~mOWK8)b_~yYEu<j&e(48^17d< zt@K!Gy;fJ2FGy=X?MXbp8_=);;3IElO|;%Ic?sopV?ElNOD3iKWHq*k?ccQR4VU9X zTyQkr>Gp0v>A@v`;w&yXn&SxYk#zvTa0|jPk6`HdjO33GJZix3Oag{kpACTFLw_aQ zSOkv|H2@6Pvx}mI88EC)!0dK`9qA9)+X%8lVl3^xIJk;`k_Ik77}^&rGA)Y!rSLhG zfDdem#LVR*@tJ=)KJ&-+(#-Env7@>UxA{bvd#^EfH5Gr1si)6;BSkfa^T2D_gy-M7 zfoB2Qv*f4F*@$PB3)hJ5nq$y~BmtVLyXNYydAe(USN5wK5`EG-`jDIHL#d+=bq;;N zp1}{hL>~^0SJq%c0OW^aCAq95S5U2#KWchz%+K!44UGbz4`*iPc97S7=OFfs;YCi# z-rJdA%J8?^`()a0N5*ek?*nPS?Y#|Yzom@dj$VJ-Z#m<)((B5oe`UsauFR;PoiU#5 zjQ0L^HvT(9o^e1!dB(2~CFl{+-n$v~GvV<<Mt@Ic%>S{B`95$?co2W`Pc46!3vFZC z;=bwRkIuH%^xkkdl?F5L&t|X`27{ry3SUA*)GH?;%KCHlN;jZq94`e@&cBgHRYD)K zLLbWBsnp2ksprDKc40HsRU$%5mB>g?b!5cb56MKs!4~NvRaDYPOyI8#sB{B=F&;pP z4e)odErdxhM@GsOn5}va3=a3Iy;FuK?ZE`RU&z3hCo|R~Wqo>;-hMf~zT8`zcrWPH zU!>Bj_Vd{5?Pb+6voN<3sW{-N!b})iyLGLGY+Km@>x=FJ_L*LBP!FI@oOUEw%Q|0H z$Q((pIBf*VENTn4OV)?mPV5@l?&iCGEMfwe9YnJTlxEhMRFhiQV>YY)$a1M(3Fw9V zBNzi_6xACK8YC^oWcmaziN?J}n~HC>>lNJkpEv^+I*3LfBiYS1G?zhT0dN7!y2?cO z{E9wyk&%wOOm+j{Zz*(F8OAJBvXC{(EZZm!%+7Elu84jUMQo!0C%!)D7A?TDfJwk# zBiVGfw+gVPLiQK~G{TOQ@se<-qRq1FW!$><KhPE2caT*a&;vGv;~WCwAofm@$!KSN zKr*9Ajf~bU(9ay~hhlgQR!QiqC|<csNf&eBmJxyRgO{`N(}BqH(*$Zyz2fFJB^C?t zUyUSAet{v_uMueuQ_q*>H{$s+t2c4Jc$nD__&=%`%7vCbXQoWKM$CtWRV2z!(Jv~7 zdnCr)Aoob%ILu_EPmlZ*>;^68RjnJv)ono~F#&i8$GyzV9#$^Lwy){9o%*`IttK_b zx4?f_#{QU`f$wceeD|CS+pAG+bBVA68-(GhSK{WUtKi<GY*H=9LzkapWfaqTQ#P(6 zFj*C9WCdV#wq7ZT_#~`K*8Ot8z&U-XECK_fY3zA8tyK9q%fS?-i{VyiZVO${a$qDm zMtX5}lhARYR19D_#$UJdM&jAy=9n^>W5(s=0OIku*64gli9FmK%|Ap64#EOYQ5(8K zh=*w3qZ~^B^Zq_(TJ)jZtO2$?n61#T?IA^r5>$$7Y{8tOw%%R}IERODcq3X*IDPs$ zXK5Ds7ps)aD$o2n+K)jkYs-(!6abKoDity89GV<j#l~SARLw1gf@~B9L&apfcd>D9 zda8tKUW&y`rrP34IaI~A*B1Lngl4l*Yk`Ruxg$}I;St#)(QI=HJiAdMbGfgXO~Pb> z%3y!7aqEO!!N&S|b8{>f&1H``(bA3_60I**j__Jv^dk&o<AS8w(@t5}9u(pnyNDo5 za!WRzG@+f%l;F}#;m4rl_k}bRLmlS=&#xrhMN27QpUntDRrkh?B2tN{ZlS15qlJS! zD&KbtfAd_w?oz}ZSGO9@6wK?&N1YXFa;S?rHnS*fNnDl!b&TicjBqB7l<)Rdk)Ja@ zLVS#8HHLEQ2wGurLnF{><l&R(UFkD$yUR#inW2l%6=_z#`gN4ZU@p)B_hFx0#da69 z70*<H!-{7@+Z3yx2Vs&J2Sn)6!YgbhKs#&muSLj0r`g)F&M=^1X18J8xWXR(yBS@K ztgRSSp3SsH3RYPTSq??!=1HW`m`hSPv~S7N%po_cvavbWpl&Re6<Xe5V=bG)C#5Ae zmZfEft`GNO5YF%hAjhSpeXx-{YqD?13SAmLX>M?>ahY$JfhvxZSq;T&Dzk35B`bIx z98P)4t>HsTORVt+6jWlSBC@pPi9aH?iio%@qZ%6nl-X9XIS=7hEPxl71m1X=jPDba z*N-%1q5E|_lCn@g*HAv;;$d(6B1;Wfac1t9*28x`8Er*I;bVQY_=Mq)AX3PK0n}<z z^BvgZKHKOnVmNNQJ))s%JQnP!`3tBu3J@$858I3#k4xzoEkqI>=94^g3^wZ=<c~xA z@vvJ8V%s-3lltz~V=4OX7AaHTePPNE?z=%qPkw->wEHz_&=5zxukbVxA-cXqn#$QW z{y*=-)N<VXsD&zqn@Uk&URmhjABZPKXd@y-<|RU`?k@yBFXPru``Mtz9sXrMX8GzE zsBdaVv7l2gpVL($cr&1f-Bb1QxqA6Ly?j3MPhF;0Z-PmeNbBfBZl({Vjy}{m^kK8p zhh3r%2M3tx<++3Vive>McT|^RADs8SeE#?5%y9e$|MBj5>0L(#J**7iPy8ADPVG7A z15v&<gCCll(SG)M>)SKltG(}@JzsrC#(Utu&YrKnz4w8P@-Ljtp#RTi@TW<Bu^m>L zIHwZgoDf?IUnbtkJ;`5myjEYFtGnHRKXJq{utx4OEt*DH<E9VUK_5z=z?!``A%fTj z@Gt547S4qqwhQ2g?Y#Jr$=^yD_#tQTuW9QG{1K*=OK&fQegyu@Zp!4pYE$`LzW!j! zIWf$Xc20=+k~WmcsYW#CmCoGj+gio7qPCWjepqpPya9g||1FF>|MT{<S>ZSAmgAP= ztZPAjC;I=!t%?l)s$)aa|H`adWsORz{<kI8AoRbMbp7wGqyUzq`$_vNYbSy>R&8T3 z(*M4nq5oZDG7YZ%-7Neg;84H6PnOUmvu^RR!F?m7!F(fBiM%54?@#P#LcBxw9ngKJ z^@_c^Z<p>f)n|Fpt;-x6mnU*Lh7Q8*rf^?95*NK6pt?BVkBxI0hE$;u{DykNJRhIu zjuBoBeL&lf;Fsg8Um33)!s&aKS#RW8*U~G5*MP8&e{uyH`yb#x{SGi>6h9eLs~E=o zS^TOuVljZQIqpz{U)Ed4BE1jXXf*(o3vY-V(&$9L5pV~p0F;*4xC0_SYYzYZT|huO zn2&^M$_&=xKqypTl;Mh9{8tBXelW_-=;`B=ihah&6d2h6jZ6fgTeOAm%O{h3Ntoo* z6%H%%RB}Z;DGoHU5kRkvj67aMN(so_dL)ogwUH;nBYF9yXUU^oPCCY@DF&1OX#4KW z=3hB;zUDXI-#2GODu+=Hzp9G%pq6;y2$3Xy{s`hVRSY7IWU>+8+M#_8jBhs3q?fQt z$>S!<n?L&&I@ikKPFd>+eT*qaZ9*Tq4U=YIE?dkm&%U0@BILO#k6oNi07QECPC%q< z;><$GK}qEAT}}q6D$n~xJe&NN;`!+@>@Toobu!wK^FSTxieZ4ZDiQQlI~*Ji%u*?o zi8dHt+>y1;>!JM1Xv1DNGK<^=A0aB5kNXz20NkJG``9w0?`MA=_qo9pfo==35`HN! zU187%YfJGdG*&t>i!Ai<r@QV?(}=yXd-wxylKJ}QD`!IsI2Lc+x@ktLAbwZ;<wUfv z1>o1UP7@Xx1z5oAE?(yh!sB2LZ-T{*4&(2gp$H#1&^hseT7Hhn=AnhTBTzMqdfCgb zMlJx?JBa~&#r;SzBBAD{sIT>RdHBcBo^kQ;XTCe|eOJo+J>h}xf1P{}_<Q=;Ai@Dc zVOyMW)q_s8Xpdf_ph+K~mR@7iYwT!%K?I#%Q&OwD3hO0cS#vEw4)WXA#x=K+J_WtI z^&EYHsxPqV3+(y=2W42XrR9P%>`D2G=7HlqaXK+x!#-|V9USVY>PAL6a%(A{^d9;1 z;3MR>7Q}6hg}Op6YO9aAGn`M^Rv5IzFZ~b~B7TvF`&2SS^ap%!(_My9ASlxpW@q8= zT!HqQRjkG?0yP9Btt~i=zXp%BQ@01N39oX>Y*y})VQiHewS>E13T3tcT3~MB9p53t z%xuJh=onUMXXACiHFQ@XmU;|vSvN}yYREdO+KAqeKAxKN@stfdo{2*lPtiX&9>ZV! z_z>htYSD3R-vzb(i}WJBQPo4I`BiHK&U6Mxp<I!5^HqPteG~4E>1C&3aVN%Hxn@@` z%9O^l5miEQ-x3pwdq+ZX|3f=oM2+hC758cOWhMW*`P`A1Pe9L{&$T>lK9gf8q$GP6 zv&%MMS{Gx~-mFNaf-xjuUW+do!n|NI-%go~e_;N4+RYed*I}fOa7QZTuIz3&!}#w$ zi*G*Sg%kG5J+xsH>D`mzat!^Hg!(Bdsh?8Lsh`4TS~kV?2MSrg0U0jbv5N~s`NfN+ z(3SC6zh8=n4aO@|*3AitP$%XCrntW<>3}e>AlV1A!!>D(JXClH02p?#DU5Lf1UnE) z7-AXz@yFh!OFIo99ZCK?HJ`>uN6)6x$1t8B|5NL;7uRRv=l}5fkUj=j3Mrva{8z&t zW#k0^+#Q3$e@OEc6C5i1C+|8J{Kb3~R-&ZpPZh*ZC5fL?&#OPZu)gWs{8onk;Fl$+ zKgijhrk|7s@b@YD$)U)z@}5k}vmEf9*Y+Y_;A50$;paat&!UDR(E;)-Y%MO&Dtt02 z&!X~&c)a8P2YJ@6Gb#J!`6FjD<XI8dB6nBz!V*G{0{V~-6SAQBWSg*2M`Qd+=sA)h z)0%%MrS03&+fMS^$_4m!<pTV=a$bJ@yz5QxAIo@uetAwBzuqU)a*AN>&ir;1`T9@n zg1cOz)Z`dkio5P1vA2Z&7KojCHc(`hsPS+jV-Ei%tvi?nV4EwXzs!UJSy`lM#)c71 z3UC1@;hzGJm$JNg_)5xoktY%}bewBE>7!YH_y5*t&OVwx8pEG0#iPgn_p|5p=s~1_ z^QwC&=M_J+lF}JgD#ARuKBiB%bxkL)BINNLt<xn!eEygBh|nMWcozO4sLTpu((~+R zr&Bn(6n~Jx?4Lh9n`!^t>Qd2mU~;3$G)R0aZ2v3N{`$=J@ti^$c|#yQ$PI?Li7Yoi zv_>vz-V{2S-{tngZu)eWFz6dlpFFBkAc~YVv>92RRm<dXTUIUHImhz5w)ayrFYZY+ zBm50Ju_XB))iRZe?=Xt{`5G*o=+Q&jOHknoI78%9j^T7dU6#^W23?dA)YDSE8}>_q z*tkN9dRKrx@tFCO^~c`k-@GptbN>tvk9u?cx7<8@*f3iE8Xl1KCXX<E-Mo&-=J9OQ zq-W{SQ`k7<mA$d;<cJxFy)CSVjPahUzn@KcmMr(PNqdFFHuT{Zee?^j@V1q9zGZoW z8>%<ef6K%B$TB~(m-P5CGV)01&~Pz}vFtQkcamyF7bK(Pl07_X&h4xcJqow-mr-Z$ zSG+vG&)6!8NHV6HlIxrB07<NeN}U1&C=*RVXT2A_1>ODtpWKK0(jJjsT#&IOu;2QJ zvft_@p3@YM>m%uf#8YOot%-a!9WP?aIlG7hWM(eAUV_Ggx{1EZT`o$6F~~+t59sv| zjAvQn`Np%<7*EO7|NLMQ{7L?ap~ydn$e{!i9Ln=6F(DzEqg3>vlu_Fn9LdUnl6wK^ z%)@chljFfW=0js?bCnlO77{#{lHj?ND~HH)iTT|AubfX^Vm=?OILCY*IGR46Ym@Wo za^)H%^dQsv@PgA4^I3gjDEuSYSDbe)bw9){W}zyLYTV#r^ooSRMerKfq2-_AQ9h6$ zO42?Osico5CtMnHDM&}f#z~lDTm)_QDf$DC;M^+*TimG$DD+-6bcPz`p((&f6DO%D z8%RO5K!E2pphT`dmbgbFvlOp!jp`no8~t8dJraMk$GAk*WdA9*=pgsq(!uXjv0m?= z7(%?Z`U3vQeF*uYJ%~~vbV<-doDl2tU@@yu$csP*(n0sj%xBZHX(Cl{8BQ11(rq?x ztv+4iFTn8El-XNdd95{958_IOs_u$D4`2T`akKBKs^a%AF$sS0sWT~qElq)Exfp8w z*t)jqBHS^YK1313z2`g8<&00+P7xl70>fysa|x@)o`}Wj<a?+h#qrNWVDS-4(ntvC ze`Nm!*7KxJB00HhmIw#GwJT>AHuXeQ7-Do~FPcucT1X%A(Gs*^RMHt)yRi$q&cDe2 z3;ZkcXvDwX(J?6hs`a1uKEUL{U1pqc<X)M0m3WG=>Cy%HlLSZmrvrm?v;*>UK6)@y zo>14H8k{X{g$j%nn(HhnilIR_DjzoBa^ZRtieg~6#c?W4+XiG;CsJt?SHrr4231-g z3!rI@0}7Y$H@CsVpmQobM2)^c^d_4d#i@RYzqN%NqVnV=qbQySKlq_BV5Heo7q*~d z^H9e>2gi>cw#CO`$2dmD1PUpLJNIm%h#jRg!AUSF%6~oR#K!lWcMdt3bI3jK98&*z z$ht^!no<Irs_`7(jzG%Om1Ov5XXNB=BL@upGfDix;(1;mp7^Do5l@5k-fbQK3+>;M z)_xlOcrA;iuuc;`I2-qlOegg#rEsSM=*qVj)O5r(V7laF$ot7!d(aIRQWcx0`q*6( zW_}K^<%(V>vAblwPG)z(cZJ=h>UFB_k@S0IcCSspPtk8vncJo>wy}Hda1$`MeSyB% zUQ?}m?6)(;S+toSw#H(&W!?by_toX3>dO}9kiX^f9P+SymcIA{MVsm?YW20wei;92 zWHl12E13a1SUl1fQGWV6^gof~oc<~~YH|}`e!X0@qpm;{#Uloa>@rc2odk<VoNwUa z`p#Ailov4CL$qD%d`c8=6UASp;?2%yvG`+e;#r(U3aiD#Os0UBf29B(ofZM4Rs%&4 zzy$Zr@Z}n;FsuM04x_&)lGPYM8xt!zU|i_4h|zV(CN~~wn|=M46o17B9b#ZD_-Ga% zt>R;?_;^TsJR&}RC_dH+25S;VI*0#L;eQE*3%jb$B*ur?2HZkhxYoIR7zUVwe?ETc zVx*9rzSz4Meh}t{U_7zQ8(CM1Rq9MLNMpG$8N8+4L>focUB@Y17eWxdVLe8yki*&u zYh<0U6I8XXr19P><bl7=iFs?6pvU7Alt=W={Q_rq{F%1+v-BRI|D3T{Pl#GQqE<7l zikn|&)Y=5E&{G%c^-zViQ~>I478M?G9;Ixcrv1kG(7QWJjE!s+9bV%1>e1x)4sRVM zf;HS#X&z6c&coo)GUm}tBXsk}_ZcG^bRKIn=J5y()64HNYPA^?Fb0lj_o}FXv$KA; z6j{EtG#3w_v@brFQ8<^5h&%0e*Z_xU6|4$IUFBQf6lnekVYSyla{lX07%&ohXr_VU z`CMYmWob^tn3M=`gVB@V3N0kXD>Oj)UrCxnPQ-ZN)|&~8xFb<>PH;pr2Jd{#W@M-I zMVMoz+%R6(PBdznkcGAparmV#Q$pAEL|KdPhw*#X%SdAOVu*XVDKR>aOh*H3***a~ zZoqCAWi(_o#<lc|fBo+w!oT6>jGM4nRIq;U2>gvNYhN5acM+_+_X=23Q2)%19-%_1 zQy7RB-`i{81ymjqO8EE2QQ}YMK?xe7K!>l23hOOs=e^b$%ppf&R97z^f$C~JZa1i= zXm;esbXCuH&S#69Zp4aaI{e&mtoXx50PuOyX;n9%lezBnbUI$?(V}i5L2UJAk?{nc zAHe5F4-w`i8lTh^i@iob4my|9wY|{I@7g24E1-p!J0M%JfYcy(I7Iv-lp`b@1n;bC zKNAF39@_vU$U_6^4`X6~>=wCv4Ik~I9c&{e0$7Oo(hRyLI0&qKnBs*ubQAru93Z`r zZ4954mtrQrg)rElCkc}$R#3in>!TeQu6ekR-}V=RNAsRwVfa;of}FW4VJqW#izeJt z@OFXfEpHleg)#e{O=}it{oS!=0pd8)-pkL#Vt*#sKO0AIu}R$g<K0OF-}DO2Yh5~) zuT5gPag-N7n|X@=Y`1ZW>+1$Rz@N=Lz!&e1AK=f516=Hb-W$G%#b9QWaAxNKKs@f& z93TPA07<;o`QM&5(k!P8Gk%`D`F!#`dF}b+dGbHcW8mN3?$c@Zs^Px8WJXWS$2JMt zEh*YTrigPX7u8hc;s{hhXD<Agw0Et|JJ8aL?GCX1{9RPerV)aridW<Gt%LhJq3`4C zDSPHhX8{p{OC?G(T_U+X{H?|DEcSL+L~3Y1Acfb9%$lq5BlKo;bVO;u44nT(nKmy@ zD-;^tm4nm;I=Ez;vQ~$?r0^o3l&mdiCrBMGxE=N&+7<DS-iu>^RD%+JI5@tMO%&$_ zyNQJRoftXfD~V^D2gKJ0+O{JAdm)9M$N8er(KtUUo&1{{F)c=HoIDoxa+57k6(=fI z-WI7TsjBNodg9`GQy?Yk*p18rAaKH6?JxD#_05Po=}cfFBmQ!4-QF2kkeSibiK5++ z!M_sj?DNMHd}azje5^0r=Zu^Em7Qi4N|m35faXPc&fZ}n)9n?kJu=UjPg3690dw(0 zDsB7+ZwQC48_*Q1D|rggD&vd;k;+1TFO)LEH<sK8fS=X`$9i;p!~vH!4^9D$eWTt| z6>#&XrU5qWVclJ2{UleZKH6G+Fmj(6`(HC=dh?FZ$^2~|HyZqnYLCT=Yt+#AaAUv9 z$__5IM9L1rmgvFwo-UQS)VkFZ6RD}Sj^K)LQvteTSK6bNNTof}G&kUh^$6T5kJR+H z><JEwRAMTyO)N*mtdn9r&26C(*j>&4VEjWY6Yi8zVg+UJu0!xPw*~hC#3=SU3<j7G z7zuyu9f3||d!tU2SPKh5ETGq58Q(!KUn0to8Cc|7Jt$(SI9;@bzit7TWXP;2iOB{( za*K3-rQ#QGFJe!H+nwCff!jGVz1-${^Giox$Wl9pQ6g{tlaEuKB?rDgl=<FBCa%^G zt1F)gfaSlvo1%ZfE|N?}EovcnmA~H1Z~WK@%yUsj!;gF{te9k=Hu?8H7S2jW{O}9O zZ-hL~r4+@Gv4%4)p$quk$A&K8@|^<g*>1f_(VH-+03T^Q%aqr2WcaUOdOZyAc%%~@ z;>h?HHDj2fT0}^I-n?$irs?K~?t>2RRwIq4G3?2i;5e3(8tw$MVV?;_!!GqSnI~b; zf=ab3hlD>aWtpV4Hw@<!&zvQ>6C171l5{KXQ_57W82;55uN^f;z1QxE#pugpJVk$> ze7`^b-qjm_5Ad9KDpekr=I#YNSX?G{|0+lM!_MJL=G0$QbiD5L45Ba`D7CPPqrDJ~ z<xKp?e>RdsV*F2dypZ4bVNx(R3HiDyB$&ImhUkhQn`MWSZ!re^_Pcoj%GfwOdj+Xs z^8$x<IHV$TJ<G1=v0Lr>U2^n_)hnHgOu<q5M0lzdhQ{i7(b4+dGX7dDhb+j2`=r(1 z$-@BI?3lF$FX(uLHk6oYBSIeLm9a$VlGfYuTK^4+pj)KQ>3K+iFOhnGgLnA7a%coQ z;%D1<XNXd`w9d<8m8ezkoRLSqYvqy$-uA=W=n6KL+8aMud(mp`x_Db}o};Z2XijEh zbT|B2{hg~#Fpn7$b4$8MVgb80LkbPkZ;_&-G4fwlNYY0{E&468Zl+*A((3#2FhGE{ zc>?l20XrN^*aPNywgUKcyfWvdI%{FxJ2h_q_E!JDPJdB{R7XOEam6>!p~6`DNxBN- zrbuPblPb>FA0WPXP~*6yM&tQu=a=Q9JG2j-dY}s%bJ>ByoTP1BHk?&DEZtf!?5>`Z zu)E+XzMSuz%En{D0j(omWH%J~Ef&FdO?KvTu<@2ID3h!8Hw@zs<13^?vf&y;HUBWa z3LkCE?=mc-b5Sd*l{)S4Y9YRAa<Gp4jcDNrU0V9JE@);pzQ{I8=0eFE;6eVWV&J=$ z-hti1Shi^=q2!mbq)2Q5omP2$NFZZCD(>kcd0|1(q3|0H?VX12K&6MYEy3|In3>C7 z?6NJh=y%)0z2*>oeqs*2uU9&vUYvQ8!x%|>e|$pN3$|Y6r4U-8ePAD;^_EQymjWar zH&e#bFvk{M)bihTm!s%V+KBJL7ALcPD4Nxdg}%&d;6YIvT%b3jO@+-;Znu1)om@6f zI~E+lCP&dfsyq4t;98S?=`dc{Pp4mjzFb0oIXhskJsH#$^_!{4Tb^-#%{R`k-Q;jt z>I|-4ezhq$r+xw)V(LsflQ1LZ6yp$^1c#W@#NS;{hnO7?u_^Glj{j*Nimw(^g(-N5 zO-0iK{_JgJ5WbjkKDGig%a~T*2kj4IjdFAX^U1i8gAzLl+ZOs}%jJk$);5Oj#E^$9 zBmvl#No=OQxDI#saw$5pcp_}=n_z1<$?SG}aeinVMMsoaXLNXgZ=Edyky<D)^gMg< zx8=}sDv-lE^_g<?+X24DC<DK$_307}Ntd-UIfSWsE}?!Gi+=T+ScR;QfKlQ>GuvK# z7Y<@N9x)YC@zpR6GmK-p48P!viB#l;+w!#bpuFaiHEOH9b<7{lQ>yc<Eioa`wlR-g z`wkpHc-T%^053kINWofv=uYO6S1*UN(FRA7ztfdx;-ST4wvY92K|&2oo$_yaA(^>l z_zZqie1^s|70yz3X9-k!I9X+lKd;rD*IJXuN@PE@$*+WW(FW?{qC_A6juo;KU0h_e zd70?yVr-O6x3jaXLDH5>)|Ocqyze^kc03eL^xS<<yrE>rChGSrylGvK7jAT-P`Luw zgU+`M)~>6Jc%H5@Qe63Jb)U+gev9@l9L^3>v^PlQ`V5SLwg@?0%sq#P`5Zvnw1awX z3Wb-@2Y&OzLG53BWJ|KT>1tDe^|G^}QZ`F=vn~7}axzUo8%{$fMi}Uq5(9OKfeO8` zzgG9F+$3HSwwwsQigBLe_C0f*lJMbWGi@*Ve7<q{-P)V5O^asWLBG8>d{SOIjB+@_ zM%1=19rGF$I-+$h%Vyhk3@5$RZrM<8a${6`zWEk_?QBdG=s<s|$kc3T*V1Nbi`Yiz zZ?Lqt_h$jAW8~?J6chu{6pz;v;P3b-+6|dhVWya#Wi!}Jwf$^XM0uXdPQAM2cmt4q z9v^?&N2EqBmItCG|4mBvrxvw+{tTS_ww4_Ycd$3vnW!H|5}7Je0(L>q(3y&3aeLf8 zzR>7!riyhUN>2U}%VF$KGWyGd{uC-&Y!rpQ;G~qOpP6VKGu+L8wMkH!00?uHZ9$Fx zZB=*&OQwYV3F<?bL`H@-%BhTYCwM5kJzoCuGq}GUiFmgu`i)DFyR_E>-&h62?wCKK z+ZQS_4&9!}m?!T0>rM_OzZY!BMx|(v&=ec=lXj|Mp&n9_dgIFg?dxMzMQw3!1ii*) zcp^Lm+|aEsf>zWs%h5Lyu4$LBYFj)%3VVy^?T!!h2x*D~bI<Lc7Vevxls8NvY%j;@ zyP1`8>lU@u9Vmg<hbUtyGY2rE0UXzJa)chFTtqRy%S<951tVNw(gT}_ah?l|@my3X zA~&1LKWSSGeir2slX&OzLW<`RVls-}h>0D5>q9o<ds`{Iq@CSuXPAFU()PiXe&><1 zDCBZz$3&z{jLLr<>R~G3g|-w^1(w3M;@41zA!0}~D-ehQxHt=9J4n$Nc@U{4_B#qY z_UY>4yA`-#M`Oe2_&|{c_+6sRPuGevT8#>2J~?cV4U<V0=<{MM(?TG)Ct!MF=thQX zHDL5|m1yC$crQ)Z%TtGm2+B>F(W8gyYIXvPb*a0GJgX>T!N(ZqwL9Fqns50m7P}pI zzY-bF5E7x}dic*f#TJm9aQYZ(Pxve}8CkD$(|o4kzAf5Z)W)}y;rUdIWHF(4OWYwA zkon$|L$Gg(RH7u(hB+Ge`XhLg+<^?6IX!Y}Iq3!`xp{13LN{10PRCM1H#ms|1Pb%p zy?pn^gyCX=D3xaz3)%;_<`(?x(8lXXm|ofG>`v${zq#?8ddq>m4#obfUg9ePXf=x7 z9qmc$FTGOHD^<PHHqfxEBgqdt@X*Qg!EIA!_XBN#cMt1%j&`0CMSHC<4{OVdB0>YJ zva@bH?G5LgTnadCr>p61ln!D>L>GpZc40_(hqi5L7CXt_)6Oi(V(*X^0}9N>V0p78 zIJhsaWtY@y_K+O|Pq$?uQF{o+Gf6wMbV9g07X4B!d#hHHC$xnRoDH{`gCF9{Xiia^ zcE<W>8yp4e(3RKLjC$tDQ44F3as1ZiJCTio3DEsgVPc=LlbAgRX;>)hgSoOo;6^0v zWN<i-9HPxdmM7Y~p=+wV^=1!Tx{n`5yU=d(Jt|-~OF+Kj4c}QJn{US>TsHBQbtL)D zgSk4xE9^3>vPCKtnBq*F;!MfQJT|wt-o&fQC>!ZmBc6q=%I%>H!_gmL@K$}w0(~*G z4^5klrU&8wFaL|d|7U-e9#5xxNcX`JIQ0QnZuJd<D;VHtg_^%Y(JM~3$FdTr1MsQ4 zA6dL<aD>G6#A0xD@0x+8go^G`Bhq@^WrMpBE<n6b^s>I<nRwV}eE`uFinapJu8H`= zrF53T)~^88UiNsIuP;(5d)(dt|IIJS789j;or8r`VilbK?Hv@R0u)bIm`sD%BbvS# zO8hLC{{hydw8TO{HbqBJ-cq0vSP$94S)2ci`o&6>wbSF*ankwy+9@E8vSH$u4z0%; zMkOD6b9=9Nds6#isbXY`gDFLaS+?uGK8&OYkYGLaCNF<xI_CUR@|zTdxs1`dDo(Qs zn+Kp=6|t@NvaNa<*Bkfp>F>k@m~7A%&<#En{woM30D;Hr?kdB?IVOJJFR&ac+Ea^0 zl*?HokN9Qy_MpctG87)9^Rk>OAlaDT-F}i>+jqwqcQmy1t6seIJUgkFn{Q|n=X*t8 z#P(oBdR+J0V0H8+W#ICtCRTkge9DYTQ5*L*jfyC*!DtWoxwI40)-;WWp+%&NBgzB# zIAVLv%RhM=lgZSGK4?*|nnQ8|8l3i)HB2{Wg^dl@D{R1(kBs|`pe(@;1l~`GUQ=>B zIBX+-A`c%YsIZ=VfEj}Ki>&;=R6zmEzsNs=PR&g!Yk<Q*iImyg`6v9Ic-3x9V^L-c zzo8_cVr_nol(|MEp26l_22CAc9wIO;J-Aes4Q{TyZD6W*wg_5k(#zCTM}O7?0HGNK z*#7)ofhwB9FhtQZ8~^jMSS)~Bp-icA^J%Z+zyR#F2&}NB+vDaA8Y?b-as`uj?I7bE zXpbm-feeyV1&Z{CdvON}V_&krc9aBA+K^Lk=9|&-w#g2A#=@FxfI_#1r@mwgsr3ra z@xToID)Oq*%LsaDJq*Sc&$|uN#eAMOQ+807LvOM#s2R*YJiWj9qCZQM1GcBuwJa;Y zA39C+`F(drpHtVvDQ+V#Ct0_mxGf+7SE<j!J_qS=sPqPfGc0N=+M!n#=&n5As_c4Y zdC?}_Rf=*UBqVg#9YB>J6_Uk${ewAGbWnfOzZk0hDJBJAw@OF|1TZ8So28&#;;nEH ztHLVP7MW%98rGa$(}`|y*XkaLAAAy11Y(iG$gIN5BB;R=GzJuX35v2=b9C1ncB@;j zbhE%*-9MMjny0(wv0LZsmGjvwB(Cgcm|;TNEupk~VL;5-k;TI&hhzbZyrz#9Sq;G1 z%ewQoooGkIg)?|h^s6L;8~ryDS>>k4;7)x+#HurYfBUH{Cc;3Wb}|<e)1W_vgc;_V z6s-v_m@OZXgz8f?b7(mpx|qNE5lW~cQy<rstIIB;m_3uD*(^KShf*m8PV^srM5M2S zq*8jGVBui549$O_;WObspd7=Q=WmTj4;qdHB!0!|+L@hYQ@$7?Gx~wdxDxw>2gN{z zhiXyz$ZC>;$KgCX`93e?LKkR{gzhOEeJtWO`-ZK4+;ks1!aNwTTriJvNmq?%R0e+r zoo8!6n?UowJ}8<;CP0HOf?p!t?4>uvVpRc=m|-hlghE0n6zv3nVxxLtjXqCGgt!v- z?HymFsT|II-|iJ6S4$Ty^jC2NKmjDz`67G*M}HS<RN)##>1+jOyYhGI)d%&mop>9p zu~4>CVqUjd!<eQG*w6fvg1>8tHH<`Nx%3q9s?j4*Td(L#$>$Po?1KZtVSND2-~il~ zx3#~(NPhew^m~)u*sWJ@hO_MozUITEOw*@Y%I%T)7sa&Q%f<l!N3dy84As{ieZMHC zEkL2>?O5N}9jQ2g0aB_D@}t*cZeKjg@FW|K@@@Xmr{_F7-<mzx*{QOTI#7^wZqCMY zb3G|hT#l>D`r!QRy*4He$M>`^U=HtnfLO0LwgJk2nQ!_aa{`WwY5d1w{MiYiY@0R@ z$Nys}tyhbh52n`SSaa${D9#;Fb2--hckHz@#jX>hT}n_6znk>N&3Z*Q>t~<G<qe_D z)@B!6Z)_jHA(vkf@66+{xb50!ONMbPJR&IP7*PJOsI7RhZJ8A}4m`w$_vO#CrTi>W zkv<s1q#vf=Gp^`^Y(Ij0Ps4w}svCg%-TTO2>tzSv;w(qCvfg-*cT7fc?*ZlmdJNXF zTla0|*G|O5m|OV?IL&8AU&K_*jXSj_$5I6zE@_U%;QNxJbiFT~iO~<^h&=~;s8Ct9 zCsNU)m-Xn4JNbW1CaQv|tXyJ^Kx6LIeQz+g%z)af=!RkJf-d#OU3&FiKA8riQtieb zy?Q5i;uGIqO8mUDDgfj~kK5yol)dWaI?`zs9Jqv(@<+c;sF9rXO9yagaW<KH3hhD) za~l>a>q#@!g$_bH;mJh|Xs*4?6lr`T;P-lZbxgKdv6p`0%EF@tu@jMI()L@!SHPG2 zQ?LO?BRLBYD(uHS_^Ck;i~U(#-DeH&6nhT`C$^sh2X_+#8o7d7+JQn!?8IDdI*@_L zmcI<xhablG;oJL-efX;Gdle9xFDe+g4`tLzHaRSK6b(XCOe-IZrog>u#k~mh#7v|o zfY6O^M{`+U?^ncLOsYxB_or^h8}?^zs`G6}Wq)!zno?^XywG;svG4rbu}!ad6}MyD z9!?7ZZTo^bu^%7aH()=m+V`*Ak8$p(#$MdmxAfad9I)>byRsY5Aiv8}b`Un91@=bu zW;egG2vNM7!3L>#l@_;+KYWeYoNoe&94qUK{x*Gk{-QB;d+wYjwr7X73%dI4UvYcF zUhv>X4<V}Yj_XslXQ-Q1Z`OU!(e{J`;ZJVdS-$mph&I;`ux!P_l-e!$#0Nv)%(k7_ z?V-)QOE25Y7txEIu*+ccz^>f|yS56pt>4Y>?IFQ$Alb?^8bf#L>cNz00Vk97Np>Xk z9Bf8l1%j(71Iz^}e7KxjhfHr$6q<A?RDdMEkFA5=x?rdz#Ug@(Uw>>U1fQS}Hl@-B zlM>cPeFGwng;drk7wsu((?gp9C|zZo<h<1fYvK0St51`Vx={(%>7h6DP#Z@3LYZ}a zEFnG9Yiv~!Uk^&pkXG9JV_=|&=`(Xv56PvWX_!lNJ+5-&=9Iizi#MdptslP;O?x=X z>B@Gx`73{jJ6WUyy`ryZ3%B42_EB{Q(0fSkRbm2y5ZXJ*C{{qV2QYf<z5MOKhiW}b zuS1bf8Zl}2Ag}JOHwXAre;{fy+$HHvDgqUi3EDP5+@pUX%Gd@M3u%dMIK`)rihPN( z;U7LEc_ivG&J%R#S3eTjWxZm>$zO<<d_JhBc$&qLC*iPrIfk}C+Zmh}aH=!58n!x1 zpF2yao9!Odb(dGsdkMWgDBh8vpB)sa4{p~2OqSv>Yi|KO4(>i1%Lmpln|#Cq$lmk% zW0bW)#3@@kk5V!en6)iX{COyj_YUd&JIF2okAt7$<7`ZfWTPmv^PP77r-?D4HlIss zX4Mz>;fEfU?~lc*6J2E31Ck2EhS@8~uZ3;R-?sky&YK@T(QARVm)M4Oez|2sMA=B3 zLbqj;WfS{r{%-AT(3bxx(5Ig|{1Ig$pSuN)uM?reA}LZw3jc&6%z`Rk(V?O?KPpA+ z=o??^EHo4%1u5QATT+ZJbNT!0NHjS`SP~=hL@H(e%=2UtStxvo9B#hzcLL4lJ5}wk zp(T9vF1!(NE^xzyhVjMl`~FpV94`MQcR-1`yoO4Mw_fqK2S&4W2E4t2m*Cqy+6sI- zX%`7rOW5nJLK|ZCl6of)531`#mpM!Hzu^Dx*@P&j7i`&tNb$vc$v!@X@5R3tT9plW zhe4rd$g3r#&?flKUThU+08_PN!15XSFtK<Ti$9rC{6|>)dstlCm`q2jQ!g-$f8+PP zmz>7`f$y-Prn(~!qEd$EoQ{cUjgC*qPodO3a2E6nL(JsldcT2`f~D6-AJNq?&8P9c zx<h0n7vW@KoZF#W2hU0w<MDT4WmYYgmkek3%#Y?k<&Pux%x~EfD&l+IO%~e*-{IjE zyc52N0l!K$=VAhuKndXe)Tk9|_dwVCBeT$KdMdlj$G(P!#o-P|>>cZi4>k)k@u_Z4 zy~!JU$IUD-Cx1&@BU-AI3V%k*w@6Dzwv6#9BAfx}B@~Vtqba(%mNLF;-%W?!CS=_S zSfm{)q1?d+6n6lvVno+XgQ6+=$E3YT>gA&N&k-MvIOEYwh5Oe-Iorv(k#tl%fUy)R z?H<1C8Nh<^UL)w0!CLbT&)|-bQ$xbR!DsJC(Z8M=g1o(sjNaeB(QuYdMgcXHuW-+Q zjbhBB->#kw#0cDB?ntGg`(-`}Xz4W-_SXMI<NVGCer5RQ59X-r>+^E!Gf8pkuE{Af z@}b(-^pb7OdXb9sLgqEg9?dkb@x3yrc}>M+q{h*}2F-W)<<|h*N3MQJ^fHXCkfWEe zDtYzG;z6dJO-E?CksOsRHB4>F?8WmErZ$%)O>L^}%%TATgzWKjs)oglBQI`oQ%!M( zif7B#mhVD=csaxHW=Vi=zbavPvk(n$fEU+h3cDLed>l#Bo7rf3Q$?mX753uW5~eq^ zrQ%DHrZ=<6^oHRg4#PjG_BVLd{Lwt+NBG>@vXF9k*wK=u*=tVNJ5G6Ayq;zj#yHlN zA5d0vdG&gHVG7w>fA~w%!*A()fS&M6=8&O{v6$khWb%~%#<w9WTG5Cun;E_+kH5K; zsjc+F4Na{UO-&R{tsyLIZKc0I#lO%B09Zh$zw{`|^QUIVV!b~_m>Ofcc)*xGnvEtn z#*jjeWUo%9is6JVH9AGrT*9X3%-L8h>SD<;y5#|byqek`WQ=NZh~I)TtprL$f^fUS zi#`yM_uc&MUn8fSwCE{ITJ-o#7c%L&u)W78M^o)RJR}~U>r_(f;6tit!wOHIpbCNp z_`mW9^06aD0DwbFv|SBclx4P`fdO7{WJVp4a#CyA{n0|MUC6~9Z%fGxRD$y%VAp`Q zYZJ@0FCDZtL2VrK?eYC(AC%pzyM4I3-2HKX(T9p=n}z|UrIr;X{GxK}VWF;BS4olg zo^zgezHm@%U4Fk|=6&Ah>pY+5dCoci(>vyLG`={nkGSd~(^0O}SIdq?a1Ki<*F0I2 zESgnv>#{3QiyUH+J4xVr@H{p@!|GB>3S_6mH=aOseo7R?ru6SM3ck)mfR^Uqc>kE4 zti2LOfD_o|&u{~qsmwF-lRfCI<iGwTl#Ko=q7L~!syZ71=0fz7YcgNZpI1Nm^oHU3 z$sccvsh@o4>R9^8vrk<#{p6iA{4^D1G)_bNg`j?N0qQ4<7`{0Xn#e1Pg!V8^5KV#j zK{4(_`p7L1rx$fM*my0A+NtYk0*KKpbdy($RHUBl4XY<VaLxjvl$6D?dx3h&I|S9J zs%#FcDvQ$2tF0W|KQ}}Ui3R64AHo6sTiM<SCk(mv8Q?4uWP5YpWL9Fy>WIN*!%J3Y zMoSe7-d<Ij*}kk2V~mJ9Zg?ysIjh5VU}*yX`D=K%Z;o%bb(s8r#%1=<p})UM5k9ef zjN;v9;kl@}FCqSIxwzTZf#Tg})`6aAvoj!dg)ytr$g~>u#lMdQeUh_#Pv6w|PgrRq zihb>yWc#37F?17U#apsk731o1I9<pUO=KTIlHW$y%^TgUv?(n4-9nPzO(gk6eFRpz zg*nXepOW~2a?9GM7$1&ID-K{n0=$VNoL)>=NfO|FQO)u8p5CePZ=*!`hrkiv6iSV= z-C=fm_^RE=CK+A)#plEc&fct8#5v|5vu{z18x+eKdi+Q(vA`p$3^<IvPhlfgY$CC6 z6RX=&pT>%xQ7l4M@}XjQ%302RUyyt_6TR^mQbXCo%dk+z@(84Jx_QwTxZGqv7iMw( z?<$B;VT@{U(X+O8lb=*oiW~8El&^0TB2+k*T18zyjXx59M6twU6NRM5*Wj`Mty64N zN)NhYjF_welwbwL$shhrRrQr5PDW|-L08syW$s{JS9TH>Gz9n3sRt>1hl<_<^qeIz zuK8S(7*D$jH@`-wQv3@4;Ljw@j;OPf4Zy!F^k^EA7dP=bl)@D^K~}DEx9l+UO%R~i zU%}pw@ANqNrjLZA3i5oh4&$DEm63OVt}?{@jG+&tt?y^61htK%5|r8}Y3$2}e@Hp# z5~f~!^&mlxY0YgHq9ODjZ^hOSy6lJZY6$(kV3Zm{S6}`kG=zfk#!4Yx-52xrq1KS2 z_FZE;y)1!0*FiT*)(9EgBO++pu%xH<{O{EGQzWGnuCA@F8a*kB<ej3`L?|Y@F!fBl zOfh2z6Q7@S8Sz%>8n0uns+1+*L4q>Y;qu{;<fSLt&n++gusycCH1Fg^k(VxSk0~$x zx62~srJIhQTV5*U-{mmM?=}X$hK@MVm(J!{vfhbm>*IUAnHqnbRpEy9PK*w;wJps- z4vz4XNNa;+;Yy(d$927jfBC++L2R|kRpy|(B7@G>2OZShMnl)ilH4ArI0+x%Zwl|f z5sJ(E!~P>IupPDZ!;zTZ6^~Z!)p>&v9>y#o|M73i0iHh0jRXsP4?%3}0Q}E6lB3EM z{c`bP+1?}9HMa;~r3hOUAk>k~0(3-aA{=}<&_#ir6xe{?%E``M3G~2!5Bi;mYqNi+ z=NrEoQmb`{PNMKMc;n)0F@*3+8hR`c;^w|koIsBmQ}f%xsd~m!D(6?EkxHtWurA?r zbQqLUGB($2buBfjr%X`@LuGY9JLa&lmJJ$oqNp3XEJLpWPT`UODls0>C#Ym66lXyb z{sye8TT8%yIt%kjhkQIPQE7OEF)+SFSPV0R+57iqqP209KJz}!@)pucm{wHrn{_Z6 z1B1}^ey%sInV_d1K8*^xk9c(rP_YwVyoSv!ElFjYJ4l<kHYI0w-!Bw;^2D&?&DF6s z-ZVHwcD!ZKqCN3sy^glHXaibXE&va<V!lgEEYLx=@4o*Gs=HGE(%o~QQz!nQ^E)Wb zZjq*;iBKW(MVf!v-TOW4bk)t%@otDrd|?2f&C;dnL8nI0jZLbmIp*j^C<auYR|0zp z=|RNk@P}jkRTrXMRB&mcLf<v$mdre!FkQa$l~&K66Drfz>KjYeun2q(596zIqh7|T z2di}k8dwMqP_qbLb-}AL)``_sCmJDJXx~ZD4NAjaLM9P4n+`SWn*qIyEH!lT4Z7i$ z)#6={lGKOLa#|_g#gF2Qe{Hv*0~-zb5~KxxE5$9Y>KSOhD_6AeM{~%67yaq^X`-=? z_P`dcE9A}3i0Ovs4dvcAFB=D2t=INGl>hFbA6!r}UD`dd7Wj(5df|0t7ZhgTm!HNe zU`D9>84tauY#?}q2RBmhDWxrLs)dKAhN=*#!)>=>KMG^^WxX3?t!uY)u|dy^$0bCr z=!AW{qH|T<ce>hZ{IB8Q*4JjwvhyVpKfDJ<V{M0G$bl7Tef2YF3eN9;nfNb%alanw zmC$DvaT`N%afAe0v}v`fp0M}pH5a75H2>}WL;kugWDm5##kW1B=|Uc6u3Op7MgBcS zN`R1)N}HTY=^8lS|DKfX6Up5{E9|Gg#)9lkv*3sns6=g*;=_FFjda^P<hzWNk+hrX zC>M}JutJI<N!B;Bl&*-;$u>7p*lrO<PwbaYf16c<hiJfd0X9PK5dluvOoge$r|8n} zh*H`mS9CEGyKb5rUf^sTJ_M-un7s!YEpgTYi_cb_jYCK&UGL_9dx_c<2Cz0DAW{;) z8-<e4R+s{XW*eM*?USOtO1q-*M)rk76Jk7Npc|0lF3kW#t~kmju@toJua;)Tnad$Z zNj+q1T`^r7VXXKl3s40=#x|i}R|EaI8vSWbbmR(C!^|(~L}x*-wA)`nnFYF($#Y?b z$?AK|{tC`PS}fsskT2WK{4XnUkAsQXNE5R-gKu0JTt$`Ad)%^pF$yjSumM_5K{btr z^<onD45=!=|0t4j7^W%$<Dp_D6qdqY`W~u5F|cgjdH`!>M#6X!Le`PT-NZ=8j?t5e zXms*x8bZrw><**3q}sXP-f10SO2Gs$1zHBlPIodZ?Qtviy-rUV|HDfpW_R&}Ply9v z>8_j;ZWK<VH1;6hLBWRLP7zwtpM65BlePj0AeGIueQ)gyFYDn2{q84%Fh84V=ie%J zep;<GMOK&`5*f0TtM4`Il|LRFI_tQiAiDu4mbGsTsjJ^a4n>#=GkZtQ30oVUUwhzK zwO=XTi;h!wzewVBC;#?wL0<7LSD3i2$A=L|9EY3leO#;R$ixLS;)ro^@y8wy!ofrl z*D#zoZKlJnHbsrF-~Y$u8QZ_t<QdZAvE&)Y9~)Vo(ffcp3=d|0*ggv{CvO!J&T3@M zt7XE?VQr{riQ<5u91^~>#dZ!HatwTsG7?BSVYy&;=d-Fz^!?;-&vcVm2-wj-Jw0p< zJ^kvCI_oY2q4<~@T4ycJm_gP@Ru|8BEC?Dj2{_oC-3uYunX{kYOB&_#;ecU!Jz@U@ zgfIf$2WobUR>K8B`=lb@oyZjx!at~2fp02*@-AYBg;Yz+@A6Q7e7W{oAMrXa^qOGf z+g^<md-z$T_f4e}<{Nb3I08b>T%Nm<PKmi?bjFzZJe)BQQPoM1Ovvo>+n|#l?$lZW zvE2Bjj|N*JLnKq53(I9@<4xj}{RHZi&bQu)>cMM{m>S-=arNg&COZyU-9kd(A}2qv zA&8xED*`VPp4PP2gA_*J=dK+bjlO|nG1@=rh3Df4hnm$IG?h|P#D4)Rr&5wh$Q%3$ zdI<Z}_<S%H0_pJa3iW9lj08Uz*<lnsn^1{jLJpSWmg@~Xbqh6^2!@)t@$}Evg+k|M zOmIO(QR=1V_d>8-UoF=!9_}s*)|S>V9&8N%Gb8)=81A2A4*KV~<Ib>uj?wtva5jeh zZxq09{$&7R+A$dYZ{YWZ``@69#;!Zd{|4q3^uMv7G3<YX;@=r6_{aL+z@u{EJ<b|k zd(t9kjP^new3g#8KW`c^PReo#Px<bzVxIDsrOV5tXjIz+Rh7L3XT-2U{MwC?__ZG> zQTVmOe}>^a{x=Ng@xNgh(f@|H|2{T&aqziod}o1k-#ax7&TWNeIx<M$+;h$e$30hd z82GaYf!VWGXRb-X`^e{yZ9^!J9&GnwqwKgxEis^|-s2)MJwbUS($Hq_LVn3DtNf$$ z2Q~T3X!O&RdP(y)#16D4T7miE=0Od=IjIZCkqZs65u4AcqxR3hYo4RwH8=k@CSLRT z=#>#DTaOef_e&Z`vo-}Z*z6difBw-?kA7?#T2b>)(TaKwbR;o9iX!L7)`z3!hZw&% zow<m3`76Ts|JD(}X4=j~gUvWN%G*X5tO%v=am$YTn0^HB06$+lY5@5t`^#SsYW9~W zh9dmW;<aTxMjFElUe;h>U;#jgu?Wr1d~5u5>2M}olE9~6teIgw-C6fpmX8fTX59xX zJP<w;Z4nJSsw!I{xf6cwgrCs(51eN_J-eU<LR4FO?Yx@V{5O+>`X?}{2v6&zZ+eY^ z-!NHtgKH1lfGUn@PJyK**Qd+%R)OY2il}YRW2P|%&uH-A$5r!l;=yMwjfDpv_jF7= z_)`;x<H4V|{K?gG3(i%3<C0kAKe#ch(jv+ym6qQ{mmiI%p@|g{PvZ+bzQn}SphzR( zX{<>4k$4(`@uSDnxOx0Vz|*jdA2psv@3@iiG)mW=6Hi0%1J?Xmg~C2?JvQs|^!Vjg zR%n4XjLSO4=9&GoUqoGgD_@Fd!g8U@{}L-Sv)pEwOS8%S^Kh5TY>ok4^xP!LB@*)( z<uW5wN_LpN>?XADL%Eh*mcCFejI<+!@x~*^o3%71K>QCmU!&@RPUvW2kIaU#ma9jo z3aCS>r~~8bd)n&)(u9MviL!heDtY2T3T0_9C<-E7iz2JV4nSUcaUAa!B7BTu0lL7~ zz;PDqfHNs2bvy*`%stCaGzvAo0&y<QVfw0vMnxY~JU5EApdw`yUHL#y@E|~R`7-h& z=@Gtu1wH1G=qc5)>w%tw7eJ2`rYAF!o@vqa%!r~VkB~&5(pVp)$E?wF49fThUkYl{ z<Ah3zIl5;oqGx8uamShAl;oY&Gx?~g5`&T%QIup4J2H&Ee`1cmm}9TVs|~)n+Tg?S zh@BR%9qCc#n@JMhbM&5j@Z$Ae2p){^OOFl!)z3syJ$slIkuyj(65xYXCR|7VN~_Ma z<}Wb*R{iTOu!rePfz9yHmVgiXhzdhGOCS1xv*a9+Z^@Vep9Qw>LixZV1SBoc+geR) zA3y~MScKYa$Cf4Vd8kC1<iTwMF?3Og%x~AJ!lZRR1kBCIL{)NV#B9F*B;9mOhn6uh zyN(qZO4UQG8w<pmvN8j^OA^NV5I@(;$}Gs#E!Lp!p`Y*uqW}si^36omrg^{^tY*4M zR7w?s3)5-EY%e6P*k5Q>Yl9DjJvNV|^+*vWO>&Ah2psX1pcgy;K>TvMni1%KL~mvj z*!3Bu9$=hu*cj%@^Z>JeCD1mTd|Sk`d`nrW%Z=|RkWMrz7mr~#WV=h99`z93yHJN8 zf%-vC5=4YEZ8~(rqeFD%5!qRyS9B4*g10S^ibQC0!IK7H!@faR2eos<rvg5Az$b*K z1nIN!U`=4Uu(7$zYE(LQ=Dg){dgWB%_8oly{G?5sp+g5^f4^B1Lf58L<2?zl=^avq zGYhEFVuZ$i3tg-r*Dj;bdoHc$|K6R1KGu;P?zU#A6YnAUp>M92rFv};z4m(O$~doW zenv{|FTKo>=(QDOq}FD8S&4)Z%(a(8gcOW0zBUaa7`>#=I;N70&Z>~vs?6D4bvB-< z*?+&JtDVxVR}2}$i<eB>4H=lk-=T_>!T3{S#!ohFFUW|COfZW0i5D1Oy1@7;7Z~3d zEB>^Y@l!CqAwMEPx8C1x!I(9=VBBgU3Z}fxc-2EuEn)wzP=?o^mjp)v-?cSKIK~tl zbhvU_)QP(&Icr;C>4v(sJCGIBbx+aGrSOdXt37q+ORTMXiWVuhJw5Oz^U;<^HsEqY z_YCkcdU0Aq6>u%LddUGHj(9J<gPJ7bi%eWRQZNH_4R0uO;+r%KOy_ZDP{bqQtjL!g z5*1E}*ap+~>$3d=lU7dgnfwEiFU3D#^iA{+q}7fkGzkJxhGnN&-%9Akdbg9msZwST z6vH3Z$KOCbogp%L%TU<kIo(I02|g*tlCyMclzJ?jeFwDo>7-v_6#mF@hMKlJvdg{D zuRk$u-;Fh%98u%xSmP90bEPs|bXQ=4B>zCV>7nn@?ZmbXw?3&id(@1EJosj5rEWen zL}c{6zYwOLS9WCM_GD~bxP#^-Fo{}#*S}KI)y$~Tm6;k^`2gW#8P`o&xO0q%SEj|I zD7;g=NB>8TY&K6?xDz+pDmis{#1|qXb{9$uyQl0(h%T9xOKx={dQ(wu(Z#i-3HU0^ z)g^*G$m8M`Y$(G$IMst%i)E-20$WX?#8Ttmb30vp5ncACFRT*T?o6hP%Ca$vB&V{8 z=>J4cd$u3HAjh%C@CPu?6TgQa3#)*87Aaej!&PA8AO*_J<U}@hkP;Z!M4cUelu6GT z?3B=<B_w++-UXwOus4uI<S+Q8r|AwGO11E7;dhaEF!SGpUKn{G^jqTp9r|tH?*xA* z@+$^|!B+m|X>x`bq!#v)+n>;ze-EE_`0Q-Zn~%YFA$%``@73^K4&PV7u+Syz^>J~@ z@rH!t#N?!8c*4KrWGT`f4vrbMDI`oFPzVJL<7)JX!eJKIIeTeMs7rKmBb*a)022nF z#dc=Jbu5u=wM2aF`llllzw7fM)dn$FUV=hoBTkoxrK}Iu8Glt(0oxcBS5?tcu1i`K z!lNK>OpvF+P17m8MqguYPt*y9+$<KU!zhHsYA3beolM^tU<mey3cZ7D{>kKUxI;({ ze>jpkvxM|{k438n)fvl$a|u=};Z!Yx8EJaxw>0-wRX?pa1ILjMUo^YCvZ=QO`K&a# zTx!7y(mNX-yAx>!bXQ3j;VKC6nzq3TR*qNX5C`3*pw@Gm3#P>)q^eLN*Dqc<2_bue zXzpT8_4X6Ssci3uMPoeBJR57*IcN3hklxEA#W0y~LyN)Uegd#}Ir&p3N$~{*&pR=1 zD8nmH>ia{Dfgew%YZb^bN0sXaZSB5sP@QrY>)`joVgliP@p4`Nta<~RqTOfJPk^jz z^qzA5It>28IktMkim$P*xCr9HO74KO`{r~f?o0~OKB+I4B_g3^sI6-x%yQrro!7Zm zzp*%p1lc|Og;T29ZSR2uEn-R~DYp*?Gb%oo^A5k}kHVUjse7N&n-9UK2R>aJ_2xeK z<iO`RJR9J<4n9+%k90T<a2CKc5HkS&lBE6WPaClbfn)mCf341!=V6tSt<t#k@^WSi zsL&XN<Ykrt<L{FEcbIklRs+0W@>!MQK>aE7P3QlaZee9B<x#HGo7n-L_8F{BKf{|~ zx)MgGeY<`~9=G?y7oP;LVWcLvCCotZ`M$*VL<I6fNtVcl?&MOOyz+j^=Vrgxp!0hr zo%R}i9K1}h1286J#|+t#8%nA;ELyb`SaW;-2h~?FoWB9T(8&gbTiO%z$nUWPYYrN@ zCX<nCIxKMffgY+`l2$j7FU%TdmprV(==Ixl<!r!LVA?Ku18@0$W!ioytCbZSy@B_9 zlTF*l;dhp4yY>Ie`x^MDsx$AI%uF)L4BP<+9W<IKXt9wR9J(?LN<zFzL<fSH2@wad zk|{f`7UAB2Z6+VyL~}We+Fz}&?poKbu%#=u_%3b0Qk)?+U(gs5is3^YG1@a;DkH{Z z(3rc=bM8z&sP^ste!IWz`@ZO%+<Wf%c+PX4^M9V_oO92C9@Cq5QZyG9`d!&(@dLl) z(h1W`O1PHG3JUPNhQpwuRznlED+yMBmx%TXCw^3lVqE14n#C(<_^DAfaOoO39}mQ; zpbx#EO^mlGyenuEE_I34P1C%pXj4TqU9q2OA0?uS&~YIkmrZ$EG3Ku!=H{vNVa)ED zO4&?4QC<mLx(e_#RXe*E3vU-nw1P_}7yQ{zQUza+*+pGEW_Qhm?A|I%lCkhWQVEV_ z4qiNP&sz~NS00=LJPrk;pYD|T1mUe~WqxE09*i-hGYc8*{Gbj11rP`_i>u;*Dn`{A zIuOuK+=h}7T8_ilK<QgT1~iBJ-7Qzqe|mBft+%IWh3*0rh&Etp2I5DWa*T9wE$Mz) zUszaN?1$PK?hrqAhTZRqeejyz_2hVc{+$)4oxR~yT|qm`$L0!J#pzf#$l5)eqTvd9 z*<>1i_k4<9f54=y_;jV6l-t~IrJfE;K|8>-Xy;n8{Ia>AV964{`%U3GAW6A;a+vuJ z!K8ZZVhl4gA-<U1?{ZCoif2k-HX_dX1i(DJZQ1Cm*cu3j66m8(jMXQ$o^^z;;b7$x zlc>*l{x5OR?{W#I!ooYmA@{pN>}&Y>JLG5Dc=^gs5|P$HFJ5QXwd?K#DbQpC`ji>R z4BIm>jGd=)T^YR&2q5udFCB)P%1XHePf4DxI=yA|r~jl$xl#HqSmPzk8fPb|u)POa z1tY{`*2*B6Se{&J^rhs7m4|1dv)4rc0A?`ui;NY*JUo%EjJ^!{lSD}ct<j1u#-bhS zW@AMey*62PCgKt3g<>N+MH@>-r=?wwnF^We!$!J8fYhy|5a$_8`|cjAFCtM7&e!l} zJvhxY9kfg(&fur0_r=!YDyS6XBzvU^<ZeqYeRVswQzdI9@`-GwzJE-%R4k@_y5Kw& zNLvFElgqVaqU1QpJJ9vH$9~E5i8-*)&{he54Q<3@hu61YV=gFi`>dR_oh?_L=9g`T zZbKWq5dWChjoC;SZWQeBd#^ARV{Y~b?oH+4fIKc!Y%F+rGI5)s8xt$UlMQd3h>0L; zd4B2hZwa|9=Cy%u-NRxgQ_i?3B?ea8p%qc)^z=6b#VBS%X-Cmdc0b0W6%dOt36=Mo zT;ro`XGbgcG5{*ES}`GBeUEiQSI{9=VSqze;|gYDK(2T<2ILAJS8%pi<O<Fai=5#C zaLZh`3K^xv#qRbkgMR7Oh2jFJ!%Qh?GjNYi0htS=t$<E<7d`$3+lx<XOOr)2=~gbs zEPe}?0?H*@-wNqWtnY9wdgm#~8RW?e{*GTt+$ew}nz&cUg5Ph68RQ+s5UNcpF2+6u za`QGQ;2WTK>x3NAo)<ZqaPbcAv2AQ3NfjNcXr~og@p8~i-c+oB;*hz?*$d2UIwh33 zPi(qV3TEqst4OPsKDT-qrp;BwY<k5PxL^ytdnq_OxdC$Cr$<L!;+*O^-j%92M-^w& z&pu}*#D2!k(ZR8~A7Z>uFkbGKtxlD3TgU=7S8MeIDnMc(z)`J{LilVgAa^WawiYla z8Q^{sRL(J(fe;gJIiEiIzfur7kM4(8uHc9m)zBoOT;)yGqFkd7vSd{slaEd`2Lk#H zr*}a=|Ae0Tf*t3a&$e$*sU@p21vS?9UxhvhsX2UTdRBY*u(Nf@bOgs74~F4aoGDFV zPq-BT2;zo^bYLvp^9zXV4S5Es@!Y7oVekE*+(3Cz(*;#MqRHn<&~j4P3VLomxssXH zhNOATn*n~wgCper5jDCRHQcJo$BnbqsFn~H8muSZ);>TVY3CD*U((wGI#BMam_SN% z{=oKPBLzk&`Xx^J7aG@-TUge<5!t<7X2l^ZAZu1%>?tEai8EYQ1{!t*B#0?(D`xlM zrDzG~f?h^56SVUO$u8y{A)=KmGdsKKZvk$=(N(MMYPA(<v8mNe>Hl0yJg)H<tZWFH zXF(?rr|+xTp=V1H^w6_n_;H?8)vs&kPw#?o=6i%Z{muy6@5>?c15hX2T8_`gJz04m zC@xhELYf3zBRaWiP<}9>IWIEbAL9EpcDC~!dX1|xe*~;?neU<JMc`09JFt{L7UGYT z!CN(7Ek9OSDOGiVIFIOr%f_08`1)l-l50vPNo7p<4kk>jF-MT$rDmtcN?&~r*>7g- z_k*F#TiXj}>)9@p1<F4tfq))@)Qt}IYiGY2%h)aB+U6OIYbYUGXX``@gh6A_kuS9` z%(VYP{7Bgb<Rtwm8{Nnz{0Iup{n_M!Tr~=%jgtqO6p*0AMz)~90iMj2Mpe;7Kl&c} zLnF&b+XG>{0raEIRcZ{H+@<DP6UN9?JyuYR0AW(lsta~O7cQ3bu{j*>wRkMjr`0C9 z6Ek5M@FU3%#*~y5Z6vTZ8U^GwJM<Mi`D%EQ_dLtCK}d-Oy>Bdvl10pJk6Fk9{sGjT zFYvWG!zqEIE{rFd-7LL0jb4w>%Zzd}K0|KQF`iK-DK)x35je0fwi<QfCu@AMFCNmO zml~Dcq&zy9ph;C!7xGXiS_mLlOwtCSvIXt@*%zRD$({su)TD6H5KlE30JKH8r@ye{ zf(MccCXpl)kZXb^Fc-8MF2^742Q}~P9R_xOo>^^@4pk@y=}<nrEG%paZ~1_!wcBs^ zlS@G-K<MpYtlbW}=95il*Nj;zplh-~zQio_=>z&emSWPx2W0PYm3<}YYYo^o*d75O zDu0N1Lwpp-XI*H(&D(;P;E@8|YPsEjCkU8Ten9!4osa6Zb*`hh#suAAdM~6tWQYC` z1!gnNGLQs??hT`As!Q8eqNfq^#Hry0);!Kr?oY*U(d@=ibtV35*Iml?3t`I~?F)P( zU|{kIY2C&z_d!v0u^%RNbDwaS0P{<2?!)2|)OAv#a1)priF>vfq%c@69b8M=MS;b| zOO~M0bRQN>es_leQF^$RNZujkCUv7R#K!~bT>;g*0X$tDc>E7v!g`jw6&kGuBwQmc zwgHDZ!=oB$o`iJY#xKVN+3OstaD99IF9GYnhsP$2iaE3pl6vu9vT7f*WtVnV9c2~P z<+yN?YsvU)YEV*=tU>q1HQ>BSZvTjNaO(ue33%=ta)v8hqK#|(J%e_$`yKHb`m;wT zQ+D?R%3?dT(Hr-u@D@Nkw%7_ZsQI{Sqg`CgwHW@4-uRzaqNu2(MD^H!WMPTFX$VY3 zcU)*y{tkFu23eF*dAd#qDYfT}GWv+Nz+ghUEKFy@bX|-kZF!M;#M~6`*M1fA>zrX$ z+s9ZXw079vFuAt=CnvPSy8nDTjM0~BjMlNnnC=}{iCb8E*v8sp1?Uwou3QI_uDgh& zz9$$-&T#Ai+bf!}e+uA?yIZ`L;BO8+Uq3m`KaZt(9M?^^Ok3%Pirm1p<Un%2`yF9A z*V5{D9}==~+#tgb1%qLFvyfF-$gJw);#;z3#P6CXEC4j%S{%R$Og4jSaj}$OWTDWd zB~#ucX5w(fJn=1sxpUyQp{6v0M#+n?={0_2_1ZPbHqlH>jT-?K`QiVReYW^Drgy_+ z(_7R`?}x@r@AaDL?He<_S8AsBooIS5LA!a$SDW59gMI1HOz%w1^oGt(?~Q+j<$W+^ zdB6QNmUsDIZF%Q0%loPcmiOb#@<vwJ={x8Cg5kXk4DY4P@V;`~@V-+^noVCiH`(rP zonUu=!@CkA&8D?l{;_`@GrOPqZ!)`mwUf+l%l4Gnollq4USxJ(=}p$*-H*TC>PDl$ z;}|}1Mdv;|-+fjGIxFCAVhB8d@c|6f9zbeQucGKlQA1g>+r7YMwr2ZUTlf8{U2l8I z@sDY?c2hR|K7UXTce!v^#_ndroy_j$z}@-ZLgX7*<b3#@+m0{h!`)OCWdYo6{4L%s zg1avd=#wrveFhcb-kHc~v+kv1VC4%Y>W1f2XHphPh&SUQP`95$FQSHLUIe=A?RtEO zjh;&muCSp645G@paVP)k`z~_wlXe;oEtG`H%=HU(!eVA*;~5Wj+>Pcg`kg8qf4~)q z&ag6jC_POu4P}^x^ElG1+oi`Ry)dwg1*Zw8pzBN+%`+1n(cR)%UKAA^x7@$^!Kj!= z2LjNtFQORfVj;+!_F=$27Eo)Yzk??eKB#82#K5x1N6X?1h>1%teddNbBbw56>D<B1 zX2n1@gS|LFpBPKV%yYMB7pg#O)|%W~j5Q{@5tFw?q6V_uZ0I2KWHFlTqS7NqoiIb* zY~End<JrW^&8na`(mO0VmXUI~DxRftp=l~xNfpH)jSM12p<Lyelm#=B?UHJTCNn}= zkRQd$wX&E4^xWT1tmAusKUT+9qH9>dII}?7YBPv8ky3lZg<R8*W(u~33s>V`bHjye z;IDX@v^5*8(3c>!v$Ifcw&GWU5inR=1Lh5@kV}79&vwdg>J+}&;9|L6LkhE@@vdO@ zEwm}nU#33nppNq(LP^pGAQj}Y0I>VVVXP(n?EcZD<A~dg>Cv(_v>~TzaGzFkyP3?t ziCCu^x(tzVBLPpy$fD_x8T}QcXP(kxT^q0JYFDoGG9M+I6j+HPw9(jfs@4fcStM#i z%hzL8AI>J}Wgv<M^jp`mo@d4BusftSh+KDCF+xUq6-R3m?u?pO*R0;gtDUU@<G%Q) z-bPP=BBR?jAd{cgb_t_FM#G4X-iJ4y5tZh^4XxV1ScEQ(+>CMQyLc*U;D!x7$iW{$ z9C8Bm9y$}g0jcVUj+B5cds?k_;OB4j2~a+jmEiKxD=??}X3edmQ`pmX_S8ew@1on$ z%#L{fF5Bc;Ze|BF0YT73aO+|o{N8MUq?G_e74$UIX?8H0nbduc@Mr0Jzy{VFuYMQ1 z3^uoph;|^Zp?0hfEXO{u+)UPhR}sbUFx|!0%?@;rT5&6$uG#`{uj<_F2)!Qj3U5GH zL4P))>8z>&Mi5jrDGKd8n`xwW=5P+suJ3?ksC-oUnZ^;qpO#C2?tXd_<foE4Sly1v z&8((b?5RhqX~V5d{+39!Ak~XVvHcb%)KhO^GM#Y?6Y1Gf@Q6;lN(v6>1P5@K-iz6S zpn?x-^U`a-L|(TBtQ!*8Hp75l&R)5E0I>(WtuC%{74+E!E6iNuay{FW%-tnghp`Iv zTqDl=0se>}M_Y{{VV+ekA90>4TDi+C6awz4TO70>DvIF7HR5siE4{RREZ{w4L5V|7 z2bID0@26)+Sj(r!4l|R`j$ZsmM`MmqN}n1__HSA~bz=d~VK?8BjO?W^y~M_Dr8>J& z+fa_pG1W-z<_hI`SA|1dK#P)Th5I0*ze_#b4VhppEhD;?5mV-+cWD_aE^0|dy&lqy zUXpys#(Ku_35S-3GK>M;D(L1Qf&+?)u39&mf&pl6Wh%%fleodP=*ZD7c#YuV!0EEB z>(F?&Y3vnD;QWL4Tx!OxZ0?<A)db1zMePaPt)Ru4)mkd#l#25MdfXofN%_|=7~#;^ zE9sB^q^gP|^=A8oH;?>j9G>`f44yQ?R<BJVlN5C51RHiBFKTPAs>yUP7raxmXz(fq z+^G6y$Vk0eGa$Y67r5_DiE#rO1kn2mAY3lS!47hVmF4mo8_1l4YumhKG;&r|Q* z1i^+|4NSC7qHRqtUypcG&+uk3wZc<~J<;7DsICklui;jv`euP8#fAyT4OuT;{U<hx z0wU7HHq;9`q&llkG|}I!L9aGD#3#yd%mv8Gt)MUAnE-%&BY+WZKCyZAO83n*C7|2t zmXH!W>I0C}5Fw?50R8FpxN_;6p;hrALxFe=6i(2f$wjw)i~=)l!R0VwHqfB*BbakL z=Dg`=<CeE{_69un9k)O%GTwqU^Hw07BkbIcuyeavx}eIQM2*qi0ZP`wC^x^39p7~; z*Yp|y7Iy#NV9)28*c^MY9d|;|K)}L4Ks!oQss-b+3Ab>ft=~bmHfvw={|fS;uR;i6 zXbLtqed#+Xqz&l3_$l`EX_~A9^O}9Y`CG;780zF|rA>w$3zh^i*Fa3V>O12aqlPZU zjM)=i47b1}=a9UIJ<kNesca03%bllOIki`U43Rqx#tmoj<F)ivqbj_bQY^LFpjF<d zE%$;ct4AKMPoPL|XvEn@&oO%Qkg9H&|9u>tJyu4)`@TAfUCnxpU0hS`*Kw*!KPD;M zW3RJq<Oa&n^JQbPASXXKtL^s<q7rxW1DwRRedH6a4DLyEjNB#0x*AeqL#<na<C{(4 z+JC@}jti`zRYp8@=q!ZHQmeBG+QEY|AEie>OKIcFRnJ+e)#&2S*1fHIsKgIKf1|p( zg9?t(6W<`vz|^!D9TPR^HdcDa2&*cSwKxb`%!hyzbkw7Bk_F937Y-w*>Vqms!7q^J zjB6oE4y!)*C_56mE*rOK!_gZrm4{h-Xb?(&2na#9<Im&k#`JCt+@fbQrhC1j33?vF z!fcuwLxLOu)yt@~(x+J^ZBTK#3)kBE9MTW0y6WqYLayn01fpaoPOO~Ji=zxLaw)fN zqUn*gdQ_b-r~r}xM!Rv~BBMPyvs*!X*J5H#z4PFrXd-bC>;D@jv$<p%I9ZoBe107w z?{s3Db==*zDQl=8SI;&52$BsI8vVj79C*|=>p)jc3<lJ)WbJ;<Hj}g|0ck5>49lS5 zb7bwNRcKTScez~RP0}Ma!=@WtmG<gykQLeFE^||_a3%L^akf{R<0u=e_X@QaDy`&b z;lP*)uV_SL33CKi`^L{7mChPht{9tz05w+5MiFh~!4bOiUq)3g+ufPG?Srs#qBLAU zkQPn*)7Z!I62$OTuI|Kd?=-vAtYqHqmlo)RjDmuuPVv**A<Mi->G+rx@*M}APRj^O z4pN@mG*pW|vX|~hd!EFbdht2?F8Xu!+|x89Tn?4K^e(8CcYIc2#-J_Drr7h&i>5%@ zD#hXqHw|$=35Rae>2Vxs&DcOvvcdPMD*GVqtljVOfNk=RY-b$N8uFZ_%Vljz&<eZr zl)FzvyC78hx?j35GdWZgR_^mMhn2+rF44SZ^YtPAY?%fp&Dzom&>1bfS#V)K@(~?d z%Vg9mt?I+ZkY^;IUjf?IgQw(SN}6tEW01*2M))0B;7cIQgGlr0&WQ}OBEw#8W;o6r zOfRFceNbegO0gDmzlKNdm$)pYQv8IyJOVE(rNmY-t+<$Y;zY(VCz81>eOqSp)Z%SZ zo71;NwoNT=gw|QJz%xD$`{zY2XlAn*+rU|hH+Bj$$TKXf>D#6+?1Bc~W`;aI+h#6+ zcYmi?>Mv9Y*7^&4>diUQQ(C_uU-+Cnp;54Mn`7b3)uO(1TUNo6W{fhFYN<&SocI_D zJ?(fmI`l^2_e~(O6Ndj+tUy0plLBETs$*JY!O3l0Fe00YX9NfKr=d$udo9|L^&Ybf zAZJbHuFXtog9$&^%o8759TdmI$H3V9!KhkL<~0m^>GtQaWo>K56PhWwj{u3ji9x@c z7{rEUD?n6%fux^)_86FK_~B$8o%SG(rL1LReDVVN`uEvbN^;CoV*qK7T@6A85?0;g z60Nl+ARj;Hlfs!U-n=D~{{A0uwp)3v9?h()NVy%yL#^CDhn=0$!nxej5t1+*CJ}lA zLvp*ccrN)=Om8#H4Q<xrJVY(nb^2}Q=BXr(qwMvpVRYMc&FScAI=H992Ht9j1CLeF zBpp^2Q{FoUpLxU60FYq67Jgq_zH<spu_<g=pZ08J)d($1bNOt7p)H*U6;_Px{w>hQ zrH`0~``gmz7E6isHCfLE)~_8_b?M{~JZIr^R`OX_tRFJ<;}oi3uXp8(T)+@2)R(QG znQZ$Z>m)8s983ahXl#Yzh_)sIoT9*`YrG+L#>cT0>PDlQPd~8W#yM!GeIYvNV-F-} zCFFd1^CPJ-EpYE_?$+w}z+jdVSpN=Hu>)g+$B?sm5of3SQ|_PP2D1$<)2}GQ^)>i1 zoP1?yH*~C^X<2Nn8w>?wbB;0-Wr07ovJ3~h+HnAx_AyTybjrxuHO}9!rc!WJogkf# zNmH*g)QRJ&(%IQb={nucpH*>JB{a!#>kuk8;)t9*Xpq4T60PoG5W43BlLqjXZcPdu zW$YYaLf00vK|VNG*n=l0hAnOBIu~yPaa$8$;ugjMsSIYF7)eJYW`9l10PvjE1!&pD zvAu2Z{A9L4CT~OD87*N2kaHBPV-KxKD_dDXvsp!OEOaK84~1}z&#*0(1`zUM+u*+5 zJy$fMytJj~7o#r`r~>YecFc|%w>GC2d+GHVDHrZev|}L#G|gyd{d>{+$i`-KTY*6r zy9wT0i|&xK)6yZZ?7(us9D&O5+{kic@$jiDPD$@a8^EuO*FkHxe#6;oiHKK2WOz+7 z8s1Y?PFD;;Cb|5qG6i@(3cOMv(|N_Dtyt!*u5!C*Y_=&Jp1734+RSG2g!EvHZ!x<M zagY6q?KL&n&L_Z%*5Md(t%p<?XO$;N2KTyWWEMZza0XM*S3!pSQaE25k#<$58Cp@D zJvd?n!udgNcZV?&GZw2JyB}w&p>3d$;4AE*X2n<M>0@~&%+>Qk#p*V5{RO{Zs=rVS z_@K)#RX%p}R>6+JE-|CNbz!qZ$sCO|gGVu1pfXaYL0bm$z4QaN_`+&HJ!!39pcB(b z99!bm`6=#h1R^tlh+-Pc#C~@z%FC?2JpSy;$}5g;wbmKkt((%@(({UyENq_P{!99X zPrCcaC@{We_I}*!3F1UH&0L9l|GZ(=>5Tc%{&IPoL`WY<wxy}J=Bhdqz{;k}0=mF@ zi1k7;7DOtZ5Gw~`Wo>dmtSpGNby6(Z7srRTV!duspKyjJI$Ro}+ets!Y$O)|*q6~O z8}M8uaV~X#H@P~Ft(zz-qkj~>0@vGOFX^-)<m%to2W>jR;TEmpB_MHbgbzcTp&c5b ztw67X05S|sk})^5MGqdHQ!Qx<*G(a9bQO3zD8xz{0yJRxZ4g+5zVl=xC##Jh=)voT zPhm--$>p=w7-XLn2aDS1bVyKvt(f!7e+{yd^ohuNgMS=Z-`<=;)_ao3nt}$)1XLwB z33+S<@$?(ICm^b!y^QWRP6W~!fQ$&F2%+Rnx=tI(7z5E;w~m3RbT<DY(g6-DK=)Q? zr1vCA?=huF|5Ut!K3tU|eF42DNqT$i8ExsD`*8I;gg;gat{0NngCvF)<%6dU73x&d z@;X9%4;tJnDrnjSvaeEBVKNsV<(`j7iIJMQZr&c8v+%HxwJoCr9MlWV;AfzQ=s|1J zPP$P+G=8ah2HB}MOnJ0vdVxMYJXw9*wq>m5h~J4SVXc(lg?prgU!0j5;z+5JT*fxL zuT@IiCtM{Z3Wb>|hhajjU*T5$`Csv33y6<$*;l-HC^1n@A?{~itjX?S3Lu+VTN`vb zgARW5I_Hp=o-wg41<|Tt<`Mn=M#lfK#aNEFO}oGZdD|C%+w>y4p>Ol_v=~3_iJyLu zzU@n#pr?HaG#O3IWb6c!v9oo<5gvDvNZ8m1Vly`E;n}{P1=<H=xMZTIHTE2C^tN7Q zi>YwuqrCOA@e~kw4xy=?FjQP)#n$(aeE`w=e@G%%#lI>Qs}InJP#~s_nYDm1Nx$fg z8nn3`;P2zK80lHc)`n*m7B=;YpGsY7-l5Wq9Y1x(S*YNo$@9+C`6f7*1OnTsp8tgu z(GQ=H&gr-D)-U0yUB4iMO&_I^_K~$?J!j5%&(YR5V{Z$BJ8+s_52S_o(`9(R*2<L? zA-<oDa!?0{!|P|^-djc`Cj4`T__GEvPfF;;X$yRG3|9k&RmzQ0B2CPm6lzo`?%ODS z1ixuw_r!P3@R*$6D@^F&e}T@1AAB{P8>dd7Gbi)Ejn2KB$NQtl&Zu*qsvwV80cNhE zS@$IshGswSdnmO?w~3vwXsv!57lQXSUsY=)htT*haPihHQ)%zI@%7Sgxcfj8fGJ;l z`8E!)B%M3hS)v#M`IXJ)f~D@hx)`qD?Q3?_Os`-3?V2fy0abkc0+%p6s;j?so@i1F zjmnHrt-gZ3^$_|y6<+!Ro7}Zsw1C#iwG^f!_9r6ejLhzv_4&2BdH}_D!T2GCMv}?3 ze1SW$)?dqP9dQKws7u_R3+9Ga-6F7+=De=f!JpaAUiTq!y1Pr93Xtr_HGgGB*{1Lf zt@=f17L7nY<Y?rh8Ih>P(qkz{<c_>&Q7$EBQf4G4480L0$I@r$Y-mSUp6x>2bX<53 za<aU+c8y;yHLw0^1z=xEd^WGl_f()?$YkM499yWw5kIgCrb%b5Au&!ycJB1=q=lE@ zgieoK1im(ZTsCm8^T*^OBZ?6qnwKtm5c!02+gwWLAATUYC*jCid9!s5X+<%3<zW<q ziQiXMc*~ut^H2COq$M1jQNrWLk;DDNC#8NJJG?Bp-v_+3m*80+<L_|)2!|ys&SB@8 zL0o6=@F!r9+y)tZ0?u6P@OlXEAZ_^9a8xOQcN0!PJE|N#arC33{gzYWAjXGS*%13S zDB?rI(M?m`5O0fl6X%Aw)tSrk;KddAVd^Qkv%#I+^GL?<$>DzKq>glvK5_z!S}vx- zd~4R?H`nzS3O3KEzmU5*oqMIH@1s_7$k|)}UQQov#lyE#8VVPwfv60tvpT%Pk?2T# zM3~25YREk*SOENIWTTBQXV7<jlRV~7lFRLDl`El7;haX(kdR3~xB{dhT`|$qS71VC zczpKr29P1Hr8H|LIRQ3)J)YKZmXxN;o+v3z<63kL@1txsDC%OJE)um>$esZJMS!}0 znWqh3=)<Ziegn@kbluw&6{i$P2}8}GGaTD##5J6uVD#me18Fa>iv1YjuF9<QhQw$n zcx>m+o#fk&pQqWDfqzIM&q-%;42L2K6FJ&&CI`9**qdOgKVn)cbw!tiYMP>f9A~&P zudARh3if+b2G<y3PShYEeczek-ln^oqKZj^h&s{Ci1<`_h_pQy$f=xll;zy;A?Evt zX_?d=Eyn4dyl!XjlD;#cJDZ|pp5Z*Mf0^eJ&6}=qm7A3-a3?p6#a>SfZPLSgJSbEe z)o;#7PQI6ta<e=Qg!z%9vd4@Xr9<tDUJXb$h$IB31Pql(dtL`_{(_oJ&=>vG4z(s7 zc~h|V?i0Z&NiMw{n*#2byPtcK!y{(-ct|`(I^fk#jX67^%R?;~cXlQjqb=z*>!deT z($)7zAPYa8yuN&7_$}fyhwlAJlsHNEtT$y(9NvEnlv>0=*-6BB--jx128s-_I9St1 z;(@fthiM@Xy(h2R-BSackcA&3L)ZT}s#_|>j7`14KmO$g8*43Kd0v;sS`Y~+y6F<_ zi-Nz<RQ|uzRA!yCH?MoFsX~h`b&qZ`x<AKuU|+7tE*wwIfhN0Ztht<Os<jN@8OZa< zo28GuLp*V<i40%eL}W@f)UYsBy$KxuA7OYP&3S57>>jA1`$`*14I_`+{)%p_Z@t{$ z!OtV=|5ix;sYd5)_zh*VrRunW`%m$?p(=_i4GsN&1+Cpk>xUC)J&q@+*My?v%~{<V zrRN~T5*(B<Fc=52`~H|BH#k_+^Vg9J5QyT+_}ceA@tnmKRXE6@tGApWQ*t5L;)_Zb z3dAYw#JT~w(kM?;vZM>Sq6szg%(WBT!2byh&Hw)rLvKi8X#W3w7@Gh8JciEyTgA{h z44dZv&10xW=c0=+bkW~9hR*+L3|;V_!qA$@<5A92Ugwa^Hxu4k?Ch+N`KO@8WZ!mK zd{*}Dm3_Np-wxULqU?KK_U(~<PrH1x#T?pm*W_<0g6mQ%#FwYz>S~)@zI$8RqFlkc zC{r*m$`Xu=rig|mit_LI+tQXu7cAW4Hv)dBvqR)vy=_}ZeQaL+1@o44kn^R=+r%@Q zWTpnN7wSb*z*MQUa|go`%@eLHEfuCn)W9_noCNJwei2BkZ0EP5I#B*as@krDXXQDT zr!4M*Y^#5MafU{4pI=#&C(KziSD3x9RoK6%h<gH;gDv7~ZHw;bp2)}hD(=ZSxQ;tr zX;>Pt#2x{;NKwi?b{9@-P0p5Uyc+@+wsMVrd|AFbhTGEt4a((<Ty>XA!M!s#XQ}+& zZ?-mPfQzj1dw>@UTZ3o*EFWC`0OZL)UQ=uxj#UNsVn(vKL%dE&S3O!vVMuX6&VOJz zTT(fv-UbJh-+Z$bk}S&P9)Acj2^eE9jH+sA>8R}4J;w8lKxXW52u`v$7uaiK>~&)j zbL>$ZrSm+i1~MvR1#ln8h<y)toDg4B3>p;|ZkV^oT)l6pGAEU3^~(!emEYo0E1^Wo zH?&lRLWM(+`~N0KrQj~miciTluJNP+IP6&E;`dhD>Vw0k8p9|*yc~EV^Lw$@++*+J zEJtM^t8%GyA&YA|@TICM2cdXpr!o_2pZh>(7I!cnx^rGn!-X=tPFI(yRsVg(w10&i zZG`6)%OV%|<Z5g{_Ue<^avTfu?1gfc*DuxygSd24759etXc@h68tUxloxQjzLHV=6 zwBddOzsFVnqG&Mi4p;dO(U8Yy--2avPtF4BZrP&%|F+)<xBCmAGfJ^_GQZn>h->@^ zggiK9xPSkP|CVNhFnEKLH0ih!o`1ttzME@ohbRj4(ne=5;de)ZyA4w0ZYi1}dm1r^ z7vS{+VXGlR`uCxT`(1`jQ^}{H;65-;RL^T6-#${_jo(!5!K3Z@ewjbbwG?HMxKr%j zkLJ*<qq8CnA7WZI`Vq3)WbrAkrPJ?zi<7Q~?EQGS9qv8&`j@Zc)0^DmS@3l5^~Lzq zy=4mK-U0N+rsA0&L-;{QPT??r1c6eV;SxJUn@fB{w6I!r#}wQ>#oZ=eT{v81W^pca zZ8nP2T~2W-J0zh)7T<{dj`fXaL&5%bewT@vNzan<U52n+{(Mt!?OmbUOmE2ij!=<V z=3gZ6fB6osWjYvnQWZ$WFAtH5k<k1!P@hJ39Chqowpbhc$(9kp;8!ywen*=0;EQRh z=XojkysqvyB_%5Vtm@f?(pUGxhDcf%=xpk&y_p10H>q3mh}ci~V@IowMQ9E=ZWyw} zBOm32jEgOY8X|0%M?~gAin?z6@o1rN8(cyn!~I-K+|WJ5AJYriwF!Tk1p7&O|Ir6e zN1{1L&sh?XdE`vaQEEA~Ob$X;$Hb#9agSi~OP*tT*0`j{?<zmGWg00zh7)CaUBl<P zdc97ZF9naQB3OFIp@t__F<YuSse6r;?kayr%mB8(Q>aY!tNc5PS>;b6xE$Yyt?hSr zY?|c^J3IX@=x=-n_jCjr@^(#mG(>duYMtykqPYEpKW_0ng;GgShT3o?FW=>tJ>AMx z(5_8G+|yzF7`2p5XPPjfRP}~V=8s6h-8w)E+)9~0!nJtbAYvOS?}|{Ha$`IHG;XW{ zSqw39Ueo46AsAQfC>-3dPf<H@RK__(g3T6wyI<z~a!D59pO&|z$rb5iqnRJB!C@@l z3BB!AxH3-aZ42S5gR2Fu!*E@9N^hG6*Hdsc!8ISQq}~%IjM5TcwzncAnnS@jj<exc z#N~<o*aEYFJuij|)mc4$Dfpre)Lt9kbEJ(w3Rf>&eQ+Iv>kn`phwCl4`r$eO*U2y1 z_*08P6=9Wx^tPh3xrz~fbBQ<z${#mVnb$NV&TUe~>w%>%&x?N9!2KBKDW@27n~T!g ziVXU;B4d7AkqH-p$F4ME0{~k<q`&rXO+VE>*M;b~GfcfZE*hIufg8q?5(~tP4RJor zrmSQX3zsyELTFgDKr!wO6yHpN1o`lI!-gm>G%PX(E-j<FN^Jqf(D+oxlNC&h0~sde zn;ZJa;~rb}XL0Wziwj^D+nj;lg>{h=f8S~IfbXT4Nn3<ELdK#8!k$p0+4`pgXCn#x zn9bSAz1|OE6=g^{e2QV^UcX%akt}{F2hYf!XPZuOjXz<)xes9z;!udgf*-?~cK+GB z$zkcejK~*;rcSPL10rOn)!=!SL}br_{TfQ*8TIi{@Qs~20onm5+hqQLvs3o$1G`N2 z;1o4FlH{nf{G)@+X*|RH$?{#K{G(aNXLX0>Pvcrf4{CkrI48ZrfU=vDb|5rrKsm}i z{>(T~j&8AmB_&c>9FWCmtWQ6Nl_kSGO=0B#Vr4Xml^?}kVOZHMUQ#k#pkZYu?i6oy z<qLbS7I%ll!FE2(&=F7L3>!M-@;!i#<)J&LM5VA<_CTk88dNFQVut<#=t#UH+%G$% zsvWwJG0S}j&@qDOxI;t79Xh#~p<}wlKLzOcG@#=iDYysFk?;qKi&cKN>IqB1u&(Zj zhIS1g)mry3t`gAIi*pHnj1fOt6(>E0a3q#viLeio69ANkFyN#%9L^^oRb3bUc(fq6 z1(0k<kPI6VLwuZp<UU+01%0D@@aThy$a^_QKel`V*&|5CEM28w&_iPZNb>s_NXC;O z*#TWA4j}1?<C+El$qOlvJkLP#JXCauf#i^GzXp<?&lyO5Ucx}~a|FpD1j+MBkW6ro zvcm#3pxh<%0}Lpm7Xc;3^;2Ba_YvznG!nDDh9eEhJi53?Q8tM0Bv@k3UeK`6R&se< zE+3T30bou#Pt59=)zk1kt3)C+KMPE2u4M=nu5@Rb*43pVxY?(PSDbtN+xVo3SA5GI zsD}rDs+bF76aKs<xXaJ>BN&wVGtdk&|Dj(FeiSQb8}5Mgxx`(7+Y>Nb=4ov8m-rSm zgLq|eN-{5T@dM&i7atWfnOvS^a@iv~AVxon0WXh%aPmD|W3`Gqj_nQw$ApvLO*~;x z-JX4*PnU)~{jz5lDDWup?BZIW+h<Bu2S90eq0-LIa-RgTJb_|)KoiRYI(cnUX+O9t zt)M{l?304~bai1=*<%v<Ttk~Ckwd7m6HH})l{}7V?Y1##972^n1k%{1N#hVmW1A+8 z@su>~L1_$5kj8VC3lpU=n3Bdl|5egh{58@TA5+;ozE%>M%06!qcl@~kh#zSx`xH~z z1Cv#D6gLbQ;vITY{ygFLlAzr$rwKPbYXE-M<*_d`lXfQmV%rjfeq28-No!jIx@n0? z7h8J)d;)bwtsyXDEfHztV_U<=ql>ZspzuJmnzbX}h;M*+298!m@wl*47BH_U9t<6} zL{!fK*@uI3Vm~y-O~dare2A<3Yv(|eWU2=#+D!_kieht6OJo^K6NQ%S50&Uc_ZVd# zbcwx9VeW}vv9Ef869a7M4sd@bluLq9EFA>Gs<U*Fa!TTOBx<kaIEjSjX98Iv>vU57 zM&w+Mr31>b42Kq_xf5*M2G=J#d);lDOi}{JXL^_5f?z>kNcfJBJzp+A;64r!dp7F} z4W1*2fSs1E(EP;!{zN<=BR)6`L-mn-(hlWV;?0&K@HjM2ZlH}<z<Ia>I?^5640kO0 zc5o_mAmz4tw@b`yGvwdl_Juc}2PXvo8jJj@Zq)G2{(8m09X#B;%FuS3-U$5NK4uvm zDM!nw-kmR+?tq>(gegyK{yqD8_BE|J%U^6Oz~($O+EssM%6|aUL1sL4EdYQ+OYD6O zTvTP+_dO%lq>#rVqa>RRE4KW=EJMQ@6ciAU02LLD5k_Won3;wd!?G4XDimnh&02Od zBcsH!qVg%)+(IQ|)r@-FqLyu`$K8insZhz-a`pXR_c@0-=WzIF_kG^yec#_R^ZU>J zbzRqe-Pd)0opbJ)Dcx@_%P<}^#2mE1pFjVOW`r{b1fRij=77mJY-4lCnFApdn$8?B zQYf4`V4%?a-2ui-jH1T!!@p&?=7~DA@NN17R9}>MCfhfL{$S&_L;g#{SSWURp<(ow zrYDAn(VtnCAEu5xjQK)A3~K)cBM+W1j@-YT<c2UGs079iK%4!7Z#e(DOxD6hZ;|{n z`%OOM$OC8ghxkNUXZ9N@W}=uu;(UiR_-;Sf(KzzG@<VTP6_5I^zU>1jb{L8sCB^bY z#Vn#?W?Z?UreSwQeYkunHr>$7H-?8s--z2j^p6T7BOch;Y&j5SDU}aTZ0rn&ZcluA ze^2?co~a*k3#}5Ch?YBK5-oWsgzSpYc;<kaLIYX!g7t?;#Zhk@F5mYySt;t^JEW*@ z{7h<@@A8?{ET0LNQJ0MT<iy1wr|U#wqwgwzKwti(96yyHi<ck+RupLSNvRO}aRs^~ z_1<?aQTwAlpvf_mt||HVCt5p3&{h8%7(iz~Ejo)<oGo8=_MdM>)IndgsQXw^_fY6Q z1_X5ZuF)S|fZ95wHf&xHTE2hknd!H*H5i3an<|O@Kd&A}H_$pqy|j!D4{vH*3yqiW z;+=5V#-pZPTo1%Tc5zh@Gw$L-5i{)Ko%DkBM@jec=C`OXL>>0s0Bz6@e31w(T>rz+ z|EQ$@QAz)!#QYBRfvER3c36Co6B{vS(;X=br$$3KH98ZgMuW-|JIh<55>4NI6!r1Q z7HkMFEI-J9U#MdYR^kk-SRHiWbTL|k)vSB!N1J|6?OF2OKB+;6Oo)mtIuwGa*rY>7 zM8!58GQ3S{J$O|12;6aix{_IRhuEA0{!1ixjF8-69Qkq72O9$x-&N}aQZoV;?liF( zhooj4;?3A!-aIuebYx=acl%&}K2));D39qyDDN%u-vn9oUSdZ&s^1*5*%PwaW8y#Z zHivH93FSE<v_tQrhb)J%EL6r_QW-vW<cIW?!P7KL|9<3A__+MLjkZo!{@K10$f0@q zaQU*XVP`Ohe^MDY4stU>HYb_*z4jkyOVP<MDF3)QcKWhT-<6eKL+}p!A7^i-Zx;JP z;=xg#6oRF`GIBKbbf1FxGZ37avpI+U;A+@;3q2??B$=r0%FsK?KcO`wZtTeK%QHmn zDkHIOm_~lS*|fPNWOI&b)Z3Tfk^$Sj+fG8*sa{Ps-rtGF`ywmn(_-=gRQbEOm~2i8 z!D<pR8@%V!LitVMP&Vq};~11v&z!i9)cbJX--OMmPbmL>-xtEZZ-kK_?E6w!pV-kw z`x^R_@#!9u?+<U$-1K0M$sbc5Q(h9Xp0;#!XLQ&ZSaov@mLzPe(cn*{HHtiuWP0$h zuVp26u`4&@GDu!WHqEDXWR=P8p)YjqypF!)Iej>dJm11Ii6)CLY5MT+-AGyB;!!Ux zFrAo0y_>$ok9}aHZ^X>2C>S=iQT{^a#%qb5?w7wq^wM`WPnhJ4j)$+KuaG7*TzcLh zbezXt)850s4cFR{bklkM1#Nz6Dy_bwVT%0EJ&E-h9m%`tTiFudd&Fm&Bk~CvzV<2d zKkg9UXyQ9knHCbL+s6OF+*CQMr#z*5YIDa!>F3Tj2n9wV;D1f^Z-7URJiX}+qp-34 z+%ps&crz8Bfu6_Coqsc%Vqa4%mtw~$RzR`ODCVSC%VU~)#!)>tQ$1mFJx@1E@*BDQ zGUBTy2~`w(gksec+eEP%irq`GI*NI;^50H_{4$dN;;XX!vy%L?Tz(Vr#gc?06q`h` zV-y=tu{MfbNwMP;6SVS|ll(T4pVliswn3Cn;ej_9J_D^=A;CnkqZAV;)<m%giv5;i zW{TBs)yO}W3i&ZM6n*uIEI(V4pUvgR5nqYSXDm-S3%2)&Z7Z?8{))zZ@ONmSy5`*Z z$~03TW}IAKTX{+=7#|_VW@5ZwW+Xb3mTo1{branJZ3UHS#{;o7GX3%Lly=ZhBYN{n z&|j-ZZ|bG*C{H;K`U{9YmFT~%??b;Q(E5~2Usaw`0s4>Ufxd+3-|b6Z6R=mv^cCeP zWuSi!^cx!m(OSPI=2~JdtEayZZVkllBKx!jVs>fT?c#hUk<Utet;Cn1s8pm6729z; zk;D~(WTH%>Dj!GX%~T#%-)ryoK;7@e`fGkC*AMy@(0`pm<HZj8KfSE*Pe--J|3ub6 zWUs&6*Z(YF=ki$~PbvQx`5%nsTZErr-DvJuPg2g36punmWo6x;&Yut1wnIea5sEI^ zE=k!?i)8th8hnC%R*J&Lw~(wd2aPL@M!ofSfb3!-YbUaQyri`km4BU#^4L|>{@(J$ z;~5?AkEI`PB~vULt7sCr>@8xcA(rPkOK)K(3b#{X4;5C*@+vFau@?#4vX9z#jG{N} zq$vGve&A{zZJ}uRPPx@b=qAXP=6~>3rzR^}eFuq;TTSzdEMDE7aYV3{2*O@c_&?%T zqJJ9S()j1=B<`OO?w>D`$Unr~@}j~&X<dQV$7Q~=<taTNeVs_7ogjVoMNNmGXYBig zK;m=sZA(PM12g1kL}0QUoe(&7MwZzn+HM8Obdt<Fl`>WKy`5;9h-Tu8T7OdcI4X}U zqW1TeQ+1}mV?Su7!qam>nna{u?p8KIqF->?c{Tk3qW2N~t6KU1tJ4raPQ*1t{NV1s z_6gX(&?vK#=#LQnf<E;0P0}wS_>T!IT|JdpCb+<Ijana~f2A+|Fru#@`cp5c=#}>S zd=7|?6VdxG1nn0v@08ouU7pfK{wF%SoBaQRj=tFZ+}Tmg|EJY-Ks7<#PmImP=#&^G zd)vY_Rb&xmH&M=dLB~J0glkM5Mf7IuMFN+o=xP47cgyx}75n{}L|PAs_%F}v_^0{L z=hVs^B>EDf|F`G${1bn9AA3JaEUm<{;d!+_^?|z6vi!R8lv?sX5r^MR{_iV4RJ3PQ zg^oQZ5@QW9Mn12wXL!JWS{i9FfmL!eFYxjXO~?Bxfi@h(-?polKM;FbLw1nJOkQgL zu0Hna2vmQrm{&-x$BEuf^bhXpvwnsLqIb}IBm~SmG?VLc;@eGpX}gr;H$3p{sowVd z=2UNc{`|DYQCE=wOECn5%I%Tm@236FY+9PB_^Uca|4urk5%V$8^$^{=b$#@22}BTm zViWw*cxOlX7L8x_Lcn7XAWoI#Br4BG`${f~>}CIxX6{=_L={A|psv616tzXq|HRly zjFA!}^{=Fpvi#lUDRs2}A+iWR?SFRaw1?<vA7nYH@JBWHj?R*s(S%q-E=hPzErIIG zq5WTF9sRD@Ke{N|MA1_eP1_sTl8;?bCH)RW;LlxTxXz93hEbbB`HwPno~ul&2)u{< z0}{<!oUJ188V`>Let1gkEF05E4E=>-AUgegubx}l&hdpZid5aw9l@8fF{EuPX*+zU z-uh$;{2TqXJw>AfDNfB)(i#u$f;HfN?>X&uN9Okj`A78fOWv#|{%YcXSchLZ-@1sh zizt^pr(Un#-JqEdXA^1UJs`d5xjys#zDxSdKbI2yI-)mf=({pHexab3<o|~S^mRo4 z(X-n5s^@FDU+gVUX`uO^h>sERv(NVFPa%OM+RS0zweT=B(D1Nk{#`@-LJ9b7di*Ad zpYiZmprn`on7D79M*OM7f2|&W^OGWf<CEfbNvyX1Gk4JTk@){o+lT*Hpp5f11XwTM zp7NA>y8a`+y~OuoZSQ`O=Ks+u`?t~je+La6+O=&arVe5%sSWm9(f?Fbx0d{0D_$y8 zex(?KG-b^rlCAfGWCpMD>8i`<gxyy9ysR3Z&zN@`g{QY6wmED(qMI*^#^*B=@IhZp zd9(X<qtNmAC+E)FGZ_6cBBk?YAaDDfr1YD4xZ>-u{03L@OXwHP%f#F=%59?D0?PIB zTxzdfp#N~baFxkUm+Bp%Xu0b9FTrxU)b8jM`YoqR<&Go$m(!(g$8P=dVJN3d)s6~n zId5;^uOH(Ym|7ON=GW)X^VS4DN9?`f^jq%qEAVepBrs<?-O>4<*MHwDeWQ_00CE8r z@BmN+)B<rEjhyCh_Z!(6AmjlfyBN3*m<FT+3xNV)4e$`K6?hJK8#o4h4P5XuBQpcj zfDB+c-~{dkwgR=lZ-HY#ClFF<WCCCYCIPd6g@6~R0&0PJU@y=Hy*@&C9Oweh0T-`F zT|g4B1n>YGfL{VTfR`w}$;gf({0!&>OdE_W9JmIU2Fw9+0T=K9@CZ-?yb3e{Ex?z+ zA=Ljm@I3GvpbYQ=2TMiUjbN-4*LS7!46L*P;hVq?;4-A2LHJuB8h8TfD-m7+2z34x zcp69pE(E5d+=Or}a1n3;fF+!2DGdiMC7Hk&`k6My_;0ga0RMdt9lxfwNxmG1c8>sJ zfDYsx1NH++Nap}{phu$Rzjt@uAUqDl0D0#Pf}DSQ3KL$=V8VkgCJffc-W;<vokEhD zO8-MY2lY%avMFpfOJ`PA#B3}9$Y)Nrh&h;xO=UN+Nvr^AC+PL)l3AjLYB0KZP+FOX z`B38JbUxIz2B{y*JDbgCX+z>EK-$H!P>*lO^~gL_(;9H*BbLZY2H}<Mo6XijPaEv) zU@PbuBXhHrsQn)Bc_kgP*kT|XoM}=z5t0|MOi0T{nV1*POVc2yNa9Q4G740(NLSG+ zE0LSebLW7^iI}Vly=Fs?BBb1)w{adb@~oV<5V>CP*jTYdn~M6A(MAR>Ja~(7YBR}| zZJ7?fOvH;2%6^=~Wsx50l7*;?ddVy<hw-*$0cXRFLJ!albO9Ye3$Pd14b%Wz0XvWl zSbzzD8HfNvi1$*X&<?Z^>=T!De(y+oaNPILd+&D7xVpA{L`lmJ$#pS*@?X1u;e-i} zuiUd9u_rwe_3$J^+0|pF|K*JjM>PE+?S*w`pN(35_oSa)e>i#AKhn}FC+FNhE@aeG zmFI@V{`AW+sjvL{`d3SDf9%P*TRN(Kc(pX?mod>#j`-CDJKs9G{E}&f6X(4XcOlzT zzGv(o8s;aQO8da_(A|$sfB)+%_N=fLn5|ByJKySaxLu4j%rOer3gVbebmhAXY#DBc z%V+Z<JrDgL6IM-x{l)&6fLJQGYl2NpJI7f($7{1um}T=Vv^xDfK35Tsr)s%B-QL6! zhcCnH&bJlA#YOOQKKGLiZ{-MPjGnfPl;ZTrB}9rpu83D6Zj$1UDB?d?#H$qXUnt_g zRKy=u#LctaMINWkXEV=VvC5Y3GpCZt+}`VXnbTTaY)*36yjE|%eXTjcR-Es3c%))x zo@FhzNks8puXXM9>bxMi+3GV#GjsM@k4+;ak6h$57yIC+e6!E)wZU<Peyg|OdX`sY zby*8-1?DwS3_|kVp0)UJ75lt?p5cH`BxUm?nl&q^{(&fiv;)d3SnIMDK_#ot1|OOW zY`s(~0a1=j<8V2A4y)5~udTN<&t^9dRV4-OfQoDFq0mX)zCL#AN1n%N&9@cVT+}@3 z151~g^PTQuzt<+p(UvPp^V~%)hZ(MO7CQ>b@3I8y7cSd96p?(pW~I-%!f8{f(JM$z zgLGzgb~4qSn8fn@1wOOa=JR`94i_rP>th{-K7H-2@7ExmuK85H=(qnkygom)E^rhF zO;lv{==4Kfe-Gxr!TeSXlUco@$zd6VAgN#4R$Bc|Uq7Z&)ZY)ksJtpS4{`2<K4VrI ztd#G=_;#<9WKiFrwyuyoOL;4M<I86<whp)sh>M%aZohpdyB6`uz(n9i;0B^u2b${; z5)U0H1EPP**aX^(q5O7)aU_F@Kg=~5n0WgQ>^l0_0*VvxaU&8p@G{2S9?_PhC-u{x zfPW_N6Osi%w}XcM&r0gkyg&25w7Sdh!YD6v*$NQ%l6f5YKFas_ywh$*nD6vbvpMZb zYq3vE+;x}F?kJYy#lC`G8jqE-McMfUwtOc-vVB3cyoaogGzwL~CZGgx0(n3-kP29U zn}I2S?{cG%10(?B0TVC*`QrgI5D7#8;eY^y0w&<>SnLIWZlDY31Ui7@Ks(R|v;xO~ z7T^fb3^W0az+RvM*aOr9yMa2O7N`NX0oA}(pbDq}%79HkDc}R_Kpv0{!~rotByjdh z)DP?hwgKya93T#e0D7)~PQV_Z7N`NLfij=~$OSS03osrC0oo!!4^#koKmuR}&ca?T zKrK*qxoFc#lO}OL80b%IFSyWj(TI_uVHb}QMqhGi_+?`*kGSH>v5{AeyW0GdYof+q zd)@WXKfU3`2@@wxj+t`P)SGXac5CeP8MnpFy!{SK{H)mtiF4*AC8x|wO-rAjac5>$ z_JW0rauzRHn!9ZIU3u0O@c+s}yJOXAXOYY8x!YUp^RKz5WbM88t-Jq$pE0lB<#QC- z%r>tVBbTu-TwrCV&d<scb12EOlGEoZk}P3<T6}W4GKaCuX)#l84jU2gGFv?!r$gKx zneEnM%wGjIvlaP1pRLH_GyB|TryGm0&yMxnEZ6UJtiWbqEtb4|x7Uk##JP6ThzzGq zn(cg6Y$1q4A^rMdbFts!aeGl>vlj6cvdHbVK?b5loMw_zzo}s(CYs}eYWN{LEh{<I zOj|MYO0T=fOasb{J%+7lg>$XBz)y3N*#%K+Y$8?flFY@A$R>J+tAJFpfz!OgUx>7M zt=sQa>N?4s>@$P3$X)D1TUXm4otlHeP7|toC13KWGFXaqnwXFMlf#L{HhMBf|4+>; z{jPj&Q?92qs8nz&rac4|CODmGR)^SjYWGdlZkO9<wz=H?Lc6)xgSCa5i%+;JgDLGb zMPskvc0_buX0~W=pB+lOUHP_2L$`;lTMX4fl1RT`1qD+1O|evt>5&$CwF-8d)gx+4 zbhi%B#(NxYjo*TN)B5GZd^!N%EyU-+!e^Ej?Oq3wCpjU}-Q2JIyWB3?0Zx`Sf_w$* zl|N;=y4_e>T-?`gCoQ0B9Qg`b$wsyk55^683|U4wI*I014NVccokQ9dqZh2!()Vu{ ziK)Qqvw}QKbh&oWdu@07v5wiqVV)@sax?_njUos7E;=3go4UK-<u4`!-edjWIONfW znCbnt!RCV3+%DQ*ftqMz`=zyd3;je`+$)!lr<It*_$J3g*KoaRkqDaJ#2$?6Vn@E$ zUF=@zGcR=TR?fch#$J1*ijy9{uLbHjkJnx3MYFK`x4|r{UG95a*fYrFiR7Z6j2Mw2 zlFguRlXtyp6p~&u4tme%|M!=<&pW#JZ63lqi3tO~H|f096zdgl!w}y}{tb$^afol3 z*Ze;>-gSIx|3BRW48iwMU#cEp2)>O&d<T2Lzxp1m{qzpUTbWXp4Y|ouyVdETwl~;r zZH~df@2{`luyNCa4?SGAc}sak<s(0@`o%9F-TK($zpDQAZ=Trp<o2g(p5F0H?X%DA ztlRbc3%g%@>E-%YUVUxPzrFrO!<)Z-Ywz#gey4HY{sT?#9(=F)_lFK2dH?7KEgydL z@5lb|@h7dHe)h+<KYjk^_AkEtkK=#&>wk6x{&u4CtFOQ5I(h1J_qS)h>-qclKb-x? zx%2<>hQ9v|`;a#D|K08Xf8PFsT~PI3{(pu2lagi>70oE-H~tIonqW@D%S@5Ac(Js! z$pr<I*YZ6_MjB)BY5ZO^u6OutXqN6?(;J_Us|t!{**rcuGu~h5FZMB(;&*ZxDcDm| z81L~q=!QcY-O;7{*|rs4zqGeWvATE^^^km$OEO6o$srlwTT3#CpLmIfWm$cGZ-JG| znB#TuShn5oEtc{Y*$P}XDUt0LV`**|&&cviq18vc#7Fc*M>JH<SB<$g`9At0T(-FH z$?}Oe_L0A!*ya^)UMB~4m+>M`s<qe`pHEj{8E%i?!}G+nD2Am$qP5UA%Uu%B7Gx!6 zPQ7VTLTW143)MplC<C3K8fnOFgl41lFam4=lfW`C5bOkV!D?i@Av|A!9{eV`s5to+ zmxu1Pa#Ha`Y?9o5PM?k~Cv}=kTVVpfJ2lU?HnC(8r(eUL)j9e+ALRGrCiA^#sS_b4 z;L;L=^bB<qLi&rV3WW5$wi+QlW35Fv9AUl0cTD2zk@(CpB42Eb$X5^}@|DJjd`WB` zo6Rz%=V$Zyb2d4iDm{Or_yQ@+;7_N-c!DB68*e$D$QHA^_*1fYmc^gmWg(r(=Hs2M zp`oXGnMkFh<SwML_%j|QO)9u%LsBZ@X$WVdESWzAQr9Q*W@+*>c<vlX$>jX$kdTP{ z1jMshyoxpfpXvRSX?3Nitm%-O%;s{(8wK-&O!$1eK`2E$5ApAp4h_wqFICXf!dsod z{mAMP)Yl@E=ec?4*C+JMwd`h57Qr+KJ^BjUEzu9-^r4op0qE(OSA#@v6zK<)Pv2T^ zlITM?j|uN#{nDeavQ~xu!v@j+Li)HxL2ntDp6n4V(GTTy5uFjZMQI<?fHtLzR{JeO zw?92w-1H;#A#2zEi1v~%n|=iS#lZ0&q0cC4<1|%&7_bKF$l)sbfnTG63Dbt&-{|M2 ze#}*m_&h%WvvV;*dj6kJzfsSh))(?z@iajOKqnW(lLYbnWB}1vF`x6bl%E(7PXdT* zL?Uv${Hd~deu2&jB=V>KblPAR^F!K7E}PB~&{+<uckU4BW^+BPpwXx0&(m3nq`ixu zHV9J6`eXsrW<T1K%1^r3q;?e#P%i2yS}qOcls^ZxSf!I0>hc84n95Sp-OF|NaZAeU zsd&<+02ZT%I{92<ah)vW@<b1KdQVO;NyonVPTtBw$x=*pZiiNpNhoph(<pR4C5g}R z@m$YzKDWnvtX?18vf}51l3`c*ya%mpv-!D{3~(m%6@d+SO2*7RWreQdS(1g)nkDm2 zp?xG@E9XkJFx}HVS~>ln9#T{GJ@un5r}ZpVT3cm3<a0sv+K{_qqJ#Z?_O=`AYa(B{ zw@^qj3RQ0~p$4c2^8U;O^J7eCL_7?$-$m?xMxpo_++$GcK9p+D|A;*IN#R8b-Ne&3 zxzLZ!={Wi68Jl#vr=Z`{I=Q^}-i;pX;PMNGbgn0tr!Q$2&zUufQ^TAEF6`zU#Xg&t z4oIXrR?KmGX;aJh_S|aNo1!0R&!+Ux#Z>Z-z?RB=fn`7J3bX)M?tiOl$IC?tZ=?%H z554<jUEIX?zv*~jZ$d-uQ#IFJ8ecr_iY*<PKex_$>ZSAd*3Dn`fK_MC@k;ZPI5PZv z^xe}tPbqUn+QH_#f#wA7AajOofVoH<-}5mdSMgJ1J{^66{UW`0CdsS*<~j3wEu$a3 zmDT({?9eXjl@r^hSU!z^cvIrWd2LN!zPsb`QLQ~u^Y{Gpwc(fEHTN5qf_+yf6WUKO zp$lM$3qT$)$DsC2JS>nQjmX@2Mxo{#^m8ENo1mW>5pSL$?#;C8r9tEC2FS?k20u`j zX%yO-LFhV<F$6T0iKqv*qO1jFEy%9|EIXJ`io8bTH6opXuoQXql>ZF+%3<gq3;IA% zP8af=;Hd{~4R~TG1Z_+$%7Gk|)gUhq5CF^5um$8b)-WLfWmS~N=xil`GBXf^{4S); zKs#hYfDi*@05w2Js!{NuECXeERA&Y9p-arIkk!Nl&q(pCW=>qtUUo&iB#vLN@OT;G zCMjNxc&HSQgRKQAo{D(56t4qKgcNT;JW|IW+H-C!L_O9+Ecq|YJlQh3b}_R&_Qhv^ z8?H$kHEGMC>!-L9j*eb`3wxf;Yq+y!`xoCFzv!dU&lzxy^%?s-dx25NFv2ge0ox2e zB3*^FWheX!WYi&l7xDoQPy=)U!t*EtCJ_B__zgTB0`km|lL6EN!gR>q9Q3(m3lk#1 zQwp9^(B}~k@?y#%8@zj|UxmQm$TtIB2GEUwF989**)vn$FJ$u&h0RSmw$+{)yhLML zgC<?J5Pc=gAXHs!5Mlsj|M#IR17&&0X8`s8Jff#K&=NMZ{+~*6Kra9_Ve0-Li!w9v z+eucKy8n+ySr_u^Nr$jt{}+(oNIDY_$<_3KJ8U0=vaV2+A=LK&oJFwzs9=9cK)Qa^ z(ECFS=slos1gb_2tv^J9ryaC4K<OxTf7nL$L7o7_jOyDTXir2t5;~WgDV@Ph!-`OV zd7V}Sy1uvaotiqI@4rxQ%$2BjEbNC+K-fm@9UIKEj57$$ON@f$D%2T?JcM~ip!*Ey zc@(y2fn5O4hlqcKIM4#*9YeeSz=S>EjR8*!c)NghJNRL9&luDJIl}vp^&)s*LYsjq zq#5MK<X{c~Uln+2BE@!RAYD&-0G7Xjw?dr1O2J<Pn7>86kYPby9`tUv=#Q1ETZ3c8 zG+lqJXwT!?m!ch4qs>6Z)j!S#+2A!34`8`^=r$ld+F(Bho<?fVxF2tabxVWm*%3ut zJi->2eY@G`rh_W3LdGI<(RXhM`abVQgHS*ZxYcBQ7q$pJE}!pFXm2|SDLX%9?d-iK z3tn~QqUU8|2bL=B6O{L~a{KHwbNSive7>(KmdbKfR~^Mj&qhD?a(ddEEaZESV$jez z@m#*6r@g3nR@lqw=^S|i@(TGrFc<q659iK8y|l*>b<E}0-s&~Pph*{5J(G)VK9yA* zt~FMtqrj{vlaCzoJCJn#F2U)Px13ov?;5_<^z+@AxDP~mva8s~54U;Xi~3U07p0}5 z-&+vItcPC!;Q;)5Kl1WGGZ+4P7=8t+CW-U3c>~7nZ2kVPe4RdYVnOE8m*#K3C1TBr z7iX{UUWT;^ycQsD!;h~wcRBj{CdK^mpg|byUao9A-q*}zx?=wd@sRVN_ko9Nt_2J^ zpWeTr`h(F=?ZSHRoYiF1q_y`IqK2vWf7<<}cK@NhHV_t1em&au;poRlGuAUMEUbNI z>U4M9N2Ax@#~SCaz4s0JV{(J$KAw5_qgTl3df4m4b_2gZxj;M#VYZdz+dSg2d-lLf z2H`3R@6;QFCeR;xNu;MU`bt{cjWIDXip!S=3>oqKt2pQ9#wQm`xBuPVIW~IUV9W5@ zip6W^d5M|niK$chmqDgP-I*SrPGNHT943YdJj~+x;xX2~{a(uVxQiWJo1}l?2{-*_ zmT;F*pzH3;tc0w6mt}7I_alqv?5LUiQ0|T-`VU!_Fe7)CvmoAUv*yMZ6ePRozJ7u& z-<g|f<0or!r_7eKk`t%iG|5x2qVJRRDx+{@PVk;B`Kb-*<5C`#YwuUlO*17Ay>5OI zd)&FfJkoDG(lJ1)lutAU9a+Se@uYq|_PJ`^N)+;xFDLl7YG`Yb-Yw-h`;os@BdZK_ zZ5lb9NOwzlW&Ox$)5xg<-T0(n9`*T~kxl^efNH6X=!`n@h_|^Pd#y`S+qps`v!fp! z_av#?)uiB2y|!a7mK2;T>ArXu(xzmzDOu#nMR+_};@vLpCA9UCjPcv`+h9pnw;@9z zo6~F$-iKH6m1y|NklqT^C#(6G4&SEj{q*HzP5)QOlX*f0;Gx%U(1oW2^T=l7k&Xj$ zfNJ0v5IRq!+1-!LNXC)v{JB`4GM_>|@owrzcF0rueQHmNx<5AQ@Wwu+Z@;b-wcXh~ zHDAtC`gV$*r?zb@(iRO58-RyiC7|=n3-(8P?ox{Mwt4;cN#Yr<Bio~q-2l2H^VDr? zL%L&LaGq)C$0kQKvRXkGks8#KuJfajt^n$Q*fhj}I-m!LO*aZYU^mbVM9xPZPyy6Y zJi{nt10J9WXa{b-6LTd{3p4`ZnPPoZ_vJb|l0K#yqcBFNtVz<9>_oh+Qu@DI*XSD2 zo@R|c*=cG&6d>(M3ywvZkLmEq<J7D(PCYeZ*?4XH)6{+Q7}9N0p3K8^cp7W;$7guD zdVG#gSKCgW+ftv_AD`Lj>hW2S-j~<@w7w0h($%)B(eUZ53A3a%q4a6}x%Rk5W;dnh z2W6J_qYLrL^@Zrvw@u<RY1=<v<A0<*iu$(oQy=lk^_g_)Ymn?6s`cf3wY`raeVp<# zf^|0Z<16BA?MI);40SsuWT<7ze4#pgayvqG+R-iX2^zi%O?}&tu2a<4-H)CXiuwed z`a*YzeBm0tvzq!sF}5S_4Av*}F&#d+zHpuTCP;h{8b0Tp>iX6pU8bmSLO=BppIl#r zPJIayU!-;~r>U<K=^jOW3H{X9rl>Dcr#^W+Xx9ppPF|=^o}iN#u9Fv`lNYIzC%+2N zo|equx<${)+mSYBVgCZu0*yc$Fd^G0IJ1LmL0z`E7BppxYe750v)Q67l6$d^ov5y@ zC=1gm%gGArLA>^VQ3rX=2p?e02-jIN>UZ?*H&oV>rCu{ks7H|Ml6ja8kLelxH6tlo zy=LTOtJ^2{x$0;1=b^G}^&D2M!`t1@{7&Ov9;+suvFg;Bi{xvjGM#xtc^wp@)3;1I zd7(Oaf=-_NItDweTcF-!RY~dY1^@N?EUI5`pC#)QqNArtCofbdPteH=*U5{}$&1v< z>ph24i~hV&J-!<$z35*XTO?O+e9Lu(=+tl0$qUuV6Lj+AR}%6{7X{lx^;98UyGZQw zjf;ZU0Ys}e?ucKW8$t%yhw^I)$mr74$8yjoa{AU+(ocOdfA94o=n`^*GHEW%M!Ev1 z15Ar?T?1HvDxhU?&?liwM4#j>5q%=d3)QKY>S#sTNWDEwPH_KEyvP2@x@9|t4lu`t z>ddiSwfb{N?qc;E>!kXnJeh~-@K~PJxBc$L>N$3=rd{$p+5D{j9NW2AJ;$Ea;XVGW zeqV}SqTWlyBAu|LFCWw43wcg|ZeFL6SwZp?GG#v24_}B*A2jLY$*)+*>sq4jt86Le z&87cbe<68#eYH!YpR!()PM-YoAg^kv+DA1=*DqCH#}l2Nf0exa_fJ6Au94S8>0GtE zs($3PYvk2~E+$t!e^`*t&h0yY5UpMxmigsZJLonkWYXEstw`?$T62Rkqn8<l5};w3 zy1x>?Nv9r?8NSmfT&Pplt*DQ9LzWG#uGpP@ug&<}v`jtDvyskSrsiQfJXJgOZM1cn zdYsqxqtEy{eZL)BruO-99bV-t4{}V))jo(o+Om9TcH#UwddM>6*EZ03maF?uDbib) z_w7GKt7jXJMkd{Fw`=ZMcY?Qdxq5EtK)QQ*u+I~X-rU0Z#xUlKV=QhNW80rGu)10U zYyHN+EL{dx1F(|@mIqV=EkF+teagUcfHI%~=mN~A!2@`JYM=!e(`{fGfCqR6XaqvP z1s&i4>VUI=`3&-a)xZ-#GtdLv_?>|*1xkTB;0s`6kAd9=*nw)`Fwg@``MZJL4O9co z0Q=s+;(<J%4ER0J15Eh=x&u`}>{$bQ2sj9I0b~DRVDo_cfI6T9h(3q9fEwU1&;?w2 zzVGSfbCO+;NFk-S3QYK&^xIQ%`7uQ~g;$R5zkJ4}Oqh4+!2BN%Qtl5|m$xd)qc3B^ zgv<IbFG1P5%LbOe{|Y9^@edX8Rt?>zvB9z`MZ8%<ch0P?uR>9NFp3F>q6XH-F>&DX z(YN*A-Y4#0!pnCI%>UO}1DDq)s>_dP%7>>6%%3$+UEZQ8Z%7@Of6Sfg@<vVh_^kfr z??Kt&tbyx~T-AU5T}4a?)%-r9FJGK{*5ymrM$$E?JP(Cv#*b3og8P`@xKETPJSc`u z`Qkdzg0M3`_>591llCbszYys&bjnt5Hwct&`NkkzGyKsj_}W;Y{~Z`ABN}>skuv}d zm)|9xLA)3tzs^NSx?Y2j=JyE*slC&>#Cl2Q?m=YcNitoM%o0iF21#axB=d2FOlBKc zW}_tYs3fyhlKG`1vs03JMj<nM5SiwaqRdGrMVYZDMVYfsiZWAAiZU0T6m4HB(LZuh ztb=Gb4W_rm)2!fW7=)+mWYEW*gSFvQkTzoFz_b|(+Jr%9OBJ-9L1^n0wA%)uZ9gU2 zqvKT29?b*rD8D!}^D`zW(?^k($A}ynG-r*e4)S4Sp*RNf3j2PS%qU@)lnyOa@6Raj zEOb=X{j)!+b%|&jx-NB+E}cWrrCLXqvO={kuY9i7Whv6~7$~)ib>-Om)}@RS#@od` z-7sm6<M%U>r)?J><EIV1ds}5_KP`@xs?)(fQEwlbf6uk6+i~}o!FD7$#CDh+ecNGB z*p81GyZFpIM7rm|pS4TvXg+Na^u8a}c-qjrpH=N^yG8nu-NF7^;uu<c4xH-SC$xI+ zhAdg`UWd5u9MNf`QtqccgUbzB6_gvkN|ZZ()xdI7LJR`a*fMuj(EofN)NN4J{e)x} zeyt$Y;~b=(D=sh$s(+J0|6`Ke<2rKroFe(?M7KDPpXnC+rs3P5Zjq~p=Cggm;JW3l z4(jGvE$UXfdf+x2FA;T8j_rokqHXiO74^4&YY_UIGuotjnpf-Fpyu1)cr!Z(o`YMY z`u-@@_t$Sl-A*d(mFgUty?z-nxV@^JL3`CW#dg&HujSwmuPjNz=Dt8O_XpHmj$G{F zlkg1@J`TC~!)F4L+8hFE4<M<XK|t*XB(+C!i3?vgHOxHuAs01IDtt$T707&0`Vz^5 z_Mh|chx1)5<_F}Vnje70{1T}72?Wf4tWG!{H{>DW@c`7^3whY<s{}=ednNKAb(IE? zcF9Myt3hLL$aaAar<|a{2wz`=E+?P?ao>XPh`33}CoXP0H8I1kCm%KJE?^0}4fzm1 z&dJA~RvCUEwg2+*rzry@wGssc+T}=UT?nY1fTXsdfVl8jZ;u%sa|%$y<G>Hh@HkKa z36C`e_~YE75MtH`B)9Pt;&vOzY>z_J^f3WT`dHw?h|=zeamVyWN+DXF`-$m~jzWk( zN(!;ZYrs#4xzRr%<!;(fh(Ew<<O&JI$4`Wx8H$LDk4wIc0_bfcog#=o4*bMy2f^GD zPz3RZO%eXQof&`{ZiW7czSoZ;XrH%;aJzF(5oWuyrwDty^TSWfb|*;u2Q)quenI@D z{R`rEvtNiX)+i<}++Ihc`pYMR5vyB}X;{74QVj9;iDJV3E`h2=ZWE*wL;T(F3lZNR zh;+Af93%Wp0GN3)B@pvA{9;5I1K)wfhq>LM1QPE$CD_yN2P8MOlo02pPbrvrX+sHG zUiyuhm##qFasY>00)8XhB2Y?XTO|)QUORFT>2*aZBrY0C3CEjHDQ0@LDaD>%8-8O? zuN_eLgXT;BloDuT{DzJp{D#EuWvH3=ena{!&!F^2D9!bU5p=!{gD8}i1=67Le^nq2 znmf?_0}1bfKM-@P{~-D{A!P*m`cOT)k@R$w5f}bd%@BJ5lo+s_bu|EhLrd&E3v^Re zwkNmghsq~lK?;rpY+rE%Z23r$N)wtEGV~MsAqB+}noFB8O=6Ok76Ahk9y5S~7GV?> zkWZJxDDY5u+L4NYbxrvwI&`686;yoqVbrH67T(_Ho|}7fbJKQYT+21j!0x%{oPGA$ zXP<rkzs~vsO*K+qptVNOfp=@vbwJl4=|IA~?(vYcJX{|Q^FsB}&=IbW_IUy?mU-&D zcx1e6n%B7uH_32YyTCo(A@JMQA>@5~hg6?k>>{l0GV3c{7Q*T;OJT>>b}?7P!j`hI zvt?mDU4&i3!fv=M>B!D5!Zcr&WYXRVZfEnnt9EEQod=$=OYk2IW-@@<d^)#Vqq}Bz zXg%@i?ymLLUnl8peVw2y4Rz{ui5Tx*1%E^TOW<$q9*yqNJraNN`Q^ChG`gP8X(Fx% zYzDt=%zytgf@zvB)NPjeQa=dS*OYV2))ynw9rUF}ck7pe9Im+{<<+YBo#$2kMo!lV z&<b#2Bir}AKzh5#zK|oc`*Os2pXAoOm?KHRaneG`O}~^Q?*iUb8Qxxe0}1fbWq7sq z9J$b!Q)B7ZceH+eM=RnxS_Qe;#**SOqet2CMCc(6-eFhm_3|!%F}<7GY$s$nb#+%& z*<AKqhl@87j$`-s(QA|mImS)pZ65mQ4jG7kd2V~Plb;F!oV=BgY>wRxXtdkC^qrm8 zw8gR)c@CkCy~)#p-@$i#4x^0{{*p7}`#yNVHg7k(%DudBEssxI6vE4SIi86R;_cBE zIeFeg5;gJ%f7}>a;4{lzjd*tCwa9N590~avQ=j8-@_2;{nIrhxy#8trUS((`ZxG>< zzbvoA?<lu9i+Fl<Ik{Gn1BS+vf<|ahG?<ud>CWsTdZ^K7ByAW^xCgOC2w^3Cqpc1* zpH*q|7Q6HC4)V!$ex96CrvtfggyvEfWGkSNqtwRkG$fyCrwezlQ(5nbx}%!+)>(Kj zy{yqyE(nMBl7}%>#g6iOn6zGzX$+Gos7xJ|Qk~DwR~0)T-99Qm_#zXca(P=#n6Stf zBpd06x&MuFDX7M$B9BZ{-lTqoykKqC7K`_x2VZk)4(E=X(3ZF=Y2Mni#e=QD9(_7$ z8)`#j?<lj+#Lua&sNlWg$<~3|Lcg=bHP7L)6EBU;f@(o3@!ObXA!Iztq98jDzvF?z zbUe$Ng%4KQDtM9{ZG|LL4Iy)APKy_rXGG<?ZFXh@%{c>lEne8K5R=hmFY-8CLY8Q0 z*`$vV2ntH(3Ob8wfI18=6;VNbDRzrWL>!@bpfNW`<!0sCJc1j98!5Mg|64Q%ihv`$ zSqq=3vU&NSuXyHHs9W-*ouFz?-UU9pqY7;fAD=B9EdDTZ>PR*XSzhIFSjpd6X+wco z$x^C~e3eHmVL*GC=w`9`E5V)+UJj81EpqLiTgdy|)!uU8-$>;x+4D6ykg1~GN+!wk z1F!QW>rq>TYEqClSw-WPyNse#vYc)o=sx|<ad>@xfqjxE%EU--*@8^S=WG2|@)C!X zp}cr;a}35S3iXU;n#1W7yx3i+RJtZke%q*(OqJ}kBDIoKbfJs@0+~Q<v?^e?liJXw zz{9(keG%HldYGoS5?yG;fQm(<AqD7`?W(R4?>IG0H(JahR~4WW#WvqPd3+Tsvku9n zkhckLm698+ed;tqYID5qswpLA(`cdt41rmCd4UV_Cx&F@7MV?mgqQf6P2@L#g#=1m z)jpo(l!Nz?N#HJN7w+X2@Whgq19n;761S6Q3FxnE%Z$pt)jsxq<PXrMif4HdTEPA; z_Q?=-LErv67+*~U3;;bqpJf~w0+0rf0g%5;7?p7_y4I4ktn6ApG-DOs^wIQaIo@|` zayqkYt`ZkMiIDG}hjzscwX(|{!ta3qmlBs(c{ju_`M2|0PUiv00Eh!<?Z@f10xSS% z@6YMJ=`ZxFM`aqP<Fi&}_;Q88K-&9DeSG{47)pZnK>SbVN5|$qaPMZV(C-WO`3ET0 zusJqIGLY#5?&*zTdl+NcxFe34J(wBK{H~Gt4PaphuyX|*;{)CBKFod$(0wR#AII!Q zX3t`F3ky@o+>4lLW%OsTxSh<sik<iLu=5XI#%m124=|n=Gjj>^U&{RJ8J)ENHvv4s z?3)=sTUmTNnEMNizoX3mB=a8_E6Ad!Y@f15WuEGvagXHx&*De&|0VqLKQ_FyJ8{1W z^>IN8r_1`8d9^&O*aLf&c8v<J10R!cYLnsnx126;Gp8$k6yRZD{sB!x!_WPWi!S1i zjoc&te&N+_H-C{IPZ0bgU+(|!k^WzG;NL|Ru&&T>+PJMyQO;gcw`3@D-~PT}Zr&!C zi=S-&k>W23P_q&6UwP`(Q;{-r@nuGzna_0--^k480sq*Rvs(s{kG7oKa%W`vi#F4* zJD{U+$Emwd=}FnC-=7*Cj(?)<bo=)((pV&f#5T75M&XRaUNEukUI8Yy<rjtt_iG*m z6WinlFtMNE0rOg%TOB6cv)L0&ylCp|P);`p`)pti#(CkP!rhy>VBUahYhVt+ezBg@ zVfxpAiE`dBgwqYfIsF?r9rmftf{AZXyags|&p|Lz*v(+#r0gy*Ke&f<3*>iTiS5OF zXa^fdLO&8<6Tn7*4FC-QYXDXN1ORFQoB*={N&#{KrUIA%3;-Db=>TH^QUOK)3<pR8 z&;wi#kN^+|Kmaa|5b!U6c@Cf*;4OewfM$Tb0J{Ko0&D_U1rPw}p_SS|Y~%2rw*+Vd z6Q1uH?q@%2GjT2(>5P)KsR0k$SMv{HzS~k%e0A-=>FUCJfX`izg|0~{zfqSa0?cH6 z@by@(P+tJP#{MHDC{=@_cj&)rq%gO!{w>~8`3UMet|#I;E!N_IcMCusfK%4tz;VPT zfZ6>uI&zWdEX$>}<4vnTzm`K+d>PR-15SY9?8*qmK|q}2l$L;VJOa)xz_AQqIJxRL z@-a`A(eDgSp%{$CxiI#T`_Hl2%jgi>;PcxRe!)B4RQ$~Jwlfny7vBk2`oSRG?XAnB zuUC5wbh#*mC!9o}qfy3CsDFuB7?r{}n-N#~vkU6bCxmX6yNV8Vb8L92WSvMoBy0#m zDBqb$NI~GN(CzkT*BU5IIu9ny*uXfScM5b>d7mCif%318N9AYb=Lj<g6hXlY<Q%>% zO8tus;UR*A!^3qQNU0;tUo}6<z_l!|z*Lf(Jw8=Mhvah0vXxizc0+``P?v?%UEwG% zqYq*-O(PNM8>SoWHV@7M7vx2vC&v)WM|bkM$l<C0sYT9cRXSO2n$A$hlF~Bi%u|`% zaZE`WPE{EUlhygoOfs7sK99{`UTLoKI1MFc1xYgyG^<kt-(2%#8ljNkxsEyLKL)%~ zQ<GASLK1P#7ANMWx}A0?nxW|nDJKdchWLqGhUx)?@zuG?vuk*lKRgUR^i=J`rJ-;? zix;2r_Sb<q*C7-JRsYGhitzI6cKP{Qf0#StU#g)L{&XcM*Il7ZLw2p->azQag!e_e zr;GXYZQ!6JRdi9r=!X7?s7e(Q-PN?Hn|dT8Emx&*%2%&VYIzY90`@DwU%ylR-550) zx%@Uz9ebyhK=;EbGE6nBv7(}r*t&zSjHNR@0x=gk{E>7h=-ave1kq%=6LkA&dLt*v zbVh~Zzg%CW1S`v}+2!KBxi~@XQt4YjJp;j@LPrnF)#{isQ<Uu%@2c=uhBjPse|NRN z%sscvYjaibYW^yE6Bc7vI>USMZE8$#q_!{=i*%<Q3k{-BCduQcv}a+YWlE(+`DbX? z!UQt=U!f-|8PScr4hx0j2{}}6AjG#p7-uN^?aKZ+{oz>f$17LHv3YTHy%HtN!!L$$ z&OkOlj^pe5<q6%yN!z+wqNVR2;)36XjnZ3PmRI`(zmvY{Cw>PW*)Tx-);GPJD12-8 zzdrbZvG~3D^VXw-51hz1=r26+oag4ozZ`npVK_dkBl)924-_PxUuwAbk(2APdPlFm z>Dea?-|ydK`h0P}2Ny5-Z^QnKx3?d=Vjfa^;Do__xP8^9f!C+J_;91KY1us`DHB$I z=V@Osx#_(JPJjRSrSprPz9Vb%$2DhKzq;v``o;fY8m_zU>5I?k&Kx@UgX#Q^x4!=F z{0G0AzwTHz-}>6x-rJwqlz8T;oL>BOJ*yWludaE0YF_E&vpXK1Fmc?zJ)all?f7Wc z?T2PfT=~R9Gq23reqpn|xp>>E@wPWQR?b}6mOSeZ-@jAw^ty{*r|jR-GV8s7EBE!s z*6aVs70y1GT#ZRT(t4y-_+84p_xAXcPkHdq#mt%ZiSHMzUhnF+^nWv7Ju!k${IK-8 z7vA_s=J7r^)=wEcW#^$CUt}7#Kkslp8~xYu%g<+yxxH!f{Eyyl*#GxWG7ofg9JST= zo!9#3vzfQ#-uXe^!IvA>ef)anLkEi{R-29_y!`01nWrmWY?zS!mm78;YsgHx@$iRD zFHTIet(>1}E1B`iqTNLc`n^<^dGd=}R>!>j(6auQOqofU+diGJE#-giZ~SfM!kwGX zHrW^C9DlE5Qu%!`tpHs>qQ5s5&s%zB?c&?l{%~93{PN_iwC0@|L;vtb`jRQ@_mPg1 z6W?7?8aH_NxiibRM@>9jpFKJD`9D>Ue`nNfWA45F%^Tkt{e^kW%n957^W|pisclQP zZ+UL?hn0K!?kIfHG~)%`h-CBGk++U5D0=4TJ;@Kw&~9x$ePH3GbBAwu;*%9Kt!p#( zTb2$Rm_Lo5)3NlyXJZ-`_B}iD^pi*5Y|*~Ay-i$N3+PP2`HBEZ6~4vwy<dO-KYqen zkx`^kLjvizpAO7YVSgO1P2yfUvI0!3|2DCGabh?Oi7%1hzB~u+jSchH2xsb4++zhp z6@Q?LJI<%3s<`7E-c(I!dPMiq2=0{;+-oDauZZBj0o+?(;pm*$S$2WLj|Vt%UzB98 zJ<O4|zLMS2#?g5~(H;PMsSLmE9gfVD(TgL>7h+<;oIzh-72eE)^iRtw=@oxpuXtSi z$afd=Rqh&IUsRA&Y&8~U3(m|p1cUZlc%S4WLkdAOdOT)RsGkBAe<{gEi^Xh8PSM}4 z_kqn)STH3yMGY^<oSUuYqe2vaH8!Wf0wc_#2}fQS>LjzWPcY#B&m}LKV&H64^7QP& zB6C50GGo}3U6fU5wiKgNN|$n^okkXtek;Q)RFC%OiHssud#CeWS+<5GvUBbv=^^zl z`N?s6%Xt=pG1PUsI?)|r`%*Vq7k`jgA9N4RE<5kx;Sb&57)B;SV0j8sFr3#`Rb`vw z<RjplT^_HyT-Y=;W;BaJm^F+PMTE49Wkr~YbGRz#WSl@T_||3wk_*+HQ`p;zVwt96 zimNDkmb{{zVvhAXdaydqC|fsCzEhh_=(eul8pS}?2M;LrFyK2yEw~m24r>6u(cm?g zgfs!z;aeXigvWh84KdQ4j%eQ$Bi(t7_Tm`U|7Z4ktq`AR*G5A<u956bF~Wjh&<=@6 zmBsfN3@9$h@Zar4NV<%k{2U0{6M7T+p0{YP>@D5@u7<C)Cl4cJRc}d#oxSZmo2^xf z_p&C*{I0NdEv+I9x{n>EQH>*7C5}d1V}v$vEVE~X#gQ63^Tr810~QBITKj~@q4t(> zGmE2%*%ySxk)aw#@~|k{K6gh}ZA@0X*in!L8g*Ie6mcgH({?+K3oMQn7RQ<hap=SH zBf8sh#AyUsv8R{F*04CPk07g<ZpWe52<f=U;%JJHj?}Pp#CAK5be4_;hV)i9)1hZ& zu}!v*k)B0W*dzTg-bS`Ys^&kHm8WLrAE%MZD5m%Rl)ssyI`Z;X-%`5p25p}wFSBs` zi}Ow|xZ{n!TTbCQyo^spdgT$^?GfBpUye$@>B9lJyZ@B3CopN<<6^o~6>nj2to$qA z$P&-b4cWRfzV`Sfb7Sgz)yW5@kFbm92NiGYwJ`T7e>}J5(w@N7hf;?>9=|?j2d#_o zT<6id``ubGa@zikSh9EJ-oa~_Jd|&Re#6|~-dAAyD({$K`Mv8V9Qh(~Zz-!=mG56R zF?YM{%pbjvM`1_0ayy2T+rdUPXbsC#asS3h;`7_xPJZ+#zjKb&Y8CP8IVo%ctLJyh z=zXRM)r*S^zl96emr6}!o%^f{eLN@&+oquNqYB+71-*gY)OSDEJ-nby0Dmuw->(t} z=I3w~{x&M&v2?=USXK{<_6;(62@zzviqT6_#M3UbZ^ZUV5q`FUk9hLKIXVq#&W5g$ z)hd>+-syW+hfYsgtzwz!lYYjcm_rTvX~|u8I$RFFNI#A&8tY^;^&(CWk~bbVrwh}$ zk}hh=g|A$;Dqgflk?-HH_Bv($u>|*Ti)A!EJ++6lPGGeL-N}i3M{pm%L_eBrOe}Z$ z9Clfpu_S(51@FgsW2?mT?_b3=NaUr3?HP$BCo%w!o(gGU<*Emn|0=i%v$<AzJbzy1 z@f1{}o5+)ntgEY_XWQs1COs@6;h&vWLl0lb@jt2cDezl@GM?ryw>h0+_!yFO1iHkw zDxW-EDZM>jdMZQUSA%U-{4%@SMd=i4a4+`F$Uhq)$n)WMw?YTrC+1gg;(e_=<Wz-( z+k<@jt;bUnlz|wg7kP7!S9ty|Og>R$(%U|7xmD5!?lqry7D<K&E%ZqzbHw_$9-v3M zos(s`RjhyG)7R{imguZjtS1dn7OqME_HNlawpFZud!_e260$@Gw8T2NcY5?@v%+%- z34O#*pEfF0j{^!lI}HNi6G&*G5C+*+Ya&sU7Ck+AIM)V(yoOZq{z|u9j|vMkbfR5W zKoW?g<+7mGzVfh4*?Ws_Oj&g@yO<Hz$=pH|%qsKqh5H40Mdg#*QK_sleq>73KNu!d zff7V_g_7uG@rw%4he*k1A_Y7tQ$@%AM3&PsL0wBiGBZeHAPLQ7xoiiKI71wX3k)K? z482G%Fnbz$lAd5j8KOv3;5X#T{aB6$fvIQaaN3`rgeNIzV(t1lb^1KBDOX=3NJBq< zRBGy|)N$j+>1}>}aW$_mDEI5r()4L#Z%Z3}8+?pTO-qZvmMk35kZ%RPZ-%ZO@+tKL zvCm~<cI=zwvhxmDzDIzOND}G1;`M+PvL}$%S3Lr=S%1O=e??q9j5vE}HNpOAB~3?M zU=<PX7>^5V4E8;_z)tp^4mOcS64Een!8<&#Un!@7d}DdU3HuQclNfF|<ufYCCyqr? z-hS4v83DDHh&zJfYJ<3yERKy_=pBdRy(7`=EDN^V*iK^EuV)O7VCPjDS^eIq5pXds z1C^hj%1<0GHZVDSM#Q_5q5?z{E)&E_(1^UtWt<E0(FA#KWacU&%0w>9Tq;WucOM%k z3UxNhT`s@705>Wq_f|#T;rOjS7)~zByQnP1aOWa~6Lcjy7%mm%Vu}vxidGXI?x05c zZewxlNlcK&SoqgN8xtJgBv9Rr4f?0k^v4F%pQI7SAPG!=)bcroor#KL`H6ip?E9dO zV1EkxaM+jqkrB19aW&>cyD(2r?$U&ggJX#iwAxP0#08KYX*a8}Gzxog(@7C2gTL9N z5WdW$faHVS41aUr8-IV*etB8cRE=znATwnBLUC@8>UI%G-TQy-eSKIJ)!O$4w@QkN zf=Y%;N{NcP*36n&Yi8EWpwf{P6P1#T3<MMkgkWn}RET8cN1<U-k)fhdVNq(Lk&$AO zhl+}fiVBlFlvJ3c*r9svnT?j7&U4QD$NR^7y^a^^{+u=I{(aqR_Gav>PA`UcOSZ3? zZjEY@BhA95{Tu|diX4jlZ=$_EG2Jm3?ss2pI^7Wm&tDFsiGy42YpzGZxWeE^h3fFj zo)-vzyPs*;&z%p|@wm9}F!;&*(>1r<*Sh}K_q_0YOJV-%74G*&P_;ka`_k)YTN`#v zgy*<_u>E~81kaDKuk0NMudzm+4r8|7doie&>#}hK!+yv9hhv-ww*sNw)>Xp;|MX6o z_N~P3D`Q*N=1#EBc`#6254#2~`;jH~NdB1JOOZ1X{_nmXd8qxmS>1a`?ta~cV_)(g zU+=DIq<uy51jkZ1GS~l7(@URsc}<Bu@0UL3^4Y(9?t^XA&Vt#$0Z?gOWqnciHP+qN zQ@?oqaQk_;*w<12SHxNx=d?$gVb>xP9*?^OM^`ypoZLD^k-9Ktd0<v*%92cd)Y6P4 zYG!;=VrpFGgw*8tjI_+OMXm|)X{l;lX6nRccvN6&+>+!)iJ2GThdv5o+9<<XwdJmi zrI~il|1aN7biWQ>nVA^BG$Yxy+_<n1%rmU3gF{o35Sfv@3_69yiJ8V9tHggid_xwz z)cSNrMB=i<l)x10Z+%o;=8a31rQMa7F)DCr^5l5yw+-l{7R9AxCXO=rq<{0`KXyLp z-|wAIx@4?;(#3;@+kDc6`7|OYM@|k4yYZ%J(b3)i`G5JgWi;0L(Vl1+a-k2=oj46I z$2;+1{4V|oUoDIjRN+oxm9SYjEsPLXiW|ii@jLOK;y{9lO!`Xmq=nKtsYu!)9gqge zZE}a~O@rutw2(eUx6@bX+w@&}oVL;dY%mLCA#5@WXE7|E-Nzng>)4a5jJ?G6vP0|x z_6a+|zGY{bL+P!IR3<8tGDS&L?o~>ZX62;fqYhC8b-J3aey8@+hHA64dD=E@m$pwk zto>d4Tsy9v)tr0)AHp%0xxvHu3_hDj^96hnPvsf>UcQn)#tZqA{8_$@KhIy{yZJs| z%fIB`@*ntl{u{qa@2_8@kJTsXT#wNg>JR9z===4z^<VW~#vo&c5oN?0dB!?pzwxp0 zxzS>rGWwY*rptWT++c1ppEF-EE6qb@o%yx-z3E<<wbl`PBVTk48jnIz4qAuyqAGL* z)uHduGQ1M6#U=PHd<37zkwUakBy1Iq3MYghF-lw{R*DD2uSEwLMJ5nVT;u`r9{H4< zARXj)@~V7D{=58vd`xbV!|6>lfu_+_bOU{s?x0`L5N5Kw*=m^E&FoE9!#dfotgqq= zb9%ip3Fb6HiB{s2WF=Est~>~{d$l@JWvZe2X;cf-BDH8OR!h+ev?A>#?Wp#>_AAV5 zf6n;dcmz-5%U~9*`FoWghM9Xn->jFzJaw2>NVW2SC-Oq0&=@2m6GfnTC>dp=hvCQ{ zM@480I)G}>`=|jmp|4RJI)i%S{@4$X!ejA7OmP^VjuY@wd>_orX}nH)QmT`Fl0xLW z<uEpj&0`rXkKLlgDyd4o@|g0R@}AnPB2CtA(bj33wewm}K2V>k-=yEIOU4vqo{?<a zZTOqR%}M4=GtOLWeq*{n&{YHfya1yZiSNSuv8RwEJSY?hbwZT5UMv%@kwT<JQl@mj zv_>kFHcKa^AEX{~fB9B9L0%$1EU%YK<y!f7nb2u;FKwU!ET28c0+e7yQ)VhjO1hE- zqbpNtly{YnlqTi4(yk0uL)F>p9qQ|9y*fk-(1Nx5wF<3Oo6B$IFYpT9z|ZmVI@WbP zPak6}FqRoBjP1rt#vbE<@te`Z9B)RNOU-<<#C+8}W?BKv{!9bviylIoZA6_w8onJb z#EWqX&c-j|eb^!N6s8Nagj<B$goVOl;h6B1@QsirJ|M0WpAcUZKNq{itH@EnlfN`l z8Usg-BqH4|tpqNYN##<7v|Fl_s-$YEM(Qv7$^LSH94N1X<1d$Y$(3@ITrD4$`%;~T z(Qq0;BWV<krZF^@zCbJJZdysJsLIk{b{=D!STQSMrR-gHh7DBwl>jAB34$35QIJBE z2b4Uh=vt*fIjeZ60qSTqSPfAT%-DVEPIb3hsaC1gYK>Z}*1`M@(*m_1n86V39<4;{ z(t`DM`jh%VW4u9(JB&o*E~xrF#{Iz6HO2<xNu$Jg4rcN-n8~+|4}rPO#z~{yIBz&j zA9JvIojJ}#rff!-b4_az++G_*1Mz5l1D=PI0gLPKv-lMpFQ$qQiEClzHpAS#3f#Pp zw3Fwh*QHviLHZI<a$34po-Mb^Mf7#5us+H<<*?$V_E)FEam-T}t0`)px>|iweO7%5 zj_IKKcl9&%EA?CToJzGQ?QX!sUhNHS3craT)7KbQgJos0{h$yxK>Z#SjtC9HF7cq) zPmYnZX)L=}DS|z;DQ6Uan6p4N2#|G+HbI*ST=-B6;y>|Uc@N!N_tpLN5qgmRH+_M= zU4KpgSs!W$#;wM~#><9>dA<1{DAp<SoasK9T4eRa$OjDpKe!fnJRS*%A&#b?8&Nbk zL<xEhRf39D1C#xMv9W--EI?c}&KDjNT7@>jR~#W?aXHMANS2WrGDx~kx>H&$JrDD< zOwN&a$a~~><gev^RHpNQLC0tdJx7DtY?jGZC_gFZ6<>82KgN6Mb78y(boYY1)r;hz z^`M;R&`dlZSKv4BS2$kC7M>BBgfqerQ4+U{bz+COgX|)2kzWY~SNexEM4l*%vMTSE zPspcbCml$K(&2OzB~+mXok{1w7?#isdOytv&ngGxR?|A#1fF%0{!IT#d$J)+1lNjU zacnV5wKeDw_9%OXZ3WgJU<U!yjjV-rfp7T$u0s^8$jS}M4CQ8Jk+M=*uaqjUD0`JR zl!Hox@~QHr@;w~mIi<fkNF5G1Cu)Qmsm202vegypDs`j!w7Ok=P5nqcu6C#%T5qkN zHVE)OR-35l+7xY?wm@5`rD|DPo>mO_uh6QrI_(4PnD&i!O8Z&s#YJxNIs7&r#~1Sy z{vdydueM$9dA^^2$4BV1^fmfN`ZxL{!!YI>$BeVaXuyBA`HXqtgI$Zzrzin(z#%+B zcwG2Y7$jZ`vpZc(5T{GAQkry+v{!1Ca^xcUIk^!$e;Ba-ad7*C^anbc&1DH}1*>CU zu@Oq8GErTrMre;~uWOt54t{{Y!#(tax+frTrSSwf=}$(e`Lwy;JYwOm!i~Ry=pMjW zJvxofBT1MB3KnB4Sc-7BupG4dpzyiyo6uK$gM2`m$VB;X^cpsr2~ed6!1G>)Eb$%l zQ=U;$VLqP)^*E=FhS^iP-ED#9$FJt$ynufQ4C&IHMjyl17-oz%?gUQ!4&w<oZ!+hZ z3&1h%Hw#Vo2{CJpq5!{ypA#B|Z-u$yLNQHTEj}fdf)*SV?;z>q9`XWtl~j{Y$PeTe z(9v}1J?R_i7b#edlJ|mBdjaNV(wFFG^fx*lW+{%XVmsNj$}Hs+_ybp?R2PhtY4>Vt z!F>zCf35nKYGqnERC%{n36-waYP4FdH{Z%n@<IA-`UbrY=8_uOpl^m5X6`nv58t`$ z+%XO%qD^Q&`VsvM-f$0o3V(=u3*%rWpB7#es)bL4cHvF&uoy@dlhx!6QcuQ6)1_Rg zFK}cmoeGMcK%b`X(Gl!zrBRu$_R{=eL?`u5eVh>k4z<sSH`C0YP4^;zwNEE{2mOv7 z#b00_;RYcClwho=iO-4UVzoG!Y#=Ae_oTlxSo%@w4UBZjk3fPsEgzyg*(N2}X25Dd z{|@!A8l#<rJcl547<?gL!mrii_3<V%W6YK2%jWxLvuTAZYyEDKkOfG{6dx2ffuALk zfs#LX*-YuMG+x%_A3<eS(~Y!*w$onBAGrG&>t*&c{mg63QRY}seroEb)ooQ+=VMV% z?2Uc#Fnlcz#*?s&r$R!=z)$0?_<2yAy`VX-3AMshF<ksuY!>^HIpihs6}etgq#e?0 z(l8mx)8uXP8M!B@%oI?TOuB-urJLv;$id%Jf97Ia*bX)tvdeb$6>zm0^%r%JHbNVx zN!mu3-EG<n+AG=tZ3o{8`Sf*u5cpEhKjGVra-+#OVSHztHaZRK%d|x{PqV<O0>Pyo z29Mg0`v^#g6}AZ#LJ!eLTr92;8^!O%sich5k#9*)X|eRM^qh1^`be4wI{dhN7Utw} z_BK1l?ou9CwkYp_LakJ{!N`uPpQxfXSxeSjS`R)NGWB#mkB`)s>MQiMdZB()|62b+ z|3&W!87m#!HV>TEeX`#g*GK3$a^hJy5x<Q02(Jt83#Wu%1gChNI9^o5Sz;oLX*T(Y z94CvUEWm;+hs$5ez332nFU(gyeH8kJz2FMIY!r)N&$8E8EsIw&lvT=`N}X~7^mC|s zy*dH3Q&$hEC)Crb7bv8ltpwIg<xzZ)vB@}U{A}EBt~1L__XkF;^SL^jhHgc7q7bYL zE@1=cS`;}<&XYb;nDn`{M{a;j_Y6HsKLGXrk*<f#@;uwk{?5K&LzP_RAGSB;sy(!; zw9%l)GqgLjL@is(g{r-(odLfZqettB`dP!v%rRG)6{aK9!(L0;h2O?)csOwHWpYyP zluPL$irFsZEhS#P+gAFs+)F>Jdl~LUTx(5yw17c-w+hw__0R|DtMrZf8SraItouE; z;!I(JxKBJGo)H(3EaEF&FU^p$rAMS+*d(at4&{i_sq|ELXnQnAx`(}neKTMpoGc>C zNe<w4I%M3Br6%dTbd7AtH_DNaa2Ls`a=yG#?n4Xcuk;LaLZW>Yoa+qme-}T*!}Q+3 z`n%2T<{3LLc-Y_ZcA_^yV?2O6evsf7;wAWA{1C3gpJFdzhwz#(R2(jbiZjI7;(g*a z(92K6lj4tJCV8A}CHp`xdr8(&elK-Oze(4DPyYlyeG|PE*po}2pznhlpP`=M!?Uc; zQC+Hj4mvqiyIFftJEHmW>-bW>o}b`9^JM)Y{ZqY7?`I4*#u>74v!Q~L?>DQVD{C{` z%?`8Ev_42<t;df+cc6UeKPcpvP0)j#!()WGfC-)4K+ckW(yich$x?>2L3&EsCcP*z znaiPa7$7wQW-3aKh7`5~^o!CNbQyh!ZlU`iIrM|xD}{wBVM;jkS&>Q<^ja~{u_OR~ zs+F&mZ=o0XU74q*scS*$+O^UAtlkG)c)9T&q*6zTyH0V!66m)}g>qq^@UAc(I_@sf zgWM^vmZ#7H)=wR21i|r5guKhZ!>1VGMuagN`kmX1I6MEQ8B5_EHyFE(w~Pj(*mP95 zF?A5Vj-5h@I8vf)0lSMOt0VYo^GDNB?P0I!k3lOWF870(o&sI^Y!=OO*&a4lS*DCo zb-vfwY3>1k@vuLWmV~C`6Zl)aMp!Rw5hjb#;y=aHz@>8OQF#oV09E^#enTGu4%M++ zm9adOuQ4ApABRr)Y4cfg8}!RBf|Bnt_nI}PquIkg$FUh){|I!2bHS}vLauK&el_}< znz<1A>_^O}%u@3$^E(T7?H=~pxd*xm4M10;(P#pqXby^lZZi!nM=PP<+=O05Z-F1Z z4_W2}`W{l_AW-$Opy~>!`b^078F&SL1V0AK{xvA4waW1nc;Wz25a)=w;`4w|jVvU& zWDog}U}=u@n6w}IAVHoZ-!Jc!KLd{FG!?q;{eaHlY$m&xy#PwlN0|z#?*-*EWso{o z%}}3Gzft>WQ?)z6#pm-P-pD=m3Ht5Ov+M``RE>L$SB-xdp3sM2+l!`{)1X_OYeqxI zdKWNlsky>j1GBcpd<BsFf%%zv+Wf_Ie=;S&&Pu}&Mk<<(ZUethhlIWyS--c~nx8-+ zNC*}}1SW7HRB%X6$xHH<d?Y{c$N(u&3X+1myFMmyDHK#NT#As|r4Ff#mqS;&n^*EG zUd?NGEw2L~YJkx<@n+t_TX`FA=N-J0cX5aA)V-k3@X`IC(+JQ5q1Oo3Lv*AQo#|W; z)x-2~JwlJvqd*^H^jJMXPtsHLbls(A>DhV?^t}1tDh1#xMS8JbqL=DrdbwVq@762z zD!p2-(Q6^+)awm;qu!)9>n(aKu)JOGfGpCbI}E4cWq2DthM(bY1Q>z94$F%??ax-G z6Bmg!5{x7x1)R!dWI<MHw>;GJg8t9n3^aow1u)Y}eUUKh4&>>u&YzW`a#VqKU+i^i zp~tRA4X6<{p=Q*AT2UKnN1ez4niqy$xD+=4w}_A+6bdy$hrNoEC+-IB`jHY^O3Uot z!s?3KSUc-rop#6IRAM0eC#Xq~e$pZT6{<yQv09>*s%2`qTA?<oO=`2+qPD7SYCH4; zoobir(43l==B@c?evrrlE_TC6BO24V7795xT#JCL8wF`MMvK)Fv?MJ>O9wB{0>8?E z&LRIlX3RRRUTe@AwPvkN>(rdwhX?RrPJqY%_pp!$7%2WPsvB&C7|2#XZiE_Pw*EyL zQARZ6(#va|1KA|sSZfp*g+`H4Y?K(KMj5233Q)&Nqspi@YK&T=&Zq~aY=n%}Y_u4y zMjK$H15nZhIB^0}ya6kIfR+HjOAsI?1TaGYH5_mg2FQs3>_h>2V$4`G!At_ZN;h3* z7IalPW*#V9EjUoU*<d!BO^{t%%+`y3)MdI)?uJ??<d742A*=iLL;ffL1)?Anj6x7X z#O}dEQ5XtG5hxNxK`$PIVo?H0LMb-uvrsn5L3!Y5Yf%9zL`A3=di7Gka1~&;9d!U! zy8x|D>;*pU1E}@K0gxSoAnAr+gb8Mt<50kIIF7)PI0{GO80hYka0*Tbd|N$!4$i~* zcr7l#g}4Y8;}Sr987_xpyc<{IDquh(Zo<vD1;;|Km?Wl%>7q-_60^k|;6lE*RxA(; z#Uim-EP=kM0@7&{r05p0RcsU6p>yv9pK}l=@gm;DhxieH5<mh;5D6wB1Q9|Q;UtuV zk#LekQi#RuERqdbCXZOU6)7c2DbRJfAWLLRIZ})qE7!=i(4jWTEpnIaO?_w}4Whvm z+3Qsa)J3x(oflAxpXIcMHqb`eO511$^=1JqkRe7GW1NLS?ucbsET64q1+0iwuxeHV zU4Ik%Gnc*WH7(xl`!R~EdsVAYDOW0#TIivgloq8+@m788)f)F27qL6PXkdSiny2PN zE+_yEsJOV^)d0+QbKV<xZZSL*SZ(q7QYIGzdoA8JYE8h|R?Pv7_2WUn*$|F^w~TY( zZW#2v5j+wyax{<Ou{?n%@f4oUT|A3t^BkVX*YZ+c2AW_0f5>kJoOZK0-Bxo;!>eu0 zZnBx|^C#vqVCw~*x`3N*R+igLZ0=^B!)BYsvB+*trJMQYTF3xpkmoLNsm0BoNcVTA z9KaekUzp7iiy8UdOenKe+|uq&<Ys`sjd}~~N!{qqw-H^1s{zNYkl5RCCv>uY;GmX& zMha1&?n%&ZW(#YD0-*#F+HRo|`oTJ(NoW>Y?A5P!(Ed)LOK^xz(M$A(KFm+_7Xw8m za&UzIofV~G6?DoLD>_7r1wJ<N!$=f~CNU(IBmnC3NFgaA#iRtfx@uBGnn*M0BwfVM zc5}<eEhfZD2{sS%r2?r?Dw2w&5~=iGR&{HoI;mc2kQ$*2XqH-}R;dlV-`ig2MKZC| zu9b6B<aFp4^W;LgNG_Ah?Ui4PS#@$f^h_4Nnt@@ha+};PcR+vRp#H$J5Xxz&y(*kQ zlYnX2HrEPi5iJJ3RY6*Iv#pCdn3H)iZ|28BfNh~Hl0`xGv^bZ*k|0l~L*JamvRMxF z?`v5pD+B)3vj&@i&8&sB{v{7XA$un&DZoQ(Ww}hLRH`6@*8mgil~(ADx)g`%RK0<T zL}kFjFxB$ntjjpq03O_Wk%NEjy9~V6a#_n?Ek0iG)QWCCwrTBJ2e_z%``di{gNaeV zK8tq+yb!WsF)y*%=gwYLw#T;r1?PgnM=b}9v0by^Pl>4#7<VBbS<d-ao*4>0X)*5) zZ!84vSx#tqpxgaA3~!59v7Ywl^(`J1*m<ZPoW$ae<rtCR4_V*{B{pN4u|o(D0)Z#7 zLJn}F8W`aa0|5D<VvHCIn9l;dmxJn80>*2_I<WzCza4Py4LZ*O-xj)Epyzp{fK-r5 zKzA*vCyk_qI3czAL1GPpw92GtKz9=8d=_ZDh3{fOa}D6QUFwno<Y2&Tl<We$mH<-g z0H4jW7vM1r6hEEj0scy9Js_`(`q&C@se2M&tB{pLuU`#V>V&S>TS3snML^${4Juv$ z*l7aHv@1S<l~6St@>({aq!?0Kg<21}%mK&<1T<J!2(!<g6$1il?EKUU>B$?E7=i9a zgXSiI+7^St)<JzcxIZXp2&AG&(9LW}KV^`08zA>sdPyMP#6XhCfeIBvg_^r7<JX-- zLhRHU1L~M=7MbN{73g9k<O*98(>?9)!v=sNhJzNmARUxJ7N`RSY=s=)1yu~_cKitN z`E;mcA-H)3uEq7Be=U$^eV}uQ0M$ze%_|bhK<%oasvUy27$k;>1QabC>S|SWH>g${ zsFnj1i`$Bo1pb^4T2%!#Y$hGHLIpy95e>?e0#z%8sx^S>IAkx`NA?HB2?ot!&|`-~ ze;p0pog%LV#VG-uY3tUMAgE!iUB$If#R{ln6V%ZO%Ha<_9SS{b6evYDs6+vHbR~Fn z3+O^H^x~Eyrzq)4j#3I<Txr*`!**iJgPC2^2=L(~+k*?BvKP)cISM?x&$V5i&6t(N z0MFH8J*1d+$oYR{6)UMEu>@OvECg98pcwXDuIvUCs!{5c20IP3!6>>EONIQ@3ukdI z<N`~RBJFH&X^)Tv*!v?ZT;4HUezvUP-}DeZf7v^P+e&5SfP6>-1(zw(rJdlV$>4%Q z5kPVZBmfJ?t)M|cpf`D-FLj0!ygV8*aV22X{(Twtnz0w)GabA+0$ex;GG!%TuLFC7 z=Z4w6RE6LL-dG9F*dTgC^2;LSpb70H6x^#ta@t<Sz@G}_3Shb)W#BPE!0B*skK&6i zVL609zw#~rE8CUr%64VDvR&D(Y*)4`+m-Fgc4fP={r|e5!Pco{PY22!JgV1K<5q>Q zI@iymw`WQ2U|+avfTxEC?u)MK)pLCR9-hN`I#5!tKI40NI6ZQyr-!p-K8i--pY9oe zuIu69C<)v;A}7GX?LV^|3mut`H2X^|F8k{<@CRM{r}uRF-BsTdKjK<)A3dFY&!Iti zebf36iYUn)cs<JPaWBgCTv*b>)5Fu#hh6u{FP(8OZ|*4g$Mt)T&HotnyEtNxo-nq# z_E3A=?Cj<1dGlO66b-g+^zrR~OJYXy+~mbeLIQ7G5<d}-M`NuAdiajI@Iat-vA@8% zuDI0n<Ryy(yT5Fl88~$^8ZopVqDaOPvbXs|`(XiY5<!#{Ntusg{>z;bB)E4v{y**1 zdMq&`a6;fT0j+rU&j;zz)6rwaItN<ui06tGj+#9`%^6&kzbba@km<Kgnz8<_hu5Ex zqN1hmK9CnIoH=JUx%=RKi-tc^`^C7LJNulapBA~+pWX0M#hztPoPK_K{0-A4-qm-* zO*6)?{ULh#nugvj!$LZ9Ux@zn-6>}#R4@H<-HS&a9sX2GgxAIqUw;1M;^P?yZ#=j; zmLLE6z>sb6S;>C)?VR8VrS{miq6V#a3z1%40D_)9dwX~|gVFUU=)!H}vC2Qm<w{p4 zO-hT;OrN+64n7kOaAJH~D)NRI8Sd-h@w?L#IRHp-Yos#-jYGjD*OvsX8rA*6_>7cG zUN^~=nK>aoZX(=|hFCAU&Uy=P)aSxZdw8M#*8Kyl`<*>JdsU+m*6o2#C{L*`8i)tL zwA$6^6*YG<o*-NXr5?E+9*)SvGirl!zG~?gbnwezuWa$$vLknb_sYR5XrJ8vAr<q7 z#_ehB`CI<yr`NCFb<42O9j7)NU`oYO*`*fEYN7j|eB|iHDZ?xF9VuBiulbjc6P#0| zn>;=cw+^kH`NEhZKOJ8c;mKyM%zC?PZu6<;UJrj!`o!i1-bG(;Kk#PmLx*CIf3-8X z@yPZW37;Lg=C(J=6|axks4e1}NvoeaRn_}iGi>rzz4s&r1XYE96qa*p%lq$m?)G~> z>d267IWgy#8@FfNpFebS$keSz=e~Epes-K%IjhjIJ+;ru+s`kU+u^@!-hlK&|NMF9 z#*+R+zpNRO6Z_79@k>@YPoL_@8uLNV!#|MQ7VNuG_(=rz)xgh$ZuU)k^XiRXt()_= zspmdV4ey6bFK6G1HGg8l{K<GQ^0jVw`FhW@zHpVXByeh6dLs5igRHxI`}Pf6nz1l$ z$+F~>l*9}5=mYggio3^^h=-$VtULPp`nm52oSK;7N?w#4A7_253y(y@-Sr#N{jkNQ zOjlg${{XDeJ)e>f^e010?Og{{RM)yb0~3@cM2brDI6}BeJ44YyK!ia>!vGgSAc8Us zF!bThFpLF_g26_jxke3EuwV`GDIqpAmITGv63bO=<cj!=F_vJD-d)a_GgZl5X04aC z-kLQ7XP1Bf`!C=A&ROseN+mjN13;z*vS|x11DLe^Q?R0f!_!UI3XToHR*r=UjHu16 zJJx@Hg8b5A`n+v(l=m8A?_WD;b3iI?UYF%^Y46k4fUUEsc_}lh+X}7>S#5LR%$>;( zRP{4tp$8U!X}u@+x5Cd_n-hGtMu&AZolBqOY_jH=UxC~D$Lp5YI~_G?|1c)u-@P*K zjBuH;+xlvFOXIaU&6B3)^L<TgX4!2TO`hZ{tdo6COb!fK(z~Yj?yI?eTW<dQ(ERGb zhZhW(lha(8k}Ojm2;K7Dob*;(htM^%ZzmqKC_eJ?+p$-6_jq?1ue@!z=NY%jch>Na z-M`7}*LGy*XyJ0FNwsc^ZcOaDTYi7~)=bXAE|KNc)4cJUmYisqTh?%QkM+YFqKmc9 zb88#yLw3$NxR*wZHfq+t{!7H@twxNVlo|M8!Xc;#j2pu!0X3vHu-3ndGKL#CRy0FJ z7=cj44xz~FAcSKEG(->rB6EE|st*(2rgl~ULO`GieE2>=0lGi}aC&UP)7vSBqFng% zrqp;XJy5ZYbKWK9#P<0q#n*ZcS~u}%>tef3Zi4l%qdoly!S)-+7RN3>%gc0l96oeF zTnT^X{RM(KJ8#`uM!Y<gv^3WJhs~a`Qyab(M?4&Svh&!*iC6Y|eKh>5RbO3fPkyz( z@!J_)r>s`rTlUiH$B+bPXMyMA@Uc_{_cF|7I*<K|sJ(7AOSkNr`+dF7-TDr_JZ|b{ zYS1}oY3InM2K<*vGB&$ZC6gEML#SXpz#o2Vw1Sl7kV-{1EZ+bfqyQdLsZ`n?l9!0d zzexsB!F-DH#pd-?OGmXQ$N&<4u`@a)VgC73RIrafo$_FoKNYNz@>C#uQqQW<*jPdm zgE>9z%o3CeMV^>x=wW9jk|`uI6(5`wXzTVCd?AUxdAWEBe>fG2cNG+sC(SDr7m{P5 z)T;TABIdtg$#LLAC6;HC=-a3fZjojFj8Icep|3sXcg4r9jd!~3Q1h&RLPx%X)wNIi zoHxJpVw6SJsvRYg!%v%zT=yPpFP(jK@jJ@3sZFPsr+#DA?qbpSYSwJ;LG>k}`yNz& zkWwPQwPA>~Pi6Hu(=}~}hW=wo`RRVY7rYStHaB75h_A9<w3x`;wr-5c82QBSBCqh! zgN%U#U9PU0ZFg&a0M6P9P9?yx50L>~?a+a(l^{K4Qc*Y&!zkeR+M%^URRK&QDkK3u z*ik-uNhusBWI9nUA}J)6VrH3970s!7GLqAyk16B@OnRDd99>=)M20fjlu~M7P97!g zCgy~zN0}JhkvLEMnjK}!ss2!xf!w~7<4pTyrwcZ{S8}v2{ImW&eU1dJSYPM%00e|N z-e)9G4A_!u3wRC7s+}>|5x~-hcuL=#BQ~!V5_{Gz`DE+y>ZFnhpRTsu*jU+hIcMt3 zF`1jGrWNY~#VHBtyYA-N#8rvj?}{>CTi3E+y8GtRi}ELRxn*;|nE3LCYr=z(8y-f! zxO4a8G;+hnfCW#EQa&pbah8q2b+3N;ylIW|WBHXUscCx$N07(YSU2Bu9@re%f4|3^ z&RyPLx{PsM>7L_Teg5#BdpjE3*GBw)x?$M<uIdSeD^xX)7hY`VE$#Wvh}&Izo?G;} zxiT(q>#)YHiPJis<_-F-ynb=?&FVZ!pqOg#c4-?qy?w${!KmmFW6mWEi=CEWJ|KL2 zTwBYe&SRN7%^U9yaqRm1lfM1sSBE@%KI$AX)%kS%B7ko%z&o49x9o)X+IRT&ZBMls z^wBn6XPPd)P3k7R4W)u`p8GP%9k0wR%#)Du^1LFke2O+BAtRKfxia|Q<A{0$Q$hZG z7Kh*^rN*JZD!{&p-t3pUHfC(G9U~jxr#$D_#477^_qT2QN989A<~^Cqo#$Y-$7l9{ zB{$BjjE{N#1F!kggB?L3ZVL~aKYwB8`@w;E<zXQnZjT<OOk4RI=d155cFjDw-?LOK z^%UiI+?gd#nX>MBAKTszp4;0+fggH}CZl#=&2i6}e<E&A|8E6H6Bo71AN9*o=I<Vp zdrC0HdJDCw%{wD{^@T0=oXwRN1fNpDc1ul%m5)el`r^8ubLHht?<Nd4*?Gb1_W?~C z)7IHoZmzeD?-l4P+IaHVM31x8`yLjT58B5`f5D&g!MW;>q$zXz)gB1CciU^-fX+pa zDmym)k}-MWw2aE%lP%LDtR;yV=Y<1)Wq`5`Smc61s#1cn4PsBWHnxrLCbmgR6x3k# zNE6D<>Ge3MOJa)D5NO2}Q<Lh_YbQ{tR5F$1Xbz%Un(Zge%K>-i{iz=G{W;fuVaJb7 zRog!Pq~P$WnfYg<`+867=Sz7w4y2*5P$rdWuUn=-ZBUXchG9p_UJb)08i4%Ykw88^ zXTWhlf!oAdUKMGK@Rdl!0q9T}gt;4!BG<c7E_^4dFOL0pQOE}f)dVgGtK5t0$Tf`B z`uuKz={HwC`&YzTao%=^O_N)w?-qs5h<xncbfZ$yhx;Mdc4gg9&u01k{7q|Ar~G<+ zQ<5!NS-kY0H<tfBzi}x4@&=!utBDrZxK5G(o{yfy?tdmt%D$Jse`;%%z{%Ej^2jp& z!>XyKHW`O@rmuRmAg8RtIkmmAqj}5*!T64=5vpD(Hv9@xDd2Y!6Ap)(b^I?2F9w(? z`;4fzgtFB*5v}-;fAmwk!rYW^rTJira?!Z5<oBX9dmX5O>_jdfIC`CRqjj#8cV%YL zUe$p%ub=v6-g>Tsblh1p;~&j0AM{1d@~UIxj<e%-_RO&T+%~_zr|=usGhY|h9o^9o zSbIe1#c92gI{9y=L)X{#oIk$&pY@%=T|Pe*r`!y)T>oz9p@+YYy|=!c_+M^X@0MlX zoqArr!Y*pf|0vteJ1tzX+N*V_=ZwdXFE`&hbKJhEM|#qYh90Xg32Nd){C^I=^sElj zuL{mIR(Ugi1*Z@+<wDm>|CD=L15e#Fypj&`NW%w~>=Q%|aDlq#9li}X1o?aly#p!1 z2YN2}+I8O=$?E*VOO3+xjw5@9Ouvxjs_%laW`&3BgYGmO-hOavja9Ge(KWTn(W~B1 zSop*%_1Arkp2@Qd-9DBM_<qFvqcJbJ<`+(Fa}a#%>TcVw_4@I@tIWzzuGpASZy}sA z-m9f%`X!H#RRw9;fu%|O)sBAF=BFB$^5>dJ&OU3}F!H2*m*~eP)h`=uRSUk`IizLq z*qL|Rr+-QiuU=Xc7Q_UdT0iLoNx=4Ts4`J8s>h>5wU5FG9^p<1iCoYl0qs&S-W{~z z@vu@+8LHwVLDi9P#j7yFpYSDu(1;k&I|a;90*Op5pfJLNh$j+=IAXNAN|py24c{R^ zJ6L0?1dNq|xkacpQYp|8_l`j|gGy2Dq(Y#v1XX~7Qk8V2CPosLlLJO7!N^jbnT$OA zNfL=@kGSTOlCE5ZuVJO8GO$Vk+9OG*z(}YQ?qMb38eP6>iSPyYEJtHVT2okisuW2e zfo@EVECqVJ3|A{uS5wL&ywzii=~`5pwU$^p66D2FRL!YSV_!^lEXMK*U?q{(wKu(s z9JMZRo^DmAI3Otn%{JTvt3gTBHJq5p$f8GwslDy1)s8jHMRN;KPZ823L8Ag!7(p5J zXA&5jXV9n6B5*G-GL^srVFVxfEsw78B|$P2$aahku@&I8418vyHfZr8aE)t!LD`Y? z{)_3_Sw*O#nK@X2?MXtFyP#g0W8iFktzc^uT}#WDkKmXjWEW#zG2W~18N8alXEfV! z3@FhqWk}*U6rWIQTt}@4?IH_E!1H{8zA*N(Xk1}^)*Zbx{g#U)OOgGd9klDVrD?Un zxfmVNj8sj7ay@{ZhY*3_GZ_4yriDK7U|u2-joSG@E>lk}3h7sfWCb8RW98v}b=T&9 z#l5{LmYMS+5sWECQEE=Vw6Q%A%uPh~;yl0%&7N4Gn+UZ-Ioi3zN{XbvGbk4A2F?`$ zdB$bI_L1N^N^d;QU3dzWBFiQMOP8qi4kJ=gO}khygSEmqbZ*Jf*%pPoTmasT6%|H3 z%R_#|sI2WtwhA8)ATLkDual5Bl9A1`zzh|TKZ%%32!MBe5ng42@o+spI+MG*g09cI zw~n_K>Ke8Ki%+Z_FwPdy7>Cc!Qo>Vxiej|Ir)m~D8F8k_z;9D%Df;$gPsw7n?crEo z!mnF#&ETxD@z@%MX5jq`wN6*ved96Oh@Jk2_tKqxc%xSUcp00azZ2~_SXb@y9_y+r z$(J5wXg;n0T1r>2WN<EuW;$#%Fvvuq$RO4Hj6{_nnX|$hu^*XMY~W81kRS2j6@_pt zg2oDw4xeH1&szr<So~wTCFXgW=RICa0d`VG^E<2!X04bj6eI162_GH4fw`WxJ^z?S z6O3>pY{h8eeSn@Kl*t|-50edW9$nOD(GVj5&e#%EWs|J|%R_!OHt)|_Tl<~^YrxZ* z&s5NTn>xe;&t=lAIu~hRXk`(Y74?>Pp9Feh)Rj*ofEM^Z$k6(D?Au*kcZOyqVMYfz ziffD&7&o%PX#n#>jPC6qH-YS&#giDsor@8!;d?i2zC(7KlNh=S^nN49=NZf$P4@bB zaz`8Q^cilt0shsUd}pM^qa8C+H0NmF4^PnYn*!D2#p^LFOkaP7)$j->?r?4>HynJ1 zaf84+l1p((B9I%xjRQY5YZzxE_AnB7AK!V)>0HrXf!Psh@C8?d=Mv_dkY{9rsE0Bk zi`6}2(rDhHy9R>->@L_!#JXddyww~l)EkAfiyf1Tcwh-J3@`%72_!%^%mm$eI4aqB z#!g9nE4^tR9$|RBxIfW<EF(AOKYOr_0IU>&)(Sx@jRGxkTprD$4RLbAvU+phN7@E) zgONOcASV)Bg>YlQ3d2F)Nbng+w~~aA8;I6~*D>^Z`h4Da><NGjf3OmiHB8TPP?vD- z2+$G$J}J-}3fjVH8yQ9j))V8v>Z8Ew$spq3cbUSwwLDbST!t7!4vKMYW}OCN5i(~v z&Caz?z%--irknHK$#kKCdx0Dj2X8;m|3A~;ex|=&|GhcYn0HiD+4jeClhCUM2%U&1 zQUd1!k)om)P*5ooKoA89F@#_sn1o^{0V#rAR4f>(0=7}$Cn%tZQXJbTDl&pNAdWhW zNEK0kHwn%1e6F|F`{O0+ChP2TPu=_bIs4u_JFd4HH2fo5;&3xVz0aFg=CbWEw{W;T zK*QnV+vC4~>KVCl=csGIYVu(9?wdDXcEug)Iw(}k$O-Rtsr`JN^;rc7)ODogOp{!b z29+Qgv{0a~h?r#25Ckg#IcX^~Wei$d3I(Xr@@CQy782N^A*|3F`~u7;S+sKW<8@JU z#a~ZU2#SkhqgW_9iicc|qA!>>sWYtFg%QUNOkz8wFVSoRMTWzFf8t59P%vdC5MVX{ z0Xjs8K|^S?s@;r7!$Z`wS$(^^W|lq-XaY*(Q-!3ENqLLsi1Ecr<Iuj|FdnFj3i3GR z<#Z0yo5_eYC%8q@EMPNWBC5dP496-6KFkO@!J9{oh+;-E2;Ou~43kFZ639+KAFl*# z!EBfW#Ge4X5^RMOZLF+G_9XiNu<9oVwE<R=LCyZ%prSfDhd?AOwgUX)lNSj|p)mX% zD8Nre^ZBUS(svZ~%PC30CK^jtS}xtQHhE7k$;Y4c3dz|++$q1<tgG1=s+U^-)U-BS ze!#Z*5O2@G-ZSS)V-EBbE}^+BwpgpM*JG(!dbj_Qv<EUB+U7%oBLC)F3ww!IqFZ+q z*X`6h%vvU!q2Jo_52Kw^<5rUuJh%OMl}0Wtj;XfsG!cz~P*5(v7VxhE8);d@`%+Re z5QLotW&)$JGJuja!+5+X2TMyfjT>bVgDjqlEYO0+jsS|tj_Bba=ra}#P{3MLGQgSx zQ!q<7Q)rZAINFfLVSUlglE>u|X;cfu4m3oKW{A2_1oC5pVq}4`$gU!?V=-vyD?ndV zo`OZ(lZOLSU=?Ir#omzi@pgiVR$qk@MgT!5uj@<ejpExnl#FUxwSUb<XBP;FiV5m` zTX})9`MCf*we+#nr<9hSJ$o)J*IrQYdT*7T{kiDbJcmP`9kvyjsf`&6_0E;o33vEC z8*W;IT}bkP?pf#H>)nft>)y2|EkoP6C&b+t@qYIDnRN2gyaQQ5iie)(S5*tPT?=k+ zJ3Z@hUH;NFPwI45R-Uq#ZL%}WwobF$e)#oenQ8N#o#bRn>AFUjUGF=`zs|nXfG$zH z<5Q=R8^7xPddEP{<`jIEIXS1%`}XE}1EvlaJ@=#XBjghT-v@d3X<qPCiMsZo|8#~> z8Q)r~5g**3ViuW%?Rni7XM9iUdbiEWpmH~>ch-pdYLSaLs=me5S{ZFSD2vF0EfKCt zaNgJI<EKqhLVy#j4sfD^EKbpn&gIcLkpwa|iVmxRsUousPQf{v6GDxQVX|2CF@MM- z{s^PS^60Q0&=DCFaB30*flTM{n4wG>mB(a9!UjN3;y;biYLS+>V^SKGtu>-ln+e&9 ziq>PY{jab>02zKQR{^AgLhSNrQA8Csp3nR37U8V?=G0Tk(QivUdfKk4R5PfRxodQv zTzcPVU7QF~{kNne50SI8RI2a2iF+4Yu!TLhdf!>4im*P`{>DlQvDkH9e_2!DY8~|P zVav7pd4su!3$*Le?OT^o{!|Wrvp{!Cxl-%=x{|i!%GDdfVGB$qA9r#w;Wo@w@+01g zv$4*YnmM(+HO#W;#h*3X(@n3XO-l}~Oz`((M_11+nwcEfsH#5qc;YLctMZYxpRO-? zS}rr?py8$#N8@|?ac_>p4LvUmwOVQ~EG8e;UM<w$-4WE^y{Tt&aR{`l-(8{guHo{N z8Mn@)#GL7_Q0nb)Zx((C6P{6<b0PWarBPzE0RH3ukQh_Pi6IN5kv}wq0!|WcH~>2^ zTWBM+N&^3i8<JR=94cfdF-34<iu?#6kTfzwF+z~Y%+mt+vG~T|6cL0Vfo4a9i6rZ< zL4t64$=dg?{A-+b;nek+W(TSTr=W+r%Wj?9?jPAEYmysO-?$Igg{3I{v)I@YWp}Ql zVV}q02ZkZ)gY#{tc}BtUJ!y8y7hb+Ri28KL_kf4d?}f%58_xV6)v4F?c2`4l(9=t1 z+Z;=el{UBgeXc6GzNP<;V%FP(pUm#hq3Gz?84u210tDDUL|Puzv1J6fq@Q`9=wixm z1;p-x&Tn*F_LI^W)t~}SV?r97XfBW7LFdJ?IcwoLz+Q5Ll@Fa0!6mRm3DI0SfyyI@ z9K=OD6dN1+rH43CRKhHp39yF&u#jx8@p$iK7M05-SQE(XHFWVQDbk-60QN+yQOP5% ztbqL_$pf2-lbWA7X<-!KG3LnPq$$x{E|WTDkikj2v$-^OER38K;-#y}!(?RCh$w30 zde{-nm8^>7%w#ZmR2IR_d3<U_f;*GOVRPA`Jc2j!6HDdL3CpQ0<{B}#2r*V;onj_; z`onYnqL)XGm-Z|5%wYpcXSljz+aCNwxhErw<kuWKA4R+NzO43{`4TloV*Ng;=$sX0 zcMq?)qS&r0U-FrsXl_yvHTUwngaH32&ddDS417YmH|BUtjqSROO?S0Et{rjjOQB3( zP`YNM4$amtKCvv=WyrGGkX7?8c=~kR)?<mdm)or+sue&92*<XHH&72JKCr(Kh)g_i zmI!ekKpZc$6_S#y$ArkGSra9WB7P%EvNw6GQmjRBF9b<1(h9*zu29mD3nYWbi1LCl zd7>c=-5&+f_Y{o*(UX|N1dN|#&iwJa(BEAVl}Y`<is&3*Aezf`tR~QiS37uj?a7%@ z_1W|H8^{uCNk{Us_1_@@AtzbqLS$mdUSd^|yk;Vu){(#th3xeA@)XU`T9wbcP!%~D zJBx3o`$nzYlcjp1B%%M0&<*i!A%&pqNUjalpAvYnJ50qh$$e?Rvs_MgUD{@&LS8dx zC_5}B<#f=e-`mJn7v}da9C_2dV-+F)gmv0bJs=+8dMcFIXMg_tP}y;vLC({sD^^`H zbt2q6u2lI}XL_ZLLDh`pu8Zbpb=~xi8iiV<KfLzl?fElCIZhw%o^hz^PhZJ85}P@= ztGV6qfUMMlSN#<LVL+b0ALQ{bj(ReS9ZHIQHg>*en)Gcd*ys8pok_Eyf-~m2EiRke zSH8Df<hsDEiQ?d~ks>#3{<jy476`As6IIx@T+jAKIyDz-gU5{9#cOYJ<*QuiXgW zMv#j>$~QV?X8U;y&Gr>4CfiOKcCGrFZ>xV2Z?=FW(YeK#xV@r7SWFthi^Ghda@K#D zkr14sd0}i0leb=+de{S!6+FQqQ4x%D=zkTk|1Q0$V(66w7pc0jm*Y2uHUuRpHT9f2 zu`Xd}TIx^=HdS4^f|xihqvPIDuVo*8H>`Z}?mTIZ{;q3sA4YH%0oAFS=FOR*KhW#H z@n|1ZdPDwV{Ou}Z9+hG29^UzePxW7)`wXu-Ro(bpySvR+v&97G^43tJ(CxQ8D-5pN z)%)yj=L~3tMu(TXh261RuT%t1wwMRIW<4rWg9;NK+3f-LxC0o6O$&U=PCv8MN%-UB z6pADI!XvYf)5=b)%2iP)EKv1Qwy|(Oal0XC#)I_By^)(tE<=GMaB@IX`Zk7tik7gN z^!Alm?zFDm0|}ic{|=4|+8CVh(N7`JNr~nY{E$5DpD|FjAUpEtyQxZ)gl!`B(7$Bc z@}FcIEs6_F$L~Y~eeEA}@arTdVjO{rSSnbZ9VlE0RscWXt09L(HG^)+V1^=3=LSG# z^!XgCwyX2LcG9UGJJ(*j6CeJ-RnvT<mIauhF?|$;EH;Dv<+w3iu}##Io&>`hKy4hu z=t)5S&yqk`a?T*f0YDxTg@#Flf0gh>(WutqL&ZdryBPvPo<7ipwSlH2_NRzL-kLm~ zz>y?VR>o>zzt8G#^Sd<6m8bh3JLOQB=hRQe)qxwk=WbazXjImbz{O*?VpWf3KOg2> zzP{4v+{Jn3RpzToNQgYJx8v|H;U%{4ANj=B>8LtA&n|bXifuz4Rl^Kl`rGiT4UKE; zv{hB(Tw>tfqzxFA;F=48#|F|uV+1-Y+7mh}-SX|0ceXmkD*LOz0t^Gm?`UWU0{ol* zvv~PVW;*eXNEiiFC!L6juqgk~8h3>p23DN>MhfUoDk;FqU~;WGm_E@E3nPx+d$w@T zvA=%Ru_4UWW-b1B<@CeLyS^eFmLH$Za`1BrUQ+@M%-dh#c(zm6gult$`6q5*Eu?My zT<!(g__90ew>F#3(vp}6-J$_}CnMN$pVzSLuca;-&Rrun)8(!@$8Lmvx$Fc#FVn2W zm2jFOo%p}{71x9qn2s#s$$Oue-Rwfn+e~BTcdK3^MJivrWv8#zR8HD!5=}UjElR%x z(8h_$OTz+)g_y!bu4nvLo@u}H)@_nk0udce@`1v{t3wEJ!FY`ntb!bZFbu@kY%AM< zZ(I<5GJc+)!%FU!?)N}y*RmrSHL`=>y1;#i5?+3fdGVH+V`<$R)19X)7Y+XTAr)tu z<BWHC()D2T6~C!3v`G~jCr}Mr>3{88t;5-#xj*l(wEaZ96sSs_{$#nJw%2OiLFekM zp8Lb|RwYKhxF5r<J-4*Vab1q@e$An}ErL4=H`aF^Ep4W6BFD{&hr!<?wl5rF%b=6t zpHcr0P)h>@6aWAK2mmc|OF!lkU*kjP0|1Ne0{|TW002&5ZDmAdV{BhZMOSHVWN&wK zUwAk+Up6!@V_{-cykn3sJg~Mowr$(CZQHhIp0RD)wr$(CZJYa^v)}I4c2&|{sq0Tt zmF~OqBeKfEVgUb{^#<_&H~<lV|J#580ReykK>jyI`QI7ge;EQ)fdALZ{~O2vfB+0R zp#Nt@nt#KQ0Dw_g&d}CW#MIbE-O`SYh0esr=067b|8Ua$%l|({QuO~Indkrj23(N; zi|D8k0Q^4you!=_0Jshddw~Fezp(U4kC!*H>L&+}Bo<aJGD@)?r1eNAV$HHNV?Ly; z0T`JAXmJ&RDYVA1ku5S{fr3O;jB&E6=Jw0zWo>;`)pcdbVTfKn?ON(#$vBm+uBnuW z;+m4c#GOa3Gg%v&>)Vg_pVvpcnbT>8bM9028Bg0&HuEm`8Wfozg3>;61cXpa|1W3A z-?x0woPU8fIE4M{E_d~2{xvRJi-T`OP5FDTSEM<8BkHtX_d8$S&6>0A$nQw&N0jaD zgtAT4Z5H!e=I_r}@e^07tnS-sI<_4C0)N}tG_Mn~&lw)3%w8L=Cfwed7j)dV5JOq) zd$~8&PcJX|-?+tR?o8iV!`%mHh(=zlb*(tUDbKR>IqPwSr00g?0eWliC|}@xqaXqw zv*HH+Tt7awZYm~-uPq7)^Dm;&o={gt_$q5BdNK#>r|_rx+un6!&pbtS=v_!tj1U-F zD@I6NUl12NcF1GYfm?~@I8OA5**AUjGG?&!Z&XA0Zxtg%#%R-C?<l)l1$=MZZ$weF zkGy1X1EkO|>xi@2ml^cnHGdOVNMHY(J`AKoKk=+JM*4gTq+evdp@?fGBWCSsCJ~r~ z&-U~|Wc1DzH610LzjYzxyx2P)U)(DQyW4>ez`LEj7&Tz1qK2hhDE3!h{Ow=dUva$0 zFE*GU6c*R3F9C#C@qV<+lndp33+$~-DEB3Kq9>A_b=|<ttY^?1QN_%rS6+XSRZ;P* z#9T7amTlAJTfN^b<#V;C!WD=+smlerJr)S5dqeRm@wP5k_Ak8F2eWk_-@ylTNu+S^ zR!MwfZpI1~sCu!vb>Bva?Wsm_B$mD(<vc2-WD1e262n*`DxrYovQrdEr@ZwQVj~fd zg4Lzkv8Dj0QHn}ADJJBu-nciXQ2`!^2-g)1Uz6)O0pBXD<ykX#X;*1ysboRO1$W7c ze%;6>HgAkMQ9?M1H(L*+FZJbF;%5%|Rl4-g2Cj}v9E(-5MgpvRyU;GoO<|FSV;0IY zO+aq=35BC6E2*whni;_2FA8Nd$`{Tf-a_skC4_a#exW@!54nG26cKE$$~PJ|kMO;h zMbMelb;Y0O`2as_anTtbB?~Oyu31fEikQJGHU|)MR>}N+7)p^q+pj0gnAT6a)<zSs z)<&p{QXn*q!cw(;0~xYlrYmtL8YKrJ1jT_{W-(WdfUEX8NmZWIz*Kfl4A`Eo%1XnH zLQ1h`m=r2^K)Ad&2|}g<QDY*L8j+A>a0-nXDIYRa?$>7G(dS3u#47?!Y@uH}m> zNvCzG^=NgMIoVT^hAMf8T~nnjE;``ND+0gvT|Z;$%2DEH#I?l(thn!Fvd~oZ(`uxu zPXNp&W4UJJvihkA$(Z?X(KuBG$7lcEFq7MwTh(8z?w|0F`pqZ(mH9VCm2G3Ea>JTs zS~FQAVRPQRsZTG(MaMk?pQDT4H!|eY$AK|Jo;)L+x^8P^W{Q7yc4>%VW#|{(l`OyB zcX;vOM^*&5g^l6l-Kwk4@TF|_W5cJUf<+3gqmt2&_)c-Kb7rwG?EXikwZi@rVcHs~ zeN*H~nV|sh32QH(W{oB{t93ebVMz?03h!VkN?x(85B@`@8ECD=zy~rDv_9gHb_;rD z1Fn4x%CnV%U4R`>lRkSudXFg7EDxLktrqKaH*Z$7!rGzTznhQ5HCEDwTDQK^&fest zOReyKmP1`DPt|(zd&8dI)wyShSCV6%{%jxFNfCML?iF<83@Ax9R;?)AoK>pOH~m^; z+Aa^^D?{)g3wqm#xOvyZ4*?UG((*-8O<cU1tOPpCK{2%~L5QYlQ>)PCs`tL+-ZTSW z-~;Ml-b@EcHIxMFLP<26+4K#sbjdx)Enk=S0V=i<u&#L#7BB6t-rR#SK*w@OPAy6f zNaC~6<DhBWn68!dI}-}YfuuW=NT<$YvR@9FBhRAId6+}Iy>Y?Y^5Tl)0r?Y>z={6h zlMRfm(6QpPe-9LJ(o{^wM%X)-T`4PXmmQZ;RiuW#HJ9N_Y4E-1?8rjkvxW2r6EKpv z6cu6>0#X4UJPJaD>(WZF2|CpNW+aQmm327c$S)~B0&}02Huq)PbFhChNZ+@)2Y`>h zg*DJ*0Ut$hog%o8GUC~4@;LlkEQ#m@pzvUFqTfGFR`GO5YP?N)in@t7<7nP%(wDX$ zOcuF7MJAOgII^UD;m--n5lD&DEUN%1+|+&-C{?b*yft7{l6v7M<!|gSh}6G!1XTl) zY{4L?U&@U{hV%T$PmT&Jimx_ll-QwQrxK+|*-5wGIX!lMX`6+oD6FR_0kkw6S|TMS zh5t@Q4iye;=bx&syKrVo`c$qsOhjj>Xy;J`(PmXt$^$g97_0X;h7z#^T2A0f_Gr+r z2RxFIEFrU6KsnL`{s|0lqb8)BNnWC4DFI|Jl2n{orriRP74l(vrwO3SClO^s(5!Q- zjX1`40H*l&qhLVp1b%#pVa`|~;Bq2;O}c^G4v#%gP4qqnZX6h?83&oLON0XOhT&uo zQ&O>|3btJev`K&gqh?_x6Cknb@0>NVcgT1JqFI4e7KrCNtx#=%OATC|hg}d;T8xZt zzjCP;kIvx5YIx$z#Ig$>BXAZyN1frvN6v?$bL9cAv5gS&I50aT$h+)hV?Vsy>cqG( ze1;9pbcYKFu^0*Z2gu}WHG+RervNL)nXN1fb4TD*mNNm|yj6nP9KwnA(8|*>OqODe zC@LGdMyLWwXru+BA<8Uan~E<b?oO7oN;HEr6)VQ=gO2y^6Gun844JaG2Z~AJM$JU2 zhQ6zHbgTP;4)4+zINe5}YU@^4npQAXP0j?z(eGRW6%eJ~5mg~tPbX7x1?*IG4D8B+ z4WM#ZKIeh6+tQ`vwrFpcZr(dku)oiRjm7*Dx~uPu**(9hTt8>+#B%jb)U0|?S*4;K z+KRTcyL?;k#Ad3t2~$Sz^Tkz6_@s!ck#n2`Y8gOQE7H_~3)FE5K31Z8Qo}`@*oz=G z532X77$gJ%KS;6NwBA8!apmUgt^DH&q!mEzRg&z%sPXM9)YEEssQ#%}<o{HLcO84{ zKPrFA;<4g=-M8w7m3_inzp4jbzw-V9OshDd>bDFeK_w6m`x;<AP-(MjwG&AIClOnf zPJ$NbC^bt6g^dks6hql0x#P8>n?KDjyamD}^^j2m1u5AKgU_yn&z^M8_hWruw;S_i zlPE`$GD%0xj=FnLX^u>pLu_%vm;}T<L3?;`awVQKwRg<WLcEKR3uRBVDL^mHsV*hl zcr<0Z+mBMr(q*&?8zXw3iL@GK6Bo*o7Jr`Ktz_{gtEJ5m>&N^`phD}&mxIG<v@(f* zq(k^@)Y8tQ*i$doM)_BU0u%ypjpGu)<QTx{jeV||?l-W-w9l@=%n&A2tMfh^bXReo zlh>jQ^_t-51RBt#^YOek>dUdAt~Y;Z<&vO~8uX~di9u5|wXgLWa=5TEE&}jqEE@A? z^qUo(Eil}w<O-UGS`gg29CX%9^AB6<`JUj<L&?A#gsarm=P%R6h(G-<0kQxEV{~O1 zY%-I;mvaLhLQYMx(N{U0H=dHUbIEp^7DRA#`ZnHU7QGlvb&#^>%_8VeNmO@cn9D`2 zW&b^0mt<{e{>7?zVZbjS?LI@Ud8AK^2!e5n$JuT9Q8*w2(_RRXPZ{Y!QT^;tU68Il z^OQ1J!2_QP>W5BW9K%l4PmT^?sUn!VJf9r1cASd<NLvuJ1*kI0H3wF84CxWVIX1}$ zndxsnHl>rECpLXoRsJdB7>m8|H#8ieMJUd86yeB1Xv!OuZzQsKU)bfWklmPNy-Zhj z05CZrzuExqimcvl?mHF_)O%0>sQ!+RBih-AU5sqL@M8T5jF~w{`8FNSj#qFD!YtPV zd;LapD?s5QD;&FXT<05ZBC9~QVu&wvdJSp7^B^d3+&W*tDu|m`*+CV)$bV}8H3-a% z%{ofG&<|c1Ju?#SsOUmMpyrd4NE3SS*s|<g-9jld@YOi#)$0>iBSFuE_BJS1KiBm} zZdEN|*MiWV1zzKK#|4Mc+R;z)<OLc;PwwP8;_<n~`xt8yQmh}0#1rCS8~pZRvtFRt zCz*o4^k$*@E`dF^IrASoJ5))3qf9-BuH^`sB&u(DTvOZwoNSQMsRf;IUKb;IQbD}% zf&xZjXf}(W^U4VG`*CTm&YZhfidM`j&+|2F)534Jnj6)#d+Zh5noINrPVj)eA!E+k zOL}aKjKotNnKRx!jOy|nYRgd4$_3bLNJhQ1G<(3YB6mvuALxHOt9A9sx}}deL3?fr z%zZ&x=M^jy-3>(@;zwRjnwM*mNI>^94l;*!SOwq5&z-MjZ=_HhZxVG{{<=*CDw$Ec z&UK4AwL$6RB?nC{)076Iwu)5+t5e_wXt7z~3-S#Okd&GKMk7rJeL~0<lqYt!=9!VI zABM_fDc3b=$(!f1?_Z#|MHzlnGkW3OeEtehtjw&`|CrMMbvn%ZiVIb;YhwrP*^5-| zN}L)r&;Z?(WfhMRoI~tnYsP`~>^%p3cJQe3>kPzIDN9N+@xn1Sw`IET=mF%>5pK|p zWRVb1BISS{_KOvTEJY+7X5E_G?+&Ij1MI|AeWzabn<5O#&+$a&y+oLuavSHx&vt84 zGyql2o8OK|cocWa408|i1>{3}_ouT@Ug_BcWP=Qo8qhA;r;0k}xb8w6lb!)mGM|4! zuG!S)#t3UDplDz{){va!5r6R|<CJ@UOZ;mCrtBc*Q6dZtxUe(E__^|NV(;^Y+nK?< z$j1TiyP02*{Ru8~*)8DM((}$5=?}+Nw-+b-H{-OEg96SS^*dn-MNvftQ3&b%%aVze z-$xCL$KWUwboT=w;pUz}kbiwhsBF9HV^P>5SxJGqow|6@yJ2;|#d{LwJv4y8=l}D4 zg#_jSEEK5<kQwRJyTm(bb?-BNW@DGFq_pgp?@fCYNCk|T9OO1|%$k=yeufUgbYE~X zn$0%MbcL{OUjdSG40i$ppz;P>>11IPliC3jX0aUo+zoC<gp`He<N%VsxGw$A%Ci@R z!!%_iyEIFg?)fc==p_+2KT3OuJ)rq_2fR4qFqBw1>lM#&`rd{(ZT`fT1w;Y03gwa- zOwDF-w_+@p+Mg;~w$6%;O}^=!<Tdtfjnh`D(0>D@XO4Lu#O`oXbe{XxvD5HfYzhNc ztP!+AQ;Eq#$pK3&rdpucCg9XGiLBJ13EX7f&t7i0131!TlkEGWC~d@$o!aVxY-5*3 zb&omjCrQqQ;!?5W^$cZSyh5!@mC;hl!LXD03V}^4+%J;iovaF<2o{P}8i2~VN<UwZ z_E`-Fc}gDyWZ6@b7bcRjL<SDl%4AuKGdOc*bia#|3D4{WfF*Jy+~y$&gGqsb4~Xa- zZIPOH2N*Jy47{^?#LOXNFki$qX&wrei6qrZUIzx5pivi!MWa~2CscZej@vcd8Vx}f zQ1Kid0eIM;gslhTqrEV6y%Y4pxEGdd9yAD^Z)IBQy*gxWY1!DHzadhEj@L)0D?Zom zSbjGpFnHA;C-SmRg!KYtIE)7jCt>ciCM4njQH=c~G<x^!iv1I~LCBw5v*y58dw~Ep zt0K++zcW`qg)LzjLNNEAuyF?F6%$UflqvGFFuWXEIL(qQ?7^_uP{&r6J`6RZ&zwT8 zN%1M^r;7hZr?_+{``{Nl^!|VY3idkkh6#K|CvB$%4T!&VkN>9lAs@P%ppawEV31jA z#=71FkjzOG^Uh@elA;*NPs@!f>30Rw+`$A?r)boTy$;8Qm;iK@pLoGIzJ*A#VEZ%X z&$2<1V|zccUE<m;?Pz`Rgo<djME8{l^wJ_#{3#*AqKPg$E`p=V5NU)=Q|zz3d*%$- zPSomDbIiWqIFfMjkc}3(mz}DEB?Dvx#=QMQ7-MLRSw~3+@iyO!p(qDjBZ^<;!*=WM zYOu-2`{&<>8#813-i_|Q4Xg|hzh2Ej)GOmyu8nZW@UheS7cALyYMve+9nF`%_Y}m0 zp!UM0xcmJIo5)NdZp5`urvjAN>4TNVj$yGzT4N5p1meMPF4}K=Dn53>R0ch>E+!9a zJtGVW0GlgoP^;HJy|Twr)N#2}ypl}N7=srR)XF@cig7Llwpmz1EvQs2L+siC^Kswg zk<Hib0Pr}^Cy8rba;}%9@!KuHb?ii7!3u%U&>h%e6MCpBWwAiEzl>EybV{>%jJWs5 zZef}BiAZ%ha+kQ`e^7t%wCdSN|5oC4a{yU@x+d0L02+#sPY!j?kI{=oL#<Xqa_Y`T z`O3!Wz;%cXGeWCSt>`$V(LhC7vj`GdL=1ir#%|HrY;o5u&T=jWU72LSW_h(&#OhCn z(@6gt8u`27aw@Z%LR&@JKd65{5OsMc;`O}pOl0HwvStk{qc7DdTgjN^5|#yT3<?@y z5LgoAGUfns4ns~AuaoXAe_J97=|D04XO`Bk;ux*lI&`9bjf74G*EDtHurW&4weQ5= zH5^i)d%c*rB1xz$uU3Vf+2GOGU-Q^XF>mK8v*oTD1SDZPUb#lJ)dOUKU-7CES-e_s znIJ=J;O)PK`>&Ijn{>>#!H5@XM%X|<D2y`o3l>Amiu@PwBQp_?ULP0&3-WDi^q88~ zSPtf;Dp7U#^^**x`hui40MgYuE_S5k04tAF!Tx$3yuRNe<!w;7-~7<{F8>aTF%nfr zm|r#!4MMMTRZ~;z6fOoF-Ss|~clg9~^GcM3&}9tz*u9|1Nz@ZB%<CWg)6-*f7z6@| zK3*jJjhY}u-9wO4mRe}v)_L39@wSn~^Hph|GhAQov*oCnsTP?(=M*uYaq%vyWxOEP z)pG3GXM~Ge0QFh9vcMz92rKpiIoK1KaDZ9U4ppWw#<VLpTymt{3&7~L=?h1!Nh$Rr z1-KP0%WSQ{uo6>25kK++xf?TLUI6Y4LBzt9ED|)nzOf0?@u(TngM+D8&~10wUPth) zic2J_obdKA)aO=C$}gIm#WsY0uQ@w9J^OB&ggZXcZdfqBIZ%6=>qYRLygy-`ve(bu zw79x<gip@rxezi#t1rfu<Iuk18y#OOI9ic49+1`&LrAyU%xn5>8t@=!+=5TKib{ML zCcbg6sLSi$t?i`*`v4Tfw4XoK4-8q*&^ktR3cNi&*6!Bs?dkoVQ03D1gYRzI{6319 zM477ry}*<eC8<Dk!b(Pdt6Wj2&d739IcE9HgHBJh`6Vf8rVU7s3)V}b`us28`D6@U zBxHYEh@W-_^$tNr0TUkR`IEZYm(?`AruF&4f9giwz#kMun+@4UR;M1-QTu(b?GnhA z8ImR5sJY%3%2bnZbi6=9iMsk8=UyupOKOOkl$ZYsVRPCJ)y$h#_EmQix(#ADq2oMM zT?Ipvzzig+H6O1J9#satJd<;jW5or!vXq&_BwEnSt~R?PphJ=~W*85<nH?P{V*&qK zGcQ1M{~T#b9nj7+7LgCS1JCvsU*I9?<O%lJ&>qd(=Z`PYD$9)?_D^dTEX6yMUNlLs zfnBLEG_hBu3sgHKA~S9YruS*yM-cK%L{7JID=x7WZoEScY$DPEImm9_Dvb#&X46Yo zby>?yW!%(1UO38u*1Y+@21)fyVWW3f$)cm+h@|82oa>xT+Mxp#HYeU3Sm=jqwz;A_ zlG&Cc{jw$%h`fdrovPBDIkUdN5_>)r_mzDycjcfr5sI|{QyYq%Cu<^hgeTd6QYTF< zOnKY{LPTSX%|f_}LT}kIrKAil&}B5kmmYhPrRGS_Y?a{>T$)-jlpd4<h13I9CYfgC z^41iY4|W4w;)ZrHb4cI>#PjEZHZ#5Lx+p>u1eNBURCb!^=2Vx2*B^Vq_+Nzl%6|XJ z(K!J1@0ZkQ<wxSswyFinx4KA~g+pqKlZ6WnzmUA!ySLzZywX5eK*1VS7_f>Uva|b& zU{^jp+H8l=$@G!T$RG+4YE`ffB2#@|UfmIJlkm<Ba|MzaB5gbFeMu$`?XSvYH)Pbg zMyzIx8xB73p#i>m09?=P!ZGkKt2TC$%@?fJ-<m|XU#g+Wk|_+?QMqhDlGp>KOXu<v zzywdMiCxeb<#Tw6vhpc&C3nLap?wlsE8-@}-tc4E_$`Pvse%<@(v7?3E4$H1k<hj` z5O~~aVii}4X2t4xy05at2e$0JJ2xMkdS#hxwG%dR%D%OMUnAzRGIV;mL*x|}ve<VF zd-|g+HL$(-J-p0tso;Bt18njsl+nl<SU|x~2qC6z!(?I0AJ7dzLwBkTHy;Cke?N*T zI3stVS6Fnl@XOW<oUT?l+wF8q`AnMB<use<i`ryt&<J#~f@O1-LkJHH8a<e}7Fn>; z=e}o?PnyjhWkzPnd?YmSp#mECs1>I{(sB7qPS_yDB8g}w;K?;#@7&-%b`BfwJh{W@ zIWu<^jA4?q2|1tQHoP&4{4Xvya}zACX^^sa<$~t!1v~MG4ohxbaXe#k1gWb*>C($i zdc`T~X&B7eG>FPb`t&p#QHRDa_Av4q4)uf~hb_WdHOcak7fhmyHS0yX*-S%*w{$b` z)1+PPD{R_zS@Ap!c>Q)zsC)lYq5p5(Q2!;~K0Lj*)Ry9=Ku=2|?skYWVqS{f<6tPt zRT|4R!`w6BE1sKbku4Q>CyJvD@$;ERjNtq(u33Lal=X*Z*dTgAmvUkxv|`xcPZOMB zFX(#7mDO@-WDdhaJohT5*Rky^)ZOZNwZm>VhZ+Ez1#mPKs<?B+1}76zZqD#4<PeS& zCh5kT^lRLJ0*H8}ya^tM{fSWAHv>loe!VM;X#^;RN~<e#77;oF6hP{p4e^GTjy6l$ zhFE8z?Y#{`p@RCFqbWCD{%UWW<|G5W6ROdbWmZqDeB_<H*_9=Be%1Yhig7zc{5Jfy zPwwnamwy*If!o;2SXY4X?R7*Cd>FWZw)KL7-sXeUoKZ+oSEm~J&nIW#y)XYH$VnX0 z4`78<T~UR*Vw`fqVKO*?W>KsSvT&;#2<$t_C-U=c?wPUQHLnt&cp-hX$g`Vy(8$|V zzdHH-hY@wBFn@2TMB~<uC)hn@FCdC*kmGg*YfmaqY#d_S08MRs9*7oJR)@}skSHc> zE{ourZh_^P<N?|*m*BzUs*yr8HtSj)GD<DfF6!(Ax2V}@GqdepvF;nzQ@@9;Eo?3s zO1sB(uQK-dEx84DW{S&S`|FOrhn<=QGrOg|XM&7ov#f^(>8vm48_pB@fLe-OI9T;l zW31%m#C$W~K*$B=CR(QFO+MXs1+g_(yw-VBk~>tdq_u59Ap{3^3Sgo}Rk{ypq0b5p zDoeQP4~^Cp=`rdoAQN}%1E{e2Kd3j5jZdOc+nf~WCFYiA{in#?p@N7NGIX1=dp0%A zigUx;P)?bw4^PgKO8KGDgs|)!ZkT>)o0U3v?H6k=R0fXYrU}r$ePX!v3UHPwT#QME zuw8ZtT>AoOSlo)JI|(Yb9ST%$;2JXvaM03Ky?m_Epnwh3wVlQV^&FHbV3n9Vr=MMf z?zaZ$=uKt<+=9#it(_5(ILwK49uC+DUh0@*+2)7F1x&-e{9`8NFn(BuKaB8W&#V<k z0FO(c{9QBP`2sLrOf2%07~~J_apW}nemJ|iIQZ4`tGIEP*lG&q<49F-Mg5*JG1?(j zUJZSiRoo97y90BG&7KdAf6t%=QVuOG)X?qvjkUQz)7~OX&5m{ZLOQ%9UqniAJ^k^K zrpFC03Zgmjp`5wx*U?<y(^p1Kg;+ymqBY7g#x*KNgD_3KLPC1@pYN9E)|y@PL;<j_ ziQUya8w*6KdHLj5la1o<pArdJ8;VDNgxR3_z1F*<r0S8<^Tz_B+!};YVxlE*Tmx%S ztL)rx2Usqu_&0mmtIak^)S^~~<xwqbFf6C+-7&sptGy{BcEbj_qEIh?a4W*|fx_Bx z9XajGop?bla?)c*3ztMKDn)7r#g#nOmH)acZ>lTf+*MaLEx=qcfwiXxa*YkHIM?lW zM<14)+H!mR?4Y&#YB)$h!#-saaG>S?T*%BU?!UuAcqGw{CD@P{*d%+JHJN}Mdxx%b zH!Rjr_DDfTmxT&eXnX(UDOnCZAY)$g2230)@cr2^kqZOOZq%`h1Q)1vH#GSqTl2&a zSe#58HUYr!7RBtMLqtycZz1OLHOkM90;f|L=%CObn8K~W?k6zFi2!0^>IXuM{#d%1 zIr-7QlE@aM$Q_Yv(+#$SNXF<IzVB%0E3J8mxZer9DGLy5?pfh!z8K%Ns~e5KiQ)$P z+KRj=s`!P<`hs2i%HnUq&skCXaBfZ^(DYqRw|s_7zu=cQP}v2|rSqG<_7P{EoT{6M ztp|w#gTOJsmJXoRhw?GY`{dxk{07lsNE?jkWCCWu*n9<Ybx7p#5<rG<UjFtz?Tu@& zHU8vdj(*s`;eY;?{uclE|6Tn(9YF-C9{t{Z#{F~wl-{5u<8Mer=oE|Km9Cy12^o{o z1(;KepG#TDKpFa5FG-z;n!*3J7t9Pn&QqrH3wxfxq(7USfR8Q@$X2QUK!rQXAUfB& zgZWZh1xf!Ps7ILnF-paADtZ=s-RSrKKoaiVhqJ2~00_7XbsfYxUIDTTt-KkmG;RX0 zFmyF&$${5TjwRQ7#kkX>*BVm;V=Pu+pbtP$xk`@ARzPc#Iq(%BE7H{Sdadg6yG(`s z;$OT}a>we$JRgOky>XtmtmH`4k?%Y_cixu#<?5ZLC7!cR;TEk~xDoZxxsIK$q&)da z&`+lAkyg=a(T?UMA|HSFP%4%E6pVdcx{{s;Ph?of+#XYX2Q`0QxteY9&#p}v)Mi58 zd}3{+BwwERtS7zDyE(9xw)K6{ojgzuY*^CGZ&_;1W))KnKYC4UVw;cH;KQUCj?Q`U z9GRCFd#3s?c<4{(s>@5ok~QEsR}L4*6<n)DqOnQE(nX^MT0UcZAm($w76lkA-Chso zCwaE1Dh_C62tg_hNpH-TCoMYQZCO)#nFXRaVFIMEkh-h0_=t%T*O!6H4NoteT+xS+ z4GHglahW9{Z_f*6)e8OGffPx5-Lg-+{H2q2Putqv+eDGJ!g?fa2iR`fmoe9`ajuVo z&3OVaGu9`wL)i4V?zxy9*aH{&@!q^r*%~9ZtYtX%>ScWrfiB0|miTWXx_=fDqJVJ} z{!>{vZRczN4SU(_G^fZpZG&G-ZF|A+lV)xlZB=VX4yRsl$b8jCYo0X_yn1c2qbT}; zVk|m`>t!B`gefRBbXPX&>RDE9f2r!@^JR+3<64jsHV;46n&)#6V$|3uxB#oB#YWD> zb<_U&=gp5H@7~wN$A|xeucuWTHhQuzGL`)PB8Y;~84%jlw|v(~G+;WO%Z|_kllX&7 z%CdI}OSgUvMb|blp!7d)d>SS5$puO`icRdv#zQL$*<TDnt;=H2UtTTAT@hN_7_L0h zqYPW+ph_0)$S$Z8(8=6XKVm*7#6B$=YV!UN63$HA2cfmvF+i8K>ARbs-YVDa5{Ley zk(E^#>q&EClG!ZDWCVZqrY)KJ-6<q;93hx=U8G+{!PV7r$f<(tRwc-`d=6}xL>%~5 ztW79V6$Eb+yMctJdTbW5`+33>c^va{i_|4;jM+|wrs)YLsCVuo1O$#60*2sDly*ME z9>Ua`qbTGOCOBrY${6rw-Jg<b<ofXR7<rQ8cR-8^T=I(KNrdTu%Fo$33fHm=a_+)E zYGYgnl??B6{tK)Mc$<=~jbpG&5<S-zPgUFPS%OqN&a3de*Y+`UVLY=rsWLtfnnqD` zi}w~nB+}s}Iwchsa@Ve{<kW|u83_ltEz6g4tIo5@`%G0`PRXxzI**4%(7@1nakMZL zHir2}b3O_|ycVe6vF~HpFhG%i=t)-ZrtqxWOJTvEo@#2J9PT<wGzP{y(>N@W|J^K; z<}QOq&oycZO3@dd+kef5)z!>AX)Q>y-Ua6KL5U;Tx=s`$hb?WCuR)O&GuTdf@&}p0 z?y@MUho=5rD3*!DvJ38-=Ih7RO!3lY1Ey8qXAHB87tVRK=vI}4h3Hx7U&;%Y>{FLx z_d~mdUSnM?nn&edTkdadEbeTho_%+$iG$cJv0DtCW+n@)^CO@Fp&8oUvGkEq9%HCB zp{8lJDk|UZZ4Z1cLVt7MVdAaC@KdFwl7w&d!R`fa#@=sp(wD!6FzPcrh2_p!+_{ES z?-1f|4nbv{p|>Y6J7za#0&hQh#VCrMjpl~kaK<*YeOn41Ssu+!b0E_Ojdy7`w22j< z^Vi4&FI^n|O^0VYp*^lWrVwv0(LAMprT6Qq0d;c9$pew6%TwjP?>EP}0PPFx4EHN@ z4FP(OFm_(NWT|t^E>XGrfdbC>Xq=RiHwiH_(M-F2mo_{sZDCfylkX_vl3V}0Tu6a~ zH7`8zbmE(1_x|u3a#EL+^Tn$#bzK{G)HPfmvGdxlkKub0Ov&ZH=;*jVnlv6n=m#gL zYCGbTu#~xPWf!C)JsT21amZHNzz$@@_25fZaE-kvVqA1~u5=a+`m4Awx5x&9A+DS1 zFZ^Xf2lFf5b90XY5)hsdbw)8{*lyH??2JLaJ4n)V-LDZI(jjD=3yU@!Vky1$sJ$n5 z#~GSO4ckE(r>|yzu?rq-n*kac%)bu_0k|8w!>c1eVBmBAX|?`^$WNtp2Pei9uz-qE zPLKbLICo9O|5w=|YPeZ~o-rgAjmahBbQx%2B_HhUQE+Mz`cj#B56PXrl^&{tDSYih z_aJ9L-a%hEGu(}b!4484jcW6`Bgub*+@r?shC5EOHeN~zZ62e)(IEiJ>^1hQY#9OX z`#rI4K$ZcgPrG>TR}3%NG6rTc-F(~@ApF%pzEelz0NAZAuDYJ!M}ELTd$|%AcI1E1 zLgxCshrBW?fv4nh(5BM<P$H6ZK0A)+-ub?UKb(^I9QE=^jsx9Uxsc6f(MiqDecx~G zOmeYQV<ud7g`))?Klm@?t2aSdVii|Ly<BsOjRLPG-Vq$wB(hwjUO6%daC@&Y40zI9 zBqCg$u0W>0*FR;g8r{=B_@lsk{30F&Y3>M^*$T4o^HeElcE>{o8Di5(HL13L`lLcc ze&v$kdnY8*eLU4R=3kl8VBx0>gzSGx*=Kwd5U}YBS@oOvTn<<3JkyG!w7I>;p1$jH zFK3?sED0r~d6x9QRN!UwcROqhfQH_DBO64;<ZT=``57`uS)6t#x_S#37FNCgChS_x zbOKjG$&De^q#ROO2vcytd*hCh!ZNNX8P}fL9cH~LBgx5fID>X8$*(Y)IwpMFz|m<R z4l8Ib-R%CQ9hOtSQd~Z>u%X{cC3)<!=_4IR5y^y2y=ukxV&pc&%*Zjm<0f!%Dpjpc z#AbqHB}8?<lJP#6w7sq^@cdkDxLCWbVWJPdk+6k+iQmX-^ccEyY48EzVg1Bt{37$P zeuB3WyFOd)y)W>8(E+JRuFz05%;tF}tmRgg*c3+#J}LW&=w-HoK!qJHaBfn=IDi7< zRN{JK0`$bbf{T&7)q!cL+aTU>YlS_&lvNn!+1#`TzM@fGv|2dL07e5e7-~P)cR3k$ z%6g3rrJ3va8N)Ql5B(d6m6P&(W+UVAO6UJ-=yFmlQWJ}lvv&Epf$@7}^nTP$rPF*v zda*!Nd8B=|NO8SKyj;+qUM{k4*`;qXnLtO%Tp!GG$IWyX>`G>R2)wdK+zrOfdPikR zXy$v7(R%z`ZcZz_QZ99_mcMy)(a!VK;F|hep0Y+>E9<4abM%3FxY&Zl{}`d*^O+5p zo7s8bWc;Oh*NG3F+u_}J2Jbu-U6_&Z*IJ0Du==2DxGe5nakla#6VnEH<R$YTpw}GW zHBDRzp9ZVe<7V?}9&v*_Os(Oh%D`c1*b&*-jPVO5RK4c5%*g^0=xX5>f2dY!-#t65 z$nEHc-q=hYyBG$yRtaTp1xsxeX<l3JWnaQScfbVfowO!dXzB|yp(^kBVIw)^$bILG zCG~wZvd;f%-qMX=x=kAM-0k&m!hc%z&o=TO*F@R*fqb-jS+kY&G7r;5*x`=ib^s!u zktUM{ZSlXaOd~>kSzrxeJ^);*9p`Vd;@Sm;Sj5L|mk`pV#l^rTMZ4*z1!@M_eL&GG z02Vm|&kj-7Sy5+{ecpo2ZfVXNeVjfJ!sW>eIveGwB<FOmZFQrW11iNZwsVQP4SSJz zAAl9Z(bRjbLboKqFVQ3Nh^-@ojCd}GpFs#N+kfKmW*a!WyZ3MdgGL^C<v;6OzVkn_ zaCQ`}vX|N)kQq2z5$@~6>F2v#H+Q<W4P=`S`AT+Tf?TCk^QoReS}#5KZe1g-=XF#2 z@zdOJC6Cfw-?jo?K|NpTspXCMk`>BY)KIdAmA{;k-E?6xiO=2Eo_Y1eNm-W*A@ZTF zfv%2xv^Cq_07b`0_J@{Y@;(YV-tpYn9EHNFEeYi7<J<HnYD!=ezTat(#^woWcrI_t zB}^(-_-aeCeV`hSVBCo`DwKxmRu|JQS*WB~hARxc&_g%t*TG?z|CNgz&;FO9c-}rO z6B-^e1Pz;e)X-Yz9!kzjdt!?})(RideWM{H)w|h~daNeiq!wo?P?e=*WLXO!&&j@^ zrvJe!@67tBwp72;v7lD8(JzjFp(pKB1zTJ=joq-4uxvF_O5w4)>A$Tk$URXsv&IuP z6IQQ4-IY=Ub^Jg^flLndF>?n)6ZE6r#w3yxe%=K<t|F5pbhY|;KbWVPpefH1HTTkS zn4nP`w+jSwMTWKNn>dLO0Wufh>6E7(w0uTi8_c(7RCr~dC%b*&U+w1T@A>dD2R0jp zoJ+1}qABMut<<_6QTAff@X;pVr+df5Z3jmeabloTwRlxd-`fYCXGGblmaf>!MhCXB zW?iR#-4a<bi|quRaO~aC#9f|D&(@@+B+Y&f*lrceXnN$~Sa-O;&&-2*x5LQLewS%< z!0w5}+_tdv{?AR`7&y~-pNHk`_?IKZJv{g43~*ifl8G$s)j9S$8m*nH4co_6eP5qH zX@(tv8K17M7y$=Z;ueO-;9eIFK0CrAYL6dB`Z5X*d34|~!{Ba+rp}9lVSpm2cZQyj z4-9JqVS$blF~UC~0?GRI4l~W<aS7MqXf)20<sG){1(xb!j)~6lY)1K2D_OGk19z_O z$$#et>RQsU`@mLx*-|zgJc5U*h<hRH84<itAHpVJ+OQIEwqES;?p5aAH}}z4$znQ_ zIy#UZm5weLnm{M=t`TEl*NY<6xy*QGz8%97h?vog<hB!@#u(+grUJf!rmK8SWiati zctuBhm3N$Nd<A2+MQ}F4YB3`|H5okfq~}*Li8kpf8Ae_-hF>*HVr#JZ##`9dMnYaS zd!*OW#48D~#2Vj(3qDOU`<sV%-pyQ})hv>(9YsCPucGL<1CnLuEYUMj4&;Z0<LTg0 z&Ck;2pUcANWX2UQVH~3KXzr<Wk+MBl!Th<$dOz0wRZUdpz~$bk;htAyU8@<vH8%%& zfgM8jmIEG$r#O2?&Db94Gk0o1%o(6A-ut0>d@eroMTac6Qtmni-R+@==oxq~2XY@p zS53BP<QHJt-7n~6pvtLMT+AJ+_S4Ct&$Dv3@zlaL?6sU>Ig*uas>!la{lwCPER~}y z8*C6++smiCZ0`$+{o-I|^DrxCn|2bK&7+8S5;*X3u?FMlys+}D)ZeFt^3ii??tikg z+EF$~O4e>NQq~81Z`o*9<%1HbI;qAf{}o0$6ty81Tb!i2><afp$>@M<_jCR_c;!RX z`(JKQ$Eu_6MP~%%y6wI6@-4~tchCn`clks$f$4EU{R6Bpj~`3z#Vr2A&U$+&k{EqJ zBeiBmId4ZON!b>d@#>lkc3$CIYQ2|-``s1_5tFu2s2EXq0y1naal>*zPBpxE^OZf3 z&{q7sxv@Vim#z|KeG;JlL_ipu`!L2m5*UqD-nN8cvjbI-Tp?-L>t(Zdim>)!X>JMn z)?$8~URs9lmP_pX^g@M4@cUl&IN{+cJ;nG-5NYl^vYH#Y??-_tL>iX-vOYt5u%7EG zw_~Gy6n?d`>2-3J`{KXVt$23E=V^9j+y$*EBj&r00tO{KWbBH_6-nZg+H5ZpE~PcT z5%J3eY>W_3a#&P>F|v3~ba-YCm%MgNm7GM0I$6q{^Odmk74lv`^p|;l|7%?)2m-IM zxBK@>4fwuZ7|-yI!sVenuWLi7A&<?Z?y#&{bB;IJLk$02w4$-3Y-7CR`Jcpg#QYJ8 z<`2o)7^tw@J>nOR=K^w$7rLW);KTB_e98puJ66$-g!UIXWukxN>79yh0E%t`JpcA| zH;DgzA)EZU`+6Ihy7_{P`+{uH=MF)uyPi4tUuzr1;MX)zcWC6ggsPDi1_2{|NF*1$ zeuu)#?NyU3WDvCfePhdY_{EqoB}lO4Ci?#bxg>6z$Rvg<GIgtN=D<9R*HV*4K=4oZ zwa-!ne+9Vx0jhcMax(8`%}-l&=4tZXTwD0V)O$0T{_|kd;y3sr84kYq#)-}seew-- z(=_E7lw?&e8xC9U1?QIF7Y6UuJ}e~CA$-R>0l&cMh_#oW6Zn&2bJ%0xOKdd<eTo)a zRC36l((s0CD(OG$#*o=-X5Or?TX;sL-rQ(-Jky0?zL@U_WX6d>jJq1h(1dhfhT`2n zFmr#;<F5k!{bDFQ$lK`Ikg`a%J<=_>l=aQQ+&d<*YNTzL_?fbV`2t)LZ2QzRLHVu_ zxY?>>g<9w@><HJ4ly=+$xQT|dnG=sfe6mCug?=(mC%0}*H#!RO_;3$DW~wUQwM@Y& z8)0<;1H_y+6TOL%HseNpaYdURTlR@aoz5ifHEC6bq-+<6TX55C*+00J^&YU{$9(7h z@RSt~PRy61wqlMGHrrRrUv()A4oubv_d6FjWj@ciIe7www@SsejpS&>3wQrB1{3_c zDDQu*`=E~pDvKdK?Vpusrys?a$3A+i`A9QD`|?2wS=6ZEE}plzzj~ObW;|1#aBL@W z+tqsbdGdH?U*^YtSN8IzJW(AqDPCSUoO6Ff%ExGJxJ+EwA>1&8kQX;Xeudfi_G;0C zSK>*xecl&lH)Pa~)2xcq8YF@_{Tx`AxV&MY_&0*Q?ho+c<)um~3klm;KZDvxMKBVO z{Syu4-VqTJOSbo6v|@{h>82&-YIY{(oflhOv1d~r_7NS$y)R|6U!6H-{x1_p$KQAO zOo+u>>TI`auR|q9kI`S;WJM%yys|bsA$P9Glc9>;5{v;Ws7^^v=YHl{9NCPhU3LQ? z4{^sO1l!kA=(-oHD4gbQE{6MZ#mN&b-K8=R0Sb@57S3>@oSB@lwO%q-6HT8iR}Z}U znE{3XW}{van&~?&nyO=yAH;lFiLdCfMOE5zPSRb$$dM4`h-s|IhQ`1~PkWr?2#gG~ z;1`qx)qHx<ndE5hu9TRKTI&b7MK9Rj-v8Z2cDo?JN-lKs4r)6SXvxU`-Da>SnL7Vy zuspkJ<m_mw#m!S$HE5*Fy2)xXAtT8uJ3Amr#=Es_>!>aiszSh<&y)WEU?}+A(vbB& zU<Lu75B@ZOUo+VIegYHtjlAZ%{PEnvvyqEYoM%h-0vHe-D-Ag5Nk8r!sdjD!B{kRX z$})@<=o%-4Z*1_{hBUaNndA$F5xj1NQjIGh<S}VEVnJ0o_ZPWyw=#{R{<!&=gBXl~ z4=IK};tu|ylAD3Oa$xLr@wx2!lzBwoRbyjed*K+EZsLZ#M1X`S)sOt11h3RcjJwd# z>)MtNe#04=;tP@2#4jP|7~_;jNF7R%pueSwsY{z7+;$2I77g!Upk}CVxQW?FnJ7&v zi2VhDAd<~{N!SzT4!+N1V;cJz7)YymO;3`KAb(qa@?ml88QB9&o?{Z8wc{SK_Z?Z8 z*X?~ms($gq?`cD)zTrI_xf-M*>|H|X*USq?{N(b}oN{Wf`kQi6(S20R!HUJzXe!d+ zvQ#_9z^RFug;SflJfAlv`4Eq#F-CslTSS_2zWNSbUFZllva`Q5@9K%!y!9*KflL!s zyawYvT&s`Rb5w&K=M_u=EOj^$vOpSSn+Bm@9W_Ajz7jS)qq{NvApsLb=-uJj0ZI=# z>D%bzXBh(5#Mz5|c8-yPkTWn!kGbyDuz=3{A+i(6#HYz<Zzj?I+#%PEj@0$BKhDxL z^3nrKdEX%o=GKdPq{zs9fKKwInpWE|Jo<hHn2sW;;2$)T?>$;;M7Jj$cT`!LjeYU= zcY;$f;@dwCQv%-c<pwk!GF*9I!UU>Xj~rYl%~Dw^#Nb%|`jOsMsrkqtznQ^M)`cS4 z%AAyvtoH@9xU?taE-;hq7k?t2Z6gl>cwt`;(xV;O>v$rQu{(CeyHR}ZB@LPBtU9p_ zc9&r0yXdfs^$fua7l(NAt8}DpF-W@B{;^0xll<c!WJnX2PWE)TJWc`JG5KB^9%JVE z$eeKIjY?D$<wp>H#V0=PA$RH<i>&aIOUsQ1_&>ek${=6%U~!{5qkwmwn+Q-FSbHEM z$sA1YxYD<$ny~eVOqL?2Gsc;|WK*VfPp*#8#I_B>NtUKWIVG@^CBZDA(_-`yr(|>O zos^;YOB&)wq6x>cku!sj-PnTO0mY@a4=A1x_d2#)Pr-2QldwcVO(1?syVQ|BXiJb& z<<?@l28q}?Z}rg;M)6(zyeK7u7(B+ej6VXiqU^9;(R(RUcX*gl-hM4^h6`<Zy|Xh% zyg2<P(IepDp>Mh%JNJ0Wxjh`_6rw7l4}8#GsW*<Uds=Yk<BM|6Mzraul3RsY)%h9Q zlVgiyOX@la4Ij{*9Q}x}*I=i3+_tnUrtetl_r|Nm^G51SfXyBHrN%20?}<pgR}apM zHr-ABx)bTK1H|{H7p-Qp!J+lovkEpg$N?_QkTCUDLirwFT0G+jFmY~nj?rmD8p9aU zvuUYa{$Q^#7s4p()`v+fGlznhXl5SV^&(&53U=vOa9X++Wtu<6T@d1!m@qX_TL#y0 z`A{<bSfgYbTKMRDmP@J{ZQG~$1UR%EofO<KZ}ul-{5kgcnSUKz50{ZSe9|Umeu^gg z>ll^*W)5OGaAPu2e)^(i^drldcsslg@Y5jH8<BhouF(f0Wpk-D3}QsR%Wo0grTx9( zThFj~7^K{4#oAnSM-eRkU%bO>`aZSV__qKu9P%TKW$!E!chZXqF}O^4*|Fr8X2aw- z)A~4b<D{$YO-S&QR(&qAKmhjlp7FT7F3`UXm9S9n@EzMM(aK?NW3xjyme#ab4~bBC zPT;PND6S7AB~Ap=W=0#LhVM@kJSw~X`t%5xKtea5g!U;i`x-gVx>?=~iIzz35a2$- z!&HjZT=+BD5<RT~1YeHQ9AT=UT4sogqcA~^i+-q8#sqlDk#Sq_Qsi*DI>@~Ob@KEK zPuG{XU(O$++j!R#?@##bq?$=_zuId*V>?DGZ}%VO&oCik^4Q#AFzSWA19OKOGwOxA zm|{z|WOlZ%v}L*zzLdvtcoqltkKuQIvfPRMA{Bey_Rk}NjT|Zt=K2@XY1icacSCKh zw2Z?9e<&f(_%QmDaM}aF9^E&eqbd`-A+%vN%X}EPF314@Y2XlPM4`|Fe(>quBX45D zKe=8-S+S#@jZN>R!~#LKT#EyAUF>#C3n9D(0bQ}57a`4G5Z9`E?wh>FiMVCbv*cCl zfl3f_uuv?bgKhi_9BS=W0dy5O4TE0j@!dckmVAwoDA!<IkkrRJ)jj-SU<VIFED%{O z_G%41He-rrpys66G#+R}_x#;?{(V2=tZ6xk?Ckx!X(*Z5XuPzY3nQ!J2w{|#I#!l* zI-|Mi7~#E!l)t<ne+4~1&g)D3wIB9dP0C)9HQ(rW`UG*53f3#FdgGZiX0l@X3ob6c zDFFF^U-WVf<nk^n_Oy1#eS<Ch>g;bBWV@JmXqjc;qV>GEca0-m)XCQ^{ook-e) zTgz$+*6+E2!_GHFcluoQTn|6e$Y*(9KEXPOod2-<WYjm_iG<kWfb*l9hI2p=Me5++ zFuESLk-8f@Rv^{9p|wr!-Hc%ZD?5Zgz&Z@#)c&Y{HwT^Yda>+BlGUL-&D%!RgMEo_ zeVnUgBR9t@JuxetuKgqMnYg7ce2`&s=J$Q`7*%8WTL?=`R$`B+3>sPr((+N3??G76 zH4g>2%?()~Q^Gc#irBK6x)MfX7xmI}#UY#a#%NlFEc)Cd1jjckeAEm3Oz(#gD;m(= zE~N^a(Bz%gQ^vUE&WzcVh-{KpUD%~LpY=oUR<sAyJ{yF_%4A+ptsbGwipokFW$RZx zZufNpTyGL1+;&d7`9;fFR&cK|3=nQTIs?@5-uc>tu3<?TDm`n}ggo;CXcmjn`!DXq z+cCA?hy7NzJS5Iuq|>28wCS6ROd>Kcj78}it=8S1eR7{iD{_8!+ffq&MqA<77rUHa z#68#RY<mxgh(#Y#&xb|f2m||s2YQk9&yRbpxki3{2XVV4{ykMd#{l)(kCK2p)6^Qo zsy5(9pOi(V|0!E%pFwqg<tkngcNJ*&oPvr${?Zq0ywS5f-Y56Me_uaB?9Dn2P_^2! znc($MeUde8s($~N1#HTo$W?5gXqn}p<B)=;0e8{21&EuDzI_31YV9&`Z8OxAxiymX z(LW#&-qJe0P2c?Xis<6e=vPbu>x5}zj@&*{xK5Ek_xuqlV{@g66)}nzBHsma&Uy$= zL$k0W6dmf(HRb3Up^l|t8{x!f`{^xEf!a4kTv@H>T%wgXetjJRP1%eaw4VsIc2t5V z1o!LCov^x>KJNdUf&q%V0xFBW3mUtre-$Hhni<a&fsv4Xb?F83t0?eo27@v}aQ%1L z>rwRi4mR?b2gEumanr4s@ry6~1Uu~LbOdK2_@cberRj1jQ2XUXb*b<M0k~%Z;Z&vT zRe=bP`x|D&pIx7)yiHUHyb_L6#xX1MYD8kRTb}i;@3AbubIC`_@}9qd5#={giMXvl zqBnFze28|X;V8{N(7R_ZxNRWiqq}g4tec?4sbD_frj2?Bm&J1_7<Z)XSBrG{2cm|q zo_Ek!F^6T@uj~nI4m0AVdl~D1-}VX1F-3-MEE$<6UGC?U1ozPYQCZFnTn0m}WGQ4m zPpxCoDzQ%R?%PW}zjKv_3i}U8=6tb_e!vZCB|xQi&Uct1crK{%%-A$TL5!@OZdh*a z>-XPpE~!WI)M*!3Ona5dKEB(yPgMf$U)j^VK)OCytGXC(eu>sPU<49Ye=7!>zu&4H z)U;}IWUkgLHkedzXW<Gz%pSCB1ogbBh6mp_>t_wf1=K4T#M(+0?8~^<{k}5mi{#nL z<->;h5@_l^6~>X#3xT=a#r~?xh$B`}kX}m;ZdEU#D*XIs9@xiSUGM;-n|C6R+JV;x z*rswHdkDUMJ1^*5+wNhfC!WNle$z9&!Tu)QO@JN>md@ldEoWnar0%8yGdC1%3|X)G zeCQn6Q;szbzZDLDt+-u%xb^A6tdxC;89;t4&pRvq{J#K=2YYX4S%VBvh6@J5N8q9Z zCN`mOnpvruYoy~gO6F5Q)+flGf7dn;0w=)EaTuwk3J+fA`q~tL$a(W>r^-NNsZ1(+ zLUF+LKG61VG60pc(Ai8Mc1y&hOHLJ?BfM=)!7WN!<LB{Jx?(S0P@K4r32+^_{QVXk zE1(&NsQ|SW04Y9E0bpeM0lU+ku%3QOo^}^?WUG0X7Jd|951TZX^8c#&vpoFnUB`mv z8Dc9oN^&8ymQOz3AK~%jYAx?=(AF!D)uTE*_<a!IlW1g55&{c7((!WU_G0HtGq@Q! z%JP825ac|^RIU+v*wEhIFL+i7?~U1{ubcPH;3XJjB$tVLg8#tPl(<}P1^?%xf*c=6 zZ)Me2zeN&+&Uk+ms6dqpEgGYS@)3U$Tc|rpDp8TEz<i2BCSak#!s=30ra21cqv+Y_ z*+*=@rVIN~M=^?DF<Xje(>;|)XqB;()%N9@W`gd&kKC`v#AeX5w>M(h$JDNDuiFlD z{`p`L^B#eI>(lUQbd=?C-*=4pPGqg;j>s}fcY18AY)Ii5>o%$9J4POc;PIoW5(+9? z$ed9f#w#%uj8iKV-{O`Iq1B>&DSBm2>-|RolZ>oi!oPa;TH}KDT<*$ytSgPke>5aa zf=8Mwbhg*DM%muwI{@VtBoC}U-L*@xX=XDu-2{hCrn0Harj}7Y;%6YROr6<sRVyE< z1Y0O*nt>u7wS<GlFXA^zsyF{6iyuocW4g#R3f-r=$pV3>>CKSNMof|VD^a2&<W?Ro zWOBv>H}=>QD4Y8Hh|XS^5Xk_&{d&gJXF6`}7~58z$QaE{pCj+X#{dTH4T8m?r$m2f zqi?Vi*L(GhyevGnj>uhbM^`Mm3KXN%8^~Z$m}?Y7KRxhdm^w(eA|%nL3Sb!IB9(`o z%MuGM!6w+Jx?6l$NEGL!AE`sg`VMnAqn3&>V4xWPYOz|w2$Cpfi8CxNTCPQ!A&b*N z0c;yKm&dCw8{#6QEkM%lwfsGnRz>$^wFi<np)FoiX-IzCQwo2?27hk9Er;_wq^uX; zGOsVhDOlUZ@q$8+8}zRVnTa=aRRLroew>2H5eGvC30#g<ixgxR1mESm*h~q@C4pZM zFkGefh_~JpzM54&=>4pK(VMglYXgXBAXE$Z{?=p(Ub;s3?E_nbpx2CcBXDH0eJ$D6 z;O|&b4N|z^1*vr8C#zUeP9(*eqBRa-BnqOnhUveG^uh{f9HQ(;8`{xz!?R_!{t<-+ zFUsT80hR3!v){#WG^k4YOiCeFrSq=S{HU!cZ{AJ714Vdil}&=0G;Ftcj>9UjXPsd_ z1CUsRhFXTf^!Ldl)PWDj>DVTi(lz7fAHxImWwAL(hPeZk@I)SBL+tvu?n>O#ah2SZ zpzhcSd<PY~%B>Py*W|K3JBJpmZOzPQ9rA3is3?-wSi;4?g`~Mn1UurJn`=Dl{Hsm@ zRkCPu);p6{e<(5Ibwl&BG>2sVuK?*vrM0ts{JdfRo-em=f5v`5#~=|vqGJ~R))aC^ zBSo|k#7$ib1qY|Q+2L9?RM%06f&xpQ)7YwcxrgP%VRyRi3TLN5!L2tg8m|%E(r4-J z^%PFeR%D#gCZ^1WgYshdZ@|A{v3jbL#qc!rBeYS+|6(Z?*reK^t=a7l#&DzW|71NK zVNz(YlE;1F;hcDV!gJgxQ|oizCRs7oHK(0cY$kfEdetke{PJ?Q`0l@ycDU@6{eyHP z464iWTV@H^C#ak6qypF$IT<s$h9k}AoqG+8OoRtQwsRXoJO!*+nnmI70!+jZuL338 zPDQ^Ymdj?5yVV1lSCSF10n5l1tr4p`;NkiJWV4)7X<s{z*!xQ!=z-6ApYW9_{u{}} zd^@DEw8D$L*4qERV{n$v=zL9Do1#+b`RJ4Gg8J%{H{R4uLn`#PcKg^(Hdn1-?w@7i zj?bQLGL?i&n1sJ0^>DWa73Z~sbk9^#*Ca<0-O0D$v-A>h@V`(n*z)_wvK0{t-YR^! zjVY#-TUf;7r1kIZaNyZSvxv7&n^)pfRDJGNlT>N4%>P20K$$K`re;n6C%Y9{%w}P+ zPJKnI(mQM34+QscCBr{W7AlSR1y^w_(n~X9zSW3n3(Mz5tYn3*_jb<4{=Bv>nX#Nw z5!MCDHNPBE&Yje$FX;#~Jlt7Yiy+B*_$_4-u`1q4_j*@NM;YHK^zG6Xo_U}ill3GF zsf%d{niN5OpcXDoOAUFOSqEEM(7PhVs0Mk|aPz&OTHTfjb-wWZ{h7>LZ&@B5PKqTV z1Zuau&NgDo^Q9zG?>73(A)R26)f%IBA=uX3R-7R&Hn5t#pt3&LCebxqUX78+ykMB% zA4~L^*bVG_-9O@^H8p!F_ln@O=L%{5gi|Tl*?g~Ju&`i##j`Tlddw2(VZSEbx~601 z`DDn$I=*~Cea9aYx?VY#+?t`Zet{}oVHwS|-eP*CF|l*-y~i(F8vw2f5j>rI5k>#P z>~~(2f^;>BzNiAzf;pv6mGdO`s7I^M?pVGvs)U6`7%#%h+^0S7k0EOQ%7-?=Q1!!j z>6$ZlX~Euvf48Hc;mqCGD8JIv2^a_X^?sp+9`zMwOjGhn0c>j9bWQghC3CXvN#@JZ zR;wVOJmoSP5;m28&<z0ctG;O0brz_pX(c(9>`Xwr<iyEuy3`wRnfL)i(@JZtt=aG% z=37Z8kgwM0f4)2)U0wk%iFThk!@rG-kBC@8MVHf+@)j6VRUH!D?3yIIEsVsrYYo0E z8TKm*lSP3<Tc_04SGsYc={3Yu<1gH9QT(RlI+|+wr4~)yk!2yadBDK6{e2PgNPZxB zWvVJwt#{u=Ply`jvs;y$y^2x0f{fROHp!$2y4sOAo3}4M8>?&O=iHXEt30^zC~b;X zMv#$u4!}}@O01*&Qe}C(*GZ&Y^7~c(uXyqVR>z-oxqX1$S<Ki&$QXa9ROFnaAiE$T zPN0W?wps5MShGA3_O15f=#%EBw#qi-DTQu~K?f<BJ^d|?3@xWiRgVl&zdQkC#&Gh6 z>m#9bjb#l9cEkKE@0eo;3+qmp<;i-dB%75M+Dh+Vb}s{M>FEoye(7f-KYDPeS=y%M z^su#!+3l0Tu8+;1+NWm;$qSL)(c?XqrfbDy_-k}ZJi<Z79zVP|vU}EG(>aGj7XUYk zBhISlu<It68?e6Z?sD2k&vrw9y${}`pqUbA36SKMtYFPdTzgE3DILqkK;>9VH~wts zXO}V_eC{nu<~$qX4=!{g1yr~B!Y|cT?=BnEwK!IWML?HF0y)-xvN2|BN4lb2c&Hqr z(g~uKp2(jT&O)$Vo4HqcY$YmQLkj8B26bmb_K~jqU%A;GLWhVd5-t(uwF#%RW;{{> zSU!Rt=XqUOf5cnhpD(-ntAoWqf;JPvNt%uRPsP^Jic4L#BWomO@rUqOx&cJ4hCpac z$b+rtwZ%!{AT7S_js|#nD2M&1lvwZZ)Ls_*ZaJZQ37=ouu~(fRulQcQIZ$&)On=S} zz0dpr3Z#Sd#cxtviT@H(+k390O?2l36-p)0;Z^I<IiYZc%~a>8J=I=x#QM@sF!S%s zpqbX*JTr*##DdIrS{|rd%5!U^b5>3J=}%k->-^mP^(Aa88()R_N7~uJ-g2KMX369q zSZFZ?i;xR=YHg5p#<Q_p*AFT8FTY(FQNn71Gk6CnsCgJoJC}~{?Q9w7MhtFlT#E*} ze7lufu{{_@ewr8btS(AQ?$Y2<Zvg+(UP*3cmlq~-E6&)mHW*~3X#c=?ydsou3P+$~ zy1BT@>4zm5_qC4~x4{Y=%IcTm*esP;378RJt2>!Mnb4WSA-ULL66QNJJ-z1l>C?L1 z0kieyfTQ_X43Co;BI8o#!}S63*3a`BBo21`A`v~eu}Kp32x0ev`Xqg%2T7p%F7{<v z^q3#=P-(|d=6Xj?Di4CU<QotbAFegHYPGTY3ts`&jQn}R6rx>DrlDqsYy>WrI6+FV z$rzF+F{N<s>^K->aI+)DqNV`x@cW-Y$+86qv5ORh+kE{gY5H9HI+e9-M|}S<{nwU| z_Ne^`ZKo<%L!H7Mp15SdUG6vi*@k2qNdVFBm+4<ggjg{gD$6`B&WD91`v<nrRCn{C zH!0OlG-zyHsVO`=xCupmUey9OGL`zH@8j93E+ZbqeqilPQn9dCv^BeSRG+Zc`hw|e z03X2b=fl*C1-z31Z$1UZIH_h555seYC*)=Gxk=}b+@vtZ%#Aaa8~~0=a-8TU>_1XO zwNbb19JM{9vb(*Z+<@y{`Y0!-=IXJiWogtF7iZAPadT$d`w&HkIz%DT%pBzoFT_Y< z3S)%%^*i-&El6arxJ9vs=-D1Ix$CN%LCD+nNYU!bbCQs#7epg)KGi-P%0rYNU7to1 z-_68CDMeu)+~oB40^%ja9OoMmuizFol>3gYM3rUPy);2dS7!7)k0j^LiKWFHx@81D z*XHWtg}dT`O=D?(>)QxRA04vmVRo^hAlJ2ozYXd>HG(+WtvKf3Ah5Fe)g|}5eJt^x zg@TAC2BV`Ld$`6cMaUQXvK3fWN@9$<^x<NQsw*?_uV6fN>UQ&~KlMCo7u|2&9y<)A zsW9Zz&8;q5<$hD~AVd4$;sV_%t$~|zcXub#MfziiVVhJVOTC7uw^QeV66-7b?_`1) zH^{Em;s3os!m=IfCpw_ph~1Mb$$s?7B-w;L6K!-BTo)H{mB4>Nlkm+K9pGYK%=z96 zSFrbyQqoBLRRk}?Dt2jQm<O1TDp!2B$TQx}-JJN^KZX?2x;BM8a^U;l$e7l4N1PAO zKX?PQg7bKt1AHTa?>lU+`n&@)n+RugtK#|Vn<J7d#pK{jocb>SX!~i%Bxs0IpUXgA zg~xVeYjr{&PApG2-Ej|GlDzp&ynZBH3kg3mG_amHfUjmguXFSTW4<AG(+YTr!@6-U z&DB+XASD^f8E4%LVY2Z(7zCoYsR@aDD{Rz}$HFLk9vNSY65mkF{7lf~I%Y72<-1_Y zPBXhR-Xsb4pK_{aJaxBy@qA(MZ2FK@P~Y72-?Hf&O?E7z%&SNmPtoV@_58liKQ3!! zy&=hK4)^v$j@{Qbs^IBH=oE^eElQwwCMALWVaXW5f+(qU9XX#UZ8j2d#lqvyr=9Z> zquPe5oY^WG<#BQtdzgnFB1%t|zze#(=b_GN4;b+fyr6NX6w-bxxER$;SFMtW$p;>~ zzDw|dQDxv6HdSFrz857(&k3amw2n!*)w1VZ{Y|-%MO>Z2ZAJak6-Adw3+n(qefxZZ zh*}d@ULS*;HCco+o~SnUvcl?HlVH;2+bSC8xPp8oz@XQ!fb+mg-w|0}tEVV_p$+#e zM<2u||5QgHuoB-B9|z+Fn)t{YJIFwu0n66z#q>UFRqVdtEj92XbSzC+g|@OAnn2wp z<+5I$ewal|Hc0`~Mpn3#8+80S^3tv)Nash0`fN(EkLor9hZJ;0<pIhsEkZvy_d%er z7MbMtfUxYYN=`Qx-k6cnHMCgkUMudKsE+xTgv(7E=hgqd<zrnns#`IpU{yD>R*8O% zls6&wUd2$Q_M~a;OD$*vU_{h4&rs*|RLTGTy$SQ%+kX*aQY^52@NdGm0kGam+eLO+ z5`r<<*#z~LLbw|cug<*O`wgIzaDDq9daS8BR~Wj`fSsmM<<12nqugkhoLh@#xx>Aq zWW}~m?uuT8hm~BF|KN-?!9LIn+C(CUa@=0(dfE|jWCwEeD%rtq3XbYAZTlU|Ifmq! z9B&lZt;SH1^2VEA{0rvk>%uS(a@7sUVvwNa5{L@(prh@F!YXeJQaAxnFwMK%5Z8e$ znB-Gj!{00i_~esd(WGrepU)Mabzro_h)vc;pje6T-Ypcnv2Rjs8ME*@8iNEeC7Ew| zNFX!i;=JxMTdXg;uaCMUj7B`F{!d~Ih#}Kt#MF)&!x|$!)+&8vRGlj7bwz}bVe1Bl z`SOy9b^~M6s=X#5O=bT@S-4dYZt8*nNfZL+M4|8NbQeEI^Ef(Ano01ZdU4a&vd@j7 ze8kR;<v!}F!++FL>&hgU8!Pon<3+c%?#!$lP3`RDXFAdXUW1ETD%4!St+<)b3ri_R zIxuY`$cb^18q{6E&C+{HkRHKQm^1^*2@ks8J^n#tUUUNQ?lsk>$%W7ye{4@z_z~4; z)rO%lVdeqpIPto0M@NY=&bx%foK>1z_p7d2L0M^IqT#Bt%xuv~L0RFqTQ%0ul%HhP zug8Uv=_Lmme)QKH`oL1&+^A6A5cL<$$1lP>PbQwPkWEDa4sHHY%!TNgwk(jupsJzS zD%*AqOQ!{p@*{OJ?SI%r$hP=wO6%BlPUpGnZ&9T#O+75^unSxk86(H3>A9L!z%!^Q zUH^RaZnVvoqB-T}%Jq9VxVXJkHOCcSt__ZnvJAN&JPm@dAli!B@JcRgYA7|V2pa3@ z2<qst7RsgROhr>GI&T8lBgDK1mwEA_rGovVn<mzzvFM>Af><REux1{U-2?PE)N?yD zc&NqKAI7oaK`%IGnfuy_AUG|Uzm${(2HDya(d<#ly>oe#Vg(<Ja64;gsMdVn0Go%) zS2fI{SPU%*_Y%)ry?$zCGK8by6F*6Mi!<vJ_LOSERLjem4}9}TFz67kqhc#bxJ-5r zXWsJat05`x^EHI`x|12&ox*tosQ&Q%1+5ew_7%zx58kv%Q7EZiRHLV(kYxVh+IY^I z<WCcAtnyk}b0?)+#sqC!1)%;fD-z$1t?zd94?}pS2nYe=k77Ke@FMD`G%}20?VhuV zbMrGbk11cgYzHzcCHE$ha?YaZ&bp-^i>v7*OvYhw>EEA;55%Q=LwHK4ogV<#Rc4(a zml`3Yic)!zBVadT-Vz_$E1Qa-ZeRJsw}BIV;1pxjoJzC_O{5~jCBGd)#%nqGmc5UW zch<^MMkk|NDUXUwj#(&25}%B0CO;%RK5Qm0N_bF43#B!=Wj>=H5V)HRHlsA1g{_eC z@=K_U`y73UWKJtCxeHDYHwMo~aTE&YTK$2$$M$x!yQAe|<}Q~DIg@~0hN=ilKQ#uB zP>3b3d$BpT6+Crphl`2=vWhGjrxxxb<!*iaZ~{M7oE<kmGR}E3zF4hp*s5a5x$z;7 zfc<@%cFs^awIRP&N<Qwx@M}nPEdrl)S=uT3V$L<r?;BNw<m|q@b&4*SmY!I(Y0A-@ zq}#pA-;)=hyepw`=xP{-_A>k?Qz9Dary>7R*j*&{%Q1j-EB1)kk~$?IOz2Rh+ps>z z;@6-v!|YAT9ga!+N$!Wq@)G-!P}`95P`Zakath}z8ctJnuZ@_~E+ia1Olhpi>dgGI zmE3mpjsGEhH~k?y2n3~+l3heBh}byvEB8(NvRXHnYG0rfK+1>3^*7=m-b-`IyfZ3V zCK}2*dCFrD%7q8=vWD)|Jkv1S+uRQDlM9*5sqU9C!#L}p%;&NawW&?&2w4QJgD$Jc zNIzN*FXwf0$PNSU1jF$t1->JT1Ywh2#3i$CiVx_E8iG%g@V$cZoB4KABA}3gd{t&4 zC#$}=NGil~GgE*|DFzxqK+v^RkklYzP)qUMTkc_C%gZZRZ@Sx!wCZ|mn+3M8Ab6|- zm{LjPQ5(hc<z;|eZ1R%|becm6a0Pxc<bQhGEBw%KY^x|qmdlAlK#Uc}GP1BE)q3ss zqyt>`08rt0$4%!UQMRMwQHAPT5527im8jyI4W*eRwkQJ5p!y4R<C_KJ%%Dvu6iDtE z#resN9qw(IZSI(4z3S5s*zFeER}CPSAh3C${2D^xhJ1-X&MNIlDW-nXFX73CuLv`| z;b<WR2RP3;+C;e4KH8<`O(Q9P5$ot@h2oREfJ-<mw>Byr`>?*|;L0{C6{AkcUO)Rf z^06nA3XN!pep!pyU>i2(qP6f_d%FScL&6nD?&x_n0FY=PEal=+G!7Q$^8JzkoGS_~ z6=KZ(WG4bwn)5eMd>u6AufLXkOAW3;JiWaZXG8%UohU`vAKs6HL{Cu>{ACkwzy>y? zm}(~y48o$Zy)mtjHqZzl`v$=y>vj@PC<qDtNXO(4UfqMc_cX*)o|N_`Dgj-z{K*mg z960HLA}!eMGm%_5y}t>4GBzrGu_-*aU~!ucS^8C6da%3qF2`l>rpv=i8vph-piQkP zeu>xbE}4flAL|<;orpT=8{*f;83=oR<LA|Z2U4+wk-%DV564eXl3TTS6sj>J!0C)T z^Q?!-FQ4Vfaw`g=FUl<+fB4vPVNL*Ieq5=Vb9CON;_eW0Q_0_*FErwbyRrLlbzNf` znun!~b6k|U@gtFifJv$PvgR|ZlfkozvvURzoTVZMf`l>$vH%JB3I*pq%yW@VIO=CI z+1Xe<EQ0c!#=zk{9rej$J4eNB38j@XOXRq~=QlX?=d^MEFgz}m7_%>ovr)>^Aec{; zZ%yIZv}lnmS|^F!HVBcx$|l0kpyIMXn+_KDy701yID0p2SuI=<$HrYKdq_oa@a@rp zbE$iWk+(?R9R{jNGMz<slbTNiRt|9^f~rPg!8_dQb`|y`@koCIw>r-~@*vT-_rvm| zYE>+|f<)NhN6@P^v(G;hIc~MoGrL_DD1v0Vc}LhToB_S^w2@Xuh4*>E#s<FLg`3A| z(MD*ZJgt|ObpFXYPimtMnI0cj4~QjpgB~s(l$w7!U6eqS@mAQYwS4-!0%Vqh!1u_n zxRMmQj-cidI-7D0%|xd7xVT5%+)Z-qHotGtUhk%VamTSHcuHBbZC!nRWNd0DZ0=tC zkZZd7rv~MGR>_9a9Xi*w8M#RzK4`UBRXH_9tT=mbSeOn*ckff|L8~>i=P>8NCtPN* zzyb_=AtTuX#HRUFUR^wnl*`YYpQzxEllTpSHl~q3X;{Xd_G!;>(Nb|F(`CSQza^qw z%&vSK{<tB+x;hu+EdeLT6{rE-H;@_d6Y}P_h(qTBxpQm&(;njAA5T7RV~gcehI6b< zK*AsJ9h^Gb-j2~f`Jmaypfl#np-+FRkee;L<j<b#cRK*KkM;{<^o6UUpROknzFivK zQ*<wVP&fV-b^3;mejxv80CUdFL=;ua7B$bC_0!r+`iSRKfD|4}^{=wQ|N5GsiNwS5 zz5SL{lP;;UkrthJy_du7o_ApGWi|c<u|D?(SwPSSd8I(9n>V`b_B?jO7rmp$Bw85V z5RjiNC+n-KCj5<^dud9KOPB9WyR1u7<LE$YU~TRJ3*Vchn5rqUe3*%7man+oh@I@q zkXE&U+5tQjj)J3ZK=uijsG&3V8v;8)XK=c?3nr1PcDWwntJXitCQteu%^JlG-@Qmt z_02-jhGv^lY&RS&R*LC)ukEd0yW};fMf$j0%bu}5k*$#N9{qUzi96%|s;hWH?U{QE zy?wGBOE$)T3z!*y)h+j%0CdF14QhF*)n6Nu{f<wk_4_T=13I7shKK<}hy{R{n;Pb1 z8eH)Uh<0E_T9Keo(OB%S_tt=CD85?j-boS$X*ke=Szw3vB6IH;N!%X_{3zYl4mrY& zUDT8!LDmVAed8=q=^`Lp!RppJmDt7CETbW-bA48iU_L*jj$s~mv1ODqBksE+YT9*@ z^4&{4n-SG8SidD+`W+7BNG9yo*HGRLH(-<O{&Dh@A_ns2nAA`Le21Dukybo@cxndm zOBX_qMJcXQN+%=Gw`!m2G2wucqOQ!PF>J9Z7Tp~ybkY*Qrq(fyX2XadZ{``gDohv) zzLv@^Xjr0g`3L{G{MI-Lb}h5TA;!yP)lfQj3Ygg@Fp>gs^3j%|PX^oP7@{GBj0YYV z<WaECSa;{|$CZ0O%5O4#Rtsb52R+L_2d55;JuIV*d*x3kC8mD7u+b;ef9)y^)vSk+ zk{dA7=bMa_OXI`NeewXdH-mX5u{Xm9k}CjW%Fa#dyox@B7{0xN8LksvtOXNzt^%mN zcce6Avw5%NBz1h`e@)l77hn3_pWQ!~az0<An^gNmEyYS#cKL;XL5#Hv@*FVZorqc0 z7`{KImDlm`mq4PQk<>br_`7Yll;<_%(UZs2lY`Ear{~<RlC{Weucd{s`sX3nVP!?D zl=L%n>v7K`9>iWkqq6tpDVbvKxdBvEa&r+kl%&_Hkz}XWDp4f<_lP8r5hZG^oh{Rs znAk5`D^KMM#$l3}dc>3MEFx8H73`C1)45g=dX)pX+Z<f>FyufkQ8t%yPx6ic7kJH) zeoVHw1b`|n)facJIkB}Y#e^R!N8DVVt8uPf3KrK?S1^Y;A6nV?ZB<<r_Zdl8wXR}| z4Lt>0y`%5WDM{1kBG`pbixKIPVYL8BTKcBQyVo%Yyur|#c6>FgEekmoK<DXCa&?D5 zGzJ-H^|D`6d3M~W=uY^mhi`~aZp`#9L1;k0m5hldsRNBXyi(r!%rBhL{@b!-R0)Is z=^<p=4lgHjPM+6d@-sp#*1PDvs>wr$$w@p@Ki*uj8$8xMz&5iVZgC+@Z~c`3vKJ;t z7N3N}s9@0Z6@@PNeI8$gEEiGjO5NbMwC0vPUeg?pK1{FL@<WmSWCKRd`|r@zAK7h6 z&mSVA(p-O@aMX}sRXb<GTa4Xrr~m3_Gh=ltt9Mt|T<@;SqsP9OGsc)bn)i}ga%QeI zH#4vJG<enp7#1y>oaNmTt|-6<qtUf6M{l>(qhqiRW5lMV$LRB{9;I#2SCv>sR>=_Q z6KDGzX-v*wihRwwr$JB0?9P4DNN6R%V65hOGSr_9H#08yzjjMrH2#KG8T3UT-x!4M zVFhB{5ZQ`6Q+oNA`iQ$3=Yg8K1<V+6?Vf0NKRFI&k4)I5A)O^SIfW<qtlBx7vT`7J z<ly<)cHrV%yIw1jRb-#ctw@iuf;hsa<L#=GEk%|^c|(Nx|8v>UN=h{L-)~?YTJeeY zm1TS!w)vw0jRX_+^VN3+NelJl3m7YQ(ZZh?cUx~g#>@H0iQ8gE&074?rBuJh9;Ybe zs_UWDu?59b=BKYeQZ>8^&wBY5UINz2#(OV{f=m1Oji{B+36?K0hD)fE^vlLM`;pf0 z!F<ZRwzU*hQP%w0KL(Lw79g!^H^r4cLo&A4#6)1a!Qkro<+W$wmydm2fESjP%ruSr z^fz^2^U?lg|5Ah-a3jvjH@PJgr&)j~?}WWjecF(I2c>;#KFXR;rT*ZC?n*La_9a`i z?9Y5G=S~iu^jOzSrY&PX&tYOcxthguU&z*>mj-?dLA)+-&WVv81GFt0(McZnzSAZ$ zxHNg*ky3US|4rtBG`B6ULv~5oHn6pWvH>H&QDl3)&n>8g3#cycch#UDM;YtdB&-`& zt4C3PW|{!%#Mzqsxn0jiY#kRE{;3jhl`r(KN!f~<F8iAHH_`4tvd``*Tv)=%skHc3 zvIU9RDH5xx78!FK7WqB%Cz6(n&~*<7eVykC?WrE}_jo*K{Ze{dV>V^+mU>dn0_V1= zaRRlLy8BIMQdlharb37rmzYbJt1Y-y9>~}8)sEe<xa*R;?{wm%>TmZ<(2Mo%w)7ld z?R;xHBcfp*1}NhD^IgI82s%P#jj00d?uueJb|Y|sSAcYgQqzZuiBjXs<GWd$l*F?y zx;@~#`s~rkO%&?EEaGp2+CnEV`kBZPHvG1Ul*S7B8<|)!`fMX+aOLu$iIk=i9Yh#G zfQ}fc<tEdh0n+u&q)vEfayHprZQ}hG;BTMWcs-7Yd>DVbw(%xDawk4@<)}qvs7>Qf zC=jW0Yo5$?TQg!X)r`nnhYJ;Xs^V3FkW<Vm#HO+iU|v!)yO}w-RvWc`xYxRdHhv>B z3Hg|Gk-mti`^<tB`HBP~qW?y(EXGfty@rs|_8s*IF9yyh`Jx?gOE^6_{z5rkDjAIG z+BJ2z2VT*}_|O)DyfVD6-IO>h9^Wn^_x{P2#tCU<>6vT^u+f~W*@;Jqxp=db<%F)L z8zR=AH=I86eq#3dixI45_kQ{54evZ<bgO@Ro4?&EU$JaUu=G;jK3YRa@~AZG=3Rv5 z`Q2<4$VX%tcroc>P*s9Uvy$ytlwk*BxuI%Lcd3`|!tSYBNjifuo*<Ctce}&~&K7c_ z+c#>-nQE`eHEXSAL(B9AvG304DM*%vz<avL@jSZLV(#T(4Ydtgf@nrX^O-v|Cp@ey zZiQY2yqsDrN#}~)+?$1qA8tLF;(##bb|l2icdI))y@wwOeqVCd7Ayj<Vr+SXcSXKn zXm>P;u#dhHjJgVKpT*m`vb6S&uD`nCV~<&2(VBB(h|2Yf(Cka~(|P-TNvl~V)1vA8 zr7|}V(!G-+@2$ykSrbcxhY6c6Y|Sl1#lS)9Hb!3DKSf2m|B^auL1u}>z5mvVWd9Op z-$`dBq4z;POlC*A7)6m{C^R$DJ{C|pa(_LkJo^iVG!+YHAPheDrO4CmgV^Bu3*rNV zc|m{$YxEr@KX-v)Nc~wcPUMyc+LV`@eqTllonwBc+MxSkW%vuwH?Zh8I)7_(WR*#n zKYxMmKR{#fO09avAMl;4JeRg4(H6*w^oo>ek2IwLi1;udqF++qv)QAq{+bD$k0y_& zKW9?dGp<`0)FyO0z~_K3$@0qbiP<jAzeQ;J*Ne;rJ@1R3NtDHv4}DP{(ekQG&9ynS zMbNIYDVb+_ZhCi(nev6&G$S@ZEvuE0W~ot}^$f;%%uxqJ{>?ec31m*kaJ%JOYBC-f zz-(r#NXEMF<E!yKSi|>cTe<iB2u#`#n~~e`iL)0iNsTm}O=u#*)G1|l%Mk<4!XJt~ zE_v8Rlg}aLrrBH4(C2%xEZ=veisd1*+%tK~MHl39-oV5(>=)Ovr<}>3n#BVWy#ewp z!Z*YwAmaC=*Hd|nXs<45q;wxbqm7C!_duY2h7Zw80jeQ}RYx@W&!x2{(!6@fT<-d1 zj2zw_x0iI?=B)4=Y$m1(H?Sq;;o+J){Z0s5iVf}M?bX~=nQW2seZ+0j#oPM5L$>WC z?7lAF+V;`s?Ji4i?HpG2WKb$@Eba7+s+OI>TCd^ie{Wks#wZjfvHk8?d92V?WVB;= zp;@u|$e%~;67eSaw1wgN6|g;{E{}(QRV1uki%l-NW+}!A?nQ}Br_FSTf(6HIsly7k zPMzns1Z$-Ya-q)blIt~;WMAi_A3%QRr`#S6_&yGpJv7rwawnbvnu~rq6!X{+vpHH@ zIa@x^8fDUwiuhtYv*6(KC(uvLwd%(lvmS6tb7_anaK%xR!y-_~l+ijl$qLI3<8GF0 z^1g1y&i7k<SRc$5OxYZSde;=(P{3O4Ktdl}Bp%d*ob|JLLaGyBAn->THw@|7!uAGu z35W2dVr^kwId!txx!GbBS9|RVO>5)0W@(V?+KfWiu7OcD$m<-u)rd%iS;1b}Q)&pp zTmhqbn)LJ;aGqU8zKLr>c6JLjIz;FgGXY6jLFB_3LQ|p~Q54sAn{?H|8L#XH?+P^Q zL<e+QjUp2gf{nK{gziC~wzKhR`4^@(sF|zDXoV}D<vvMeacpY{!K!W$n@3=MzA}lm zV8)0~-W<L@h?Rn3zy>>4Z+|RvQp3GQSfAHhQ@Jq%XApzL1VP3nWD(lZ*Be-eYf)0O zD9BJIP%oE(gmh{h`7}%aY~GAw{fN~n;#db?XV#fKH!2v9VnM&4?cdg5D&uaGqhEeT z{nbIUmY)fgR4-6hSO+I>HA}GWpiS7*BnBtGnoYP)>m)}fM5#E9ib^H>jmy`-m>p;T zK9YMchkP2!x8RBhqGtca4!P*g(R#!wSKb^hW^@p)w-LSKGG)~G{*K%Y@HuDB<^Gk7 zm*r+V@{>}r2t<r*KgEr>@FqX73fgyd-S}C6Nb*=cpA2vyY7vK~PLPmCwie_PI;9rY zoXMDQQ1EoH^Vzn5fLmK9V706|zA7(wD!a&~f~TF1dnbnS6>MYjU?0S6div6wVRvF( zl2@yfDETFKakqy=&*wAnCoO2?n#a8T>tOD6t!a1-^b<VCP(wSOVL~pp%mc!tj?XR4 zAtvhdu2)79){D^EB7L#NuFi&V0y1M$SudRz(vE*tvhk<3Y}d5^Do{O541&6auC-TL zm=vQ<=6jXb;G<xH?Ov~ES`+hH_?FnCEJ2P6BrX_*VK*hH{UG+csGQyBeAe@NZ%ZGa zcn9cB4he)f*n1$&gbQ1+j?@hh)!ahM$+%c^T`Y#;L{OXKjk8F9L@CU$Hl$y2w&#f) z-vti@9&Uz;{vyg)c5?b=>|0f=@R2COI$C;DNtUC5h<)r}Gef6X(5x}C#6*8TFT2$K zP=nF8;ywgtXo@U^udv4geM&*ytW5^|z71#eS0MPMnBzg7*uKRS<i4G}1r~>DAN2Qj z4EQM2{$9<)u-XFmFWub+Mx!KEN}b2^h_9-|zSv$LBjU0Aa%SmP=o4T$%hK1Nb=3Z^ zL2r#sGPw6V-eT)Mppt?hvCZZK+PL@LJkxmWWw4Bn<o1X27?d;q(y#U<k+-1`ugGCb z8;+CSAVLq1W^U=4mcjXf`!wuW0M0G-x3)^^tVPDtm8M6)o=U1oS#a~C%sC!7<2W(^ zLd*puolu9xPf7~qpSN&mbG>X8*^V<DSJ!2Q*DQ7_SO-wyDL;R4ckMj1)VdTG;*A!8 zk3Dju9|D+70uE2nM5@s-D7QnZX+DwaJ5aAA`30Gh2Q0819+)CDFXN+K`kf1@v=4YL zVctIPPYbpOe!3_pE?hcycGhDaZeA++^PMB|GaJX|D@(ADl<HO-Lw4_19gu<;CtG_l zNbk(&U)n_)3zIAxDmOw^A56qdV4{VzS}US~5{b#O=!{X`S-n+!hvYN8fkL_9isovo zROXq1S>qvRT(pzs$}^fiFIr8;gdMKXswv~3d{J9VFe!B&F@9d&WVM4nKE&2g8!w|C zHw2FpVIEQ>qBK};s7yIn2E!CTWnz7%x9Q-c$#)|TeLhe-t>{mBo$phiR-d=k6bL5C zkl`ggnv;&zdju_+dwE|7E(B*rD_SJa98@1K$mX!(OyZY)djb<Rj(Y9F`(y=LKqzw3 z7O%Fye~e9MO@ATwDy?L%YfGG7K%9c;JhgTqq+vRB_U(?2P3KJ~rr-F8>`}5-Gq#PL zhxr%@Rq=b3A<oIIw1;o0I#9cQKsaQ@Hpt88YX^Qm@s5ewdE8rEgMIGnter}f=aIm~ zg0WaLP2@nCBJZ|^6)}U@9Ll(9-;~UmA93wm$MnqM!rpM@cM2$LZWGjW+ZKB4KTNxP zJit#jpL03+VD6dh#IRpIoiCg0WaCjhGkrIi`UR>D^?kMvWzGj>+G$S~=T~K~Jvq?g zt4)|je>(J}u7%b~176B<Y{6CM7WPwIgM1bkhQzOB0Ndzg>*`+wdwb7)D)Ylu(RO|V zReHXOU_As?8nnfvj2ea(S-U<ZB1J2w>JT_!BR81zZz4l4uhSurmO}qK_<U#PW;}AW z!h}v1w>}tE1==Rqh?&C-hk@uBm}(NaW7F5mbJf)+TMJt?vb|)Qc!?;fmhV4@zrO+T z-g1=P$3hcCZC{PFrfqMH8y%qzKFK;5{fC#KLqPN7&s;M%#X)j$-(gfb9UyAsI}7a> z&|G^q%RB7-fWT;rL=FACP3aOczPE-PaZY|^ydOVBhYKJId-TJ8*?@L(?P;n)BY37K zHrsK&;$b9aC?r{VHo6N!>$KerSzT(pNw%sGjI;3A?T$~%L#4@Ig8i4$YzNv*A96;u z>TsOh0;ywjE^EoQ<|Jn`e8;_aoKTfpQyb<xGNxUo^{h+KIbRVf&!r2`Yn0Fs<@N}( zr8?J2+N1{-jWUM@8tdWky4U6okc+7muH<XL9NMr-?CH~c=;7QD=|xVT{5cUJCDTT^ zaFCPj^L~!aGjzg&qPkUdcIzX|RIy+w$Lki=&6#A6Cm3}&AX!>Sj=0*r2=OJO(cM24 z#esICF}3kBriFkD2-z`XoZv+B^vPNE8@jRg5{jc5+H3!$;E=;#=p4mamw01jP>@`^ z)k@6MaD&mr-bH0~rC#NWv9jLJryMy<Qd&*Y@L;=cJS3YV0TAHe+5UJ9XW=tKZ=Zye zyt_|G=y>vFgA-IE2DzsgZ%_DIQCOV2Vz(y~4+Ojhd;I8cmT5i&R^4+_wMC$+(cEo( zs!3zbi)L18uKnO+GaeRM(%Vv!x{pfVm7(bg<28xjqlNy__9T&gg)fFV`u>UstPu!E zaAbb#-&R6(G`fW$m3Rav0y*Hz(vbh!q`=82t*8DDEYeWBGS+Fe3xqWH2xg#c>)&?B zZ<oY`xt4glt4PKLmDe2F-I!Bm%I&Pf%AX*L+P$EeWU76LXGg)&B2K&|)sYZAZ|eZ7 z?ZhlK`&OVf8eAEzIfaG+XOyfHn($vPYYM6l&UITEj;{zw*Q@HSnVIFfwCkBZ&@*u@ zURI)@WF)(|R%*Dwr6`r(=R2cVaH3B&0b!h}!)?_-B3*<paKf*`^acNA#v08>hW{;I z15e9ae!0!?^NjxJpicD6vU{=DU^7;^+~k2?;rRtkMsE@$ByX_`R*X5HFh|Q;k&95( zGWgrWbWh8f`ngh1XqU5@SOx{8EqjS4MKnHfFAJd{npB@C=mU!7^?axb^Ou}L11XG^ zr47ZkYJ=FFJXgw^!EFDkTF|Z-X$tnlR(r7CP`2$U+-NtyEf`dNV0>w82Hl=+<*_S6 zas=Ama=En~hF;b#A@6-0Lv6tiHlx~nwp!jNF7!=ZoxhFLw1p*HPOL#QcT8Sb?wFpn z;=agTYE8PEK^^Pdk8Clc`>9eQnyO407a9z-wY9I8=@iGg96Ynks!eJ;d+lad=b3rK z)133gY6SmOm;Fm_Em`(<Qq{~y{-R4_8LY3#+8F1?l*hT_U9N$<;)g!filJg&H0_h_ z9=Lc}E84dq&}tJfBR1z3@5DN;^5YuS6A6bYxhkP?{#%{YgR9LXuYm}^a#-O3%Vh50 zaf#`Brn8nP0R5?3TR^ACOZVVB`h^&mkn=M^kz{|mrrCZ!m}{@O(Yoc}<Q_D9SaBy- zyomdnYO+#FH){wke<cj>%H>Qf<*|k^E^&bF?Qef?C&XG@<q;{TVZ$?bJJ2#rSjmZs zDL$`1r0J3FC3Zd`hUINJJptFr>V8dIpsxPv66GsM=yP$Z@9Vtf#)~Ra`l8!akC5vu z%2S0aWa7#($s_ZX{JuiVecc8KTUp!&f4}^^7n~fuN8R%;IVT8+5IcTZkxY5ObKGKg znAkMyw;MOz4i{c&9T|IF-|3R(*e>5%k!^=6@@f>gS%SdTY-?FcRI7S78;WCXd3}2V zy(w$gNXSZwi`B1{U8ZPccx?tbC3KMeenir=QwvaN4ks1#3)oXfPtCM1%Excrqs>=l z31h@iLa8wj$-qc>br}eRX`L);Tc(=4cNcVr3($!8*%D-Uq|g}yk)f(d5|8MkIC8sX zUt|(T4SOHqe2+yL8_2sCPFXNzi|sl%4`-U`m8=E)>9o^Y?la3rYLOR}1Zk%WkLwNe z3)C&a)C>TOTDB;`wM#J)jwqIdRg185Ua<(#UCoSCV6T<^1rlx5L2Ix_no|%)-PF_9 zm~&XUq`;A>KRAhyX`$XUmKQeFd^(l-OlMfZ<56eyrAQDzDeD~pZ&Nzdise@8MZ}MI z)Erv&_)3K5%l_=9-@b5IAzI00`==o4atj>(Q$Oi}wiIo_f6LL|7mlH>;mvX%M%An< z!5EGD`LW|&s~6#w_3vD3_N3CFvKLw{YTH`PIfStAvCMxx=?=(TWZ#_#&BKQFAO0Qo zFEC$)8@H@>tgIJC8c|%oS?H%pK`(%iNu{&aa&PE+<jhyeiu*j;<)@HMk5$SXxYjwo zAMp-fZBW}=^7y?hNNcP5yTNouNMr#r5a^2g1(*E4uG|P^s{INy_62LJYvN6s4fTjg z`*(;p6-{qh)PAmIiwBjq9@oaSqMp)raM}`Df+b_lTpd%TMbF(nmvXliJcv_cW%Ed` zLTFo3foKoyWDRPa<s7Lk4>b|%&!VTAYk>`X1r2R1hn3IwEhp=as#m8ER^!;J*6^3C zj(=aIP5*XwB6N0YGqKp-A_Nq-Rf95*tfhHtv5J!(9Cc3wp1(`J7%Hy=rOHF#A~~Vm zv!2g@gw|ezlw<_xkKU<sq3vg$E@A-XuP${Xdt*Mc$9-<mrtBrwxr8&U)irr)H)ZrX zm19|tHst1bmf0k?V|V*~wnJ@|u7PVdyLS1zHF(?t*}V`@i*4_aq_L*ep20p{R$>Wq zq0C44VS%@RYSCUOhEPxnlo?`x=9MW`-b%Q5Qd2K=&V?`Ft4t!P4JsHR;@+#3WA`=3 z@t_+-(5I}{?^){i#?$$d!)EO03$NNq<l(qJ72dI^j%+^;kYiW0BNQE0X7df(J}%%J zR#TMllc~%}dmteB^4?qCq__rkV@rgGi=|~~Ut=3|W{>26%G!U3m^lY^9N8h!4Pmi( z*{86x9EGAXhLBKWbXn0CLuSgENJ3|gAaBcF#M}oZMx1##qRsZJj@rchYOfBUF&lpr z!F79I?lK(ownjxG-y#voW#2Zu?R=9E7h;{R_G%iOZ1dE#v}n(s@-!ip63L%Cs9Z&z zb_=K<_#Pu|z7MY4CBl-+Llq+$p-(2^ihj8V7i|#k*Rubttul^5jIS56)h(f;wxKs7 ze~d7CLZLY|W)aIz^z}Zf=780r<e`HQqd7tsX*X)3PEqjvV}JDsxT}YQhx)|h^f54> zV<0e>lMHfIr9v$~JFs7i&(GB6<Qs6#d`X=-iZ9NJr`ts%W-$c9W&jl3c=I6Tm$66H zmDQxjEy03hzds)OyWiR~_lVly7bL-TSp5vtdF+{&mjP|TjoFb*!ryKUQE)MDad2FM zx#yry3aeFoC*e3qko6B#h}j;+MsXbFaxW?b9uX&sJpuT1ah{su^ga`8UKf|xyU=C^ zH9@+@UqFe!J^Ak7J|$e;vXe)4&QH}LaB5b9#D|f)!(AMGdJMT}*=iI3hx-XMaJ^)) zuIGtir_yN#4dH!ZR%zT1F2Yt^5#gs)zktV0{^ez1dNTOQH(e!YHb#5%cfFtNi+qBs z&zP)6(KV8L$%jQkB^9*Gx$=)*`#QjTI=5Zphc}30N&BNBAzPax>{gIGZzZpfiM%(7 z8;O3lUH$Ygna82b44=Gn;U#Dj_6<EOrKm-*vJ|J0`^m~%wMyWVGWix`ef2A1Lc-N0 z_C!}R;RJbs%?25Fk`};|iE!hbt!#~w187X;9A?l|?7U;pZ*S*wM*0OB7+g#+0li51 zu)Y*P_EvimSM!~%$JI3NeKtfaIiAQ-8mmV6`AnbP{mxu_{PV{{;s+)YamMzudAAQ= zWb1W!$QcDar5{nkmQ#NfWIN2(9vrJFP(93uA`uo(cSW>V??NBnJH+iov`2QM3k<Ox zSF6DHO!dreitnovxif#DQGZ7DBTQiJRhIc8^rgqAoV-1u4?5@@e%)6{y}e(cwyksY zCEkR3z-<8+O35rbA0u$C9m4}qVim_RU%G?rC^7{57w$aTNUl6itF}m8=#65rEt>D) z;;8Aa1h>G-`!4K=_}NG8%|q<cgCVx3Z$~z3&TKy=4o2EqQf0<)b^m6`X<r+<S<xH- zPotGNKngDMr<i_u4_3jHeY$)UG!l2{^4yFx84|Z8<bbUGuU8R}Z)P{X@+nCx%oVQr znA|e67P8|PR;>bO@ItDd+@x$FH9pyQ&NUlgE6B&^(-#MtC41X{wH!CNSFWV@MAY}A ztXhKcwxvf7Vk@HS0C{!Z^m&}4Q{4&R&9x6MD*It*HsV)Iqob%T0bX|Z{sR1>jM#e+ zt#i=k1wk>xnAY4LzeW8j(2SNN8>4>IEMo9>*!YugqiJ;*u7wvRAp5q+eAcs-6X*%Y zXqIReYl?KR%RKk*h;r%ft@+iHwiJiE`WrJvEU@+i+xJ-Q`7;xEfYa|1`%|lCN&dmF zYUQs*<D>6i<Z0*>`(d*Ucd{|~a^lZrd5~a%g=)_8ZgeIb(N=@}_OlO=Pv7vnFP#rQ zQJ>kWOE4QUYZFqCke~d+Uefm)_pevrAKqD??spq=!W+`5yJctqVL+b0UY0{cmB__B zf-67u@(4M;(b=pMaU&IzHbsK!&Ebf?mI><(lvPn6b7RiV!dl11;SZ>xLUAK&ZjEa5 zVqxcZgM?_6ewD?7ne7VI74X8O8t+@JC#E;2I+#9RI=yxIzqypG!l+60Guk;g3*B%^ z;r$Q@3;hUtw7?Kdr10s$BdBM1R++9wedWTVqP)Q*pIw_atFD!b_1Jgbr|T-!&nq3} zTC1Op6PSob{x8rNQ@xI@I@u|>b&1M*YrDdS;CJC=3)NO8df^uvNV5w@(r(lExh9_n z^Y^5RV1E4KJ6O0_{+dD*30ILEbPaii$yTZasi=%<W56}TzPKOmr=&|pVfY>fe2Au0 z&FtVf^4dLuI&^KXhdm_qL$hPbqY{=pTF2OK_3ZAnTJl-;D{b&XC_y~Te<HNxg}yne z3qs$gVe#r}rq(yj<wv9pVayDoyxF6tgiCi|w>z!+4Y<!Vt#z*MXx!?^5{Dp(2smaD zt<Mi3ZC8$6`dyoJPdI@=-%~^vMwu#!YGun&x2e#gD{xKx{b}`0Y7tDXnpu*{2fHIB z-(R0fpD`biPscw>eWNY8RY04w{xOEoLiOZ>j>9g;(!N1QJ(<Jws~R*r%vH~7!2V!Q zCDF=Zk;Y4$FsDkV0b-H-ImBM4^)&`3(HjBF}sBvM30rjGB9sbr#F!Z0PjBZ1C| z2Nq0X;-@+XaD^u}q;*z}SjW0xu1lR@L{h#4hb1#gqQI)z%qMhwIJsLwxYRW+^5HgW z-qp6OgSe=)Q)PES;HcrMIG5nX&RJQv<f}DkolJM7Ho>q{6!AUHsi<1o6Xrzj_ze>` z^_&srtA$xt3J*!c==$zudWe{%xYgmuh@^cI8Rnq_HNu#b<^)*vzDG~ne>+xTbIf-C z_*u8v#?86MOGd#(r(9e;ve{Ggu$ly0cGUN2I0bIDC8yCdm23lm%B;3xNiykb2Kfd$ zKfP-PIS0)3nFsGMdzj|#I<|Vv^5vV}d0^@O(Da9qXq!HXFh9{)aj=g$+ufZ<g1h$( zJpFaaI*7kKQ(XI)b1$IJl5D(kM|k)=Yix3#lcHhv-}OeGP%iuFF6ey+B6L=d&~b&f z4*ro^g)xsFYkR%4pget~z<x{dn-13R3y5~DM%X^1P9{Gbk-j{{y6}h6F{X0Y4tWWN zjRP~~%*gVZvYc=t;#69&a}T6>lg8Gx7K^cl)6cT$L=ZbQ|H)O!)1~-MLaKePG#CdS z_1#HR{P<4gUd<gpy{JdxYW$^1eH<YZElVVg1pqE=cNud?=Nf@dq#de@D-QOw&IjZL zsm_dCfa_pe_rSfL<n$uoPiLxEtG7_@LRCZu`daDt%hdJLeJeoFCo)l+&qjV5)GVqr z5bixJ6&zlZGt^VSH<_fpn?qkAFvJwIJ)CYxcGRW!dpt2HFEGY)Y*%UoYGINkpOmC3 z<R*_PA}F$$G_vbZYQ*<|oGxnlc<?*Ar;Hp@>TalC7tw1~toK2gINwddGbfqYn`LcC zRP>0#4V8IGpw&7n*)mh|O-Qv@{o9yaOGjF^Q`bS&jr_j=S%9X0mg9RAmf!86d@-$% zMs^NH_8#$ro1tG6<$RXp41W{_F`8hO?zh>@g*Rq`BkSi@c7NF^{>*CWU{3rw@ym0d zqF@>0aq}xG%?%V`dP+QCUX;6}n-9;dl#{zki6UiWWH$W^Da1XH{O!0ERTWFNA$UTY zJ-0-!)V{1B#%-3R_U+Xd`N7G>eEJS=DV&@1`U=_y?Y{61U2E_aZPA-O4bf`r$_xZm z-ML&l2CEHfSNgTN_G8bmB~#m3sWqN`fTUBnxrN_%N*B2;dhW_iIPQhPw{}2tUDqxp zM^|nA>RTaxmbI$KzE#4V8H=Y+iv})sE9<%}ghtCQQldVW;)yM@aU6YXyXe0XReW1v z-SvVAdcLXeu3fZ|&Jx~JQYc2~d6VVcciCm!jc3-&(J>m)0R2R76CQj=H%gO3z=}D9 zET%Hcr|qf0@!aIo4(Yj7n}AU5coND)UmZqQQQH~3LaSVanmy2qc)oN!Zf9~+u>g+C z=KDUwOsMBNsU7y}rHS7qC$1dp;E5xN+T|!QwCu9Pq%##0P(1g64;pjF27xB?=WxTd zCFajc0oFS7Pt3o;&31nzR!AL<bYZ*&BU-vqDv*N{wTeY3JQ*mU^L!7?#n2!?UQ472 z&5!3WRiNqdbO@As?qe_EL{g&D+Sg4$pWx?@fPI~wyl@R&z~NizR7!S>r(ef72{|=F zPK}T=dZ#<pnK6A2E<!x@ezp%0cjD7J#YzY}H3fBybx%u`C2k`Nlovb)-F(5&w=4Ah zPfP@MGDXv56<|L}8`6=y;X7SlyRu+`Mf&v3O>wwHo)WjJEy+vdDFL5&39B`vhQ*V! zZc(aVZ~1-f*PB1ca2Q$VHMvQt69`Wl^$_c(4~K}ObBv<5U7PIH;Z|$>dKS@1_Wboh zKnIds9dOFJdN5~%V%#N)F=quv-x8<y*P?m9Yt#P&v@|!rjYa@~Lrax?34Bvk)_Bq+ z5K2pmHc|wnO3`Xztacn5QnZgI@*)Wo0j-EER*_L08F&Gd0<CGK=_7(O>W3@t+vvzR z4ir@E0$l*vks|X6;&y95D_|+Iy#HBV(lo%#_xC5wefOSw-+gyE_ndpS{zX#Y8zX!~ zE`3C&E~P}rUVc<Z4c`A+S<L%idpPp`gwFS0c7gXN@cR$UKmYp^{`332>c80w&Vy;5 z;GFbW5h?q*vaG)^da;jES5(|M$-Z&W;#3X0)Kf0?m`nWz+F9keGu2jJfD-4>AI+gT zM#tR-{~+j!l#K?lIXk7b<`j;%nJ$i8!Q!HC@gBfTJ{n2DUTV};|6v*PrON$uzJ3AE zNR{6i^VA_m!IK0-1kB?XUbRg)&AQeO`dLG?P?12lx3=;UN_=Z8pF;^?kse6UC9~5| z2m{M$i&|f4G&RVkt;10mQgRf<<0!h*>_30V_~;J+8Ysz_Ww9;EN<bf4u8dhI{c<)e zx;A%G#$3E5_GZk>?W?5QR*%)fiE?qB>5CB!=5%;AI=3(S8TA8m@6`PNR^0~lui*)i zypO12m%gEMnk6!P@TnWrFGRmF{BB%pP)WTbHL|0sHS+qutSqvv5GA-m`9>df!kE)c zTgi2rB)jDcE>!)AF4gs_Y%@R&nDhpQ;SmvfALU!qgLfOG$|;Mb%E|C=C7v`=<xBYE z0P=8=gN7m}G8EU)P^7|8K&t>``eM2}SWW^b9+dAQgR;{TdK%x$QZ(d~=6-=1C;ww0 z?7o;Xw~1+#`Alr)R^cVLI?IUT1D@4|_l7q^2Jt3ktt6J4w2xq9LIAa;!pqNvk>|X9 z(KbZ(KHhOf=%H#!Hhnw^c;Sg6pNEzZn-csWmosI`e4I0vV4EnK3ogO^8qOfMZ(@H7 za+sfsUG%$6Y^L9>q8@(LugLd3rs~7v0Z;L#)F`Gl%?d<VPoP%TGcWZl6$KfSg)C*C zQYQDKOy<nP>tX)>k;Hk0I`gNyMgcPL{jGTU`vQ4t0gRgKQ6B`>ZjKzI!ajxUJ;bh* zSll}J!C2h-!*s%}8^~a?NtMjHjVjiAzDvC$55(5{fa@*gdT_8Nv3<w|bh*;i;k6}3 z13C1T0$WIpMEn{#SN)klOk}8^YxbtU!=Mj;20&e*7X{!Gm-B$6h9%p`!;<r`zbQUm zTZ~dO>%?8?{iy5%2VN__JmOjLb1_zlQpwjiECb=SbFWahX?E%Fs6)1rJ20So35sY= zK_^a2&eQ&y|I&#I_klg4w(<b%#SYBu?7+21Q9&=BT|m9qs@Xq&AA9kV-ixvY*o$M( z3t%^o``7=sq2M{x6kdXfYe`CH@EZ*6mRF`24GBsrUy!e}8w~kUNKO!adIKg$%_DK9 z4^Zu@<xzlhsda-kNhh|u2GzKF*1Ce0`yi8jWx^rD1`5efF2Kv)`uFL?DJfyU(?z<I zgQ>i8#w>|AT?71EXiy|_-pGC^$QK$Sun;owx;|Cj0%OFRjTi4g@I(N<d@6Dk&{p^g zBtqC_o5hOn4C#-78W?=b(^y@#{6wu-raX#I<?Q`2XqgJRjg~(^W)HKWrqPlODK>Am zgeDtx_jal!sHfoo`Qkkk(7g<BeChq8AL%>IzWO~Hftx?UtL<0dAu#;WN6};?k>Tq6 zSWpTD>+n^i4En%(qz_Wbjuy@vr!jPAe^@E&jYifq!Rus^H4IgV_RFD#DN<-uH_5i9 z-W9w%$s4@eJpI_;<k0XR?}qMXovAVptTdrnkhax-Ob&$x;E9Z%S7mmPM!KwRf`apg zXr#3pUAGhD(A)EwYc6H3`Qf`GT=OhC$A3{hq$5(O*_Zy!VE7ncgJ(@1<15r&sWfUe z@KR^}>|d)~8MimUaHb=haeMe`+v+=vF5BuFm$Po(B~sRQNv*jx<TcN7g+>@ZOc%o( z#A_r}buX{+?^16`B8Ly8wL(fCx0umxiB?O+tc0jOD=U1wF%sqiojCxQdV3OGnuXl6 z$i-X4vTl|OLuQct=BwkHb`E&OEd6Bftik81Ug@3VbfG-U%aC%`7v9i|*b_N4dVn{p zL25S{l^&%%QmR~u--LU?V}g=W+9O@6a#_ErEW^PHcW)@;rKi<;0`&>9w%Oklz8QI# z(F0%{R!X7#bTnPGLNlQe>ER>^pL#(nz~scWq1E9)@0#5xtD#x?bwNcFpA)5YO%d@B zxFC}*syqE8i1!moA|J7m+d37{{l#*i8qvQ2%~w_+XAqvbHksld+(2USl`ICu5poWA z9x#J40-2(IZCX$NC9sE!?qaPmC~i_L;>8{06KD1m+*V7fdBfd1g*RDto5oi<{D$P; zvtY^^8kH_8FE$wBV*xVljraUaVSmyHGdOq;l1YJ6XZ?d4Ee#8JS8Mj%cMJxmq{nqJ zYjOupo$+7PXn7$D*$p7Wy91|A`%{TrZ?u%^Woo`T{PB6n@d!1p$4BaPKBiiviBZ2Z zu*;4L52{$~S33aRC*u)lM75er67ZU6=tF>O&@pk?qi$pc1P7W>A&F$#f^Ja*HQ9la zmf5Xknm7Z5SGfs_%CuHWpCEs*aB|)8Ht)ah^;^<(JkE~3#hDvf+qgdv^3{l0#6FnC z;39Kya+1q&Z$`T9@ufOCz7hz)E0v+SMMfplwmR3gS~faQ&a-E2gEns*039k#G<!_D zJy~1)zoHgZZkm6W9J=MQwMeCvTCE<_1}alWo6A~XhciXFD$r_H`UP5(6`R(qn1MpN zwAyS&2D|zq{7I@dTj9r2-5Z{Qw<NiO)2(4sa54~1i&6m7twqH%KyzeY?HKU$Bfw)- zU@RN7oZJ)tVTK!UOvgWj*KkRIvOKki%%38YGA87@2AIz#DK|~IF85BOGQ_sJw{5iq zRP4OIu)(h%AXS+p({9OX#9W_gi*x(j!$jWp^>0HTgg(>1Jz0nSAH%qn{fwW6Jyiw; zel{z80zW4!J+*EAOF!mM`<OrNWB#;{@zcCnU%+rfXH!OnO0GG+t{csq*``|_d9rq+ zN0+T)_HU@1z-phci$B}Is)VKb&3QzJFjjwl7U1pqY2M(}bXtJf>Pac^xh8g#H<mV$ zavGa>33nY3uIo|LQ$6S`Fx$%gsDP6W%TVOC6HS(*5$|;moj%X-K5de!3FM7Unih2G z3KP~d*or_tFp+?tsAhGoDR&qRNWk~jvpmi%xc@ }v`qHqF%jIOz=7Dp1?L-E!9? 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�U*|e}wXd#T7|v%O7k*S6tT&SU|bCNFt-{9*c5nTS+&O!8+vu zw?KTah*6Hyjr6cvTf(knI<{jg#z4VCvx7k<z}v2T_ZOHoh=xlyDBL4k?j}az#>qh3 zK%#&b$f5wH+s0HtdGS;GTU>v+QcNn}$+ulGS)r81K<~5i3C1d>b8uVoHOD01OY^-% z-%skjv|gpr&$QAz#h0>U&}5~ys~BUcSd~@ha&{_vyHbH%d6_E`XoB1p&>FbK#1yq+ zoT7r&(QFXe@Ph;Sd=%Z(&VBe@aMMFT`yvR4Hi%V#ok29V4|DsJp)dD57cXQ{xH%2D z&T5D;MnG#tu&7GlyYtpR!&=X^lZKe_S7Lm3rETE@pn_XXwpg$>+~R8^(CkfBh+UJs zg)^uh*xEJB2ApbCYTK*F=_!Ybm2DCjNfH^U1;b$wK09tz+w|?xFeOmXlpT^VA&g+j zYpbXm$e}|?7gl+zrJe1$wWT7{09srJqt6UznYlS%YpK@?c#=q>7)2h-yTH=ON->)! zRylqs#+%HDh`Qfs78soephUKi6HF!n2ir>fIE}CkhQ@aLRZ<p-z7Yh<wU|nK$3<#4 z+LJ2XtOBvkCkCSoJ@V<aeQaI9pkNv?-Af#?*;cqFWm~h7V#}2M7VO;X6~7_FPMw)6 zO4~veFu~?Mwa+(=EM1_G4PLxfTVQDAJNU%kgun>9|6Gp-EcsjsEMuv*W9xx7YIGW1 zp0-tLH0~*Sj%I^=GeCs=BCoABc^lGshg;EThK)-jrGs(3XWX*1jeC~1ohhnACU@?) zZROeG?DLj=EKXb5Z@R|71t+GqTzc6}6CJYOL37$J9=bPXC1mFdU^}bJvH}Z%?X-Ni zW20t(r_w*d?HCFdcy?Og324_+?G|>q?2h*v8o+@e{95p4xgCzg>~IO}4oazZoWtx? zUv|2NYp2zbT|RFY0z9Ix-KnPq!bcE<1UAUdh1QcF?=&UevFF(3a<_zcj1bzDUG5&a z^HNv~@F__|MvQCbAZ+O!Lme3LL7okYrTU7UkHU5uH33N=N9VE{lvwVGjiq)gU78gL z-&7YB2CS^4?eO54t<{bl*8Fz7BsPHQ;oG6d35KXVJN7#}bvrxuI=ezyz=iMtr5@oa zdFenza-d9|#kq2zIAU+RXYB`mS2*Ajz}B=3WLnyjwDSa_jIgS`(@x)=@AC~Lg)uGR zAUl=K5@rR=kYW`BVh+0+$(^6PGtvNh{GQ|YB9y5r+nwTJNB0AqBdaPF%o^1K*VOIQ z+V1=){Vpbg5hSCL!U;01Zcogq-Q{e*n6L$6{vlPct!anB-j3T2cD<HhKrEbIX9z$B zS|GTd#~y)_&~nC3m11CW4paPSVcrP0@EEIQ(zsPGi{1^^6lMJwrtXQ>(m^cnL5u2x z*3XAo+7Ls=4|W;)h26h3%&Mq_U<eaVo8%HP24<x+gM|d(_k23Ks3cI+z!rfaBMoiC zLf@lELe>vR&w(w-Kw%qx53XxuSf);_Zw<dI{$e>3<b3j!@L*V)ZuRgxo&0C}wJJDJ zE$vf6lbO>K^%)?*7LMB!iUWhVl!*+vcEb%^10M3UF1cDaj0<;zmbOH#TQ`h?OZ(<L z<e1kEc{y5K(rYb4SV>2dG)TkgU?cTV<c30<GX}OSLowy}g@iVqWSS5d66k`%$UzNF zz!_m_VX}ZI-wIZmp-`l(HV-@nGq}#5A?j2bxOanXC)LLd7^#~O{ZSz9y*w;KHxlNr z2?J^Ug<7_xgXz-#@o>iLhlVrn_Q_1(Y%HB&WX)JrDQ;Xcgfpd0WrM1rk{wsd2YihV zzr5onka|u(O80E^zx4eaq6JMmdDt;9=?5DsXzm$m6d0-X8S0e~ZZXsz&;^8FYqAIF z%^l(esY7jPi1xtuR}7sGG6QSy3{&26Y!t0UpJEm}^ctTG{r@$)a~PgW4cp+`R))B5 zW$@h|L+H4EJm8w|0rSznYjWfJKYZo)UzkiLKb`#5<iCX9KcD=^z<xCO$>cA?^N+&s zzYpC0{jV!$yUFB<iT(Y9$?r$}(+U4w34gyg`TD;ve$S--YVz*n&g9L>+moLM-`<?u zn%oRNzdiZc<eeb%KOu8%^1|e~$-f2OoID@Q|3&coiOHV@nYSjlC$9zhUxwJc7M^ax z@8>4}+=85Z7+gFN{rzG1yE}Ou;oT15z8T!V4f&_8eD}(?uUrqmKMDV@PQG*Hdskk% z@~7d~%)fi(2Uo5I)9+vT&Xs=`&0d7$A76R;%0CVGLa?!C3;8>fe|F{NAoD`-;bqAE z0Kb#TpG^MoUVMHU{_cbrjq!MH@~<XW!+YBA^Z5NX%>VV|9|m`pF7Lw4+u>br?Y*%x zd&Ad*js3eZ`6t26Uj&n%L)ud7c1S0C`=3wV2tG~z9<!^HhvDyEhM4?W_`MoJz83!f zNs#@)<PU;>KauR4ii5w)+rKp~-<<q)_+^~_$K>AxKW+p+-U+7f1^aiumT$jXKKw3e zeRcAT*?uj*z8&-HnGh@c_rl~Ge<wbFJ6E0yve&}j^Wo2O<A*5SKMk?I^Y@h4$>fhw z+W%9qwQ_kk*uVC*vi3(;W>;Q%?e5*1Z~fO>zr6bXTesf6``u^WyYu#U?!NxU&9`2= zd+^qquits+?mItw_u%z+-uljKci;NvFP?km>RYe9{pQbZ-hKC{H}Bki^PRW9`^<CS zy!OoZ{@@>7z53F-ciy}E?vLL7**m|ZZ_m?RaC!IU>+jup^W9(SIhfqJ`QP6Qq1^oI z8+YFP#hbTo{`}_MXt{6w=kEun?}mu{#m!&bymj@K{eJhE*Y5u4?O(j}-)`P{=IVQI ze*g8?Z{7{D`Ppl??%sUndoO+Kw>TaH|JH90{iSbxEv_$pE53Aie(77Dp5MFi{m^Xv z@JE07A6|Jy#9;E}6O+$F+P`@3<$Krf-MIJ4y;twOaqsrM_wRjh@1uJk->dGe?@bQB zarorn(}!0NuN}U4`10ZP!yAXM9KL$^#^LS5_YXfj{OIuG!v}|-AAWK8<>6O{zd1|} zv%~6eeK`5#*-x&0^2R5(KUse=Ir_%YlSfY<T|IjC=-SbXM=u{;Ke}=B%F(MwZyf#V z=)<Frj;f={@i&g2JbwE4>hZJ3*N$I2e);(N@r~nGj$b`~<M{UR`^Qh;zj}Z2)f1B! zLws+4{Qk$!K6>%d^+&HfdgIaikAC&&qel-OeevjT9{uJ~_Gta+8=pP>*|VR$_}TT( zUis{e&))xRk~}f_(h6CK#nljlmqX~U9^F3rAcXz#(dS2B9({F`AP!H4@UMliZ-j7f zAAfNC;qk}EpC5mD{MB)CTpdsDKN(_i?f%R6Z`^<N{_Xo8-2d?Y$M-+K|K<I!?kD%F z`;!MxKDhee+Jl!L+<5TngWC^2c<|waj~{&g;L8VJJxCr@4<-+ve0cTYwTCZ1yz%hW zhqoVo@bJTjA3yy3;g=7;dYC+{9!@@e^3$uIUi<XrPj7ts>Zi9q{qWZx{rclyKlt^e zdSddwE&l(XH2UE9S0Tn9g*ZP5vHl{&`)@+be-q-Kh1jn{{J#<2z*6$r@D?xL|9{;g zN<pGZ0DwbF?R<G$6W7}CWP`B8L@|mB8Wk1AB^Vbl+A<Q_i3Y{GVO@%)ZmkO!5~ZzL za6pM;TD#lc-WIHFt#<KtQQSdPKv8kWS{19k4n`|(EN=5X&p8Po+P;0i-}nCU{eCa4 znKNfU=h@HmoQeL5gOwz}T4up&(qKK=u%gwlrggBYJXlvTtgIZ?Cc^4!VSQ>?VKA&Q z3|1Kl>*Qdi39!~#u-Y_OZ#JxWHLQ6ZtU3?YT?{KPhqa5a`dU~&LnNLKL}GDHSx!Zc zm{XNgo5SR)b9K4FxrW@ZTw`uzZgeh}8=sqyo0vN*H#s*gH$68ycUA7{+??EXxf^ry za`SVGbIWqeb1QPi+^XE#TxN}Wjc!fw8pE2fHO4hh!shHXs|ZG~TeERZ-kSV1WoydU zRICx3V0hRgI8HG<{qyW5SYF%&&(&*nYlGJs2);+Ijb6*GjbEFvHj&_d+S>HB*=tv= zUA;DE?Ygxa*XFIwUt7GkY;F14inZd}s<nvBa;8112sy@_Svfg5<&W%2FziG!tQ=Q_ zD*-(Ge+CORU}G@gV;Ep02N;<EI5`WjG7a!D8!&S<;O08O&OE@+V!+UHz)=yfv=;DG z4VW4XxEco78VUHy0mdc(&dvg?O<SM7K70MD^{dybH-v5AHq6?Py`gwR#RhRh)rQ&) z%s1+9bl<G|b|cVhK2U5K&};=zZ55$g9Z;?TXx9kT8~q)VE@zCeH)78J6m~q08O4Ab zRcqn_);fS+*;)f|i&?-Y@_<9=faVf`#x?>aaX>2@fi@V}|AhbMZbt$K_<ytG8`oE@ zkK7Osd%S7`^S^)p`}e<p|NHm1|BQMR$G~Hk>O1@R^<2g+tI^1O<vC0BL6D`D%VZG& zMn4}_cr%5(t%@<u^6?M%ktt<M2gzm1oac=RMpL64t+A^@#^e~*bVzT{3?cuGVqOGQ ze?Bn=&_sI*|1)-K)TgrL@Od9iw}=sop6z<V8gu9PzY~9-=*U^xyqj^U;x*$^`HMLU zxlAtCMRq-Pw|3h1pWa?|x!cbtpFd&L)X!L^g1L<$Q&o&p`UJ_xjfrS&)Z>ePP&2R$ zW{;UYb6zilbzV}Rh;U;MEKme>_7)h%&YnBnFvdP@Zu0DTGYw;=r!1HaD!L(tHFjvN zF%B{gj2K`ff6uqpMD&B#{{2h?q6S1gZ=C!$2kmd{M+Xi6uLi}k=_!WZhG+X3Gd^p) zNSTUJWVje(hEtxA!R-0@=5zY(*~=1pv>HCC?})cwS^oB|0b>&eTsbmu>WgvDjqd-C z-LKCGaTcHLx#wm7>OrSh+uyE!=evzRFZkfb*Ta)ypY8KXz&j&Hgs=P~VYqPI_fp$l zwM*A0oIW`0R_}brIoF1wH$y(2V^hE1;oO<)GcTm<w(kBkama<=cDDLFDQ$Mk*T3y8 z2T;pC&)8$kC@}W-Q3DdFRK7BqGR)Y`80vjD%9aJsvfGmf_w74BDK)vz0$6-1EU*vQ zT*g4yk&qynOj63hmNwyAM`bT#Ph(h4x17*rojnbcQsz9;uCF~cwRh6AK9Fy0g^jvm z7lB59@1P2`u^HxTF<+^W`{Wxt;Cpi=fM;!xv3Z0Rwv|A`XY3d@qIbV0sH9jb1LJq^ zh~m)n^OrQCyU(@#cdk75%cZ>od40wp|E0}(ZG67<w4cjW53|qQc>C=i$G46C(*4fP z$f%8uf%d_xM_n4U^&{v0_lJdS+)|X|nox1~#7oLy14hb@nAWr|j$7Zo=;noGHhE+m zpSJJ*m<o4=&+@ZtKlpTN;OgJL*tu(IR$=0W^WTP*7kx3}rC*BLP1^BIl=?(u=UkJ} zcg4r<?Y^C!wy=J_KTmHTx}7^_Nq6TSE|LG#^6=QAR-dO&u6y;VDJhGyTYuUsX3hRF zhZYa5?m0Mb)O*YqbN%@#byLUO4*qe1Ho5TLop0aIY1aDOo>u9JCED<L%ak|Vx6`^G zQSJSs|D>r~to?49fco~pzuq3|dv;fw_s_eYdnTsl%v??rv9>AoWeANZ;dwSfZw$g0 zbx`00G+a~W8Dgd-PmgG6Y=POnK>-#=%8S$HfiXL0x)&b)0FPPI7TTvrgc#dlMnF(Y znqi2Uo?@RpV|LOsw2mV>8bc`jT6v0*mQuZ><RM!VP-_1Mvc*@Emu&w>c*Rm#=ceSk zRHg;qD)W~kMt!~ihqa{#4d44Oc7C(mQT5Zv8|MqOyJk+?@%c;bf7w>I-?Smq=uB9$ z^2{q|2Y#yEb>wQ=&4phsnLlLLyWeZJ&bmG4z5P3$>%D;+dS}y#DKE5>e|ER;D;?I> zeE#v5ZHwg>-mpD)v038P==MvtXwE%d^was}J6?G0<%m9tk1~SRJ!?1=k*b-{`(Rps z)B7zxYO&?qtiJ32b8+{Il|2iEPRnQP;1edyckCLnzT5IC`*r#upJiSdTi`!$&%?dL z&u;N;{$b}uXP)YQq(j=(&mu~0{HJr9Gkbn~Hs<5DFXVJsb!qCIKNj6syx~RJTX*6D z&Xsi@zwZ5m-(@fO?vJgSTbJTa=iHl>^Ic2xkIM_Tc{s)yV@CP^CC6w{&oR_SA9%=R zjFF{$W3VyOI54MwPQPWwKjRw|R~n;A3`@935aA+!#X@90FhjyZ05jLNF}C*Nw<0JI zSO_3mWbcUH158aB3GnIRuhd;h*llSa;e7R@@DFw^{YG}Oz3t$}6$$gst9yJtwRr!# zL6?=!X|6xpy)P5F@lwgVBR@Xg`9*!r(}OyVN{&dsAw(|!Q4~L99v&X|!N|~~Uw0q* z+IO3$vA232x?FO4>e+4KSx^1^ub)p}m>})^Y44IdhXX&Y`tV`+G4pfn+C_G+d3v~U zsq$B(We*+qoon3I;iC`M=Vh0E+53+#e}9aQH~mf0@X%mDP^$*gz@sO_$m#Zl^HW}l zFdL(2g??kFr_4<?%%5R!q)s<Xvl|dVsQ{sc3l}~Lp_JrlhOnd_#;6FRu@Bwe?)AOL z%$b&&YA_jM=D#$ZNJ*r>enw+d?|vSVhgSWJQH@C6*uOziXMEIXVb6{8@*H)L&vTB{ z)Y;R#8NNY2ar0A?<}Zu@NkNw0(mx^wMxC2HZQiR9PZ@{MRSmGro;lk-ZH~cesh?VJ zL!9?i(J%&n7EVi<ZWupp&g_>6-!d%d=j~L{xYNIs^Lg<j*TlEIqW|b_$LD^3Ss!@* z?bav#e!2gQ|4aY+AvvkAZquHMUc+0?%q)Ia<ybRuQ`yH8^8+um_y0-C$n4eQ%j6;3 zZ}QJ4B&Ud944m1TUpYqc*_qvg{_*~zvNjK1xgU2s`?)UBKfiRpNIt*AhOcaiv9*0q zcb>ERW@48v?a%!yGe}%vqEx$7#seRFgKS_(5E0mq5QuNO(LxDvs1X34Gbm@kGLx4O zQ<F@+DWG~kMwBsQV!VZf7D+D#+KW#>;xbOQtTtBW+ggEoftNhxvR3W?3W=UX(F&uZ z5zm=zocT9-&eQd^<WF4DwAs`CVnx$aj2&?<U6jGbR_QH2EPG{Lx8&m7r{C+S?!9Ng zKiB4VxCsd1N7p$FCI)+{)PY{ppjEe{%#MMbev+ONJY$bmdW+e*=KVJ}99TIndD7dT z>c0Akzw_&i*V3&oer??J&(Hf$OL%Td-XF8Hqn5>uxMT5KlUpP#4*lAGI;A#u)`IMB zr#?J-KBi#U7q^Dpzxs!3vf+!bOhRq3vG+eyM+N*8l`CCaz3H=dH7RG$PMo~0Cu=zH znPx{-yDmHWcih=^`Q^M`-?z7hd=fgN&&rd9SF3*bE_4n1pzOQBJMXNVH0PfSKdO1_ z^o7nJs8!Kd?rgp1-}*nFjGDb+@J}1YzW#gN>>jrlefci;pOv$d`cE@{*Q@=R*u@tn z)kQwTMO#liH+bah&-rzFdi<y}MK4?~dGSZTpZ*xw>dxvngFB|28+iBLGbfnW+Lgtx z0{(U%{!RDrx9QJyyYNGw;0qJAJ+i*(e0g$H{`SJ(WN(9v11O#M@e+5u<Hb3%lML}G zv*%7rdG%3^#K1c2v*zO|JW)NOj05^bH1HvOHP-W?|6dvGf2H2+oEh>{;(DER{`l65 zW|T}_ra5uro3H-CzbQCtvz1Q0&(_|Vo!-B6<db;Yy`!CX{BrY$0p<>G75d$~AJpgh zUCu>A&0RZG-%5D>liRYN_xb0gAKKa7K5b_AxR-ywnlUZm)z2$h>ssi$Z@duK|Bdix z4VEqEW`xdIad6buj(a1E$F91NQr%{T<K->ZS%)KE)vPzJJJTzX`}EZMma?z;Q;}~Q zqk=wA3|<sHcGI^NecSQBu513>Q}Q2Ag+J)D>8r_~YXiRiQWxK>f1kLo4wX#pdVJ;f zTk{t6*e;uLKVtdwCst<7OvrANvui-rmGI9yU0zkq|Gw^8V%pT#6Zr=d0;aH<q_K%7 zV>(^;GRiZsBd4CIsw7k1hP-F`qr7eW-{fsc$*IPk^)=<j4sHLM4>na|=GL>oK;<;! z3%OHrCK)FhCm6@I@&l}%Ilb@9*)za8?`ZV(*yqZYZ~cC(?XquNZ@yA^IQ`}0TyU?~ z+w?JZZPmrY3g^t9Isegd7o?Ir>?wq@;a0|$^=w$)h#~*qDS;7G&VV>Df|;1pd70tQ z6u#u7X(l36dQjc1v(d1&gRy-?TVpWA{pJMaO)>Qf+yFY|X3AE|C-dsZ^*ce4fA+m{ zcFnZe8};kbij4bK4Oud*CUny!KDD*-4W;gr+~4kI^mXU&w_HxCh~G3$XW-|3@Xn== zN5A~jpom|;=<Qy~6orhs9M^AaR_(~0cV~{9UiI?M*Y>{@*;c1Zi(L?LYuRfGZQ|}9 zr~Ip0n6Y4KyNMV0-*;HQh#dd>Id);Q1Z~7p#Z1uelH@X(G2_7hx9sH!nrXusQBJZ^ z*GM7;Mxg%DrXCc2iip6*2UEuOjotzxni(6H>Wy6*8Y&|I(4&pxyMDFkorB-ZA3wU6 zrDxdgzBQjT;dIK3^nYkiP5pT6!V_=IsYyKf)kV$Qs@mN2=f<3MHgCTq-CF!>fhJ^m z+>B8}H)$@dDIXX0An}Wbnuti(ku#rdi%qDSRk&o&__ALQ?6uezr#-){d*1Eq9RvFA zT|e`!&eHqeyd3#p`@tUnX#Y#-52?$xrz~$ZsN33+M%|6(Bf8Fee(^iYW!Y!H%tiHU zsqFQJ$@@esmCb>ySqS=>|06c-6HeV4L1hZiQ6m@xG@KyH00i|Vst7Fz!H5VW`PaWc z2*IWxn7i_aX^UIdc5jj9p8Zk9&+nwJtG)X;2)5sBGfD3g)GBn|5C5LU4RDK#zWF)% zh0p`N-~93I@XcSXIIFRi?awzBnMRzR_kya`*#UJC9pCz<jvZPuL3%b++kS222Op+S zy{LU{&!Xf_FJ9l&Y5f<A?H@V9C(K{e<ITnK5308vy`z$MmPYkTyuPCMtL+{vnSQeH z@H2`d9Vd+)cr)QP!^AzmibU~XB!eU|OrGZ)HTrLywN}8tW*xUSV}9~G*eOqDJJ@OL ztl6oC<dpd{Q>M)|Bu$$)Z@%5|;&elbW1eC5JcDJ_7{gqkl|CAcf2gOAuY%q=c`@aF zmiONk|JhlU<T*b}BzX_AQpkH+)^YNDBP*Re=Vkpyp0hm9x#aoW?4()Pk9Usou?+Ll zG9O0K`n{3fyeg)%Awcd2i<C2rMMm<{g5XC-lIbKzM+2Euo@gfTlgU?*%^EsR2|3X+ zZzJ#H@pqckg(#Ta@Dz0lCXECvDVY8t@Jv)NRo&s4t)OSu8x_oL9~fq=oN52xIrxs3 zGo13zi~HE8r(qn>n@`K>gmCRm>KkA-eNw=(o5nCl57IuFLl_A2Xhav_Msy!qjY-Df z1%m>EVHl=`qG`SSKFPEqStG2K34`ZA#pC^@q^2ZcoK6Vc8>Rz1r#`9P^f~jPqS~MC z6%z>0MUT}R_P?HxzxT%pew@^GL5!R!Ev@_t_OZ0IlygoFRZrmfs|L=cD&*vh@Czr@ zaZZ`I4=Pj_%Is=RI4mBNB#9G>IAL<Ak>mFmUMR%2{M9f{*v+{{H|JbjbFn?(n5o2E zpnWeN>Vy?meh95RW9TeSOK33Xw1uk2PhiJF(`c)3gB5CR!f%{#n!he{E(%Rf(^|uS z#p;Qia6mdqK2r)q&Vufu*~u?VEiC1PJvJw2usEZkvv}PYPiK*F!UbzmEhpUM6N{nE zc~1NNFP!2u=S)z0`_^&c=e&Kh(sB3YB1@<N=^uKJ#NH>tqN2y(URZ^4{;tgNhOl3p z6wEML`3_%Geq}54<p=oDckxXqa94^4S_3oHvn-ILQzd^^!HB9>45pX#gY*~8u=cCI zVz~-x9}sV}#P_t0qS%}yTA513f&kKEfTW6nCY9(27pFk6dw<qZN0gxI4Y^tQ+BaW= z-IR)*st|aO(ti%W4wYD{fx)uQIMT$P&_w(P3?tr#DY<9zcjb=p;$+C!S`0M31y?E# z^+Pl$=b*pLp3t43nb1rDIc1W58E^^MnXG(!E7MUiUWLng4fFUBYRRc^w-W8pMdj^> zlEmLtz=o8FyL>^2cy`b*sgU3j=d_3FIN0!D0vMxJs1km$2^UB`SdcbKKRE)XjvI=6 z2lm;n!nqo4f@b(LawaaT#O}*VM*v?8Fq!5yVV`i!DwK-TU}T!9&3qSH))xe~VHlwn zi}-so#{k&N2q-fh#j^Xsq#}Lk2tC+@kV~;R${Blrw}6$7!K;eDr*I6a@Ac*bNvbJt zSJLIMPzPvhu(#&~)z{DzHqWl}R+Gx;$U>1@ZpuewjphV<D8~tlLgQgujO^q_`!azd zS1l6R4a6{&m_#O6Bpl;}LzKLrc_g8+$_)=G{lJb4B6w*N3OGTt2lmf&RMKyMN{)!r zT5Q*bKvmNJ069XjSO|SO6%;6?9-M}LPj6|4IB*AK%_>faQR6}^(BJL8fC9Kg&ZV!w zG>q4Qi;_9CoWR1whpEL^0ax7qoN$EHbD!me5o+-zWD0zenxXyvs~tfEBN?;dZ^jI5 z$4tt9!jIU5{nZ7&_I4{|!&bEP8@$^wo|6hP^X(J3ngT#3#_^w3)@_W8{ACPxwe*{j z@tdTbk#V<HyYK)f$c76o{W$Y($1dwu=^^=BVpAOD_$ru4f!b=?ZOtmQ7XU~=x4*fy zTsvSv<x-(3zi`Hk8LKjn+Ph~~+q-ZDS9FkW2kF+Hv=-6<G^xz2b_meI+Zg$q_=W=a zHoFYx5Bs8&j<^|dd<U}ButE<H)NJVk#4gGhf*eYz4C?Ge=0_@#Ixfw(kRfiA5$528 z`m{{ggFK3J&H{dxY(Sm{9E}~vj%N{BqT_^D)p0^6tMHG=xbVx>ta3)2aDx-B*n~=L z)~_%rlf*f>Vw*F%Eb1xkvT*F)H8oI(skNCav`fE&8bZu{O!NOlYI|MDXfxl&lv!qP zBPckR4N>ldRZ%3B0cB+)sFtL%8H<^u)VURoFpeL3YbEdxzzCP-3Z%p@Iv~HYH`|I7 zZ50km`eTqSj8L+a7hq?HMX5a&J`*jBQN|_3!I~|hVelSiRh)_w_Hx2O%rQv%>t^Uu z4w`^e#PNkX^HZrWS3U(hWy*KYunMmlOxLX8QdFM>V_{i3VZ?2l`9jK5ba|-*Idfe~ zAZM;k^<}GLl?F#&-pttjU{&T?dlz?WP8b`S1}pow%<A;9z&^w&idd;k+Dk_2ld_Ra z*yaMFwF;AfRlNewRL&|~WM5#XvQt1P5IHAxWe0=MG?hSV5T;1pok+~fr#K*Jn)xXh zzD}}hB)uC-c+Gvaf{_r&l~U`bvR1eY<OmYiN#sUG4ostnC2@2`8O00@y5E<93^!(9 zMh!lo@*-r_&J0xBw`h>!!rKr^<}s&=XJj;257fT}RV6WilsmWO6XcZ~&47coCY|sk zOAzoOz6StZMO&P1%`lG$`Gz@5`mwNdLDLPECDcm#hlAuEQQ`pUFC#)mJS+Fg7rRN& z-1GIwmY#zf%N7(NlD@;>2HD~(2HyjapAimA`c0(Y!bY>8GFkiw(Lu<7Y8R&y7Zb`X z^vIs95^W~IepEI*n|zuRtdU5yDlzXaHXgyzxApWbfxdl0-)7ObH|bk4eM_frY4k0H zyb0+ZW}p(M(F}wi0B9R1+?=@>@~x0hp|QL*fsuePLgs12h9OnFOmeh_ChG!mi!dA7 z`H0P--74B}WGgQiEwl?S813Pxku3z0;mkuhXm4)|9i8`wjsWeO@lP`jKdiyFs|Twb zRTANV_(L5|cd|#m)XN6kDnS$HLlHO>^$D${4;hHy9^``)EJu0sQY3+*xauMDeJWf$ zuo;JX$4a8y*b{+K%q1YcH9*cdRd-a-Z>?nK8tEZFGxc~9A!v@NJa{6HM2TkaU^<H9 zl-|cqst48M2_aWN7U4efhkE(uk*{-5@34mk6W{||1POZ(eh-O@T6+g`ghi=Z^-wSi z42WryVR{zVXCmN{#T@c5Ou?|iJ?*m(%nuyJoG=G=2}E)9qqx|>uVJuc;Mr*gqUVqS zZ*oE<%a=;As0o||9w(0ORzGylDAhk<hy|T-=nMTD56#n|S?#m;S@V5Ie&fLxp)S!d z15hVQ|9lSBgt3r0aKb5^KzhRj`XcVYEcA31ha~+ZGK)_=vv|-QXK@Q=aho;YcI^Bw zX5odsa9aGa2S}L%VrF+7OQTVOEc_J-K=P`FoK(@MKH$fzL*$@dUNli{stqU}6NVsi z6-)Y)o=hcJ0A-KrFgVs`)LIWn`pqW7hqtI<jLOa}k-^e*s~}8s=KZO?A7i*68K7r5 z_FJgt%;!_CHD-1V)e(NA0rb)uwl0Vh0+4Ry(h+aV$|kl@!%+Ot^;v-E!fAUjtn@QT ziz%%MWvFrDZ(>G|p2#rtcY(y9&KY=!OJHFz)bsHEJy-<dA3d;2$Xle!(2ekLH+#|o z_@Vq@0HD1iG<<C^+8=Z<EnuOkgmuNsCH;$#PqouW)=G3zVwgRmbHoZ2!Y>w~j_jwn zuLZCXe(1n%3Pz^QypJME)fr##upql@Ye;6D(PkYc6s-}XU<T)Fk<C=0gf|jX<1<=V zh=sdJVJ#8=HlZ5l5M~oZd<V94U5&Pbfipi$2^0ma8s+PdyZ?h3lQ}^v@}zmWI3J%* zUkUVPO)B>LGA)4D$@n@6UTx-E4wcO;+F_tuxMEP%$kSLqpl2fPEP%$M0R$Rz;UR7Z z?H{sUrCBdy*4L1=DmLqq-JfpEw>pM_S4X!ZRjaOaKUmPF)Z%+kzybpfga#~9dq4!> zD(-$Vl2aP7W*aFO04M;Hta27GP18|RiN!TcRym34{vQ6CQG<&s#)UTvr@Z`7Px^dH zL!X;G?_YYJ54+Q+k3W4bxPvRwyoFk5PwdXAN@5fq)2)H0Bm+-L3${5E4IYHZxVnl+ zHydhe(~NRv)z$<Az3atdG?UzS(WWYoHAz-;kweWFOO>z7iH>`40P>Skr{)_-a4H6n z+GZ|Kjfu^EU2Ww9Bz9knpMR|L^+3pogqJ9P_!*2j@sMM)@`VYYuPkreIHgd~OofaY zmZ(LcFKRQbDDVYK=qwmpn`xGzGB-=fB^j-XJKGq5QdF?k7Q72VV?LmDxrnwmpg;6L z)`0U5r}Kvn?6a*-<wHUBpg+u8vB#;p4GF7Dpktp-WgnY3o1PSz{^Xfk1?9trY3~(O zUqNS_RAeq(l<C$AA*<ol?F*B^d{&TH^Z6x9IQ}Wg{tEm)v`+_xmXX<~;zNy!TQf=j zYacno!aS|Eq{~)-S3#|c<u7%Nd*xC>oFa4|C-}euLfI9u44Z8URa*gMx~(}{K-KkO z3~32=wIwvrO`voFPl1c9s0{B@o9``J8Y@7r5}uvBawdUOglKTayjijb!tX=7Px=UT zy8DfNG3pG~WeFv=F<)>euNn|4)_hrO0p8uO4>Iv84#oX&+|pRW(z|#jK8SOgw43tz zTDb#zi+20*wF-w4l4{O1!ZTOITdb^-VglVdn5nxD*5!&6s8g`g9u6%9NugainjBz^ zG=Z9}-`HCY9L}wP`Zm`mp{odVCxNY<3RcJK#yBA<vR<uk!mnK+T}-Hdm{C3s;#|uS zYVHvJjX=ik&$&kFBz;P6To+i>MF|wBplPL?1EC-$R-rD`1+~AkWWSItmoNJF6L@W7 z{lv%*-3!(61jh$$Ng-sEL4md$s9x<5Iwi1xAwz-F7a{GoXoeIxSs`1Y$jo<Kc0DWG ziY$mrDi&X<@vu|X6oY~YPT=z)GDxR`Ei@fl9|sPRZXW7Nmf2&tq(8P&EA60YBwWB3 z+oae~x}N}OiETAReCRp;rBDMCYbrrG0$fQvt43*Fq~?<Laf)*2-LVEn`mm#du$Kwf zaU;4e?}%DC-yMWRiHS1B`eTtfs6^Q5u?T8Xnhj7{>_8iSiVZ7e#Atq!euLbI9)ZjW zO#~a*D%7(4bUZu3^Fy{sMpl(|)b49@%B}n!wdq>AxwE6WDL?C4^rp^uCMgvPqC1L} zVu=>*yF!ue3%I1+WWtg|;@oaz;XzF+KxuSlwY^=|HOIHn=?@KdANcii<YFDaea}ja zTfs>OOx3U>+RTgSR4^Ots&uoTLj_IUH%R^g$d3crp|(1QgyQsA$%g>KRN}^JQbD?T zvb`FoJTP;=BP6TZ-i&j_$kHP_LpMUXI{=}ORSoM9s*Y5;n@c4)zRy12$uLEna#o4M zjp$(?l~wIf4>8!E9pYz?fejg?-B~QI>Pl^gc4)b;fC(3pwP8cgGTi}C1c^e-BYPkf zR!&5li;ly1s#mszJY0&(%7=zRO`oRV1#K~bXo*C^QTz`^)Hirge}4o;{Qx{Mat*x{ z0xU33DZ|YGwRNBBWCsPFJ}P@6)rEW;ffnn~PeTyB&*0874h6C);6j`Ym|Qf$P(VT= z%EcWhx|2|C-6GMyj-2^M>SQj-1~UW;Cv`OEYI%b*A4!1;?-zI6q7($nkF>dzRSo?T z9op0DOz71@7U~>&u{}%}K%Q@Lh8%-5VLP}B@wfpA6u(RVR8Nl<G<C3;Skon|@GI-G zhss%VsiU8yH}@bWwbi`G9$2J05<=<6-AU4)?uoWoVF+4MX<Ex6r)D#z>tx!jt;p)k zzdH1i{$7~3Jvm+tBGU052+J<^7M$WCB)U6lyoo<-&X+<X@yE!8-{X#e6f86ywYWyf zKm&o?Ff0O*|0#BwB(mnKb{4tDn>UGahm(wG=mOi34ooG$=)ydQJ1>SI<KN>5Kr?KB zTav88Z9Li6vt*|G+^Ob6c0X9XHp_;9(s!y~fi`n6WLP2%b{!|>!_!ggc~*rNO8Hz; z74|73lc~iOHzOUFcb7AjjD#{B1mZDdXnQ*o1xV6w?~a`pc>pyB00q!WM0E8y7z&%n z1;tvTd*A>3&vfrbc46aoXFezGj{l8z=n%p4BS7J;=&Li8NP0_m;!HT(j`H&^Hb6)t zy9GUXh~~vb@QPkKN#6o$dJo_|=Zu2pi*_gweX$e1>xb<W-lNLW-C!6!$yNr#Rj3nN z`~h;@bcXDHp*C{`L7r?p*{~(4zOKftI}$b69%L23^4_iE3M!PGqJT4(rBq^8{cEZc zYALM3F{}BQHZulwGGUlH4*MJkFIK)*<<Qui&#PHi^!>`NG)qP`$JS)f4eQ8R$&dID zhAa6xwKhv6^U&+7kq(03msRYK6ZTuoM;7<A7F<wr0*_N=rQKG(Ko{qnEUOhXm+wGr z)$j1DD2AGge#sd8Cd1?l+wj)7Be00aCyykyAY(A74Ef%?49t5mWANLJ^6+5PJu+kP zyN&YD_3R#;G1%28Zz<+=%NYDtqr7F9*CJ!^JDBHB^H$*M-o+F#Cs?V>N#+GwA#M(! zi<4|b<;92Ow1fHv>P>R*`5eGJ4^L{%#ST9}_V!Sjcp@msO9^&(@Y)M)RTmj*DnPXi zx2xZp^SwVplLAz(K&}QxRRuz^djUBamh|UC<@7{Q(w9Qg0_b5nBk2>nHKf16Do{Jp zoAEAW*zlOi2Kbamc`$&lOF5Tk@(gD)pSNi(<u+%?2VjI)YmPzcJv2uMi=~URxinF? zQLVEIM=Y*rwb|buF6CPlWqfV#l$$R08eiLdp-mKA0cSYVL6RtV6#W~}y^{6cOu zD_9DY^n6w{xlxkkJN!UX8vz*MR&sp4j?#@&^J=hy!E?rps}(Bf;ib@IvLd_bD4X{l z8hd4(=s|HZ=gJJ#kyG}S<Y|MA<&fRQOZr<~aIZcIRigpq8jAwt01&p=H<~&I%(&^1 z3?55IWA};lKoC+1HZbnsC9J+%(8ti#0(zJGX+R19TV|-JLb}NG^xyElj*ty~2j-C6 zTFK<Y(@r=8l&2GBF%)KJDnU0<cozyVPSOW=AwHx)&^y&GPA--ju<G5;a%L;`Le%$5 z@Wy5A!JYZD^ESZDN?<+xTB9*@8gw(@DPp-uw%p#<1`AHK2nTG)eDPe&<{S&+q0HTN z3-U2>f`K9U(xlF05W8p-KT&<8{^!WYwA2@fQ)*9SVQJ};{E-HmtLxZXuo2Z@unNEO zud8K_uAtEp+e6yNxdPJxK~h=)Cb|LvBmv^Qc0?`g4cU|KAWtpSfldfIexb+RQSY+@ zK@#mb9pjRUI7L1vNPEyKIrHQ*N{|#KHxUxO<=C-sj}r!Qp!l`p-%!gy0mmb{S_76G z5^FEwvbv)JuH(!P79IDTNClD=_(=N020Ay+e0I^rCo>B!sRR}=9*0zbq6N#7x^kW5 zOw)ZDM<$nadMA}EL&xY*U283t>KVp0GDQ3&2zVBr?TIt4B6RL?3NX5QKe!<WR=(%~ z!`PJ|+F##-;UD4)SL#pgwPMPBNh%^?9Iz|TZ}BI6U=Rpx=jcnofaXMP8{!mijp_Tp zNs>6Ip=q^SXLU|~z_|Ue^c<9~0^I9x6OR<rU>i{KKMs^Bjb(JwX^_vh8@Ll^IDW`^ z#?f57^N<|CsWFtH6LJe7@O*=$hP?`fzCFHF*m(^a8|pY{(aVx86F<BsN!wbH4SN(L zox$P(m^*P)7$+6lgc5cIW0msRY?+n#K7Ba;ip+5Zx^pzkZZ3|*jyj_t_!%~7e`(Xd zM*dWxfU7ypeT|M&yLQH^6{sm?9<{%)&ew6vn&)+pHaJu{K^F&nhR;{q6#KcFqgK-q zYnNkokrU!;q1|Y(a-Q|LMWZ0y*OTsq?oyic&#ZQA0R>qm72@wh^80}N-Y38J$nRb9 zTStCtoBF@;T$Qh@Sh#2xHQ7oyZEPI?@LCJvdUhDZBt$R_3KAoldr|FPB|=0~43&UI zpgZDU9q3^LLLf@z+eX3IQ3n+7(DP4?dxI#y>qQ!|rp}v0y|aaQ7;1^X)ivN_6X$#3 z6ZSjfYB?xjai;t@FjP=GwxL&3v<$|wJy_;x1x+l}-2>|$8ybvftU7B^fkE|d8@Jk1 zXH`RG+CSlG8CTZ<pRHE?Q6*<&c7IAEJwY=R<62TF;=cvaOdQ@4s}(^tx%~wc8)byc z&kv!z-H4)VHSq_wqtXHU#d%v$_<#zDY9vr}G||;joDd&3u1M1Rd3pgIzPi1f*@8h= z;#fC1k}MTe&sCxH-`!<DTT^D~l5YtpusBsiA@dQ}Kj7z<xaS#WMwHsFK)-qtH-u9Z zoANWFFjUVGxHUkIrK5wvs=WpBK8YOybYl~a+7tz>c5`&gSncKnpW!YW6C4YcUk71y zpv`<V#b036irqHQJhiM;!0`oPvE~CQzu^c%L8BR<+_wn@phn0Kpy^Q}zD&;8?VaPo z3#>vJ=44A$MrnoU&;qezO&MPyYpg##hPxSIMA)9jMz3-%&B8kL`4!mbf(EMd1OQCq zBN@kJP7n+->L_f*M<ItXog>~t>_Pl2gg9V>AFa{6QH=q#26igeoo&d!M$){|GuX2@ z*f1!J#Egu}hX|??TAzcgUBp`%epvjO=EckC>zDMEe4ylGnob~kjViQ;x-r}GTN05( zVO~4hlDS|7aV}PNy`Heshk8B7{Q=dZo~;5KQ_$jC{BbQRF&69bZ`3mOAWj&iZd4LZ zN{S2||A)-615NBEfiM1N5!0%8nG81EyQ@lcal^Zz$$M~<cjF`PE;fP9qchcSxP~*0 zuL4C^&>{PVDsmaer@<UGzy#He^70K<UX(dNPG;b$tN3)>3t1tJ$I)gYX|a5XRArI* zJu*p)O#R3t>3eXKcjF`PjVI~z_#`bd|Hmdt@|sT4BFj!B=vmO%xBCmWU~&J4*o5Xl zLBQFa&GG2t<A->ZbJX6^3NKypc$FUv;0B<sx(X`1xy-H-@7_n;DD)5o`U*TgiRl$Y zvJ2T5u#lxW1V))XnB()vr>gAD#8^_k8eiSv)DQhyEy`+_K%)=z0xVS=Pu=>o!bCih zB)aGbgZRlsGV)*gc{$g__Mm(2l#yj0AQ4?+7hsTR%DNWoSl0+2U?qhX=M*LUQ^UW& z8Miio^zVcF9R6U1vST(LhY?)7$+=u1(9>2tcv+#0%9e4+V6I@vpV(g*Zs3_t#?^FG z$OTm)D43jS531hDB<F@;RiZ%vHp2DRa%LNLkAAVCG9r1PBsp6y<#W<*b79Jz6_(KP z`#_C{#VraQ@9v@9G(l$3ZpycqcQ0(kh6CTq2cD=*MnBOH262F%oXg5r_-5uijtS2M z5+ef-4U*9TCp@DBwHnzv^7v%n<eqa!dagC81F?6a8K@_W4<t@8tOs?_QAXqe9)=}b zghEheP$%CW`s60^rcKy9jHLFoS{8~H)F)&H9H@~XpQ;rydtkbsZbfEG9M7$T9J#$k zx}O1aplNmn?v&eiA9*qe3^ecy<s9#pId-|9HXX&TU?V<bUC{=<w#`B{^yeC8a0jyZ z)(rY`4XbF<kF*<lG9OC;OJgO4kf~JsPEY5DFtiGjf~`WT!75zzoZnOSFaCot%33eZ z{{nyp?&igLU<9i%&ci*AhHwaXh-&&7js3u_F^60RZfUpRL1z0ZULiSJ0kM64Mcxnu zq7nnkaS+uG<g3o*q_Lp-p1c7(DVKxJ=osB^H=>xAD=5V@gm~1)ckE+>@pxRDh36CE z*T3S?e~gY3RuNis0*lV3(;NZpNpqtTMZghzD<Pe%R8<AqwL>k+kQq1?FrSWu>&K|= z?KmMu=iLyrXB>Xw{)eP{H5OHq9^?)^PwL3`#RSXT>Ra0R@>|+BWR2;Y%rzS01JLk2 zDn<im;Jbbi00_h1d+6v|r1~I$9*Ii&yq0n%eG%ZfeGJ(-J{LQG;Ev_*J#e%rQq8Ha zxl<3u{&D`^eMd`l6&i|E@t!gvTIt?KI|;-hBcDS$AybN`@vOn)#uMK-&J0#vdEG<V z#CLpCv`Qpwsn%TR(4d(%5tR4JU^!w^Zw)XQ6m4#+u$SGA14cz^GrL2ARg_v4SAl&S z`8rifWriez@uSVe6YvbFlB8>)x_0wnNq;Ix&fwYEWrm(9kjRzwp3HqDb7Xte^^gOK zJwRV}E>SwC23n#(Kh-XCks6lJZjqBiyV-k3Cdlkz+D(z#O`ObJw@@E`82TI(0uxI2 zS6UUvt>LAPJ1{YMWU%8H=X$2Y7E~wF)oQC^4=EEyDl;nAV!S~ZU#YaW=PNaK9cwNH zldsU-HctsUusbNP1wI1vlxldW@|we&^O-=4bB5Zja83nrw?qdlc?$|W;Kh}Aw<IcL zr=Nn+W^Kms;$o@tWYd+6(qYD&xv;Y#8{BBPU1PW6k!YODa!qFyirL6udqm_!nZ1{G zQ*-SmR%R|+*ap~8zYunXf>j)6)iTVDQ<R#^7Qp5g$Rpc04qL$(ic|a=7k=Ea4K^<0 zI<5_8Y7gbFEA7Gjb&Wj`gL2w#qifqn*S3wWZ5vtJ)IiQPUT1YJx~3$H(r)%ehCIUw zd}_BG_w5=YM_C;`$g=_N0K*yDoFS)0>Gb?InuG&Po$@EXcr-hOI+i~uiB}1Ks1jeg zhtE%uY=y((&im+~s4&MUwV7|hj%_huKwiZ!M7o+J4n5?Hh?M+*vXo*rk5u_00G43p zgk!8wDyoT_Lxjp%p``MgG`LVEIof(&Y_6_1e+N?^fZj|@JSIu#$L@OmcjQl>(%K4H z^)f>2+AKdAnkgHBTgbFo_v=F!ldFI=3NcEj>K9)HBgCkksuLs;=v0+q;uIbc*<7k; zcVWD_YH=GbX}@-}WrS`9>&)b4aSGt#SjGJtt(tKc(PVLJsJ6n=rv0$&Oj%-BeWeQ+ zRFWYf*)ML(B^_Ro*#_l2)=KUHwTiIZeGVx6S>SxYVkOXm1kK<|x=xjtb`&{UNDoq~ z@I+c}_yZOn&euwgZm<JqFJa|h@xsIbk%Rgo??&?ytu?pG1lxL@#mLu3Ld0#tOVnY6 z=M!MB@I$|Cg{Lhow>-c=jT`V=r24Q`y(g8PS9;Ddj8=?yxr>@zKa_;SD!7^(0O-_E zQH=)}O->>_mhjN4B)WDAr~ST;9${rkoYqo{y-O7fgJIn-Din+>UJZt}q#vjy@mP-D z{LnRiNce3qxNw!4oX;FULH0wD0y}oE#}^;^;yuSTJ`!s*!K;u8b!h4PqYirRI&9+0 zc>3Whwm1Um$sB*TVqpwS<BVM4ac^Xu;qbH=4SyTDa!Q)j+y3*TQ~@wAdpvG?oiDNd z!#Vz5#R9Y}#LJK)-mUy|J6}9YP8P}~y<JP9=d<A5sc@eV_jn5?(SkXo0FMv0HCdAp zqyI3bA2sa=1jVxeid$B5ergwSF?Q1l@ar*1{CI^xVyIR7eK`VAE!GiRy_R^c4vB>i zX&e>C&2r{@sm;0Y^PDTt7dN3$92!8*G8!S2*Y8N@wkQ->$DB|D@tYfMt^so{!!qhj zXRN|Lv)UejI&Z#?zt=kD2K;FG<H$6Kq5nNto_wv0@(Y^vNeF?rh9CN~gruA~jR-3w zXl>@l#BLngUa4T%9W52eB2<To-{7!SI3X5aC06(25e0%sf~+1W8vMWeR5z8x`Rf}< z4yGfZt2xBKpg9TEw%$XIweZh6985aYd;>Mbb9gohIyGNAWWh6#`5|VOTqPqe^HJa& z571MN$a5@NBo}@}?4|va=!f%{B?+38cL5^DK#9YmquHNS{Ryik71C;Piu_T6WuIDn z=Fh5UT_$rH4?VMaIxrlu^GGnb-LYG46R+qQe>vmvQ1>ITHNCi`Gn@hdX*;JD?-0N0 z*mG*yGiu(PO#nOxMd9lJxrY=fvzg;zHdDR#w<vUXwj%(yxAwrF9C<rJ_@TuQ0NB8c z5YFP-2cDQt@#6>NkUh+63zBFQ*YIHR?D6_IwS8qI#_Uvc^xmtAn-lN7L*<GIcKcw& zOhW+gW9Re@u^u<Xb|>la?px4-xU38vyA|-7hOZ0D2!W!vc<E}wbZV{P_ie8EYAgRh ztzDYwiShb87|W`x=Dn$7iI<f#@8-0_$~Z+C`Y)Sfov)6gCdYvy*A`4&upP%6IP=Mr zXRu7bRhbLzQCxwf;9Tu%(XITS!(@FmIt7ezNIZ3zYR0Y+YViOqI!=ntVRvHUiF(ca z(F;QLQ4$m$;&r6?n(}t}HRV#V=Z;BZ-*Rh^v%CDsVgtk%J%gfSnZGV`xSPc8YjPF1 z`<gZM@i~30g$Ef=(7X-FN+ao|-i~b?3M!m7NqBkAR4p9gugJBTD9%Y@4dY3qdlRcj zLZQuEP7+Fc9Dl{f-U}~yy&$Gt@`^&Plf5x36u<kOYJ5jX^j_B*IXVF~Rq!C^!#H~7 zda8D~Y1ySm%HE`9MYJrxahcm84ms>)q140t3Q=lSk$`<+zb#31_>`Q9ny5r8u0U7s z$leW>Sc>?_YpM#X$xS6T*EDsU&@0s45r&PX!$vh8Ry=<Y(NqK^l#xJ;Y7+c&&Ee0w z;uN9=FuF8Lva4b7vw`+k@%PmBR{XsHdvpGt(jI67%!srAjwHJyY{E|T0o$Nk5LaJf z8f+o8Bgi6bLT7Q&GW=ahGz`)N3!?<hwUfZ=kDzx^Q2l-q{om*)2i=HxewO7>KSi;c z>PJRFvmGkAkBMzy<`_hX;ZHEV{Q#R?NZaP~4vp}^Mxtr5(h0W;uTY*apSSztyj3u7 zM+=*i%oVEoTAXBdrhM<+nn<vwqaV9h<J9z!0V={X;*lqRHB!?1_{td)nj1W{HM-3M zh?`u}f1pB_FgdfPZa(ZsCZqma@3jw26$AWXLMc7m)nWKY8HP8}8wBzv@g9orzu+A= zv_Dx;wn4|<j`4k98-`i5o6fMAixeS_j#<^{oWltS*?22_n0B*rVwZi`EsUWeW7M0K z4Yuhc0YcHR1Hus+)IkEZD^uuY*}w4j*kEPhN3=^nr7;uglxcXEZeVqR%pR~p>2H;a z$$3?Ef!wa0AwUK%f(;@=Q>VH>Y1hy!CCO373B}feN|j?YO(^VO9V`7gQmD2{C5|d9 zU*U`HEwxoBEYx<4W?&3501V`~g_$$xpLc$E(+>W(X4K*J^3-A2p-mX;54@?sz&Y6p zn{%`X8|PnzxwS9|WL80Dt>ZWh*0B<A_%!Zs6_;@r*>%d#c?MK8f|dT-V2gh=mr+1m z+Qp8mTt+3<$crZX6G+FiX$$?}-)K-^ZT>pU3Wis!4)cOB&wzPhFs*3JufTi}^XbH- zV$7|=+*-$aYles;STkzzq2+OsRq27DOy!n`WV%h(5C2wK6~#>f#7QMy7!d$*e5Je* zkO+VvPgxHnFM#430K`|SaZky{$r=FUO98|*8scxl$Kqd$E3Sf`5kR0Xj@Dr=Y+Oq^ z46C*|n>$Vr@T5vj)=S_61hSCA2Vjxj7)%sC1&!ci^Nff4TZ{W!g?S?8ArP!0=2c)` zIp&qYya<F4e4}-kPi95|gkWy|SMb@2X9-<<fHm3JFZGE3lt5{WcGFSo7MbS{l<^~w z9i7sFt2xbI@U{Ec!V5U3j#CsPB>0M_0UADzDEi_{K+_zzb`>6~dx+<D96IW<n|r9G zn$S<9{cjKZZ^Zh}(ZGFR(*YIXSq}dy$i4%iI7e4;NE_wu_dNbYSTBcYjX$&rB+BuJ zG(s%KpDK=EZW-N$v4pR9V#7*6e-@*QC|i_EWn0>yI(OifBzX>n#g3P#YFC+Z5!+Fo z8Y_TR_zSwO`HQt|HKVi%N9;kY5Uq|&idWW@+Z0E*q+(l_Bi5wC;X+FtITGa5oMME! znpJ4+f!a;1g0HCJR@)TCHq(BqP(m1RWfX%kX)w1qfsF)#Y!!}(P7LI!4{G}>|F>B) z@mD$eD+&s9GinMX$sxa0$Q6|6DodI}zZlIp%)ip5$1%`nQvtm;$Ox-iT(g_p?$e1M z(L}JgiY5%=a+(Mem(YY!bdW@VIG1Kbi!adxCr+Y?c=0)!ND!?wktjyf#4K?TO+<=) zXd+qcN)u^f``z`o3Pl}FXJcAP)2LU8wFM+i9J*Hv>MtFN6*P^4S3FMBD0#(Vn#SW8 zaXU?uyPg|qx|rzmG>vXwaWzesV|pb`<FTBWPSY5EC)#Pc3e&S_8jmT($ux~e6k<G0 zt1)e%Y2v_)q-k`6iM?nVU1Xx6puw@(vY^2usitZ4X^QvrNg741Se0Mz*c312*E=-D z^8AK7iD*g>Yk;#K;K`9Qa>lL_e;_SJs3E6_=H$>E9pvnwId9hYL~ur69>JMlsQ3x3 zIGr{HGePqX%^5>;!XPJ`=CCx!2suk=PG6c62|0F}6GC&MA?Ib96Oiw@tZLRI(ww?o z4a@V~=Lc$hLKuqf^q+^JSbk{;LrIT9cSXH(E9<C3#b!5m@1n6OM9kNRrns?K3&r9O z<=)to98<pg=lZ$C3FUEFC5~ns{W<C|K=IQ!z1BFr7FejVWc#_r`iagg|MQ9d^K|2Q znIkq~x0SDx9Kq}gg;gqKv*lK4H_WaVaeiKLhc?L%#C*Gtm9LaJF5%FM*ld3oSerEi zSPSVYz>;lgF0roYc=zgkGDbXo%CoS_xlPruN4{S`<V9zc>MduiS|J;(^mp{4JRb5K ze|SW-qa(6^EiDi9$bcK1DZj8?K7LqW6;zVj2XTUoGeeC@<TDFq5W5Z=Bz2h7Ifg<q z7?Z({KBz#USUHGt*sBlx)7!qCSL*zM0?EzeYyCeV5M)L%r!C>k1$6XM3kDXBYi#Cm zt~uzpn*uV(!Ew&Tpr)!Go<vv2Ud|b-wg{SycjVN-F`bDMsw~1?n^5UmD6^OkIELC> zap<_7)*gdGityOs<$E#)>}9ocXc~rE4wUr4_hnG1nGLUeZJI@EIb?BaFrLn0KBUd; zCc_)32eg?XBym`qg>l1zW0v_AYB#ZrkgTkkl4cR&65@n??T!kE@G>9&n;O-3gW{B= zuevK^Y)KUs^F?i@FS=NEoIT4hOJ;F-RW$ze4V$@Q;lvSmCyE0B40`v%0i27~!nQ2* zudfAaSw)rj`6(Fyy8_*>K)Ls{nRs2f$hWi<eUxJFGxWXyEHKdG48w>#w*sT!uqLvL zIAIUQY2(q4xVi?<)5)}ngcS~v*m`owQPK~-OZG``6XFsrcw}>m+!qXoY@wWUjjFOl z^>C=fd)ts6Dp4p{gz3pJ7OWHX@>qCJZ29Ou;VFI#EuQB{4keJ`IP*SxD1Zp3Ae7Oa zBiklMYw2Ml%;1y_Y-Axe(KA&RCsOJO;&;`-Y^q>&^ix3da5DQiAx_Pi4vJ~y)+Hd0 z0Ei<1;<%>kyhh%X$Ly;_ydq8Pt7sY~DozG1L&yxxAxrxtbe-p_VYCI>MH2UQW+)0h z;=hLUDpC=nM1_;of!*hUB!RV+;IX#i8(CZR*DVtp!nqpJGZLwTew3skMh<DaBmF!H z5bogJjtM}#_L0C=hI_wJa-qqGNscu7Fv(s*i@d0A_&~{m=J<UQo8qYF^CSiCK(5hO zM*jY{NwTpS^4!L>n~1avbUP&;Xg2|9HxX!e*fB5d23rJu?F~7zQ%=4W5+|ItIpcH| zCt}V`=Qx1qX^U%~WHFy|jIy~@{|c5fvBE(T{{XCbQ9Y)vs{u?cvIoWrCoIn1UqX-W zc9MQrEmF1q!y8_zK5234oi{N0dx{QlDH&*a$pBU;0c(T}KNuYuY4^7(_L>hnZtx`% zD-?tmu;F`IbHQSNi;I(4oN>u+AB#}zjD?mbwV9LgqiyC>+RQPKh&7+kW~F0}@CA~B zP-8J)cKC9F0*F9a^RHEe^a=rS+a0Z+Iq(QpaYE9URU?0>wU{Ms<`4{@-sYuvb|-QQ zb_cSAC6lNd#adIt@wM_48}N&#byoAig?+rdLP0#%z$BI&t7j6?To!cuyQ~qDP@k&5 zROD-M8cEnLR?0^P2ODD(Vs(Tez;rE*_BjmZNxq?#IRZK0IEDm;Bf|!QixmzNmrOgT zgx?rQs$$Jm+RRR*&v6W^-TIq<s#(ZFO_DX|Q%(pq-ois$XiteKHjVbf3P(K@e&CLb zsXRj(RV_*MdXlQi7K{dR97wjH=VM#&`ccmo;31E>+}^QBL6#pR`kj>MR}jjrX73IZ z>Tr^7g%vZ)?eppv1QWqa;Djkj`ls&D9k4%57Xs69lDh?mJTdV`bAcnEep}oc@2bdR zU^^wf`xfC?t`WdLBY=Ny+k_|VqdaflZbAlDd61k0*4Tv07IO{WPy#ecZfS8k)WQx# zuPn*o1DQe^aMVL$z8~%}-aaQMdaFo?{^B$QBRW=xAibOcE}IN2_HYA>Jxji~RfR0J z1i=m)U=#A$MqF6Z$KFQNEC%FPqB!*x?p5ljJfx_(<V7%-tQavn5zi>S(yKq`nh4-H z4bp2{gY>!xY`jqXtqcKkkpKpra$P-u(TT~&z2Vr6pc1FVqj{z2jGK>3Dxe?VIA4W= zYl_k{YXBCq<S@KeMW_8HY_c;}3HqGUB)R)gV8IT6ZCHpPK@oBg4=xSjDK((qVkoFE z<>RM_EVW+Pgoz!0mLzv4+S)S~wuUXTQHtn>z^uii`CBM}4vE)(!khgU?V33AeY+aZ z=g&Y6UK@xDMv?UU4I+|2hXH;l06%n1H#8PWO=MDXy-bR?3a43+NyWbsnUv>|N%<a` z6ptGajgcQvxRJ^vBMGb}XB*_6U|78@1NlV6)2O>dJk9cmr$mo<B6mrw!X%wlNDZc8 zM)W=dsH@$?;Rm1Oy(MA4Zyds+V#(ctehh5$?{e}nFzrnl^XR>YIib4o6Y8BQAaF$+ zemCld*ncx|bpUsY3aN0*8EqDc{B>!9f-r<W>xRtZTh(T+B%VF}l@^|lb3|3i7*dc* zsHa%0Af%<=LMj~MoT|6n*hh1$2gL=ncxioc8Y#Ycoffa5#WD58(@60#PcgrV+|7sl ziEjE)kWT0>Y))!R`fohdCT}9{mfldutpn*7>ZbSZRPEd-i9*_AV-Q|RHuHJ=RBZ9o zCK61pa1$@G*mo0kD`i#NpT<!JOD8#c<zr<ivI3R_Cz5M;gy*oX(RVO@LOPCQR1Fv* zbNFbtUemjuf?nUpXfE?%dq45i&-9=rOe*uxTn8v$>?v;{ZuXR`$@w(>c*Q6v6+iV9 z0Bs(O6ZTs1LJZXKeqt^e;}Gd*B<N}SRB~pXRgz}l>*Px`e4WD4N>J5afPIJ%R8{bF zYOdg07xDW3KSiz3QsRjrSVS)7RJPq(e+CrI53Ttf1!vM}2X6BBg@8Dll?i->(mmcA zvGwL@dRlJa^8ztic1bJTGy{p#!8_u<NEzh_q;$0AE!xfP6IlMD@(Dp$tTze^@fqXj zGp=S+EWJ~SII{c?8N#*#whM0xCB)J=%0wix1aXHy4P}q#_(h@djGg6*07{G}7>c7` zCUIdTJPnLg<y6w}I)e>$NE=Kf0k3H#no7i1pf7i4By=(Xr)mxY(B*mM^MTY<b=X`` zJ$HrN+$<F3j8|EO*F8{Jr1}^#{qSOz>ODx&t3#@fO6ah&ApO24oh<3!xdyydrG$3$ zb4df;K(Qr~J_Yh&2VU3W4ora;e&{*qjB)tWdd=MEE*=5}Tm8JZx4L1Qj6K<&dw_p& zw;q;FSs_;(D_n>ZL~-XSj1RtMSH?LVpe|QCdWzo{|0(`lDj}?nV=60U<kKkjK$gER zUvvO|L*LlTuIPjNYBWh!*HjtnMUl3IuA;S@4iYc2*iVJr6tdhctQ1YK3{VYJ4mA=> z^onr2SHDyEiEMCm`h(sM6@N(X_JL%$!-tl`@Y?J#XbJN7W%NrSI1TMvPt&<M!l1U% zu4cERGu0iLZcejn(#;8&qb654+3oo4Tnr?=uX6-rZAS~NrGi=xn8hnHke>25VHM8N zbQCCut+@@#D^52S<~y9N&R5#~qP05@@|8w+Tec=&0X6NtT(O^F=8!fE6?~<EFDPNn zrKzp>Lu%Gsm(tmxH1A)~o<F2Sk6~L*IuKpGPwi*}Z&q#WIS{oIS?%}t6?L9%czXvL zw@^pv2!UUjW3aG~uaMi-8L0H7FN7^~bT>a(&_%qn4_&Z$$bt3jD*mwK)<mz^7b>qV zZzt89S3Dq~wmPR^1-V^bbDltx3a)66;1Y`59qLgcIua^Sx{dbGE%o`u(~obw5(eVU zXcb;3AK&mgx{+6z@?(W!o3NYs@q{B$s()U<$WcJ<WxM3)p(_zbKk(e-dn7JY?0Le& zW6&el*aO#<Nq@56&BI2hd=*q(_tnR6h7tC}lAyh<N&xphOK3MBt#_`-FaSb@a@L;? z`#lK;LaozODlV<`UNVdxH)ec;$K1=K&>|C5+xL2{Fr!WQ88wDjp%Y#^1U_HmT+9$l zOt@mf@9j=eoA+xogUH3salw+lxDxFx`sE~kaj;CA^*%$(Sp4GR*Ph~ZPqE{*qFDL` zBL2Q)Ph^GrU~IhkHTg!!;f6C1&Rncr{w~#L{OUEyIe&Hz^3Qz@`aP<VLp*BaNK_D) z0JXc)WbO}Qg;G%YJjTr7Mz+l4O4Qu&+-*Mjpkw7AJgNPoq+SDUR>Yu!i%KYoxqu-~ z+meci0*Z$xlm3HpITp->(nq@|3g`n7tssfTeZbG9#F=aCVEp8H{pI*$L?Bzx$|y7) zCHklxo9@3XV@SKVNrXssr4x0wsKtz<S3}cA&4`8O(MR9BjH|*g)J))#PEo%5pMQJ4 ziBM!8_QVe8w284bl8#N|g*&as*qs`}WF$M-8*w_P43*=IDBKyaR-~`7Ydmi;qH?Py z!9vrydPn-yNgkcH@wJFVE~!qqLJm@_LYY`|1ax`V3o<t29wNy?;=PXc&<>E!tCgP- zdz#!?E_kR04t7XfcHiR^LbWA2`zIpqqO-S$;$H2`48{BFjKwuv<_^N#Y?|vNxx#+J zGMr;!Cp>~uU|W*o99BuDMa3=%J9>z7;u^Vo*(ws`F6Afj_58%$R=XK0cG>%cQy%0s ziNI$XMeCQA&Om(uc}8L$-aFTB{$+-_*x_#~nIRNZ;sISA?gHec1_71!*^P<}lqtCx zT?*av>UXVx1RDYBdvGtNCAm}KoxTxrz&hIRT?w^6#bYx15p0K_P=FIjbE{^+a?&C} zEwMLmyfTul-JGx8e4tAK9#T<VXO71#0T2?aLyUrX(9qS?7f~mP=eJVH8I1FZr^kwi z#k<HZu^3g~r5?zp@f9)}0I?KZCfZHP$V!ohC(QCFT#4SO_oB)R4E>x|yjM046t0tN zD+Lb_Ck~SDUqW{sqqDyuVao{k3<`L>R={jUt<h}|SLAzer-<q4sg_QwWl+Z}tP2#f zX!`lpm81|bgC&6R-X}rfj&~Fl-fM{%$t#R*Nq1$?O`M80vmag(sFi6q(FS&ncGJpG zB<q3-bwI%rEH6&@#-q9INq)f-a~pC7l_;%?-G!G%6nud}C~*6NLOb`NC(x~FoXE|F zI1zG=`5u^M{5@$gp11~~4vF_=IN=o9DU&bB{#HDQ)b%&0DRuqiBL02~zmIx8sT^d{ z>^qIV6%KtXG03BVy~N{(fH6vla2|q`XsUpS#an8oqo@iV`whh!r?s4?(Pv&2n}owe zPipFG#l4{)DA2Pxo?E4&c4GasNW7XN0sFKM;A;czUHRHpc0FI)*{<Vj<L#ZcsG^y4 z@n`g?Y?;9Lri<%IvKb~ntN%RmBjbrN6aTCJrhEJQKe@bfVc<IefI~~QeF=P1RrYXR z+dxWNUQwb&L<&}|*3oL!X^m)7T6mFEsvuNhpjs#5UmOt<DZ?U|MhTA~Dk6*<^Zy)m z+(!h8xU>}7vKLfjaRJxV$Oz6@3M%hA%Y82|X;@}{-^cG)lDy^IbI(2Z+;i{QW=C#~ z!5f|wUa@9B<11Vy_TuI}H=5yEgHO{B-eDBSx3Ag%^c5m7%LX$u%L32FU<Nllkg7H| z$*UUahAEzW_MqWkQRZ7r8tE?uEv7yVRrHkov|aXLX6?mkVh{cEKFQK-JqKQpU~?eD zCuS<Pc7rd?*6w&Y+8us(e2LFzU=AXH(7Q|>Y%9n7NU?zQeR0w0=kH787f!iPN>4gU zs7k}#2&PqjnwVCwB&F^%&JN<nA7l~dZ8B21Q|9UYXvDL-!p<z*hsJUqiB#uKWI;vf zIh!<l5Qw0`=Irdj;cJFss+V@RnweJ?R=Uv%;m5o-(z^WTFK|as$wo!WhdAh)lgtOu z9@E!g!3nRUkN*tK{v+_X*OBAPFeRop<%*4uPj=gYa0k8=giG*KS0#ncgG$35jJWy< zbf*O`(IF{(!3EPXEN#XRlRpfs2ZMkMuah4^DVN&dXblZco7t|mQ3@0#b%)|;n|c@8 zpVb|jeb$%E8&wo2Rg(d`_X>dEXq`DkZ7bOBXnWw=aN2cB%?^*+?5Sy`gzW$#oT)@W zSI{H}U8%_^+Tjg>Oe~cW9ou8Sx&Pz4^glkHlC(BXlA&7L_96Fuuc(J!lKl4tTBVTn zJ-igQ-t-L$9P7RCs~$H>-jMZfzH<fN`6JzN(w*D*&KZ1X4Bk1N-x<w!I=`knH{zXM ze5V4wd&1}Sgb(yp|JCHLb0(epc)lPJA)^C(OLpLww8`Iq)U_)$O-gEm3zUU*HgBlh zVouKypUGBau!V_S7IwC|0-aY)z1S1Z`gA@hV>PWVSV7XqPQfLAQOE<I?$qttm#%pY zO@W3D@b~wo%Nv>o;eGfk$NN*vRW?%jADfd>kNYo${&gJ>k-Zp{7CZ{fip$z6uadmb z@k`|Xv&sL;(d6q7dN56zR<CM-oBr?P%XDC*MPl8K*!&qKa(z(j!a_yu2`vOV(`TF& z=<G48N1!tcc8Q(2{tV5&1RDu;i|&Od%8L$o%N!AZ&-!#r%4|-qF%HA!CW^U_8Nn)D z?_NOkkHWM2<lsNZdGkgF1DEpUx<AwXp73LUKU1?`3HRW8uK$nv#dOV{%P%PEwdBv< z3x9^g=)Z<n3tE)zouHu%PEj1&<v=58tFz8lTghLF!muz_v<3d!C2wf(G4zn8*8LBO zFKn{)mW2u^$L5=#Q+u#knMT-M3qX(}GE!tLQe-qx#CH>66Zri2*i897U@{PfB_<zE zh|eNK0od5eL}eie1jPWMN`uC6{NhnRB`p_bNqAU}qONs^#vFvd2>k7Xzg_Ux27j&a z*WeBftEcs&l@4uOp)s(_JZ%rnBpV3`&_7E!8clw(iPpyI_y#$LRDEGC`UTbV)=;(X zTxkS5=fWLt;OaqQ9UMt<0>Osb3gN$|W*nElia$fTr$+Zuj3e$Z$ML(pI0;{5IRB&* z(D~F7Zp4q!f#cJ8mARCH15t~yxN{UU_aU4~_VA4opIEK7S}YBky#xBbnN=ornhld2 z=5dU!I^3p#pc$Wy*6xp%aE6=UUjMf|i&}=*SQyP<K|9W9kFB$@e`_uA3o?ki0UCBw zYJYTuWQni6(;e;@wRa}NZKL+ijZ2c$-Z8CzVQci5L@6mkQpZ}!XN~k<5+699_<Ub2 z{`nuDO!_?g45p*1*-f*bvs+5=$iwxs{mdnXzYIX$4Vc8}j|U>li1A@@I{H$&KLbW@ z&N{q=8S|db<3Pk)Y^$-3lQ-DtOI6gqc#u1v3@o^JY_RAjxgk80h5xEWqAY7~D=s1S z^_Vj-B%V}LU8`B{Z^H6Ec)p=k=6lq>>Y_Y$NvD%-PuRL3pO0IeioW5PEt)D6$`Zaz z8xJoPM?shO5tOZKf@aUzgHwMIzk`=Jgb3J6v!A^Ot>Sb{--OIbhNMt`qv!GT&04W5 zMN|`*eq9`i6G|Dtp8BX}e`GgJ*{g-)9vdZKir`KO`7-kT_4q(-AMpU_U%MsBu2tv> zJ=JD}z!i5@2`K;Bq;7ODZCP&2>T0^O2L}a<gt_W5{TS?x-a}I&?!_=h7X$qxuh5nG zdDU15O24?6E-s>XS7VTuW=H>;LHJdE_yY@PLRdw80bnqoBU4i>dTT_`yFZcWp~rMf zoMx{?7aiO}S|rYeRxJjLMiSp7ilj+m2<bKb#9ATNKw^D%ql5v)ds6sBAK&wkX*Tva z`9kpCepscXx9{9V@(Kj@X`0>fNy3%^Bot8%B-Cg;uAH+D$(pEu)=RLRF<on+(rYm( zQg4mFZ_el8w_PrjT9?`y`O8YO7Xd=@6Q;Td#9uv_w^lu=hioOn3#^{Y0&R~!gPIiH zk7|gv$*QDP=3q~|=+GwqG+?0M_uZhst1~4E^+NJ;3pCoaN?Ton?;_d?YxcuCk*344 z`H@g}YA-vEM;WQEJPQw%%)xe`)1j0^>5KUJjP(CUbd-P?w<&=KaxK1FsVTTO9JgmJ z9k5HW-|`_V<wZ*P5quo2a&Wul;kiP))9m9uLe3kSYY|h)XQ*1Sr{b>1%Tqxqe-EA1 z`7uhn(5X8c=o8C7)MfoeEsOH#f>N*=PdqGcH3I$f+YK@q=D|wT|3V8Hp%CUe4WaQ1 z-2&;{olgnMIAupM3B#feRNf|d;b{-hXAQ!H@h?;Nk?TW!Dkvw>(Te)WLOK)sC^o3Y zFsRpv8+@#8zMEeMQhjKrT>d#_y-~tbbLjYl(zJdYxo<G6eod5*6&0QdiQN$VI-2xV zqvsXa^WC6_3Q|_O{xE(_e3xrat;^4oAlG~SLDF7N6TaAS{c=LD$KjYvQo?t4D!~K3 zZXOJAOvR3&D&tnSM5YYF^;R_~qrVQ2w93M|2D$tgyoueNgru3mq*2tJk@jnVE-mE7 z=24&5Qw4B84SC=OO>vKAf9*pdk_<oS1c9QuD&wY!N~MHimvnhhg35u<zK~8IBmf!t z^W!Ky92Wl%W+4E&L3{P%F?U&0{ME)t_qRCTW(FV6ym<hRXG}%O65I1zBNxBU-r2LK zxiIrO1qkHOHCOiRT9?J2r>Jz(-%IF|jer6@{cqYt3%TXyhjM5_l?=x8`IOa!ulpkO zE6IUCB0f*QCh%E(gwneRl!C7bl<MiS|1!jiAMy7!$Hxf##M_4wP}JWru<T`EDc<-d z0a1g#ksS&xTOXq5P^fPb)h*fnUKF3(&Br(>5=(B(nPQFDUq$X5nxhn~R~*fXTzU}Y zqir&5x*o7$n$#8>8O4=w=DlvmA-B36p4o{-D*_ueJc8^e_M`HuRBwsoABX{GywSnD zhAy>DsaXpvR)2VT%IPk3ZPX5r@u9k0x+A*Z1@haa9xubKsXy9z|7bHEayiXD{+L5e zv-jCThkZblvd|boJ39OulVrs8{4SWdiB9jVJzkC_Zo(2S(@+v)y|r`_BQZ4;W^vV= zZT&&P0Xmea+mN7qmiESGiO#nbbr)K`z7}haO|#G3OkTa{pD^b;EX0d?EFIlq{ggFa z%MAcmbMA4LPcuMmL#qRN!Oh6aH#7i8K)Amiwng2#ne3FK#r_KONKszb$N-J4m4t== z_83@?ZgXMS$-$-)Sl=520kMY-+6SBXoLQkV0b3F6$S>a;t%yy+(oHPK=M()%|Jlqt zv^P^|hlYfvBqv?Z+pv1k?vnemXO$Ld+@GK(&&A!jV@kFhevo6H6*W_i{I9BMaB=1s z3g%EVOCk&5iq?$03fE_>*R!KW8WuqFEvY;mhfxx`tjH^Laj@9O`SOZe24`FJ!y^5# zOl%hC!)DP1dq>T_9;mXp%T*k2V|{P5wO<g6AAtQidFsaa>*W^>{z6sLt+rR7SJsyp zoKOdf5Ej3b>(DcixA0ST6?M2ng`^vCh6H!$GSG*KlVD(bM3i<-YyT&vto{XWgIe)t z5V!50(sZO{?%lizDXccb<T{4uN53=XYeS&(5+Cft$NGVa$Iy%Y2&^Mp%;!m<Y-;cK zMBb3gj$qpV0<3yze-j2eoSEa;H2F?P>*N~8)+ysLZEx5!wy;87rxbh`xg^5d1FSBn z*;@t5a%d}izDzyLx-=}wlDx_~34VG*uq^U^W}8ybs%$@^gk4sJb_(}jEz}#)9pI>1 z`h1%?P37$Za@;o?NaIG5v&)}Sa7Zk>+i*?Y?>w1>A@w`M!qEAxVPQCcUt>M$*u*`m zJxgTD{vC9Yo`hx39V)lTWxLg;_Ukd4Eft`)S0zT4I5~4NZbq=Qi8wpQG{-O}Dpl*| zO(~X_Bsqxrr04{8%_b^{aLp1rI<+3AqtmN4rBE&ftaY{p)BXSShH`j&Judyq;r)v2 zT#p`aa|hGIy%0h{lUJONWq3oGIVh^V!43X{0Q0XM^w>`u2`0b`_j?F09S`hf40hv2 z1{)u5ngsp;hX23t{A#R#od|D#Dczs9k#_b?KjR_O+8DeZ052PJD(UcU+)B^ij_@jR zL$?e8P&t%Q*oO|(Hv5)^hrmXtO$ld(wxO0^u!+QGsyFm|fKl-?!MMbLG1h=Fa3i}N z_H)(e6Wbz;o8Ljx&UYJ4FtQH)8)0M}-4LVO)_<RXZbw|y=8g?SH)B2~&?|K1YVrxY z@|_I;CV<(0lmR8WPO?OHzDGF}t=Gb}Xm|K><pv|iM|_IxlkwLN8xr_yFG1?}!xO|` zf1^HGM{PJ2{>tYLUAE!G{N-Ypr<v$<{)y<c-AT`X-+GGt)%Y)Zel0w|x>pkZn#1s3 zZYBQu<zFY`uS2xzSs!fGdBf?{dE@@pB>d&xg8a3q)y!W9ej*q*7%+alPKQz2nuNc8 zUPb<mW*AwI5{#^~T4Qwk(@!U$+tTZJ9=Du?zjn6}f9+`@{(5CC@Ynron7_ug2>!ac z<-g>w%+>_{`h_6%Tl6^bS2@$={+3hWuhwhXPSkQ@{@Q<t9=p6HMyKXOC!o`P47Nwh zDe~8C4FAh!7|Y&C_-g>e+t^I}6+Lt^{(5u+%fn`!H}(zEd1G;N68<`}5&7%xW;1_< z4-$+&88DtUVBFrEguk9xf&6uW8AjG+1S9L}<`~_29y|fvN(S*fZaxWr9a&HOb#y)P z*WC@kUuUdl{+hL3@Rxu6f5~4LHz)8{-)7>kyhn+@zWI@GT)h5N_-n#7^zeP_Pt0F) z80JmuV|4QVcmg{0Vz3vjKSlnM7=8*ozdAb!e>FN-9<C$)+WX_l`0KJ3mWS(f-k9ys zd1K|eB>Xk475OV;oteLW_fLYcz<_a$0pr1SN%-r^<;Y(xO=kYuet`Jv)^#zuy?)>X zblZJ3&*OC`;jcdHh`-JvdSn&65B#-qCG*#_O@hCkXgUsmne7{V>==LQmYn~5d6);Z ziCOPQi(tK7)JVUj3yAgp!X$gViCJ%}M#bH`_O%)NdZ2{oZ<Ed=$K?;T-)#gx>mq`m zHJIU_0QRE{dtlS4@E@L-S+%v~!ft7zhK{@o6un~wQ*_;0LD4m94T_r5&Ly5VaIGsU z43ds#4mEo?7(gON*!}t$yk`Hk0a<054e$-^1s&NjHZND6Pq|Ii3OX^%V`nn>!f)(| zy)jz6ktaWbg<8<-d|&|pKyQF>Z)m<8peWf&ICDEF|C;^x@M?6jQbRfKM`GmICfsY_ zW8t&i^r)J)TM4BoYT0h+O{opPK#xkZy#d%NTYMR)@8@gw^BRzW1$eca5`x#%A$ZOR z@2Nww@k=&YbVrj-AinC9UU156&qaS7JdZ%{Kj^H&T&GtvJcy(W?(nA<?Il)>4p7vM zntkO55>@ymQ&#N2?YcdbH?5rf>&R_|c>^;GZqX`>G0EU2%{~F%4r<e~$+2Pt{3vQ5 zXHevY1f!deeD<ovNZdi69Gr`(D$#thL>SPjuw57BYl_8P7`6a(KC<YR9FC`{M^l@+ zh{JyoJtvHA7UA^4`-l_zG{TR!;D>PQV5*Q4pEypy*aq~)CjVDF(O~jXutQD-W{qn{ zdA9?rV}B0UbEA1gK>z!KfT9C28ve4&L_-P$B9E6u8s@!EG(^|GN|FymEBLE|zp)<m zW(!^@#{UXE6#cEopyYa8t1;`J=ssHkwz#yLp#M&JX|via99+qnz7U=0G1w<&e|4hp zLYs-ARp%tyixTeVcDZlZ6WHrVQSWlP)m>OoF?hf?mhe?nzXh|kpq*T^U;iGGYLkNX z->-%5Zgn#y$h`bLG%;?YB9dEh6;Ov1vVok;ATi-fo;SjCjV~D%r>_283HaxCv4;uU z&a^_b-shu*lnwa(HT$x6DUTxIGPp9%YtCpf(IHB&7BAYXN<vTb{pzmwF}4O~FpzW3 z4}4ZXtq_QGh`8^2Mcpmet)aQxs)TB@Tbwo)XPed_vSSK~cn;0})f$OdZkfKO!qmZ2 z6;X>&8|}n%5Gs$h3nt2)7`S#jn$5H3L?oJlwT5L|=`xQo+6cppM5rP@t=T70lg2wL zox*&~?}BWD$yb@9Hi0bTQ<$g8n2x6`I4j1E6F%s%6tC0BTM&k&Fm71Vu^BY^h>=ke zoYsut=~{<HkKb^^T&Cm3T$k!Bt^ncdQF~RWPMb?!bvlIrYc~~>H={n#x?iIQFbVF! zL}w|UunUcTw|*xPcWYhdhCV-psZHIznzPy-Wt$2eqlRz%8LMnrSRi6vdl<{%@8DPt zo4|C26=njd7Wu)3+HrVRI)RU(FjNhtDKo%ht4UcR=K`2!YgS8~>zjUi(Y1i=;7xEH zLr{VZav3_I%LGufk6A4VtG?M>hWt9|gz_QYzrbCKb-O?j$WAo4qUc5!MqHEloKzye z1Mb#!>d3spz){V26=pN?kZi*)gCMQV4^RZr0K9{bQFSl4S8O)#rjo-`SC@qU&-hiI z06*uc;uouHI*E+Th~yzRF{uAc!c&j*6}5=JB6Rb}BQ(UG=tT!YX!HnS4i?5dPphnk zL7saX8X-pJ<pK6`-AFp;9A1m{HSwW*!gNxZ`dNs*@iBg8ptq#J*AI`nJ;I|Ue6yt4 z|GG+|SY~px$M9;csVu}lL4EH-%w487U?6eFN){o7_#A+g>rk)4RRS<tK<0MczJ&$_ z&7MWDaWR9YbITmu?94M5392@P)!yu{0pKW>f<a2>i2|$8gIe+gFh4ncCAqNtQ8e)G zO7^G8MXW*9%P05k8M9-cC>y_|E!4ensx<plc&P-)>bt_+qE6r{Z6T@;YG?F!qLI<? ze7zM$y8V!a>8yh;B+wMY(uo#{*ND_qpLZmxI-r+KUV&}{dpVv6$RO9v6$S^*{{9NY zo{2(qMj}577fX25kg{kRoK+<-d2a<<km5)(i7v(ybmR&?LU-bF{NxHVk$7mCPA>_H z_;t9#R&(A8v@L^3XZ~hh?8>dj_Xk(h`+(acW%8;oUGLD83}OMX5T*RwAdE%VYWCjL z@D|b(Y%6d9*yK?gF!TgO_D5(;qD8GZ=J{QQi-Yd`T^`&aFKtNT0uJk~UYntk)Jv1X zN71bnYCAbc997gq<jJ6fl{U>j_HD_s(4%^5(VS7{R?p5OZ_az(Ml{<vjv}{0-9mhY z){YTQ%*Jy=1PPa>glE}EOngkzIkLDPFza4<X_FA%Jps(TCX)k$`nJh#FH)bz^cQE` z{<0EjTt&Vbx|w$O2aGxGIsUpFP*(!eYc0O(l<?pPZobjsz!psv0nqsvRyJ@TDHOF> z)EvVFA6rgc6H;T7Hd-N8W}E@+t;=<s6SgSv{=)j&Uh85B49ok#xaIw#<+|3TjbNn< zgi1Ncjit#v(0TvuHlS_50xA;uUBq5Wh!4T%jhzI%(Hqw`G>>VOxumq<8>T$@3Hog< z>$f_)9`FrIqUGN4R!qySdMl>odftlHa<x$=C6`!MS85HGjnis%{9^|W`EeaQIej<& zBSzn<Q>JgMz3RC3gg$g8=|gi^cG`!2eq5Ev3A-yamh;9-cfmPAjC#c1i*cT_j(lXs zV@?8g#KC2beKU2ZnMzKi(t{*V`_*U)XTKrcClnoWT1~I0AA7`F=?U>{g1(d&b(E?5 z%HYDAgvdWJKZLtxbA6#W18HfbRaSO3;!(&$`8awoV>;xzJ>>FTa+O?1nJ?5EXthKz z?{LwW``(l+8eeg#J26GFTm1|}$|>+eoJZjvIhDLRu#!$_F!0)76y^Eeve1-^9qe#A z)5+k;GZFdJ{<k+!)gIqjfz=W`;h{Ov)CzPK!m=Rhhmj$DSgHdfHo=q8vjlC*)U}vo z#Gr^)IRP~mCD2r;t#vs*LL}w+6UgvSFQA=Xr}!i+_vFECf!K3b;eX^wI|2Wj1StFR zX4EzK#+zKYDl3rB^#;qR9yqPBW%9~{6~LV%l<;s=$$WO~hsdGwNzvZOUqL8Fe~)R@ z`4ZMEz{*<Da|QTvb#nz4!-(~!wrFqJyn`GE3`4Y%b7sqRm~PS=xYi=qJuAk_tsc<q zcfQWc>YL_e_3GCtB)F{PUEZIBhS)H4w{X^<6d<^u>K|UG#X3g&795yjtZn}N*^(u3 zxc>Q?F&;&)^BN08UtcKJ**C>HTR3A`)CO&%Af}uNCBQDTE>^<#b^`0T)qi^zl6ROA z9-V_ZkjSaM$C>Ex+f+!!$M&JCSnK~_ZWfQe8ml}H%Ii8jVi}=XCYKwI#kg=c@LtTA zc(MIzzEJ%We&;5OcjBtOu;6I+2VVvCB!J01{UD;I=aYsEd>$TV)9dplY}={}W0#J% z!9IR_r~T*c6`x{zLZ%+2c3ytPXeXE3>7%zpVFs~Nf@-I+$tX0}+6Eft#^k9p&QX*0 z|CO<%J9B;@pPH7sJmg`aoPdy+09^;gq|>AB2XKW{38g*-T?7`8iZ8KZ2@^V>4oPh= ztnc%w=~k3e#hjF9%Ml5E+sUh9E^ZF^%+9pKFX{l{$dv|R|4>08!QH*+YvRJ}E8^yA zj9>8v8@a}mN4=MXA>IMe=SKCR<`v#O&^6vU;8%Ceruv+uvi7WVc@I%dhMITjX-r7a zOj)S){X@YqZ5#S|FC>xM{IWz2{|kk`a3wWei&tyD7#2Qz3<WDI;Y?VG|MD`sv{$>s znS0T>oIynY&Uq7ckO6oMkNdS|6CRGkGaiaM332z~Zxax|ZJ<D$A~lO%Mse^7MGtHC zFhLhkFwcK*@3ih}Q~PeQ6x0cs!<nOuhy?g-6`yV5bC>wsCq5%$+fu998=#SeFzT4K zS#ztrV?lC^M1F8$U%8c$ETC%fTOnt@L53kYj^!0RVe6}hCEPt$X_bZKsL~e&&>47& zU2EapOD$=KZ@<JFgX+ljUOMR~Oom{0o3J7taxrWPK&ii5G4gnD&LNl&R_jY-DmeCH z3b12N(FWkJCmPkpt{%+E{1Gt^6-F7B+>$-(Tq=PLGwWtRC$l^7-HYU@GmrxPY>si+ zGxilFcM}Z!qWQiK?yWry9-5g&$M7|<R;IN^+q!sc{q}<J*fRSMMuz_}<|wB7&tm_= zutJq!kW9~y6CLQCqbl&-pD@L2hR5N`nQC>b4da?T>Ww*~p2kEGR!PUc?!acP!m)PB zsEUHN3dhE&H-JK#OUK#nf<{kjn-ciVHn|6_iQ!vpXlc0x#8T7s;cJ{^k94bRfg7=2 zXK#5`Pwzr+Ne|z-Xzf!l5AGp1o)FGJHz#ZrsFaPa)cG(@@Wz*JDvk*%AF3Vw2p;Ud zEM6CSY`O!DDegc6g{Ao;ga=0AC<PxX+d*=!jlO`-trjkun?e5VrDWaf6f7Y3=M;3+ zqAtWaIVJjM=4ti|X+&$!R@4m5{`?E{LyjYRQC$3j;(<N~clb}cKAgFpA~p^Wq!<~c zsb~kLL31BIs02D~Q@#+}pDOk$$K%e(+5N~%_BFJzhwVFW6D5tgu>8=o62qlIA1=*y zs}?l%z=!VMn+7r+hN0Bv4msh|Rj4>BZT?IT{Bnn~J)u%t6W&!E*}w!Li+&C6XY1b$ z_$hAH30y%RCx)NJ@GH#?RA$rVY~wODS823irq?hmWZ$?yHPSL53BB@@((8x5M6a2x zM6VaB<LGr}pOeuGJ+%Md5vwb`jt~F8AyyK9?^hp)_xJ8kuGyg9i=mS1X6S6%KAWDE z^g+A?jexpK_nBgUK>puu{j%?1atH9UP{1ek|Na(r6TOAGUA@*#<DKP(#p~1lNrqaQ z@^zA-md>J~eyo{>dd;}Fp}zP`9%>W(p1@C*$n<0lq)hoLNdwFJPy?571GmOEu;~nH zfayPbnvLQOKx(IJ_WEU#rFpQ;lFXq!CR0bT{<w?u$9BcB(N{t4%<=YZMV-|Nnl(@@ z3NqXQ;|W`qbVcos$34hK8D`Ue$e}oX_HRNFO3RDWTu7C4Y7*5=$JJ-i?!S!#D=FN> z)v5jz$@vgXqr+?w`9qO<o;;8*yxr`9JS>~9p3Yav7rA9HYABqliz*6UKMnz)2COz6 zC!YJ}xKvcjgt67Bn~^)&^Y*;yh7&RymK#Jl)1#DEWQSb0FxA3Y9v_A;?17Ai(s!Se zEU68vBUq2M^A6e5h^hv>ny0oZsT(-Sfur?)D^|#}sT(x=|M{yVqVHf8PxS(rV1xfO zOk_6=?$o1=wf#bJgm=J>auE9Ml&RmAU*1uE`2pCTUm(|g4{GfP7tog5X>rZgBsqA# z$lo>t`D(31b+FDjox`>!;FvlZ{h+OVw~V4;NRQiV`o7Kdy-9qhBcO1WXDd3t?0goL zU0`VYHCu&?a^y?&xkQ5e3mcbL9#+&;ucO#sUS4;=Z*#4X+81)nX=K8Clp)6oJ&0aR ztK2wl#3k(3Z47bYdz`-J?+6fpi~xx8Dw{WOWV%1qrLBW6GyT`P0zXLpV%O|rlK*lY z%LU|OSZH85Ym1KMH9D4K5a{I{ih8;?aP@g|FoTkH!U*noj&Sh?iqG@sCSY{zUB>7< zxZ3`2JPJ9F%Y;Vm_(0EPEZ3D$;@ebrK?BCR2Ri%9k6eV8YFgjP)ouEb)ZV1G<pnx3 z<+`8HMW*u%x$blNGElDjn7&lX!A6mfv63UQaCYF#!F_jR+t1i&gc_yi_?!+#?aF7k z>wEy48!3NRbej^J!92gxkiS6wFP`NwcC`3^Bu<L<6&<ISZPaVutf=*a3-niBeO9NE z#W$|~q2Dy^ePq?>J^bP2kMaCb#V+HR<3qTNudg>;#^1rO{9NJt7}p=Y@O^wdI*@<$ zrP5N-?)*rWLTQkxK5R&$WOJH*I3NS_$x1%t=;ltGR<t>C>@OTx(aD?tWwiO%b#o)n zZSKvZ$r_!@0SFgPHRgUcMc01q!UJ-QJEyomR26Gf>*OfxlO_KE)jAQsxzaG5=pX5; z&7YxK$I;hJUoqy2E<>AU7RHBQL2}^Gw5X(KmYMSmIqIBAhDwvPEox|AigmYP3yN<0 zWhLjzb)RvGBD4Gkh7d8<suW65U1_1xG*FLW30Ga2q0&s)&x{K=B-qTeWtB5Y>5L5| z`~)}12czel;C``sFxW9|R3e6IbNi2Jz^4HHL~j>H&pyFjC*@a$&IQpv89X2dLur^a zt(-P;3u#(z)9g<@jf<sq;zr4$Z(iS_YA{!2pDa|NYNf$<6)O$CE5)z0nWm!xGsqFW zP6pB%19^0X0rJNc1k(EChD0Q#lR{j+!hrZv4B|5@D4qhH6~qqSwYm>SRKczsla#sD zPl=E4<gpt06Sk$ppQKpu;6V|uQ;XNDDB}qJN4ZCw_+K#xJ;65+8=LgdZ}z`o=Ijli zl$uUF3(O=(p1q6l?E6zZEeX<*YYDU~2ZQ*v_`G|TrdTMq)2HvC1U~=CSZ=3x$mkEU zsn3&`+o^OZ=XNSuDsnqrv=nnY6)e?rJDs(Z{U-b9J!kYpx3#vYUB97UvJYKMJfgHF zlK-@xCnNtAZyV&l@NI+q=e&Jf9=TLL8OZ(14UjvR8z46=XC4{cl8EGICq?p+7{t05 z#A(X~k4!oqkKlk#5(8TF1oK8Zon5WNfla4@O?g5hW|@R{qhv-nDbpCq0$}58Vwx`& zB{0nki%!He#ZL;Rd9fau=Fp-T(*)}U(|o-MnI`K=W}0J*1=IYz7@4MHvCcH#EdGy~ z=Cnn8)Xh}*^>Hb7>&M6W&?jChqp`A5#8YL9c&aBB@j_F@5q!9kz!LKZ5r6E&gs&cq zE)+r4^j~#EYt=M5b(%#-OEFKFV!AqE_Mj^s#@ezM0d1DAN7{V+IMXHvXftQMpiS%J zc+!X2LjB!6YCrd4fwk)DT?TurGI^EjEP2(9IqdlJA-APMTevwOix*un>G_;?VA5g= zRE$e|CqnDz{J;@q)?e?9<-ow>)dS=~AiSg|@_&VqGq9tW<#g_7$s!EwWKSTc4ve23 znU~K)h4Hf32KmOwb3YQP5R0kMR5Kk}zWIbi*^i4k<GkAX4o1I4{?X%P^Jn;*#{4OJ z)0jUcZ&KLx+j$F9FueWMyipVjh{^xLzPw6r$;7-$U!kEd!CLeNARw=jLH``<%Y^?g z^>u^)ulA>6N_e%?Taxepgmt!pgUa?}=*y);pIBCjsc$Q154t6YLwf-X?XD&q+M|#1 z&;p0rzikpjdw?%u1rO_8$fznFaFXMLx*iiR0A<hwyMB?`Zy`2{PR;)EA`XwAPXmO^ z8hI3%_0_y3%&a()v3xl<3vYqk3QBM7QDJho<LRBu+7)G4qKHBC;>3;5Wq3H>TR8Cg zgaaczQgRtw*ECDwb=>iL)bbp5gK)IUf#+%aLh<T-a55GsB~!9}=Ye*vrnpK{{C(BZ zG*?M!n*TJl)CON{{&cl86TW2nGN_u2qjmDS=xr1!46o+;FHyo3Ac>wp`r+^1Sh>y< z9*ja|8SIF(5!qP%0-w1Hp9xIQwP5PeVbJe&RFzuN;0br&nmkHlROwF-cKEID_ma}c z;NiqUjq4QC4|a+`GLO0&Nal08TO>BZ@9<sV0#(`H*A=Kuv-o?v=G596D8&VQL(AL{ zU$^>ffZbGq2O@25b)#FWaT3X!y4tI=&I_P-xdd=~#8P3fbc#Pxj?16)L8HF)&c>>u zv!~@-)T6#0&8~dlzqcNdU?<%ocG8yNMlI&JO|;ow#3kx?;9xz9$MtB4Pr*GDo*O)} zOL!j`X9v&iGS!yXL6Uqlxgx99m+v-GPgfzb=KLrMbp3zEVdzBJV-oq{6w+x4=+*%c zR#ePTqUdhTe$iueayl{QU9HA^n?Q8f(}5aVHav0>3mDW#AKyiG^BnlrCI&83zpGW| zF4RSluP66vA$fsDIV*qEDttoGbPV%s_5wN$ua3_zb+cjlT1M;B0gt+$54hFOJmD*+ z57IP8o9|3TYeM=r?(0^n))h{gnnJ~@zR|A*-lc2W_2F0Pi{H*JN@A14g*?VIl@;HU zEeHPwmpa(Omg4(__ah*qv$j!gwygTkd0XN^Y3v~vJ6^}XTPUQ8OI?)rs>nW6OeD1K z{eUcML=cZ!M+Oiw!`T0ht9WH4y(og-6}6XkQ?@}o@f*65fUZDNlIt#^^O(2U90by{ zleC6E_4f6s?~V=;FJS7R(7R+N^1$alBH(YHl6!LGx}D?-P@ZGhyoUg9m+@NDNsm0V z9Gm?BQ)&s%ue%>%yLE9{$++zM$E!oKhsdiuf5>$eG-<7_j>b&?rQY)3Hvfgn5^;`~ z34*wrC!E$w5GsNVZn?aTd{D0gSkWAOke*S(y<0^q_bec$97X<h!lVuh%Igax9glx4 z5O}z>CYRboHNF%_d5-+x2q1}CZV5CT3v|lz!*#efT;fvaKQwV8=3m^Z?JuLT1MxY^ zo8W&KUZA@!bCw}!vy@TE5Kl}OD8ScA0tGbRyK4xALdCJmznnB4Nla^8fJ2hNde8#h zGw`=GqtTqiMhQRASHh?bV%}9)%@j90oP(T1UV6Jg|AX7@uf)J?4<`pRM+XyQKOG#X z5;%!<h|eL!ThffNen3F1N`QE2*r37K#70pJvENHNwu`Nh#2CqHofESp>Fw!ops74; z`twwyGik@^%-i$1Gd8^sHgg9)hr8`dQjHG0KcAhS=`^{@NUJ7bHR!Mi4%s~cySNS` z(31HEma`CkajM1i8W}{}^J17^FCL!+{2hDqiutDg6pQ{8gTAiv^-215l)_BE4XTOy z`mGeY^|~sFQ8e)Is2e@%TEQPxi1&8YK%`kU25b#{ZTF`b=su+yI4)Fqt3}DG><`9X zpQ<KD{(@u}GV+<nNB+>fB)8b%edjzJ5ljM7hDnNgdBhnNYO&Sws*!n$;gpY<VK1Ze z%t(JWPxPj}yT&OaoMNz-&+9U?C(PsV&o(ARwwak8h1>1JBp&Q+aXS|V8%qzY!F+4& zzmp7B8!^uyu`)0DwCM~TcdmREVpMXm$NC(tc9WTdXH9<l`d>wlH2b$9bEkKOlFya7 zF`x+(KbQK+?_*bA2pPyf1z)38I={!RPYEUO)Vas+lr6*pAh-SKFPgT76<?rx=Uh(g zB331pS0!A%+Dzw<`da5*Siat3nGb)T!{6E#i{%#B-aH3?8vLCOzyH>1vHXC35gTHE zJ>YLD{C%;36K7(6H`k<CayKL2Rdq~pLPd?8{b6-3!qu5~cp&}HB^mZ1X*`L`wVpA_ zq{Nw0-)%mQK3H;Nu5SS9P3b0OaCmN<COAGfQ4LIDzcPXb3f;ng@_X`6>hZAdpX75X z;lWfsup63>upkQh={aL<LDN}(ekg@xrPG7e@z#^8LFAiuR7Il$*}>_Im?PCTPPV31 zRvB?TV>!!gEX(%zrc=RJUd8y{`jCO|^(V!b+;`Nh=Agit>aVC<VGA!1pC2W}3mEbK z_`F9QVM1PB^|6p8`KQtYbNq<#{|XxTmL|owFrL0=30yHQByvxCLhj7u9%P1xnvxi% zV)#R7_5m?Ou09n+9<39IL|$Ypn0pC<UIqeq5gM-S%F22^B6nzv%^kWs#~qrIJ6hx> z!kJrt8cn7{uJ=%=dtITyZ7TaGdCNn0*So{RmK7a<vBzLBx4H`+7_rNXuIifo9Ow#{ zOaejS#iQCP?jQS6!3KXI+FkqAW1S^BmB6?s{PdEgc=2;0t&S4`g4EhlNAA}I3V!aa zV^E3!wKoBjqJwfqh9M|YjLX&as2g8Y$3A6Tm1mLgDQ;ENU7=U$hh~@S3|Xk(-_*h` zTPzX(88C!s;sd-kZV4Fbfbl??0soDF2n|^*_Ibs07Pl{edMKWR-K<cU$_;wrW6l12 z0JT>v50YDZjyKSm<<F5<4NK{0bo%6XFjUkV+~~tR(Yo(mMx&SOD2bGY`O(XWL{zbn zZn@_Cf@JciyI}vD_pEVL)Ca$MDFh{a!$A?6X8+|abfeu6Dfom}uUuSjt_lb{qh>D% z7)wlUz)(f(0Ymxd5iqZHzdncrdYYmQ)uvc5>lCUA6$^<-sIdX;h<*j0JoXgb<K>Op z>j2HQhWQPdglYl(<H4AvIT@4W>r9dxIsX~rw^(n_W4Hdupq-}PDhLooiYme)5`!V) z@TJIYF1({s)fOivGuwmtB!Nc1&Pl`=E^2d5nXP?K>uimO0Im+re$yNi)6R`C_1l8t zSI=R-pDp-)uEDl*4Zc2OP6A^x^9`M2VoZ?w%$O84V$YbPGiLsO!kGC~u8YowO^jJc zx8fL6eac|W*-sH;qCGS`{2&Legzb;L$&C4!NIjg7L-ovT=DU2&{@84TF(01I16Zqy zSe*DO&~fWKu-Xy9YB4?=GCK*Mxo4j;pS}MV;<MofpB;FEk^lHZ6QAvSfc2_mEOui2 zUU(o0et&=9l<_+!5kJ4c?@BX%&J*Cr=l_Z*%m(|v2Pl=V0kBK}{CbB8;E%Jq9=spN zKUAzw>{`)IZmH!(UsDE4^c<%Jq87#<AiCaTLTvS-iVGK)&63EqcD9J<KM!Nma!s`0 zTRJ&vBl1$Q3{?}{YRz6gOA<@kMErTfEJ>7VOunQ|&|y_anwAJy3c*q|`;nRYnl=%C zrU+P-#~G$d9hMTAx+HG$AJ*(Q&*aHpD<&<@e2&eqmx^1}`g}(Jah~oMh+B&J7B66# zGZQ3%lV<y%nT90rl)zGKmITtw|6UR}SrS}+B1tgkNkbCck6($7AOR{2QPBN0X0C_Z zOrqei8HOl$SbPO)&k$c>5bqOTfkV7AcvV_xUX?_>!mr{3^%Cb}WwQBr#*8HMvCoWC zo{tL_3#Nfh`a9DRO`Mu|0x71`m9I*c$dYZstX6=2+{NksbHyu9PB)h4`P20|TP>16 z^CQ04BX><_gJ?CIHaKYf#Pa5<=}G!mGX0eM_xckF@@D2MJc8@Dn#4ofpHD#^0#^MV znSoXU`$GCSqB!<U>8Gfvs7Ghw0U30`?!$Y5CL7$G{8iuqo5cr;_ygIfF^7lSBA-2j z-gZMp=Fj0y^ENI#JO}t@s$^*yYBMr}cF9N3)n4GwV5V(cM4i>Oy&co&Jn{~lFvT=o z`svf9w=rFM&~!m!;Uk$o0qTAN1^UTrJJ3~$lHT0T*ET7k{-A$Olg#+R?ZJ!43ERB? zIijfP7%6}?p{_uqRtB35bMR4lr7NW&lGf4olH@;)0%c9EkK>y(`{ZdN*X22iDvP+N z=2~o4#z7l4jY44EyW(Ek+$HsJeBR+_Mxfp`JjYY8#pBrOmP-$zjIL4C(YYM)7&w}Z z?(oB5b2FaY;m4!-hAvxStTA0_lP8>Zp%Tu__Y`dPq&6!BA4hupfaeqA0qp0P#~5_8 z@j2wpUfP`2w`)D1me{DC1m6QUCBt{38DHDv9v*e5315sA#mj(i2I9L(38!5GxB{XT z;WSX+GViKL-JqoIh>VEFp=~qJE^6?WhSJ8I2=U{`S5Wi_R)R#Ck2#H8Hq0J`NsVUY z<#LJ+e^%tJo3Pa3UcfKf&7<~rW1JyQ>QtbBtJs}7xKME%oZ1r?JwU0y;+Rqh1etLY z8nr}Htb9(a#WF)uLggI187haS*6Yb%;*J+M-w~R}v#G-K2$8&}iZTQpqxhGD6g_ZM z32c*<fOZUhOOHk`_o%L1%%QTqU8#TNW&Woe{!ZEcJr>?MU1@0`ds{)H$I&n~?fURF z5=>}`O6IZWvU2zkxki`ZW_v!T{Q)(3i7+Y@M)v=J->j3DN_s^Q`{K*=5_p;4TP%@# zf5P$F7wxBrv<ix-M~r7=9J>cgGHD%XfX$u^gdJ>)reUzQ5*{si)U8;$eqF?3;rr?6 z?iRV@aukMxZOv%<fgzg?e^YXx@7Zp7@Ve%-LiCKTqPm|=$><l0h9?SA;+Z4pCLP$? z-M#vlr~~VE970n56fH<j%5McJGd%?xDjbbS!z+M>Hy{oD-HV7(t~Zl11xUFUeT=)3 za&eSMdBKtxDTfv6q-=!l!;7gKBK;2`$s*DI2%XDCV)WxeL0P6K>{Bsjf1pTEj<u zI@C5ioS6qqepL#_P)_;|X^Kyzqx6VmUxqXt3R5ay2~ExQgzf}_9<u>K*Td90yV{7% zPbjcN`DXO!{MEQ^icC9bF?Maf?#MlSViT^k;kjU{66yipv-R)Iv+;;WYMy;W1h~YN z*o%jcnM)#l{zLdqr_}6p3CN0iV=>-2U(sAxZKJT9PEhlwrg=heAzZ2{Ay+Z3)O6ur zr;sl`iTpt2n*<1K4wb`SP`ECLkb7@1i;#0-BBV1WLOM}|bf5@1M{!I?5mIu4E<$3` zgX#gEiU^56FJM%U#)-NP#uU@R1@{7y8!HgW&tac{NcKGrlBc5{qpvW{ilY`WeWU{G z86c3L4y0KCfkn@$zdYF*`6EARf>2VMKebo<rGnag;h2>HP3K0_6m<v)&a}=XdG(HS z9;+ucSWAHr--EcrRP~LWsTJY828@YtQ%r<X@Grx^=bCd)7zaUy?2v<Wrf?>V(H0{f z0#|hoitwQYYhAL8UCHGUMI#75h)R~~4IWC#L9qrqB@t_YS<hj6SFZj*uIj_@#j25> znu8Uo9Udcd8s)H~u+1hBw%LRp>Mut`i5@=vx)9(fflV3;j%C7J@e-X1{@~$+WTFa4 zE~T-ggg{(zO0$3RC#qIigCPxcf=zCLro4*OU<o$JN%xBBbR&8xws{Kei4-TrC@f#H zh`zth*?Z)=zfmTGtrcpE8-t!(BTMFSwR5Kj%cYADQ%p6nDKZmosY9|6*)}~fUC&6( zc&fYM8>NK0CEmTk7AX_Ae~+>8O3f(BTo}%5qZ$R`oJOMfNpTUxOdoAXwp;zxt$rHq z>3WY`)w}U$dGLTsUW$pyBJ#zQD{ot*8+>u8>!K-KRL)eWI%)k*Q+`blUFTL{wP{Xp zNL5=RFa8Fy5!(Vfm2XlT^>m6bIl9*Gh;dx~vH>7Y_qe%A9j50JE;tt`vFMipNbF8z zTg3xQWC-ou>VA<PVI=y7mZ8&#CvQSghnK@I*lRn|xPXEs=KecXFK&eHu6XCg`BcgJ zbSmT5{t?_a{1ve5sVIQgH@*N~re^;=@SQu9mKWWvH-hTHEux+IsUn|$pwlMTol6lo zz2rK-gkMgV>juG>L0EHB4pyWJcU~&BWt%8jFtAgk%>cdz0uPE?x+lZR**jgCa}-y& z`v)k(lRfe~5nzBnqG$1Dr2S!BN}uKfMUg-%+6NCipB76t`qiQ=_fTdO5OFh=@VkVJ zH^843UzuJHaGPeo?jFP6(BIb^C@%Edy`ds1AA(MTx%W`6*=UA0l%W?-^aif8_}9Wy z-q4g3k4UZLRzGp8TO&#cy)g~6tsnHXaD6bs*s)8lqeuw7k0nbrt-WUod;b)&zpp{N z&3AKRt3m<$)wu|}{R_!V;1~Y~w?=qQ`;z42qE79f!=0rCYqxiLY9j2nBFGQg36TGq zcqOz4lXk&FShnB@4Z>MeU0UGyH>&2xKcd<Cu{!Flbmiir4o;aw>BHv7hJh-1i(qzP z7{Fp4{yc*mfJ>Iq%q7qaqu(D3QPiw2+7a2~)wD9T!=oNkYMO$3XN?67Ef$~QQk$ul z=ngFiUMjDeKZEAMb0D3{<dwTz>ej%1sd0ZwJr*1;Xp~pBx^{e3W;?sTOKWy(EftR6 zW~?OSky5bm$LjFq8qObN1Q))&>6(4Soj~(WqZ=js3aoc}Uv7U=)1p_$1}Wt($r3KJ zq;MrT;quNcNZbMqaZk<O>6IwWmoFVeSq2PAv^TjE<7C`Ck0zsX5Y4FbNqnFyoc~U$ zH-Q2tUf4ND+&pS@ePkdYbYr;?M4TKz$fBnP8?vZvAfAPxA2nrf#JI*r5=2D@aK)d1 z6{eug!gDQ_kca_-)#2)Sd>S;(+8(x1nv|Jx-4vVfH^l{)Bc1GSnnqhSd-ep$Qlw#a z(M2tA{TBUt=bc;$6ca@ZAh&~^<m(stB*aa~bNd3^z>K_Vi(ID}DGw-vnHUFktGuck z78uFr`RxsKj`f|c*~i{xE-2C-#b9tbxCOo3!u^Kg{MYr9(+QV}jLUG=L##o>(XngB zKJqZp8x^(;es8BS^7%Mf#Nn<b{xKNT>!@2ZaBggi{5DtbnX9|#@U}>fs$aagd)(XY za%y~|VSCy{LA*6yO5fPONFyIzopetd4eW!yM$@R~df5Kk-Qu-6FNZ5!D)FAFErlI9 zt0K1>Z;~&d4se)p`H^lk+JofaeybQ2%-kdBvy40bl0enNX+sD+G_y=pFC`+hb|Od~ z%Vj*4_!{UUbIYv8&-T+W#rnI%eipwMD0w@na~5*|A55lh9GZba6LiM<zct*$ORU^v zWvrVZ`k$w}zI0fF<X|+7(v+ZH3b$^okz(DhGgxp5z-bSrnR#uX&Sf3mWL&l<&0ty# zwdCY(m1dkp5hsykrk2j@zQ3IY^nA4iQ)Z-7mW=mrNB9#tMcV|*{~_vDb^+PP1QMV< z&Cmv#p-oBx&3BK0q-PQ#1D^oP^_p;Bj|ii`gb4o-ja+&=liG%<giQ@~Plk5z%T&Qu zf(;G@brN5h#+>CJ2y7z)yC>iy&vxjKJWDSFG<a^h9Q>Ka6ZrXQ7&KVW<lt8+Bz!2n zcNt1;^iARU6*;Oy*_>)jx+zBMtKee$^JZrIgZW$`mSP&I{C@%7F}KHLI{<(~OSF9p zd{b4nchWX(fR=<uAc8tk%MdL}q>i=*C21)=p(#{Q9tv1wELBk}G*Boa7^=-2qUbn| zqs|@g&vE4Y#!=^9KLkamwbJsGf{cJV0zOZ^fP*^n5a_w<vCqj#ngaT}Gry7MoU_k9 zd#}Cr-fOSNe;KGu+;-J$TDx09mtex)!}WcL0NHexVgl%0qyk0)srCIqJjmdwg5M%P z<?v=W+qF~B1+FRR$F5wp&y)yf-IpQ4SvO{gaMleOBAj(ihGDM$VWrlm&y2U%J*4+P zg9zOino7jG^)@12C?Iodu#X7iA}ELNzH~yY_I)+#*j7Gdth_+~=Di3U%JJP1t}m=+ z*jA1w9G?0-<lLc9Bvx#uuH8XNy|9WkO%xA1O^ROkm$_z2xh}|{I(E<IG^|9Na0jl< zF)ZUfzH|@D8u&~R`kxjpFRt?B<G9xW)nnUe;SnDigJXUih7ShHP6IXbR@j<&w?lc| z#F=56B4&atrP_Z*%ebuxbAkDauKQ?qhAHHgqIu)P7-jOrt!6Di%Ha-+D3gb8B?SC6 zvkALiw)|l>MpZpGTZ^iCbT&s-4HnZ$Ydf)2XM8~N4M)o?o@R<k+isB>vB!?%`9+&^ zzlK6A{~seUOS|7V3ymAGPtoGEN%_nDI9deF)S^Y-OotM&|KjISdLH{@QWZsd)z2o~ zcj@<6n#Amk-wl;W;v-tQ<1?`d@!MGYKV+$HX0t8TgNCy3Crry+dN=-asK(4chr-XJ zOOtE-6W3@@+<9WAmIMx^8WfQx%_0#AMWI_~%}mMvNZ7u0hQI@<qqI)M{~DsxT-s%# zRIMmgoqSt>D(B5Mo078DrnN7V;^>6m_P5PtvJ#o-3&+es`BQQgMWZeOar6(LfK_cS ziA8xIj9^a6+c*NXn7=(jA6s2be9>G&3&$di+8FjYn%f>dqDKW|vb}n=n%z|`lA$#Z zpgQ|f09cM$AQzXTeRI!a9Km60W<1)yQgo`7;W6<hCU}#nwe^Fbb#U?^=hltF@wSff zK;^yxOje3fclgqaT1{Fk9^*pIfDN+NR1dUxpw3i39R4)Gm#)ABkQ1xpSyFT&h}|=x zlNGlLAXkE)j83iU$UrSj8IOElZJ4mB46*EvU!&dkaW@g>gNG?w*xlSogI7+e0pv7T zq@HdzSt9BYTdO};r3|KUrsAtjZ6e=kZgPI>DLmTWlA%ru`SQ$a<IEn>={~}&1sS2( z8yW^9_~+FaJW`G^?R77iY5d6Q`R7@@(KOglcNXbOO1ysRBr8Wxb+DF)s!qnMh105K z;bmyC+yX;914B?WaK0paBAFAF+|N{1&jMdDq+1qv4Zmiw3l`9QsO%0{l}m;YhKS2X zai9z$(gUDM;(cr4{m;%*RSYUEb>+}@S?a9OVQbRpi|w4R!c(aFH8)nNxHwcCotR4q zlF_MVlxg6<8&yZ)OvYlspg%(Y03i+6=sq)f^8B3<80bX;;>1@~$Hz1DY#(<lBEx5& zL?#i{@mAvTc*Emb@%T@P#|8M9f<sA6-&$~EzH6-95q>8_>HHM;y@n|%FV9ZA{Pn^_ z-Bsf8_{8HK3%Ty9vE+(dKvQgM<{stCr&-0#&Z%0iik|XcO2zjTflMp(Bc!c|DWh&e z%{`(Y-RHp)q0c3Gu^YwZpC{ubxFmIlRD9J5oR7IDltE71mMFBU!o_*OGx1hr0h*QE zDX5BR$2Wmt#`<Q4E|laCQB#J?)@hC<v#tCWA$B5`A*DM+08bGkNa2B3ad_b6dU)U^ zT6kdSJc4YBo^K}9-AvR;M`ofca40BGqQ%;SsAn^Q`k29EGaO#qn~sJqlyi#Bp=;&x zEJUanC6`+fp5ijOJh#}Ni=bvdnCk;U1kFYv3eNZ2{OT^C=MZ=|3kJJ?P@e3DL#7id z4?Rx^jC#HbP20UxOIp!}Ubcbg`B|xL+(!Dy_!ezGy(w0u=~lHZd@>^h3trx&@i^yk zg)pY-<?`XJDwPhmsiDCHlNOZC(aB~%LRW~=;ge>nr#IC@@DyoM{#K%j_#L#bVaUt% zT`B1%4eLvX-wLe+VaL+k%wdxeGe%CzKVaOX7B#taiZN<(iz78^(y)I=o=S;`<ZRc; zcbZe~gx|zdI$7x|YLz=3yzqqardWF#VC{ivR3RnjXcGO7H6~}&)V(m1b2d>rmT4MV z)CpSbd474j>W86<vLAXiMEV$Au2J<sc-$c8#y=4KmXe*!Io@%~x>^_7g9};1BU?6J zscUt7E;Irhp!kF`oZm4rWhj%@YJ&P2it&3Xf0~Q!o1S3gZc|N}Hw3c%ViO~ztZ{KX zV6}_m0juzD^t$^S%$m2>cE!^m{DMaM<xc|g(SVHF_`$*%a>x`qY0psGBubKN51;Hi z|G=BQ2>6{VM%%?27uzoI1BAZ0Ybv@taO+s2!yZxm=Zz%MVb}e$DCR@TgpV#gX2n(M z1-)HQEfVee?Yc%3nZ0nP4LyWeno1FLo642R+X&@#J7HHU8xM(NPANadLl8cdA|Vr( zcpgf`N-0>#Sb!fsbV#EuCqb?>^{8`in}YjMnJK=nW~}#0Thq(HGO@TmZ(wIEB3Bc? zt4)f+KRx+_i8-+PjQstp{=naA5`Q-We>c`j;l^oP$fw-ipLXwQ;&~N32f@U0C%X6` zxOCK_HqcLJ8jmE>H<AH_KnzHnv|KYXk#d-@n+}pI9O7u#qMjGCRVYFE|ErF&n+QBP zAn*6f#}GD|+*)9lIc!_moAmehn|j%rRN86E*w0p2TVdfYL&P&!D9SMW+D;FZlZ#a~ zNH$1}{SV4kEl>yJFkt8RtNqZ5?3dN1qqavDCqg>kxY4ZZ=nHrG*P$!DQdz|tsYk;E z@{_9>$VOl7H3@fUT$?+U?|wsvSO;?<`UA26u8cpXhhxo!PpBQ<uBEH6PWEb)Zxk`X z>r6D&&=3tIsIB2h27P2P+>KIjR99l|HFE%iYTSs>j3gZ^A3*MV9FNvV;mk?~PN3n6 z1PvFOd!V5pdnzIStDy%%&R(ezlC;#+SLK)cU<RN|KXwep5<dP2g4Fuo>aE!sCz+XI zEJIPi0%iWbZ!$|_i0OqMLf&JxRRcs>x3R2SbySM7h^OMM&v)A%jp1;#YXer$p+yOo zLN`Wl(si^eCx}siO}PdugW>Q@;>uPD<)l8yW%5S(J;ky|A7MnlS9U&*>At<++g4pJ zGMy)(L%^Coh(>fhRolS$Cs$3<{Xp-4pNJ5HX`{`&qP;wkRy3S8{#yl#)-7%FCi2<! zkuPq19?E!|l+Whr$L77_Rwvz}L-odaVgV8RF`9DnIwxnCVvTQg->=g7?|6(JP%t-P z(pF-&Zx*cHBEgCzzQ3Um4FqhEG<6%hk?h*e=4s%T5hBYJs(6!8>ft|6b7>K*De*AL z<%GSCC!DwwH@Z69k807BR4wBtgd0Wu^})y-VA=}1^2|JjK558mFD){|-+>?*1?6_a znAob?@maksC}(P%Lo!W=ewa)3w@E&q8-&hE`5-0oK(z2+aS3|k-CBU0zsxBWoDO=w z3fM|cN#0LF7faEBBLiq$1Bqqn9(2^$NDw~Cy>JnGguHOjk4$;}GJGE>;q6#(QBcMO zl_1&Y?jw=8zD5c!bJ^z)M_YJ&7z)u}!-DLT!pF%~tJLaiE{gkwt5zJSI1c9QWLTjW zSTzsDzUb=lUND;F#_*C4-w~c(SPgpiUEQ8_y~*g&N3H=00jpa=v>!#EF_)c{KDkEv zs2>1*o=5tu)4aqa?{Og1BbS=_WZ~VBM5twgQ1g*c*7=tbp@tKoh}VErCwN=4)<n$l z3XD+0A0;WIvKmR1KL*HED`oDgl(#8sTA5;2onnP8HU3D}Rp&^wZg`>E0Tn^+$ngya zlK_{4(SS9cgZ~EPR>|8rzm%R?0&*_|>)$M8RyZZ^mW3nec4npAD^L)lJb+t)f<fE` z^fLp(g~mLm5g(%qIjz#Iaa#L=E17_(vR6)Hyb<mYO*A<syVzX^nWvJW?;5S~@#tN( zk9`2)%R`v+JUTY1{>3)IifNxTq6&dyM3qS`Iv*||s*Y*Ty2f+{*weF~2g%9shXm`r zI~+S)?nGFcK*76`ccWx0QOM+70L0z6u$P2hyWUnP>%p?PJARVDc!a(tcrf#O$$JE- zm@`~s!}k^pGf?rEMnyV-kk?-cdi}+HNVzWzteA~NMRgYOA$7Co!(MbE^QiFYoy?<= zgZ~DR|4W?{qFJ+p(ctAE^>+rMxh3etd-QFcV+C!2V<TCM;A8Q}=$}-28uQcWSptzk z?~>#j#OKp6s4~BTr;g5`NReo+U-E8W$ezf8Nh>iv<b7%9X=c^bT#T{dU4%>P6vGqn zwk+&5KAL6b;dyMB8P4>d+g7e89xWx$GfyCTRhDs?!10+oEHOTp8^&kq-)Vg67it_{ zM6J7A=kUvLoc@t+$tcy9jB5o4V*}9B6Z=unN!<mauXw8`q9+ni&eK;3Ut*O=(7*fo zaHm)wtUas`<LOx%@^4u<k{%_k5kP(sp`AqjS+Prh0P3Vr@`C&XC9gJ6GH<uw^k<Cg z1*6s>Nhj(g4I)W*8%R1tkW{CE-hwvcbVz-|%SJT+Y9KQ-9@pf78`2OP*5uJBClu+c zND{SYCF%Q7Exj+|_knZ^Cv!iDE-SPXQBA~OD@9hYd&>$=2(*GNf0jKMq=c9(mMHx~ zkbKK{{t4oxC5L}HF;6iC-C%-8%MJX~4L>jBpCDLTKBA}<KQuRQU6IhJAkuz{N=5bi zWWTR1MPC~B`&4<lFVqhO&fK7ECgH}9z;<n^_}npPtRtbLfNOi~#iZ+^lxq(<SQ)Ne zDc8=}+?4mHCS6-ouHCWnl=_CJv}btA`#CA?$w{g2tAtuf*EfZMw6XW%-SkaZ-=38B zQ|a+~%J*JO>F;k-`kP9hMTu*nkBVCU4CCA3_mPT=bz4!()JC0a1~%$kvvY~gHIFRO zxn}4RookfEI@i3gSm&Atuh#T%6p(^|@c%rN+Wmxm3mv#EUjl<hD%^?FeFdEED||@` zfr<vW1yg{PXNXKK3-+%g_Qucw%V}a{JX2X7Un-OVQOn$=LPa3weg2E|JYCq*;m-g@ zK)Ju=#FJ(^Vzwp=n5y3```z97-3|Qi4mptD?XWDulG5rFOrNBOOf#Oquf0qr<9JO? zy0)f_uRUdatx5degKM!bk^E2oAt--?;2c^A0(v-;!K|I!iw{@Ir%~O;4pi(;V0&Hi z_#+cMm63bgsL+0ap6y#_@1EKw++qb$hBC!mvw<BENJD>F#2Jh>;NU!ELh_C!*tS(& z=snlwkKSYtzyaWHI22>Lsne*#TTMvRgpejYGxe|$epm^D^o8W3o#@GG{K2s4C&>Tq zdw+PD$7FkCC;1lcuSvzf&(RX<ke>ymL$x(OAykh1wZTEkCyKiuWsT8%xx{<G;5+>4 zq-r?ajmCJ4X2Z*p+$Z4OR^Ll?TwH2~yO$7p_SYrA=fJ2kW0A@kk<#3_ekr`pSEH}d zYCL{(!1_UW2{n^#cE5L_$F|Cku`7{f?sNnoo31a7UokRhbt2v^;7n3KPlTyg?$q)I z7L1ks$2n{(I{i2d*8Z+8^$i?y<#%cq9gnV~zgR+8B}v<6h?>yXztSbR{(X54>!01Y z{+;>!@8a|SUOxX*;0;?EYT1dYAv)2ipfUh~Inik_KB$n|YdE)406Yo<Iix9w7X%|$ zNRe4q21asB9)n;*H{zjkiah|5o%UeV7{b*|Ij3v+1rReNgL4a1Yq<puFl6fHAqnql zbV2!+AQ=}sG2c)aO$#}NEwTSVe_Q$T>#oc&1;QJh$a}S<Zf?8YY-%5yUuS-c0Zba5 zCR<Z^hUT{ALn%f!7hC$ko1sOrKdac1g+J$kgjQ@h?SY@OWq)q5<tYA~g7BQCn&MJ> zr~>}&A1d>&%Mz}3Jmc~nFG0M;^T)7X%RzLa#u6ebfwhOMv{D_}u%F0E{6a~~lI<Ex z;5DWFZLd!Tnmvg$Q{X7m{5v!IgptRpPv8^5#Q-$8D>wyj5=gO<4)xMUTd?WoQh`Ls zV2<+|G*^JF)NIND!S987<LEZTUKcrO?_m$J2)T7p1?X`oV@v}q-4_ZR6UUN!$OX}_ z4#0}4&~b2@<lTgJHC)d6N;vN~30T7_!!+`(JQ@lJu*rG^M?8pPId|eHLg8d<n#sWp z?B&RCOc=E_C?IF$V>(p<!i$iS_#&NpBX9zdEtidCXB;@BHBjti)G-_pv|#nzaf;## z1j=HL4pEr~7uN8M3`e<qBc4^L%Krqx*@*&vKLXDI`oT<p9v!O`V!@)(Fp3+=y;mU0 zKIvsQ_yde6i=1!3*f;(U{dZkx5yHT(!j?+Z-5r#Q{Z43IvELo)3sbF5S$hh1g&?qe zcxgT`I32C<x7(DG0anQOv^>LkyMCrWe8L=>N`A_o(Wt<jm+uK5HjkARY0f_yuCJ6S za_T#&^~<dB(WTd0$9hMGoD=4Zy&g_2gT~9b*H>n?C|8dm<@iK(yA=M~E`|RI|HaLV z-$$jkGl*VJ=<{AnYV8lysw!Mf+(NL&MzK%E4EFGMVdNPafZC)v8>P$^zZ~o!z|e+> zwXh|g&fg#)?*sDpS=R@RPXdJNql7yKWyi^zen|$d^T6PPq-b6tT>0frrST*VMc!z* zM01^-Hwu4o<ce9tiZ$SOQNDOe!=88K;tUQ{M^q__N1xC|2&P4C>G3w8_T3j_BjgV` zGi|X2uc<xHUySY9sl<Pv_Plg4w_>ceYX;?hurLG}m%Iq?Hj^i0o5*t^T-@b7l7@-U zpn>E~GlagU`h%SRy}=*Ed%P>vAH-<ibqo7$-2yYk$CC_P02fddOTlaB>r!yVd|e85 z%@<OzocH^Jgpj*Kv3+6q_}j<2eH`tv@z0aCK%;%^1Z;lGmEQX)J1JQKmS7#|YD7_* z)ykc4jrQO229|}(>uMt9z-|*gsoQwcWfJ;YN_$f5!ypp)IRB+J<=UQn?J~%(U!};S z9VzFLj+FDwi)TE)xw^@_i_Um{^K?7UU6WG2{EW|?vB4?dJJyxl{^V;<Y)@Bm`LE9S z+!cGhE9JbFQvbt-Yd!y{HRal#eC;yy@2fMO7oD-GCgXV`^|>o{jVbxO@$iqJf2u#$ zr-mu;=D*U;KSSv3Sle3KjNtg!9L#s4-eW82n0{!+_2-J;V2Juj_A3Z~bzCYqCNc1K zmGCeisj$00LzVDnI3hAOK`Dv-8Jg7keBsZ~H^rYp-J!WO_~Ltnb6qN6o^J~0idmh- z!re4YxO<g6?k$Jxx^TBV3lALMkW<AwWrd%k7K*Y7C-N!O749knS%Aa1_WgpwxU>UP zC|7xO5_z|lkWIRs)MQZZ|4_NTTx1>>ahOHO;||raf}S5?*LW&a&V@J~$oo|2#$Sk# zERWjaZCh{==NKsl!LptZf$Nl#IUr2%LFz+tw#A6Z<e<0<wV*iY>B6D>+R!;1j9C{S z$kx9P(Ig!e%XeLT5XFEZ5}c-b^bvcYzuTK6fCtH<&cY++V=UYi9iIvE_Ei)i&`Vi- z1NqqwL#6Fl%F3KCVV2|0EJgyYBS;(N!GDksE_QZDA!dZ{*2C)Cpoi?Tfn$Y&%=S?% z$k1r6co#>R(s(B8qZ2aztG#K|kM`9^{kh&0q8p4}{@2^^<gm{#E96r{z}lpVq)ZwF zdW0bH*9KrZ18qkUe<A<^xmsh8XMd6Kx>MQMrmDi<t<;W3K&03Ec=FRwU$rE+<LHoa z!N*rK7-F@M=h3!1t&k|#Te${?B!<52B*}-y(PyZA%BtJh?p&licsm=7NtW!bJOgu? z^{BFdth6W(!@YG&kV7~;kU*6{D$J(TBL4NmDHrDJ_8J6<uZe&-*_u(~_wEe!Q(Laf zfmaq-Vf1?8ZM6k+Ytqg6h-7pT&e0*52JKT1g*Mga(K#Kej{Vgnf(zl|&5KDV`fNUC zF;E@XjS>lR;gQ;ch33QkHwI-<`mM^$&B~%bkvG4w&rkhQ>+>VOOzQKC-*xZvui+kt z01grH5B%k}EBVWm7h}#QXi^Y=LRbD6oKI0j4o{uPlC2zVRaIhkx@>BZPx@_Tr<&Bo z*K>=q^%k9)lhh(dniiSip4<_W37?(24j=pTy=Ig0NGr;*Q1{18A2o~wd8-{x@r&<e zpQvhrmuNa%-&;e#idzUHOBsBUrcQ!F3+HI<nU~z2rf<8q=RUZ{vkK<|&Z<Qtc~%|i zO|uFojdna>c~{=245%SFF?ccNw`+Uj4iXVJvEK0EQz`mOC|_Dj<<C!7erlTX3+|-y zhb~G}e)uWFewKDWA^$jnv^pBO&nZRjbHRUZay9Mn3t{X&5XSBUqW%s=x99|`Quh~* zAGJskCnFl5wo<s2Mi#(<Zb6aQ9wp<R*8Mzy^qEKPACa#8b5Ew(kD(zPGI1i2-R7Yy z2s5ied0{u>FYxWTSC~ybAo2?RY=>VsOZ!PXgdsrWJHM~pZ#5}%_p{q$x_p#!uh?sc zy43Fe9O+#-jtAvWgP3qccjZ`t>a33f5ho>pi=eUw{V&#I_?MFR5|h|L?i8Dpx4y)d z5axgj&d%hhF#va(I@I;llB!4Z(YRDC^{Ev;a>wYP7yxv~IMUr6qX<T>2X_oZf2MTn z4GALbog!gE5WP!JCcIPp8?aYnDX*OFpMr`%Wz?TV*LdGob}5Fg<!D|g1L?qt=g(<l zv4?u^MyaK!M<)bmwZfh3bVBY|^)@M5;Y=83?BwjjCoAeKZhNeCOP&uXtzn|osAbSR zksPvOn$!_qt?TH?jkP9H(V!{kBl2_nXAP_B^X|~~^Y7H^`uPWHbr-(T{1eR!C+5;m zG%q~FKhYm&GXF%+KRf?~IXW4pXkM=iHP!xVW=bOnf~K#xs`7Mecl(sHyM5}AJ27&U zT!jcv99cXhG@|(CtkCckOW0le!WB!{TiX$ci1Rkv_+0d+t_)p>0f*sMyYkjf7E-hl zJ+40to))$I@lG=FY0k-V-p~uQ6DUYH6YYxpJ`3P^D1cuZBLN&2AF<4I$4fcW_`ZB6 zk8ek5tuVe+!>CsEIM&I7++3><a#>=Kcg@uYdG1_&kVk8S9GQ&9qq6gR7(>->mHmbU z$p4=4d2)^zp9?xu#z*x#WxumKKRJP)oZb1UA&tG$o^l?xrkscEDd*oL`;Xql|AwK7 zE!**9_31xCzjR`NQNQ&50M;)JjnO{z@c>P~v}?e*>X%jzNYyWW9Y33XseVARehIIs zJ*5L!za%RxHw^gq=$CYR=~jyL+y@&VO+3;Sbs$%-Xx+p{cpo`iTSgJ9uaM9n=9u|& zbPgX%`^aQiob%?L*Uc(=;;>;5&o=+hpPM@W&r6yAyNvVyi?h%Fl=Hi4IKQ9#y!-hb zO-9N331^Ca!ucch6F+`FEK1ftI7yOVJ7*OoK9`SI%0BqBPm;e4$|nNemPM9eK}$Rn z{y|?;d8<<R8ann3twhABfSgHCJhDlkYrT}f*Fa}7-I&L$l4Emg7(nIL8ruWJPpF0_ z_YSfeXY-Ol4!i;@NJjiWc!<a^QqX(Uw(?7?QhiU7zsA{@t5jvEAXR--*wP&{>&SeI za%F}AGYgwrT<2b7Pr6f3>rT3seXfAIEhvvr0`ehrJIqz$X2VB*X81_ZdjLMN&CDK) zP(=<_5iG8zk0kE!M-12S5lPO4FO(r?285S;KsaZ|`l(20%^E5wD?cmpYIhK@9NH=Q zm~HS!{0W14;mbV@sxO#2s6S#bX~+a?@L<w?9AQ-a2fSa4!IZz}k$lM1<47t%<hiEQ zk*w`Dl6Boi5{B_eK>imGW4`H(!)P&`eHiPy4P!ukS5h~^U>-T!U=n~%l*C&Qoo^`$ z$anb=5;!rCDe;p_Fn;nwRAY~~D$gJ2I@kC~ef{k-H4%h`AtxA#=~AXcO;Asfh~yOc zPPVp}x;U6K7JNomZFbLx_xcpGN$3ZYYR&AqR^{Z=CPTp2zWrTlkGbYkzL#=_5{D-V zj#5bdAHIEAI<_+y^^;xw_TA~z?-~5VK9o921pP{Yeu&|Ra{zZc<>;=S4rHmWsTkB! zcahn&-ejey4ApTnTq(n<X;*!_e}?Ie+xe(DHd^wma{7>#$deILELY`cnAk-?zQ6^) z(F%>WSMS~h66T|q<U+K1jwB2rb&8c-;Y-vhup{@?ldCHWR|+S2n2?r(muQg0d*`<_ zsSN`e{UC2W+PiisOJqi`A`35k7)oF!*pvO(EQ%t@ekiGS%E$fkHr4Sf7lV5kVvY?S z&<0XaGE$^RwaZA4@h;rLFL)m6$8{youfER|xSuIN_BBC)3op?q;6n=dYF3N>U&=kE zGjpf%a9DJ=uyC_R6YTj{7bkk&Zs_^nE~cKpDsa0*Kq~nm7D2HKl!dcsxNQ9h?ZY3f zx*Y~gsfuHHB0|&8I0<OC{s+9B^;agCl*3jNXono5g)Q12iY2)5yR`XZraOhQp-?y} z-{+FNpVSXdSKTLA-9)GI)W<l1G#_Jh$1Df-EQi4;cc+_B>GTJ_<WP_l{lSBp{(u8P zHi(@ZRS1M!vgH|*09{3^zR)9Bz7dCQJY%0H3I8M96B>jMl77&>L_1pV?lGRjN!y$+ zodTh|{=k={Kd7#h4|LNX$O-*HLMfta4@fccucr;YvI`Z0?OW<qB8FuE_K1C9l2juF zu<H4Ek;>Haq4uC0aiU>@QPh2!(ja~R7`eEcdIU8-hQ4j<-Zz701f^cZ`LrInGa9=k z!J-t5UU2CQbg&u<>-xx<x+CBpXNWVXocB$h?(#>S*L5hQAgU%jIJw@SLMc)4z$$Z& zn(u}pd`k3uvndir7#tOyG0vtrYGC59Muql8X~iK@i0HySrZKUJJ4Et!Oxxw>WJ6KM zhFb+%zcT4Pbnd{6$I8TCqhnaqa%`fOB0+#|aYYGaFLV^rm35SufZ%3c-%3?kemhHh zKkAsXmp@dc+_2iPW%j5K<>SKLq9u1zOLC;>WGCXnr|xyQ(TQd#*V4z&sE_FRd#4}g z@134-&fnXzg**FyXYwn_UnZVRo^otE#EqevGkF1na>&>peybyzy7b9)Jz-GS0aG>D zrKm)0$q~V1e%P2ndeXF|=-P4%bl<iXPMgi8zV=eT7K<WGjmU^JlV-G?lRg?DV&N>v z7-N=+v)KO|H5Y|3niTKef|Ftv>R^g#DvU!N%oVrLPiQx~59aOZZP2!~pHUzE@6oq> zIbG;m{_^%Y>cgo2jF20(Or4o@C|=P@S$rJ_2I0<)eV<?#$M3_v45#G@cIEz0RF$MT zI4-}Z^!WfcqjuKSr>DX>&)<GLe@D#J=I`TM^!fYfqs+zE1b^E6J=Vc2z31k{{C$46 zHh&*mWthLdsT$U~PP<wZbn1|R4P=}CrtmOkZ=s>36`Gv+~E&SrENuKD&AO*o~# ze7PMOptJS+eAB!Y$uUmIr1t>p-;-edPNeUxo3Pzs5JIf;ZRD1wJheNS<h3Z&)Ui({ zXWU4&C%l{5qiJw7sf9hJ&XwF9-w|#}tx^-I-K$ek>Qwe1{j|=VG;~hu%0p-E$`c*k zy0ZQKbLdLC_%KH0zSD}aO=K>TP1?zoBuPH8`uW64$5lF~y2J?-9ooF7Z7ajH?HuD1 zXx6t~J)J-ifBTDXx>8P{4d-wImDCPC9A@Ry;c#reI2~fHQ9K^jllquM(?rg}rR+k% zOPZeln&R&zD~Zsr|I@6Q&plQ&pTimRQ#7qUMJ86qi@@h)(elblnC*xTYG&Ot`iQ@3 zCL8O9{O3?Im;mF(=~tqTNjGzRyhPp;ZTMoX;l*n0MT~7$95~?U4=-%GXb#l|9A5Mp zUM$jHME5ae)kb^~UdZMsd}{{W?6C9A{4BnC%1i)yF1Wl5_mLOrx#PL%BGHZ%d4f`e zq6=dcF!l@zb#m+-sK;V&ABfOO2*J7y3sYWE_^XJ&N5tRb;x8pdg}+wu*Dn4#=`Slt z@$XaO?{l<XP8&!F7=B*L%nT-ojV?owee$ziNgbtFf-Hd#>n1QuXc#$QDz8Kdl^L-( zFsNE}WDG<%h#iCxM@V|M-?Rp!F9ltck2$Y#8p>56DD;+@(d?Sv)etj-(Y(>O@hG+s zXaL6Ha;BZ&K!%sHMV=JEb5%xw_Tp!0%;x8z8JY%aWM`Lp#-YS_YV~)BD^Bj<cY5R- zd}p2h4zXaz4zkAg&(T_iX_^UI)WiwWBeaY=3TGp5@^+GJkxo@^?9Sq;=g^g3?l{M; z*dDwd_$W34XC<i_0`h5C?NFT8R&!=`<u~oj|5A7US1v^s7p=f&^aWcf|ER$;it4zj zzd6y}8Q4c3=K+gq%!+A#;8}x2ULuhj1yDEwSiQt>t4J6bb6RT*N_pn{0Kxrq8mAPD zYLy4SQ!5`=9i9DvU)6IW*_H2|Gs*fOz{!cz43WFqP`+6!-+(`gXXH18+!%O4T18EZ zW85iM<s(pnvc8?2CmIOhn&w2`e(0IJA3ut<+8(lzuh_Ag)jcdiN`9+h3}FD1ze8iV z^Ick1F22dEzm2iXZ@kMxyGD4;)Y1LzaAZ|pIjpM255eAs-zsXuZ*8FDoK_|xohc7( z>rxpdU*m#erYK{7Xe^;R%I)2`L1zT^n>H|nkr!aVhma5}c%g@p|G<VLZ)@&N&Q50> z0wT@T8^sW)j$hl%CXJA%@a!h?lu~Tvx3Azpqv%QlO$f7zs*r+89LXtf5J^m5qcWJ> zx<!C`zRK_kRv^a*+V_#D-=Tj?__*q`{bnORpKnDm;&)rSRNu<O^;aOhk(5@Qwul03 zoN2Hh<YCi~tD*DNHu*cr`x-M(co+Oji)ZX@WLxwRe1VFlR+*^kg}(e8`P&+ZWb-H^ zV=LKPyHp;$Gx2|tLPvbZFyC6YbP)^H()Z6a@eIrDD)G`f?WG>qUBh}ibqnf}V^0&_ zs_2lRH$_|i7kcyE=AY1;w>STU-b6Oj?m;N9X?k<#=KqD>4Erg)IkM>|^yW=?X<a6z zN9UCfCytN)t|Cbfox^VKMVK-u3Tp9cGZQ*8&d2P!X^OyXB4d!{p)Z8MNHIe%aUzjI zwNh3B9i^Lc2omRDWu&pCrYzF<s$V`9koT8i+#-q=fk>mZGP1xPjQ(QTNDA)yNBYGh z2;$7C7St-j|Jw!LAc*`vn7UO~Iw`=E!t=tlkC9X1KoXEUq}Bu3fz0-Bks9iZ+r*6$ zIm;6n`+Jkr`c-yGc=R=DD6a!9QP6uk8_n=)TfqCVt?6#stnnj3k<v*^^@LIO__5nN zfJfRnatG))#LCWfjO{?iG*rXQY)ha2=NrANn6}W++X+RA4LXZ1mxKG@7BYnapFZqO z@IbYg^<h>uh-B-hA>wDrV0gtXz&_vZEx<lYgsyiOZQkQx|93n+krU4Mf$KU{FPkxs zs<=6U&}w_r%_)0XQ`&QKABwNjQlP=+LikOV#h)QFY?LBpZbFCH_clewHSMZDKkcwq zxRsy(O;ri9VV2pH*bPWD+MOs@rF6ZGqrXjce3640Z?1!}8M7>_a97+vHkxIUo{}>0 zKxvb_n-=w!)*oSr0-F>*ctnz0mF1s9<pl>hLxV`tyj!{X5*)A2#4vP}3Efp0>#oYI zri3jhT4_?Iy@4#z=rV<zQuuzC9d6?GQfXBkr?a()<_b&~Ip|Uprq@{*<M}ptNn%V7 z4`F)1Hv4OeCGDi-H_=8+ZHGD4Cu0V!T^jr#>1kHB)L*4NwWmI{!_z^9N8|nRyQ<?} zY(+<@ivvLK=R|FlR^`oinNus>QsH*xJ_~Nbx053D7A-K0^b@Y2ygAKK1)>2-K|Cn- zDIr#X6T|xK3=`>C+bxdcW|KMQ{vzQ(0ndMzc>et{eC{+vooeys?=Xag1BkX0RxSTJ zi%1tS@=<(o1HQ<L+-RNz6{1pH`P=6Lb#EBl9hLaZBUoDbD>Os1xha4Af;?Ng`$L|^ zzm%*f=$v>?){~pt$dGEZnaH*j%~k9dZCz?QydR!MJ_^C8M$*TcQNOU3AlnY0t)0M< zZgK^pl9j?S{_q5{?)|`Nw;q?g`|Hm``&N2WQMk-?ob&`y3SSh;0s&|&tmj2i@l5BU zY{@&*wa}tWI*5B)nTfR~ky%#Op+vGJa=-Km{dv>okR`VE?;xXpgTv0(3lW&<uQ<%G zU!Y>)IiZoGh<DgPK*qVt9*8V(qC>uI?QsGz`9@lIJ4b_K>|v4Z!AHpUQ2MG(n2c^& z(~MbTqNM|XO-5C~UJ<QWt!!Q^6nWK3dm}6I?kQqLTs7{DPicz02s=46bJ`b!8n1|C zQN{BbtMTmR+S^gb$1UQ_uWV_c=<gdm?PD?QQ5Gjiikp|W1m!lxhbmrqucVGEf|b-G zdH01JOxp<_a#X-SetX>QTdCIfLq9%w9F%f~1_vWfn7d>a!8_CJnC)(wJs`hd87;L2 zWYh8npUKvA4EOcqczJjx$r22*+1B(GiM|25fB9mcDdfULd;WI6&n(KoPcB|%jXjI& zthdS@swDlHWTzuQ3I18$;5Q*^Z<RF|MK2G*9@wrbYbaZaNY;2iyzRAzEST#L%EJ4R zet`&<#;>M+P=dV^Zu;!Rcs{%K31~Ma=ZpA6{Swq4ge$ZF!8g5<ov!Wi%wPn>1j!zR zro;|VH+!8!FV|B3BztHgbrL^j=PY~nbLnJ%>LkzzFQE<4S1EFX{mk9;+qp734cb|{ z*`K><4OyUn@ht2r)Q+7Lt)gLH=_I%#c#}V74n}5@OA{p<+=%(0pCeAV1wMKg%%}yh zuYD#q>a*EryZd)PlkDI9n!!Gc>MG^3WohiQUwoNtpWR@v&%TyypB*hlWwr-+Ot?F4 zF`)^MG-7A9-#Nw7lQ7)s_;Q?Ika{}RpwV2e%@IoYUd0Ruq&>j{j&Z@zCfqk+V74#n zC1q9=N!}Q)e`E>I3CaZtw=vAeNoh&&-3szak|_2$;N8aW2E7O2-9hwjBaB#SQBW?F zqPaN;qDy)CB*}XMihTD`7l=HE>n%ZVLA^!!94>?M>0kleJX&w5^nMRFcYK7^R8TeO zX@p5(3%-}UJK+8Qre~Bq+7j@#L+SsdJ5aLVRM4y1!Ut&t=6C|p+$?U^15g6>)jkBJ z-c_iQ+PVr`k&O;U!Yz>u4ibf{QDG`YP@)!C9<)NuH*)lpD7coBL}5y@s>EA9-odnI zBFQ_!o7T||wtbJlhdRwz;1tGkzND67pFL7>se2JjARuHoW)6v8Uz-tJuA(Tmnco2^ zYJ?dv#4O5xd`LvW22>Sp79FhCmH3AKO(Q!E737u@*#mO6-oGICPZTutuR8HoRcikT z7_}<Vzqj@>lGsH!Fywy&ZRstA6=QGW<U%hmpm7FXfgSi8=*-T2*qNci`Z>ec+A7ZK z`N}?In*Hcenq*ZtX2^d05vDHnO5R175Of(;xr&-g_2S~eQ{)y8`;0A+xC?RyaeRsJ zt!vf1$x;#;p#4X~*Dxi8U`~TKYhk^ub80RVv4C7>UB1i@OB#V%cKDv+ogE6VZl1Or zHuj;g<+hfZMW)?<zO3);hZgY8{)Fd8?d%@j*{8h3JNtw&iJkrN_1eyUqz>v1z$*5$ z%Wwm~(7(LVZ$c4jnLQ2zH;#4-WR8=#CxE;t$&2lh_dQ$Fe-a1IvMzssS9(nLT?TAh zM|((vHQrY$F2r5Zi@RhaY_B)L(@`NezJNTrH9mwe;&N!O=!^2(CW&{B`hQ{KTzX-? z-PZI9d@AwQFnX(;_c3P@eh$3PJ8b=TQe?b6zBquf1GrtlB$<GFw!9C!HQm_ih!^`w zq4o4vO6rJ2Th%zLRO~Ts`I_Tpbczp-2fm>9o%&o5=B&208UAKdbMNKLd?1xbj2jI6 z*kHA-yxNT2!22WUejiv3Lm(Yj*l9Z-jQd-AsgL7gw=0!X2<Z<Va?el3XOf8GGl%Zt zeH?zx#vK@+u}Cl|rH(tOjy{PhhUjnJrB!yDs6vu&u_hWDK^@)%vZ09=;8imvFs9-= zvHISkiMF++zGlA<K5WL~SV}aY`6gA3`?OCD(ViOWsJV%nm{f(?P{W_#d3!lrhL;r) z_P_*}^7UF&p^q!d5mRWErzSGXg-XobYe{k^l&2iZ!%$Wvj=RZ*LOsW;n*@EbYl>v( z0g=fV{=#l)6f&TeyWFr&cyL8XO>c5Gf06BVJdL-HIA?#6r`Pb@ecYSQUnDtx-L-rP zdT@M*X9@X-&{T=6=7*E!$5cDg=v`9lG!_93#t?d=OZol(V=q%SGT#NO@z$EiT`r{w z@5}prMfdvaTO>|dIYYy8O?8R$O`b~W;5j}3!2#Y78OmWUze8A}Z40uMvi)#2(o)>E zVlx}0ol3yl60nuDpsQkU1dH@;k!<7kN|{?F`CgB$X`8^-C+&Lc!A#tqs!$-2{-?8R zkBy@^<964LkHqR-zzL^RjaP{US6!N(umxvrME!{CUHi_YRM0?M63LO{V$?YCoosZm ztH_~b8Eq@Ifuu;4Dp3VRq=A-4fmYzNoj8F!irRuxn&6@$=D4CfB!b-<U%%fsyLac8 zTJeuh-kqKKW_M=3-}jb}CwOWkiJ%Zq?Z>Kw-lUbD)J&&rb*ocxODsGb(?+cHl-BB0 zp5O+~hUExrUcvIqu-xAbxSaJrdX%3g0X99WF>W!P%1`h_yHktQm;3~(mfzjYw%l0w z1R+5h3wFnIaw~#j`RyP{>Nr#Tfu?Md;)JZD+Z;2T4_>Ev`-j%$pzOk--GfEcqx5|h zKLnj$`Q;iM)~inbPMz60V$yYa2MvFQ33WDHEO9G!rT?u#li)Yg?`sz9DsRYV9>lE{ z9chiN@D)?Lf|+@fYIQcOD@^K)9C(lujwe>q%%EmDi<!xxYgh$$=`ocl()|h?V7uda zx>dR@gtgHhvv=yig%I|)Zd>3#jmo?_ZxT=5pR-ST=A=mILTvscxkQ6XYR^usL|C=w zsU5RBf}NY~j)E@)C*3@71UrVaC-6htv#)ZFt%B5EM34A8vF-`wI{W(hyxpIzQ{oFG zqEE%`Zt(B8-8;ecAg+4plA^amTYHwvLwI^#Y6T^4?{g~oQ@N(hu8|n)Qxvi&1;17% za%H#SN=vw<yjyC9=bDT-^@{e43UuC*Th;Xmb6t8S<=Y(nJ<`f0@Ac|&4*ii2Dxa4r zkCsOSM@%eVgBAiiEH4Lm3ChRTBPRP{V)s7^Wa%%#sc*QwCVtD@Pz=_)emZ$DY0w`T zfeG7qk0cs(kTga15DaV6Ns@Eg^q5OPp(X$iE!XgP{pE~3vNzKR3J;sAh$^@*XJaVk zaTzYF%J5!Y_<F1X!iWz9h=yb5mA@`Y6`%U|A7E?4yUFG9AYHe_+d#87nZ_RC+j1XW ziq#z-<{EsgXtj^AheFK$wKA9SllL!tvIS3yBk*pB)g6KSP4M)#^X#%hPlOgev5Luh zjV+AEYf?Q?!WVyh$}K->TBwgfm>IH1k))B^;<JpI#7!#yLfzLBH=v*iT}oa<OMYr^ zb(hMSPs1NQN0OAdl+^%%jb04@#JNQX-Upkra6jP<ron{JEBpanr{0k%5N{!ICurHO zqyjZU%ee&;ti=c(;HR_dCtU7f<G-*-)m!BNd)HiWs(580UgKrgS_u`BGSFZ($~Dg_ zdr}0YE)FZR=L>GqLuJ|o?ERG&>se6rVec!0C`=HCF3-Y*gI&Ea{$VNpe8Jq8W+E~l zu|ufv4!C^YvZ2&=mFd`&yN@%k+|J;GdPr^Uv{NSU1DBiLb-b9HrU;y*^hI1u7ms%} zhteVWtsJ{_rF1vFvYh!1cbWI*%!jEI1r!(IfjQYW#lw*}YKFXTif!}-rW;-=1<Fr0 z=l3q5zvAs17tKMitg~v@?x<3k8xEgr-hUl1^2-E*#diZND*V9`ci`Y)FMA>&N^Si6 zFEU=D(}&&rL<l^FP7eAbufwKme8#HP<VH?p858Flo-1XU1&KGu=p!_o+*}<fWyMuJ z0kMke%q5jFkJjG{)B}qHt7$?39+XMxmQT{1><&+)SP!j?r*iW{zL+SM59qOM6nYK5 z5B;$bOy21F)J8Ebx6E+g<?>GS?elJ1LjyWOk%EX@-?J<(;v^ZwojBBBLGQQ=ujS)) zr8miD|4Sz`t8&WzAK@vMFy16+DwH0&-(#;9^*{rR&B>iP&;OP6&9}Uj%Vky~Zd0xA zVntV^$j_2}>cL%K0rHaDx>ZPjxoHP$PG`SJ@B?6swt1g!hWmny5|HK3ZX=%E#$PaL zzO2kjxhkZ-UM63Ci)*aC&DAA7Yr$A<y$Yx73P)3;x4OO{9YM3FaW3r)#*Cd%v0pw7 zbAhMjXN>_Zy?~oP8(8Gx<J_O_dL?&x-i!6#t5`fAXFg63KBP*~ca^2^YcY{Akq-Bf z;bd9OyV(^a2Zqe>gqi-27DqnG3HIQybO<JdKnYA)`T1I6*bI+Y#ux$Eu|LtQ+ntJa zmT|#9q|zOY5`+cHB!r8;HB+0QyM$;jkQie*@qoPaO>A$KQYkJ5eev)>&`RetxT@9T zTPZwNG3C7#<#~h`L+dJ_!aC&P7jro@=K7RNG#t0Yy|i@VLHXoC)f!cE+nlmn2?UNW z{*(pVifH%Aod@AgEA9!>;--Z#ViIVMX_IWAqH{q9^!@f3yjAMI^C<0Qr|dnFltQge z*@yJ2TlPRO<G_n2-0m~e)0$<R@eip|fooOeM&jYip}!Mv!p*zY+4O-@=ePTaz`CUg zlyCf;iHqw{%7jS-2XW!aC0>NX{Piz#2W%Tw=>XB5q$z!B(c4EYv9FnRRf#G$^@vLi zY*s}!B)f_W=NhxgKXV<P7gZbzw+&>T_9mrNF!Sbx(X8}8>EBr^JX13anVskFGJ z^5vhwIMl4Jyu+X3d(Y!F5Bgf2+FL&ty@hsxd}wP?+z;Zd?oshl46hL^XNf7oxz7E% zzlylFq1ca<15bnfXo{irPIcP7k`cDkG-(>+$-fpt;EH0h=G9B&@`x(KY;G6{Hv5*d zdRvZhfKw`hXi{P<sSsD+0EXW*Rg%2%6^O<1*-p1$qFpx4_eI4NX1>~0@8lz4T~$u5 zDXNHqrg8C*$p4qVYL7la2bz|O(v15wGd#s)6w|ok^U}B!eg7-o;(}6DibfxGD;g{8 zh6>Rbpsqz@rQJ|z4vlc~?|c}@b<^HWz+ty1G|BsZ!3u`&pgvH&*KB^HS~L<ZU3OEK zXnDwPdPubN*iAj6C1E!uL`%Qj)bA#VH0^oF$w!?ZV$s84i@n@B%>Zk3v5<zv>*e4? zSMDOHJFM4SkBJUq5ouIH3y;N7M&~2*=oGyisP|^GA*JvC=_qh(vzzqD&<J_#<x2xT z+Knb1yp~(gOZN(TA;K61!uS)t>6RcnG!4CI2eGXVu&wAQE2g1-P!1=>KJW~fSC4|v zxscr1G-DYlJ+F+eF^xf#T)8@;a#e3pIa;}Lnb@leg6S+JDisv{5-lf`u?CLoyn#pO z+t2esk2N2=VUMkI!X7ue{z3&jdF-hIo;2-l`rh3>-qFUT<U4H7f9$E^Xh_rEMIU4r zy{28Ee5soGcx0)1M>NZZh?jnlj+he0q8azol+vg9N16t!OZlLcq_b>*4QwRmHA6@l z<C}xNWIL;bQPB8qpPWUco%ntvZo6vB@#d(q=qr`0T_50IKuD6D2xD2;Pnj8r7H<AJ z%_U(Ojq(6SVMQ;Jp=)m0jv=F@5NzMX+m{gNZQQm=0mO2-p8n0oVM>OgHF>jVNxr>U zqn!=GhRF@q=Ig}<Fk13UCab9}zMGKvkC&CJY*3{cRXzau=!XRN8a)hIL>9!ms7vb{ zt!4pWGNx1!k_fZpqG4Ee{R(GpnODKeq^q{+D>f+(yJ8rmE!Wh+(Jub4_MD2t$Z;j6 zigt?oA~;WDP9^dGztP6Yy*~S2PcwCQdOQGtLrc6}4|r2mmQUJ3qn1f1)~$+T9P1D# zj@zLwR-=$gOW%_OIs%n(1}K79DAfur7I$%~ZG`Nbw}Z~qzw5VtyEBTTDB_m3K%oe< z1(X&?0f!aXb<|e^OF^XtXOlgD?t6JjlY+Xl-$zOE-hKDqJNKM>&-tBmVDSwX6P^we zeqt-0U6;Y>_Amxd_yU6`d;$CMe4jGlcZYFbREFvpJW%@KgkOJb7@P$?XYBRY&_?aB z>^_X7?jSpCx2D2Ml_GmWA;0n&%`XPAE`TFKE><e38L5)zBj`!ZRx)mKOiJRXYANTp z)9!hQ@la6P1gK4pyc^mGdseC-YD&C`Dwsea&dCfIV=9c)*tJY3k#~r)8*UGgj8?Yg z9g<VOL>rZqT0jP>QAWsvRAh*rDzs7^+!7|A?egeByo5dRpyCl)>lS1#hp<`^Yhene zdx^$dh^y7-DZ^SH-@?cL60<pQJDCFu2aTa5wqK$UcFI&ppyCvq0`wL{`<{$}M7$W@ zQ2C6zd-0&|#)c6&))tP$wuW&;M#c`oUFM4Gk=J>rl5sRiTnH)B(Yu6>(nK8vgWq3u zTa*CUjB60U&mJ@gV0=H56A-{J^$OB`WWUa9!(ok~*qKPCW&!}B0|FS?W+H%#WF;eq zD8QE*)+xZ}8F=_oq|o7LnGi3l7GKtfo5PemvYg^d(#AO9K<%z-qL69~?LD7c9-%$6 z*_iTlzcM-p=6tGp!_83=(FQkLj?K=72dOqu(Uidz$*KLO_ZMG}py12kxx8IeQ`Jy3 zw>XyOlsIE`Qo=*yG;X2$cnj?^eRraXx=KXRHzfnm#%_%8*s6GJOEwJ}+xaKx_Dx7O z59{1SSgOZtiZX+^u9om37`7>X5y+`$%=4I#5p-|lC0lhN(>KIK$4?*X@N1)sSN42m zZ}^qPv}Q{;4!vf_ZTt>vR`;!lH?iMgEZqw95;})W#1ppHk4eFEWWSJ?finiP_kM}1 zb8jewtLzKDFMIlzCRpx)*0|+<r+Vo)Uha!3jOBjv3#_mM%?0tVxUe<pD;8||2d&@c z6(4UI#Otd}y#BqG1iXIyd3pWQEkhH|{8+-d5MJ-&fDAg#82CHn_fu0%v~xwv(6n=| z`LD<Cfx9Z7_&lF2oidnVKi+I60aCwzAi4KrMuajs^?;nZU&#N320a`(h4Oz#Xl(-d z-<(wbdwCu*o8#xfpZXcc+&<syJFtPH*h<LWu~K1e8(J2y7@)VqJy^YAa1TB|Z{zof z#%EG}qN<_|$zE#GdNQMfFeuHZoRRwvBm43C11F%~6HR6&Jj=qfWUl+t7<iUmc~cV# z7!!OcDYa8@^O@0-MD1|@YTWq;4XFd)W}0zL=MgYo6fji=*r`lQTaPD^4sk_@oU89; zS2qqZW+Oa{m+V+9i1bWPMi~kNzVID59wXqOodE{~N-D6smi8sUAo-O4@CPS5^(gSV z<G+9z!|7+(vGs;glaWpbCElLn$(0PNa_7W$@=?kAvp+bmWkFGJ-Wmfh035jCcLD*) z%6;5X{V=Hs7A8PKBW!9A5BZ)W)ic?;M<*03g$pNcUu>g@C`z$|Lvs4q<`*os@tGH{ zV}?siNlN<UsoA7eL1Q=NLZ0f>&AafW)73jo_^FiJ*e|6-d+)a*78bt^Gz>lZVVHbV z$o%x!4xFwygD}REfJtk5%W&v%P*jM07#PB{ySiMi*IaUaugmZ0sxFnWt7-;=N(vmj z8ohK$=I;)fFhy2Izv3k+TSlC#@>BSfv*EW>4wk^@PvKL>?@qtxotkGcXC(~7f!*%J zpac|tA`b6S!U~aWe4}UxfEN(D#HUPj`P|zO=^!a+bm~Od1^kjd?Mpp*?JyG5vK!!f zfiLYQz}{{Df?+!5*nGjCI}MF{6~_x;;N`9B8F+~akN9vJ)K92BWiPHFLXPlB^~e9s z`QOdeB+j>|jXg;iAP$o@@;Aaq0O)%f4|F6d5d7-oE;%?6xHFvQr*)YWFYxmq+&Su3 zCmyuBVEMvjAErH>reW>#srJdaTJuvBhyccy3xAj~x5NxmFvmlv&T)!KMkGtV$TjNO zy>ya9M)lD)$+I11#Pt?S7Waesl94NbELmbgoRmehTg=I;eXzUfrnR-tUf)5JU!2R5 z!Km|tbpm~RzgTn}CDbf}-l8H`lNt)OdV>{FBQ$j#DWWh8L<~amIGq+m1VFQ9>H*}g zcduidESc_HIGe=uaw+>fy=j_UryicLTdVn_@t$L2On8&)E>B6pk%aXQ%CP>IXY<~w zv)Hh27H2O2c3@yTNM(W9BD7Z;NMkw8C8<+g+DB-wMM^GT^#tk(I-WSoSeQgHQ`mnG zmR^NZn2PS!`KHMg&94j;<()wPD+AV1(JuAx1J+ovj$MH!uhFW4IA|S*@h0IgCZU<T zjsX~jIki#rg^%$Q2)%%>dGBkPDT#0wR7>?nGwveaK${EPMavtEyBL=QcY!zx6iT`Y za*Z{LxX6tnF1*5Bkr5YOQ^&0=#-gwbW~t@cBfmy+n$P~8dJ0TDhtz@$Se#RiC##FK z>^D%y`e7(dRxZt9wWVhff(9aJz<z9nSA+fHlG$81wANgh%N-EqdZ7BH<FH)1wjHj8 z()`K|IkKk`3$4dOipqY@S+8eWEq;W?StE|#pQMoD2WnRn)V_Qz;y~6i4&-HvUi97s zMW;|3ZS4Z9!yu6enp7wwVu_6(9kUj-SRZ5e;2i0xz(+@!x)<1m@qExY;|o%|JfyzY z<A!wPbu^`^U1Cc>;ovSg2i$@}9VmMd6+t+Q(g|!wBp`=kG56(#*9Z4yCDvQtM(7LF z{l185cub5<U--Fs37(sZ*XV9hg1bMVT36KCkos!Mkosz1h2BhFnjiGwR%5TE9E@aj z!S_OYv)V#?jCO+V_OPdBX+8owx+u`b@=^Za-|92#pqv(=Mf_Wzd@;&&t?9M6sr%h) zgQu=%0QY29Q#Q<L4*aHOH8=#FbW<WdSPb3J#k(A^vsCpMu(;!@ka)8-D{g-vblJeq z@{N#qbbdqbRTYiTh2cuH$YdivSFWD^rrK@az-SjtFl1~_5EkddeD55%uS?s0E@~v9 zoRH;|HXvR_dja@!XDt4F3vow#!)h}G9m?0P_O7a}D^!aSgMNFKjzO=eGcf4oMGRhb zq$I?ka}HGRs?AA2==)YMkad?M3PK;D=pgipI|K;*M}G-32z?WERN&Ba2#4Onml8qI zH|tRJtyJclpwVv^&oH$71_4OtwrZ}5&(BKQe9@6pF%b1l2vIjz^#dKHF6zn@_;#-` zl0Jl}Q%J}}DD@mdsmBcHy8+doCb*mW7<~+at8c-}R(qg12C@FH<aDQxziz82q(tHC z^9iBeI>7VQLA6^u>IW=(ey8`e89x*__EsJ@^!n>w4iIInYY|ocqlN7u;zG>|u8N@T z_vrPH9-{tB^y&%bKE_m+J@7<KV>ORN>yE{|zm1sp%XG}UD2)b`jyi5ve~y6bA77_~ z->EyR=q7iKQSf!*EA?_Jln%`>^}=Z?6I*f4bpjEes9tMqwKJh?$4b7U&dx?C0=Z_Q zXL-g)aUinhl_n4wBG+J(_4gF}<HeQ#AF%oSSlE2R{A=j_-lv~WydwD;?&4>kHsxPy zxnKB#O8qCLZRgSuU%pM7Af@(5YT8p0LciU8ap~ET;O(@=FNoV-LSVYy-#ihH437VA z<gW=n*&>i0oUW$5(_&Gcp=-B1gCNCaH!?_D)lF}fr~@P>Z=70-M?ku*DPNc~-&A&5 zMCKbKpJbx`GJNZ$B2zve42g!wtv%Y$W)Nm7x5HatC14-5i=P(p(}BQ5Cbsx|Bqk`; zj8Yu8WNP;u!o!q5)oo-E61b6gz%&QRD=Kj%5+B?8AI>(g`s$-DHgBtMt`Y(L;M6dS z9LvW^2*~jqt{yGyp-H^U{n^@I8jwJ_PW1SI3WBqo@CS70w`d>3?bSL6AqKbkOU7+Z zm9$o@qO-V+P2O{6E(p$%;69@^r#iLg_`X1G&dG)QPO1J;UOiK6+H$(D2jZIzYiBm) z|E<;LG_Y!6m0&7BH?=~9k#5S~@IEImmFCQjjVJO={KK!6pUQ!M)(h|t&m1BA!(Xj6 zB>2m>vjm@V&hjn%!yU_5fcM#=0(|r1x&Z&ft>^O(Z$I<b^A9J63M7fff@J>T5yL-R z$dc;?A1x3vMR#asPON)Tx9h&*C4+s%TMXI!ZQaG|lC?a@X*}B2xAPkx(EY~0(dge1 zKIC@|_94Hp!4K_5KIHIYoXIa>_~-X07i7}#>HnBq%6a(T#H-w_zbZ9jBlLC5Io6e7 zl`k5~S6o_tWgj}g%;Y3om}xpl=kV#6*ba5oik$5a?5fEu%7e4$5qXO);zDlprIOvd zqL*ZlZ2i6HXtnL@G-Tu?`wn8*Aq27pQn5Kyj456C9G8w2ldTK%a1+4S-S0@Aj-|u3 zW536+6>7#<LbgsfkgbxtOY-bl3VZJ(gP^Ux9EUdcswlQqR{S>E?aRs5JGoohb~X)L zp_aQS|7jtJgquKA2PHM5GYSLFW$Y$Y>7x|q%6_eL4?$ROG6P;?3wFxN3>#&`){bdh zI7M(?NlNYTscCgnOt@F`!?H3RC&_Qq*1?mj{R(v(w>?Q_E%h{}$-F{L?mmPmZ`hA0 zO>BMUqlAWi0mp<`BanG%8}uJe8HSwQdkn_mcjE@BL+;n&YWM87*QZz+VYA8-jcHZK z-Vk`mWX3Ej?{oCs=N=-qjLnSR$?M0DAll25j#lgVoJL9m-z~fSwuA$9pH4X0Dn-oO z4^L`0?j}_2FR&g=EbjhVR%T(umFgVfk7SY}<+wRHUWGysF=j_<K0%cej?rd+e7}gA zS*2aJA{^=Mw0x5pc&3UV!Po<uhMRV>*gYb-4<qIldL1(kA1VM2V0SP-pB&UL{gKFE z;aB)FVHoOdc{r5oW8_KPct$5259`aSv^)QS{moYk`$Kp$Ii?_&hzH^(#?M8O{L1oN z8F7xM*@2_C;NPucdr>pZd_GO$&fz0>4oP?CXgm>Sca9xJ4SzPfbBIHC3(SNCEeAm# zt1j}f++8w(>9RQ%f(L#7Zg?Jbkzd!ibmtA9(oIeyi=maP`{7_R$#CJ2g5QJF4`~(t z?h4Mzn~&j{Y!s#(I*1)c9|~Wb55?!l!=x%LvTxWCdX8#<YB_r8aNTP{;Mszh+NeV} zH+Tp6>z@aoc$VyAE*+nE%7jlWcn%?m6}Fmrq?CFf*908Aj_y5Zt0|V0QkbH>1W$bP zOWg3x7Vt!nHl35A@We?1o;Zo&iNmAlMAc%(B_d3&<5{GmVjY)QeRDh>5lQjXF?Pvf zTa4Ycm=yH1)!wUpZ~~5=e>g8*aQJtG3;v(kYo>>Vy(WG6koFo8e~krjOZk;>EP4*3 z;=7MxI5wE^z)>Bhs0=&OC?c~3TvuX9zEg!kWPN>7u#r==ot1)qZ(gKOIT>7$MjlPG zN}vkOswWq0J4)e2+b9xdXTXtS+`vG~aAUxV5z{PI46}@(LM2soUILveYz{~08l~P< z9Uz^xTyf1Nt__20qhrfCFM?~fxNGT{PXm42>0mM(4<;B+Z3?WTMoTJ2mf5fg6{@x0 zm+Rk+_?35sYpkmFp;mHXMI_SuZ$x7wcCN$_H1-x!Z0S92#2!boT3h)?I>*9=<1BT@ zrv|X6a0dsWkMH0lc4`DhGop5-HA$)c6H$O;uP`LD+J+a+zOK}=-p`T1S__oD^}SYm z!z{Q^f7XgpH#(XwEcL=77|m#$nff+-9kwMvc=Q@5F%`xJfpZF9z}(xfwOEYEdFgqS zjm~=^!Sg0IQt&+X+TsX$$^q@F58%~sh|?6B#6I*a@*91D_El_J^De`KV-kXa;+h^5 zQ|+O#L-EyP+k2<cd}M_`q8Aj&s@y>2MaTZ@BCxD_I0koYL_waJeGkBrzg$e1+So@y zT=~`l!no{>WEC}AEbLXMs-h><amhZBev@rDlJ#<{J~n&9Gi-42pb{9n^rt57PA10t zgNvM52_yRb4O}^H#bVIX+oD)Xq^F=26SM<`I7dMX^Jyxf#78iJ$^eZHfBp#C3`DBk zJV2n8QSr1gDmtJ~E0d1(k@84{^(9p|aThWq)er37R+M)pG#viJ%}=lh4oNjG_yaam z13Z!5gZ^T0I`B8#s`9BtRWL9+3{1P#i(KPiR2Ah%2cZm@LHmXpczO@8{{eXI`6>D~ zrYV<`a5p(qSktpdHb?xIG2*|PjX~QpD-i~w+~-1z$1uOr5&FKQ`157=yO^b}zt^W= zFoQI7N`w8H4~Q2b^B{fo0<pU}+0(Q1M&8ePS5@O`_QPKQn^H@xXjPrtj%by;T~csH zZtpqbhbMiW&zFtRil0L9vmzIJ0~-m4AC51<qB38wvOIZ%H8z^saOhU7<RUHQDb(x3 z!yMnK55(HZC&LlH`#9!o>py|&rEQTk3Qvj^48Y@dR}o_30-WBB=0zmwQX5&b<acPx zPotErboo4$xyy!W&p(On+~;7!)vump=V&rq!R~M?99DK(WY1)048jvhz$0bD@#p7H zq86#XE#Fwb_@=bFB`93!&1Xg6&F#|0kLPy}Ya(ztNvm0Kep}&1?pCN&rkV7UiXUFg z3YX;W9yCk#h7-ftDW}GZ`02V8u%R1Qzrtn(LiC(oa*?)sHBG(?cJ$++^-n$|(rzJt zsDB0$DX4$XS{STM3uSWo=S6uK?0B79_5eLV!oTQ?q4GX_;>=EK_4f<vKMmt^FxG<> zeXL|R`|U$GXK#|BQh9}KVqc-t3<b=Q*q$A;K73+*NJ`+S)lmB222OK-5{@x*_e;tI za@=i^f=%nF?v)(=Kd^>=ZDo_GVeQ`iYusV>+Z!5*Bw@QmL13V&QYVVNQfHFIO2OS! z?2q5m1xMAhXu7@8-kh@F7Hf?|s^69()xQIOC#^NdLYHktvVuEOXFKuzI|lN0h0^kN z!Jc4VCt~2Bk|kNnHu$hNwu5lJ2%5znhpvSYu!T7AQp|Wb`hohaiC%HXY6@l$sME(P zdv?HB5C0RHrYZGGU`;Ak)~zkPh7Z=BgVomxi!W+iBX`;2-223SB{3(L)TX#eqTfE{ z+DO)zx3Oyj#CETw?>!{Tl^R>2y?L*m7jI8NWO`0MhP9ZPik93HzyKs{UY#LP7rZg7 zZmnQ-Yn|k(5uh#BE#=wOvQHiM?$_Lmpya0KDS=CLx6-4t!A<v)0YlJercR@M51;`U zpAZ5NyAUe`>2V*1IamBrBx~$?>{MkLM%hz~P<Q$4f6}NhQb#Q=&@$Yn@J=FMpE~aQ z&5^9s_1t0DLzI@o#K2H%qeHC{LoG|8ec?;dJI{(ct5WD^dkSU^!x8+~j}2+0cHv_| z8}cFCopy2Aqx_-qM<0B27G-Fud^k{NWYC;fN%P=au+fW{hdB9HhcocV+(^W@(Zx4r z;*Gg*BiPiE!hr|XKs#+Ovld0ftiU*IMo{gw7LKXCw$EZ}C!2Sq7-vGuoJ(p5>Im*; zk==~PtTeJZ)dAIOybS1dUv`Sha-oG=_zl~PEfBV$eXlZ1WpFaI8LyIkMx{Q+==R%Q zG8i>Zv36iFZM2fS0VrQ<l*gB)y~5>_y-USk7S|pNhD=>B+`m{SL^%S-&Kj>&-{C@T zZsz(XQ&k-Q2cB(j0A+xhe>g^&pexgQ!)J+FUD%`_D$A8Td#fi%>T+k^AwAyr1h!RZ z+KCG6dAcxF3@ixF(GUqKsl`VnPY3$rLPa2yv>g?+Nex0@g0MvhuE>X54sC4(OS-t7 z>eCe$vQy2_cdGYu@gzs27zPFV*?L`Q7k1J}9om@0y>P_#0=qwSKaMQA;C`%w?T(5k zK#T%iLBNsU=U*A4l9{!A$oL#u)+w{SaNeRAd!chi=^%eOW!Swd4OMUpA2yA2Rx(BA zK;{K)l%xx@iG+YNRK4iY-*dI_y||W}>u3!=Sb~n>vT~Tj@}y`y_!2tTOJ?j@eiVC_ z4?_9rL*YT#GZM<cON*h}t#tzNTgCY?qSE-bRp-N=QDWj;U3GH<wZz!7^3W9^9Ce^G z1(qzs_6U3}P-nF<@)412EFE`3+wCh+I<o!GYj5o2v9hi$UprimsVgGY>3QwFzrZ{c zTSr9RATfoC#C1ZE2&YNRyu5~WiLaCKtNJ>)T75a5FE1w8QSWGYzQu~)GU3}MR3(Ro zZL*rOdSKofDJE|XiZ^Z6+-O=9&gLOrD5dgPoFfrVF5eW=KUcecE<$c~B>424+(JAQ zbZgg~WJGg`&A#EFKFWdn!;ywV)&E=Dx4<`5W&I{iLPH;%fGw7n6s%gHYNhJeaL{RJ z0w<6_6?r%yRHMNeaYQ%)<Wa!1N<2jIiVP0U49+;;b#(6cdB5ve9A7PEXv-T^DB>Uv zs5=G}bOu_1p1aoC=Oia-LHX`ne!qru_TFc|A8W0>)_>id4icZ3IFNI)oMa(etJS1% zXfbTbRczl|dj5Lm8!7Ymu?t*+=K_i|Ur+j6!LDM9=b%G~1cqkWPB#1%e(_1ZoK|gZ zNRe&c(=GnaMeeirUfb<`_OM&E`|On+T<PI*uCy;=KhJe~BW<ZDLXz^#UgCFqyoy8d z+qK#%Acgk%AMhp5LP0v1W>+Pmrs+{X)uJ36;{xT~C$x=1ce^<|c1zHJe;%8W^c|m~ z53PGqL@$KR$X+1+|JR@5gF;j7@A%vt-mAIhgU2@gF>1U1JFGc$U#{|kS@$y9odag6 zZhxo;0UtLtXYl)#rmp(gVV7N1?zV?|V`t^~6b?mC4n@=QOt?@igBrws;ZJE?B0sNk zsBXWUy*V2lP0;tKuAHs=aKv{d_oa1a<dExHLw(UN*E)1jw3m&TL#~Bu*Wn#BI#*tT zPf#t*pCiZSPgDp>E6080LCB(f9ly6OMvD*HojQL;SMudeUHxNM&<x2PNR?1N#u9o; zP8+^ced5nyefF`9L}2Fr<2hanH(q>mVPbEfoi$vuatvKfr+ky9$z7{ig&fo*uejA= zom}dj(^K?668^fCXOHs1tvXF=C`k{K=p*C*{7*tatbiTgLBi*eN02R^UBQLV<506& zN(i6fm4wf^bAPE#4+rV0=@=BTt>^j3CCldkmUCgco@pX)<9pac0bKgcM(B!5<6jyl z^|$AU284~M;BWNw3{C6ozu~lgGC8fEG)(Itwmg!_Rr|X2*oqePc$BEs_Oy3L>U-hE z{Wq6h5+D4JsrcZi=}zF_L<Hv!<y%<3h6{fEc?}mF`XX*Kxc8lhYSgJtj_*(_?d%=m z1Z-1YMiFZ6(>qY|Th{81j>%H<8~%WCVVngjDhvJ?Z@-8aVZ3Gf|Kl%p>^It=F8BUe zf2mQM>y*jpB{ljOOu=7b<8V43e_5N(FqLsiv%q1)bk?Ub&12(q{`ER@!k;Ri&wPT! z{?XC>e4c5X&l{_|%;(F;kN+s$VYG(-p70rs+6L_SV1sHf4BZXQ6}s2lVc+n*J30Xk zUD>PW=>*B$@|?bruT474zBJVQ1okj3cw3L((RBJrt8qF#`g@vA9HZ~@k>`#0V{bwo zWBZ^-`2KD@+igo;Chsqy*->d8J9$;2*`y3D@{|9-RU}I*Ye0|oHg9AABB!*W^K7#9 zsw~FypHRZ16DrjFvzw3}Loy6<8q^O9&`<pz?GJZ==Fj?TljaZi@yQ8)xGM^{n$&e4 znf_b;aKEhLic+5*GbQ}tUOh|qhr24@=nuCmUhWkB&t}BS&0qbm#mjwQ(7ymL_pZFl z#mgO<*BxGN@r#$l%kBB%W#Hw0(wFdZA8w-2T|XlQFE=yq$KmBJz2b84a{X6yhnG8f z<3;guZ=U(%@p5sQ7w|)gpsBt>i$8J8q8_Zz1%mq{=eCcQ5}>GL*@l>WHnx6A0y@9A zOzqw@Z2pq&!1E=`KMnTkn!8<c3Bc{uM=#-^MOr4;FX<kEUpMy7U1IR-OWA0~-o_x! zvoGQF<KS>iBy5jjJ*C4;m)>((cw#S~|6#l?MB8IC`lsV{jc!Ll@okdQONtnP)$Gbx zJ6Wfq+C5sQjx8WZM+&+vA6F>Uk1Y;H#uY1LOCsY+E(+^Kcsf-M4g9#;=r$VdHBjG^ zoQ9#gCs}2@9$CB@krH6t_3dKv!?kMBMvQPskgD92kRC*5RiH}erX(ue4mCe-BW-QC zRl&;pk51gE5|Q8h3L~NMSqU?owWwNaV3B;$naH%0IyWJpr{O8nQOPxjjg8YyYub`6 zBe<(ewM&OM<Th|xYgVSTX6&zwtvPxjr8Pr-xHZVPuH}B}syVZI$@*Vr<w*mr+j>9! zg0bGksrCNZ3;&IJr{FbRdVYC?`jiRw!wuoL-O0IC9(3bTqHqi-2)K*$yWP&X-)%6q zb@cg^wl3fB|2X3+rlcT#&NCpMzDRausAL(vyCSJ#-)94AaV;w<Hwm?GqBn-yKHZ4o zqPjn#>V|DUyqJ@zKlvqBj3#Tr!4)Px_~pqKG(m#3bXKvd?{Uvz*ng@0sbAONmrBS^ zo^X_h9ds1?l;s8FXWOTQ3i0rqF4TKqC*dM1@?@)cN;IJ%yxq_1E{{Wf!&0=#K#0K> zN$F|mGq39Aaiv}-kgAJ%dUbG7Zy1J84H*KIxx6{Ny(iXl6UP7?aK7-@X4#29!@`|r zRDaIY<UXj&=vQ|6m1dz{b1{o!SB%C}d>E_H#YQFvYEi2sWO_3F%5J~%S1)SbLD=-Q zDW;STJpAi^-D$Ljn6n;7q~cea1h*drj)%Z_uVkW8>p9jm$C%zaFID)&=}{NjEgZrQ zx*gAYr<-_gZgaPV?2gM+7m#tmh*N1P+pp$NS&s@dlHmT7<7w#RB}o^I_7Y^@T!Ex$ z2UnfKoP~Oz3xoR8;vj0z;OlUqzE)RbbQcYUUtiI+7*T>`boN^)cq9AzooEHb)v{(H z;`@>H$Q2>cPx@OvyoHmizZD#rBrsI-|4Q|h{a9XU5XQVP<ih8X_&hXp3qIe9&)0^A z;d41Y7l#Jn^C)~C9_o$Hqw%>UWQ$gs;~7d*U4yW$37Bop^l2iARQd$?Nul0V0{s|n zzjDPOSqQh=<*aafj$9CK?~4jJ84@bVws65aF`P<I@;{-yrqMfdjraya{g@I`d;A`@ zt01)SHle-&3%Uh<<m<4kp;(p!%NpWUOuV2tEIz@j>}B^rF^IjTg$wn)!W{*|lUCA6 z%Kz<{PHw@e)IK#29o<>Bs7K2V2P3mfVxPe7O%h*v+l^Nb;TpS1c)kIh&kIsy60GM* z4g#h?Fp9{e;?<d(v+09zC9z+VdIyeJCSh72#b9uYh?ycik-6ETfAP={f58p;GRZe2 zee-X0MK#f`=9fHgGDT;aGB)?s;&^cW^IYbn93;{ORoi!Q#8@{HtL%TR?Nr^USg1_J zK)<DdjgJDkeFO#IJrh}>P9>BqD39-bDZ>=WR385j{~u>n9&e)uyYl!a^pF$#{lz{# zs(pG~|CH&Up3pu;AHMIR6k8ZZxHr?zh`VHNOI3E*t?c5OUqSBU_2=tI$IT9_0I1w} zFB+_PCcG}RmmLo8hQ<6y2@t9M3EDF#6mL`WfAbtIlT4iIg)qUlMaJc&C0S}nG8B`j zEie*kiKZG7UCZ;yNlQ{@NK(v`*wd0Y3`vIbB-XSfC;vw>NeLz)qcMyt+aJkP^WUZT z#S~x4vly6`#jA-d<f0;V8$k+178RuHbP`%aaP9JU&8E9yDZKM8|NC0|!?4runN36C zZ|QsdUD3kd)ZUHXrT^*i^Wiz2ztQ}E>i&S0p19%zC~^(u(|wGF<1m*?&}TIfsx#5~ zI#aLaKSa%Z%&xSs_CLW6Dgr^WYzh$Z)MI+$LY{bRGVu;Aap4M5e+{5Lh5|dqo3K_! z>|1T^&&~0S#V6l4PeW(Y6qqi*mzvEa?Q!67iI+OC&EFiogF6oay5d<b<f&^2Wo||> zQ9PHl>E3uYQ8To!-<dA7ub5(>cB)awwL)t4I5@>~Pn8r2O_w6eVPI|F{#<uMT;NCD z4h|K(9q3{xLa47SQCncs6rMzD1Zjg5&3*PZ+zZyMTD;Y4@>yD4>Sr$U;tt2ujWGx_ zDHfQ+T=x;egxKrcXCdxZ+Ln|_jx~ihEePD9ZHAdK^va=3hJ7Gg&9|<_c8{}@+$R`; zO*)hG?vVm0I}?m7D2d(8)l$mNkm4IcmrNy}$B#Y(ds(!?>{``M+M5(5dIJrYR@{8* zp@iaQ1+P5ffgeAsd8Qw6i3(A5wwrW~jnW)U>OpNSSWs8MZbYqWVVRvMn>>X=t20n@ zrPH~<UUQ??d#U#09;BMKBDnW%W&*ljZT6~L#ijOTU!)ftzf14iOx}<2O1Dz!aH&vg z-l{EgGig9zGAWf-y40w&BLU)8CghNp=KG+9uo*sV`c~-uNFoz7q{M4)c}*v2tVs$? z7*c(CpfKU?9QT1OX44w&Z<F?SzR7ILg^6$$o~yR<zc;k!HCs~u^myZ63xq!bd8pSs z@idCS(s=o>6WvrI<BcZ$j}<Jq7QrNd4$VV<Uny3h!9o+qIA2;Y|6?hNKA*#i$rQfY z#QAOFyou>fuE%g=v6_F6Lfn28dHH73CZZB`pvn{uOozXjChhJiAtOd{PKP@>rr2v~ zVXGpTdJd$X1F7fCL|N@UqfmQbQn7Yg+aYNDC$Q6GR^xs%uE5ljW>+CA`eUamyqWvA z<z`;Rx&}?S+AK)hSLgl}!*wYEs=F)ueM)1{?d*?e=#5Q6y*cO-n`F07Y4wfR?p5~F z>mW=aj|5UL2gtV!u_cs^I&DFZb71e#F^bIhh8r@x;l_-hOEKX`p)F+%O<tv;Dcu)4 zu!h|G5?Y{H%NpWA+<~uQj|Mx{xBC)xeLrlVp0ZY$`6xz?6tF+wb#POBw4W4!#SiA^ z`jFZ<z^rwhYW!`W3W3OwP-g(f@z0WYZb1$kg82=_!}>pnTIu3oozv`4MYOY;z$<a$ zfs0q7kXM3~;|_SmeNe``59np=@gwcOmo2F6R1MTSojZIF<vSw>0ndN&V^lH4GljX( zqL;*r2tY!(MZl)9qB&gele`p><^r%WSDneUzh$a;!7TSci@ta-g<NVL7Tk>}>UN`@ zg>qL>k)lB<RjB#HpW;nlOiX-}@ou6NxJ+@6oGXb37utPdbEp&;6BfH)>w;wCNlOoU z;Hn_@0PjfZLzpHoDNH!_L07~~<1aSD0t$a+4t);!h6K!V{r!43y$0j`ep(&;N}EsI z6Y3@LpM#-7NOU{a>`JUzAB?m?HgT4yqvzsvT=GDdIwGi=H{79y20>*l-f$CE7AET! zs_aNFx(WR}KD@ig9E_BEc+oHFr&tjy#Eyb`2zAr&Vg_@~4n~&U(dml1?uf6(%DocM zS{s{1m+r>4qR02HUA{1I(dN8%e_C^bPA7UcMXgfk<I~t*J)lm`_*;pQh?u36f%pOw zIWQ5+(d!mp2c7&1@KyKPP2qbTbl=-X7iG8)bdi5XZ6h%jkM{2=O%`r#BiOn*xWAu* zbJ5I7A4E2%(oRwd9~?8$sb)O3j>D{p+h7B<n`p;uu5_3+4T==0CHgBos8u0@>cm~5 zHgzM9joN;PNi`R4X6}gq${j5!<Ly|r64nt+R_*yY$*K+UAtR#IO~SefR5t|A)-hs9 zqH3%j@}J?ysGElII-*#>YiCQPBxWA!6Ct4miSiC|pHS)dfNvP@0iSbsxd)7uS?Sg$ zWsRaJeveQ)m<+@Z3QzPU%H^O>IRrCEz7EG72m2~_bXta2+%G(Fgbrb|FM4-IblfNy zc#GfiG0a}MD(HggGv2Fi@j<#UI_`$A`MQNveD*t?p(8<8__59#<-*M~F)NqT)hXxc zUy)=%ON|OW)i|TCieJg&7u-*Wh!%|*Lw?5z*9+6#hV!?4^9@`JS{|l-bff-7BAY?o zW#f&GF-zi>g|MrLtfE?<%Y7iB2=jR;E2-|Xk|Nytj@^52+Df9mnJ!*ag?pvwqU;rt z>2bv^6k)dd(PppRr+n*HTIn80JPqqm+!u2A#75cSB72nBK^z)*KjjlULOGI?>uZHR zi)ZQ2@<%=~#-mVx8QR99HW411PyCEWp{y(P8jr$f`L~*K^pT)5Th2k)6zmtVanU!y zusA9-0%{@`dc*A&;ql3k()CsbHGn&K+0E8`&u_67WWY3sq(C`m3H3eDGXmZR9tlF7 z?+b?8Z<Kq(?@T!xes2i%M0^{o6n!WIOA9I%NEU+07?W>>_Q@qaWtVTnZtuPhpVm0x z3GOU<ou-?z4He8Bylmy4@t*h<?w~+KcgO)r?3_OfdIK}slgwxnWwcVuXp^4NF4o+E z89^V(v!xNAO8d@9&KIe77EZ;KuT#n$bi=%p{R$Gt{|$35mPQ=W5@Tiyhb6P!q2>H= zB4-=aE~luhA@&@p(GXmycJ&Pd-V>dQV*`3&OM2;JN<jjaCFo<h5Hs?dFiSxn#DzR_ zm^nacJbn*u97tqznXl~4Swv}E;TBs%2iSB-`4-Oeh#hGRew3GXBY&(wFed@k!E%?P zI;4CBKEH4ul0^;jmnc@7(WKalpD-uPTL!)M?=V?v8$vg_vVptFziS@eWagf%Gn*nd z6@FO|rOnaYNh@&I8}uOtJ+cTXmi(4F?begcqBQx>+-^1{#EFH>bT+9AVZ^#LEVV*! zU~!HQS5}KxiIL~HZ`mdXs-0fxi%fw5I9jI)wRKe2ocE>Z&CwHh>;~>}crCN+lI4h7 z3|MQt@M~XD=~a3Wq98hwIf$3Nfl3GRDL#w4sLHK4po`&TxY8S~%8>%FQ*M#7)kYv> z^IT%<{FC?tWbM~^;bv9t8{deGQZy&x4fs|&BqhfzMf^laP1jJ;$Wux+?%M{iTs$Y( zoN>6XuPi17VlH{4@JT$p)DUjKCB?|d2JIu{#FKG-d0c5Sj_zNQ&}+KN2oQZz0ax>7 zKpCr~YO%|wFg8JeZv)G7lv6-P-oiU`Aay3&JQi{f_@R+&sdURe$?}0X-&$i6=i6(b zOXAoip@YDspcWqru;W&@GT!P#Df@@Ge*C=?^z~d0g*lx%hB_q`d#Qrx|8~OVgt20y zuykZ_BUCyYPVZC8;T_w{`t$g5w~|4Fi;LDmeTx#4-K6z~>?!i5KF!3Q^&4VJj#afL zPfoXa=ao54a$h=}|I<U=Tu$<a!EBR<mrTGrKHLfrj*njzQr)<AOex1=C15IncHEEH z3x!bgY7e){=R4V4y)wLjXr-BC-OXmM?yE_>VO)I?sn8dxD8TzQ1R<HsxramH>NY4? zItp=&Sv`0mzVfK1%PT3_E_JUirHY#r0@~bKJ)`O3w*G}u;HNpL5-^W$ws*r&dX!k% zNmiJP29kA$LpBEIJ`{6T(SxXQUF{0*P(6|U$_JiELET|_xD=S^&_F0w5o#B(9Oi$x z#K+Fp*j%EsrYDfic`nNbp%Zoc<-F(^*dy{*N`bNPQOR1bWp0tZY(M04FYJAomDl1c zvU@G9Qr$^eP&`(rxn_vsu{&MX75&`euw{8}@n_Z*y*$o>ki`{o04V^3x(bwiV;*pX z??SlT7no0|jaG<twHH>tJ)Y$X7n)q*p&H~>a*|dhCuxdIEz+C)z7iGCHx$C?Ea=6a z$2Vm)zQr?;IG<o=t14->6q<Eq;M6sHAAPcxKItg|hunvB%wPq5i$n}12a@HCkw(Nx zIGhUJjNc&!>rXmWb|q!CLCZ=!hc{F+&?+nRE&Jt9xT1tcK(aXAH7FBcym@Vpbsc}i zk3pMh9Q7D3MY7h9<}cofJn06KTpePshA^YrqP;eL4m0}SuOTu8YKz)zqyjV4f&Xd9 zlMmt-M{RVRk)vG#G{=Ob3>~S}6vxKE81&&9sZkxk30EtkZX{HRnz@E+q3yYTT*?3J zdNhuNQ{2`qU{30u2<vAthg^X8yHR_C6dq!}Xr<MQ;CC?LJ6QQ+D2$u|+u0PWOKEb2 zk7e+q(RFo$YvtdAZo%E=fjOE76pA16M+bVl*zj{IeAS={f#&K?%2AiZrI2DU;uTQ8 zmmT&1d#mhM8r|X!IVU>ddSornwgLU+N2!JD?04bsdoJt|3~!khx595J&<K4njo7s4 zC_MM~hQG={5+DAukTr!rI~TTmmEjk+%s+<Jus0>=@5ioidsZl`uJy4Vo~U#-Zh^sI zkC2vJLdeVeiu@_*`%FSD)vv@n*j0$$UUoP#y)82R6PNhO^1g&-`jKSmBngGu1nnz| ze~#jAvnF5B5JYut&~!esnuyJhNk)p-W=nt@EjxoQ1V^*^cOd{nlKllrq1l9#5qo7y zr&>`CM+(rr=zAo*3GZMppufx&+%KYdM1CKmDwHaRcpx-JsLurY)ipm0et)_MdbOcY zs0Wg^gMvCJs1fnpIbADm1F{bY;1;32Rj6+m(HM6r6;`Sx3_G4M;T9F9g@bO!2`Iam zCgjHhO(t<$$ie<Rxl`q}jok^=3O95nD(r&_zeE-0&cQXz>S|49Sc*cpR_CDlUzkmy z1(LWUbS;}RIkhWhCc5I+&`H$pc$Fl6Ab*6+Ti2FmrMJ|p8KDNnCf?HKL`&^REKTK* zaj4gLku?M~)o~pcro*Ld^^03I&%5Hz&@lGrJB>9)B_X}W@yS|^WB*C1Ka>efrxcbT zTY4{^F0h6?&OjbsBo7XT&r!wCQN^2}Ej`kk$46}&{GBw*l|h)8z*CBCa%22fp<bYS zYIf^Dym}yFur#Q&v1<q75o`D^o4&K*ciV+}826?TjqdXMizGf`6^0Q@2P8?NktD}& zpL5XJxn`5V4alLB7x97o%^epT$Pe$-2XeYTkX=R%O^DMP?<Gs(Eg2-0$_m1c0&QrK z8(}Pk`a>hy&;=N-_FEDIYN)4Q*^3&LViVNNdeNGVx)TMM92^E~hAp|-tJv}Xk~nZn z`+_cKKe@nzQ_n3n02hQa3&=BgYYLqR!cmul3_Hd{z-~!tj1N!$%-qdqC{#v1zh7uy zJTn;SM?x;K(HqH<1h=kttJztQCyinsR}dlX@bGq(ZTnicv$zc2zJqvsAD#~_%4yEp zcW~BTKvrIOk2w1#jk7<U%Gv+jz}X*2<?Ndcoc-IWoc*5+oc$(^v;VYv&b|cM^&y<I z|A~RKZ^jlQYyZE$;;jAB6xKeISo_nMEmV3|cdY$)-Lv*1k+m%*)_zY4YyW3sxqFzC zm#bVzVe3!J(<Jfi{5z2uF7he6lbH}#EGIJ9#oA*!(>*Q8p%b4xk#pue;ZC*(62{9Y z$0XlR*<Hi=eLcs2k9A?=pM_+&c6}NlPF%cCZ2cE-@g2a$zvI6+7k_FZaq)eC-9N~l z^Zy_dpL$kSkrw0kuFWPhcN&o3BpRi&ZC<6(Kj5(c>Na?WW8FVszmHVoP-n+~^<D~X zmM|2tvJfE7OQFzT{s9eyvm+@7UE!k^)Rx<Qp1V~@9N*+VLyFo${gA)Nefk<w?|<KC zCOI(%Msoj%ZxP#n@xV$R_zn;J0}tF@K;QkAzr9{WZ!ht;Z9Hxxe>3s7=lR?GE9vbS zc!PSx7I53OZuqxC{Y*MU1_CT{GqSRk1<KMq$ubt*XD+%KJ@^36TjoQb&k#2unrBA# z-_j_FY*`jb0PNzP`SH3|xfl6d$ZHs*xU;Nr3#x&q(RiA$+NWg1=8`Lz6UF|3G*D8^ zu)Vqzt2x}>8Onxe#H|}oDUj3m2C6WPJCc)Oxc76xzQbvuHg<qqnAoBA0|~8BTxPe{ zSR?Rjln-+nFY(b!X&)(WNUq=GLq|T)NV4kKZ81{fPVgB~+XRT=#sCpByDDaoN?*9X zi&Xj&w6*f66;Bqf>DeKE2g@mNhW+zvGy@&j1FxzN`^3XS?RzkFAy$wAi>%bvM6|1X zhC`_R4Ug~5{z6SUB?ZP=CCe$)-2RTe_ccd!4S1|RM1=fK7M-)LkT}{+;%6}|I?<th z;Emp8aj+L}>Qv!e#_Pt>uV>Vvuh%n~cKJHj8EcUlpUv_Be754VRTf;e)*{(jn<;a1 zTv*1o%{q~rPVy({ee&sJURCa&RC!eHzp6a2;Nhd85o|h~#^FsS?tdEUv6GF(5L(!# znrv2%r}b(RmuTqnB4w*PT@H|Xka@@jDp1ot<unUjP*tU!)tpob2?)<d_8H84btPsS zR#l-EZ3<lC1>xxvCJL#si8a<`Ha7Jp6qJ3*#=y70h1<tRtw)v7W)hj-U<eB@Gh0pa z5Z2!iCIx1it;~)g7Lu$lCVSet26?8NoD7hr!EV+G`wRQ*M0#ce*{&1mnZ132GQ)ga zn=J&dasV%Cl<^#;WCz5@uX4lb%{j?8G_xey;+GW_BRV70y@+ZP%Ru>7TbZ%9x0mU? z4V@roL6_9n*d3+F1{!MYJI@IyBYYxWD~(=_xYaPwtDH2t#fUzK4IUg`3@z#>1%Po- z?kGoGOT}BP?vM9idv7G@0e(jm$dD|J;U!knvcA5+c&ik+)9zJrdiny^EWf4EYiVfe zR$imaOJTF~AzI-6P&RuJ@?{I)XJ?t}8F}0}s%9};7pIltMf{q8l;e-i&9<@?sevw~ zB)jfpjYkSJ`=X;)vg$Y)4|)S0lVoXQ&Nz*U)ep>s9;6yQPJFe-6F7gmTnf-tb?o zbthLe$1Scm%xbfE`?A%VErl-Qay_**O)g6KwK`IPMt6D2&bX1ya}RlgL;$`aaK7VD z1-oV>NlM#EFi=}WHjlk|*eNZHL|@9HDijyAaU(rRvw@vmL5`E~(%h#!QjGe~)olMw zD6V;(Fh91@^9Hhz`^!xvr{U&lcNTL9>eI=ERONFnnl2YNb1?-i;wR}7E+@oOmo4P^ zVIKUvCWT~Q(RB9VxP&2^gck|e5<;iYxn?%%CfpqmaKsdThsrR?H~g0wXEtxvZWg|v z5}#Dzk4`A`D3t{+WwO<UYEJ&2n@sTmdRkv}Vxe0ZTcAv}D!tVF(x2lEhFnyrDU$Kh z(NL%wmr4~br<Kr9Pu-bN#j4wBK9`4U3ap`#t7-~S>>~GphavdT6CQ@b13H|ZSj_TI z;$)Dsu%5fwF<jpBOS!a@#wD_v`gs<HMF<R;LqNhwNnQn;t>#WmAhBxehJ-0UH~CA_ zK`3V^NV;VwVJ)|WJdJXd2d!=~E(`v^Nmk2L)gPT{GbK+PL|Vf5-fRxjj*oG8d>9TL z)FN}vwuiEWzg#z12uD$=44&p^LsGlfVg&;BC>|4I3AG7t(xB~cA=BR^7vt+r_8Ncd zk5OJE3!_u*tnYb*d$ktDZbAw6KSp$_vFqT8a;d1jUA|Y#>KFWDiDy;K-$wZYWAnVq z)M5-Px({YYO`ct-`vTc#=fEPN_7f8NPQ`trh`n}BD+(Qau?QB0E=ruU3ZUUne5o~j zY=Pcz=$ep6EB>1SRN#%g_|N#;5MN+w9?u?<_|B1+O24uNldK1ZJzmYOhEn2pYni;t zKXda;UgU4L^74CpN!o8%K5QXzf>~I?Q{+9>qsV%uZ9wbULzX?tA!OuWt85((TO~5F zY$HDDE(+*AfxML({nDrD1b9(7;j~NmOX1)JHlUp2ncl!+yJQ)~UW4_646_(+H;3-^ zl<jvrCl|;9oAU*B&t4=Ledx^rwd|lp)5*SKuMS7G#|69i2>q)Zb`yRTn4I#-HQ(#b zJYBTq|7{rg2uRftOVUsU`caN_K60WQ&?^R0+mC1ZAzxH-`0<A6Bka_-k7GU8Xa*2( z5dSJE?WnfYi;k?l*s&*JMX_a{)8?JyQ})0)^VAyJ7yQb$)ueB#p=lswhteCjMOach zBV;o30T;3EjUi<=6E}w$5cyCATEfgqx+l6AUp;S?(_%8MB){zK<d^-lP<sw%|4&Qs zXnjZ9um8k_z2VJAX``FS#1h;#+SuE}5!sfE&gJq|w-X6P@CA$-unW1o2w9r|Ik4N! z4bl+&cl#H(6$y1u<B7gJ#{@KgxEPCkneU%bH*9z02|^b)zfSs*%^rmF`UsszQOgf} zLGWh^kB{9#yT^6Hn!)ri$0|INkIfly96NYYjug#{!2b^T|Jm>|$0?Is#MEP5<AADh zoMN9JOHegPEJ*CbV;9e6^F_1yO){I6iyfxW3bv-3v}fFo6BVHVn+I{qB$x`dWLC5d zjzj#ZGOMjppcVR*K8oh7h2749{c35^JDkodH+MpeW=O!{mXh-*G_K<Pegl%6yt7mw zTbuJVQz8-iTX?*YkP0;qm}%BBByCC>yie(hY!4seDe6IeslQ8jJ-iQQI883*UJd(z z=c%*q)qGB|M-i7XN>_AEURp59DfWK>*TVSmXgC0XLrd*_4O~=J`tTiQkO9O?rDj?( z1{z8#h7~wgT)2~$gfyjcD+`1fK@r$tMlnCY28!W2*0%Ov+iG*ScDMi5_PzO0DFcca zrU;v2mSMH+#YwX-!7t{0o^#H80W-Sq`~LR#|G)2_`Ej3n@A-PpbDrls&pG#;=hPiX zkzvnD^ADaU{pq#j5SdC5^w#1Za2kKVFWw?};flh$jc_NQw)MGJhwCfQOrAQS&%N#r z)RBDcYz?ql)hG>Li%XN&RZ(3z5^jjDjDZ`}m3-~5aLy>LDw(f+0(oc7M06~)^)xve zz=f`PZ<~nRPu?ig$o(9!UtZ~@&6TH;?5~mYV3pHQAI|}r%B>^Ol-~oK{_J=UR@NI4 zBkKeYHdlJEiDcNopcF8HG)73H>`El4pi2bm7fg9O5sQBX-za|~_qeAj+fL#rML)aU z!i+t9EiM@n)7F3h{d4WTS#pmObsRY`2gYB`Vj7tBmN80Cm-iJl>c8ote5*zWo{kX_ zbBRw^<#1ddW@^1kaD%<rJY3Wpxz(>Ln-jpKeVh0SwWDWi$91p2O^;jaVy6?=5f5t5 z)AqmT2#ND3i8DfuQw2mps4PE(!(W-w($k8yVV+i86&A7;9}2@NuNulfUW0uBFnz3w zb}U8y9gCPyD568|4)ha9x)j@&z(m;zg_5kGYZ!eCZ_7Z7!^-hbj)fb&)zho&{sMK1 zF;<kVL$lRg27M2|;cGHpMDIKD9I)H(0T~x#HDo=g@>jptqC7L!HC_2Fd4*@vqwQM| z3Ee+&SlH${kylAQO)U7)g8P7EgIqL*T6fhR!M#7rwre=Znyaq9CP7QqmeEs)h4)l- z&}q~ICqi#gM-DNrp$?dEsVa04j22?uyQD3My9JNS8RCEnyKHiDD9*bobWuEA9dfD{ zEKevjR;;IqJu#3}NHv_8**zTkoI)VnW9Xa6Fr$YjzAt6<c(5MhZo`J6$J59aIziuK ziNVQ-%45iF&4k;s^m{D7#E>hL{9{x{7i8*SbcUh0K~UN71L17z>}<z+hKHv+$o$;x z1{La064ayFv}T~(ZO|b?$I?O#xNI_J-T;kGWQ>WIC0zM&9CcmQOOFHI+|P9t^49Ww zV(JH^B<pk!k%`vZO~y2g&Okis)#m{2xTkbn0(5k3P?nA(-kyBlpFcW8#G>F0l!Gz; z`#T01U*1R8LUiY_?|w&=ml6<Xy7I}kl?+d|Bh7`a6G6`l+a}<Z%#2%8*XdEBEXiV; z+8S$HHHx=JN$XbS5qTOTrbSyu%6$As>&~J$nWMy-6$yN8HE!0()VyNiYjCBNtx5wO z(NYx|1l7?qc8D|XE}i8L$ig}!2WZgCd?`S)eFvjdTd!O0gbsQZcF-GisPtQjPyA1C z4al}rZg=-JDzYm{hp3H_D^h8Xz5)|0)R8aci6FGDedJt*PjE2vhtD9{mjop+CZ@;{ z@r{hnJ|-`9oMo6Y;xnRlfsvd{r}H(hW8Xq3VO<79P@5O8TSa=1<qxCtFk7XTvs|hC zc$7Mv&o20dme}Nml%wd4WCngI-$d9CcW!u`InnLlhlm`>p0DSvbXzGNDd6sK&Gfl~ z!jv9<p-~TE!ulHasiU>dlTcaFi(b#02X4<w2gZD8usJ_6DUHl=P;y9}cwm&=t86v& zxtYL=Y_oXEN&Rlok)skF_lB*#7KNijNZM;kn`DW~Qn%|rwtjEh>rQeCNlsD!c{amz z?N|Z5(X|bXDJC5;BpuQ3wj@AwOPq)wU$f~Blok+G`7nBuz4#!O-|4zaNNN(^$IUke zUV=mhUi>sYwS<1xgU*S4I__6%fd~hg^ERO$A*g84R=1nuOwjYx9Al0I)0I|{ey>c2 z@%QlBcI#w*OKw8BBV(t@)_V<pplj4suLdJ4@UyQ;ZtVUoGBkSWqSFH=LElm_&9}Ww zF;?JuJuBH?SMGX<;7T%=<T{CLb<$knG6*0r*$(D|B%QE`gVNsT!$2fk>FLzMm|@8L zBu|UhvnO~E459Kx{%Z*7qQ1{F``rAFXys=M3_*L17G82U@$W?|kxK}!-(%Pj5>{!| zkZ)GFNxc3lK$$EflU4QFx@bsLudchQzO7yjw>6M174W9bk?d&>vM{lK`3s?Zv3?99 zsx#CawOlL7>uAQY^<m<SP7CG@5g^QZn&ob}!xcT#Xo;C=utbuQp}_BOaN};R)+bwf zy;*4MRjFz#Bx<b>gNTy5u@2+@P)#<y4~E^oeLwKADic37JozsiXC6XEhfV0l&byC9 zl0T)pKww}toK~VR2IZ32yJK8eQZ~vRhRlj5s6oHXKGGUe_IBgi@Ras$EBZGAh~v4z z=iSL^(q!cLrDrKCPUJhJ76aJI1)a+E8TfVgWS0J-HBGrD1*|N`!jb;prm~3%KW92n z*drajuikP~_lLxr^*>hJtQ@^*kOkE=d8{}2$Ns|Q+9}Ap1^wszoF-dCq_inp-?f5Q zetnZ?Q-p;~{Jci`3Ne+r#=OP0hMSxv|D4WmY?jnLwMPa1#odP5la|rgCr`Px&z)5O zr5wt3q^l(Leq|{6eti;Cf%3IRG)GL99QUiB*tKKoGgNhi8Iz$|1Gq8DQyx0tafFw_ zK$_p^l+>R}>LYllknMsSJ>@%w&&=Y*zbi?%0Og?P8ScNd0c(B==ldM9!wmY17Im}Q zAjyW<>eOV*{i1Bp2sTBvGD7I-Y|d0o7HqwRtH*4Ot99KY^eE1A;c}x>iBq?6^TU?5 zKQF2qajgzSK*zl#LYOy#dTIL^h#+#Anls_69#C;A%kb*7WGgQ@?okP3L$?w>*RKVA zO_0*y8N+*y!vywRmFhien9axL!g!0SiSQezF|V<>+X#2Yl5dal_reDwIl8`U0Xgm^ z2h5`EVf4_8@yd>5&(}{Mg+#kfIRo?&<Xzo$%tOZ^{6H(|KedcbX|Tbd656bT-`F4} zwWT!Fp5b4lcO*n~+^K?~l)d;Knr09A)`b($<AxGd9^M?mxo$$8*GZJldNQLR;@Jws z?I<xp@%VOnJ|Ho~-@CwUV{{~Xd_FlG32|fd`u;Lj3Cx|R^UiC`C0k53GR@qLGA7_K zv{TsWh87S$AkKZ>z8$&ojG#Xy@Y$!b^nKPD${(hp*gcf+O`zad0G-45wIS6qh}^A0 zU+ns0Aa?~*2bDWazR8=spWHbN(PG`LQbCKPKLR4Bo9Yp{mBfdff!pTBLsp#1bSd5` z>79J-bEI)I`y|_WJd+_zls`t%;Ke2^Dv?ajD{U~+7xc}bd+Tl`<?=NhVe}X+59-~G z@S?gZY_fF-N}_uYvjv(XlD8Yl_p_eP(R-_pcU3zp>*lB=$DA-_oEGcaY>DkT%7V)4 zv|?Sknv~H^++uHK4$!KzY7Lx)<t?(4u7vlI_|p4qBQ7V%PO&borxT#3te#F!7N@Jm zv_r|ZFS~3fj$m%qv0~jLVPrPiwnr_+H%UF6Ib+<yx_|aTBe=B9v%;ofh#{ptTke5k z1^o$YxS?*OYdGy&{5lq)Zdg|BLXLl&cpqXV0z&!|Yg4cUp?+Uhd;^xzp_l}96W9xB z%he`zqe-ysx=<I9<y16Kg8O5WLI35N7QC*O1|+ogYM0+6IcB-5Q%#oe>eM@}K(0}e zyTx@1={USzTYWao8d2Riqb}AJ+2^d&y3~E?Zp7kx5xV4hlnVKCMK_0Rz^1mP`aD$7 z;CLX}kUA1Ny*{Dm$moWIE=@ULg{wWC-P6|{N4CjII#3zaJWG{?3#nYua5tGOsp>f* ztvid};=zOl@~=*jwjSu2|J5I#+ohvk$Rm7S$OVVyDyg`A6o_M81XNg3f0U)~wGNSN zXA4(Pk+w!3eyRMnsKYN|LiIsNJEUJ)=rj8#j9Q)4-|u<YfK+EZsf4grF*P?qs^i7F z`&F0dHCH9)$OWv|gwa~4@8EL<`4<{8blS))Z`8+~Ir4FLs~{`NQ@DW_`pi_NJ_+u| zfeG$-BtRuA&Kq%=<LW_rg{j0b%^7Qol0y=MP&ytCOk8s#T_Y)34g~ZG&T2Y@<1E+d zKet|!(jeGoCQOzJTCw|8?`hVklAA@9iX*Q*!Ye>etl_G3IL>-!D%p9g0xgTWSNU~T zpBtnaV!5<g1!96mQuo%LT>B`_2sl=#6dT6Jk@bEOy)cU{@yn8JUdyX4LV#DA+M_Eo zdyaY#v_^t4|G8e_b2>p|5Ve0R=2g(@r}jr+b_Gq_li8QCd$ar8V6sVE|CS83a*ydg z+qadV_);c$6<^-qicccT2vPCPkD!Y0dS&;-!4==dNks9vmZH`>;?a7sM7JgTv>xu$ zoestXE`$`-%_NW*A_o+GxKGQCm)O)TjYw5oqF1}=IAz&Is@U>Sv1!R#q+OLB*O}?_ z?`2A!t{V!UHL;(P2YdJjP-pK4>iBHARVf-mSuS4rG;v^6f#I&2go~THogDS!)G5k^ z2_mqUdmmBbSWm3I<Jx3Ne-3xlABK7pT`uBxjaFrzhE;S3=UNN&5Zx`JzKeg}Y3seP zTCd-|=GL0MmZ6?eLr)zjDW>zixln2#uOT&5$|KOP3}zba_BRb!^h6ak4W9eS&opSB zO-zGoW*RJ{>kS3lS)*kMTn&~&xSFgZ$w|v1p*zXsFVGAw49mA9z*Vq}4UB=Fpo>V% zA~5P*GlGShdm!}MV4>0(pBHI7F`M{uCNuLaS~-c9MHd}Of&RDY+3KL=j*Mxrb*V0Q zeBXI9)fMC{?31GYV;rbE(IHlgDQ%*Ktk~4=hJktu4Aff$_g?Q@1dPmS`_KVC`^@4V z@#t)hOCLDs7}QS;uCqd(t5->Gr!b?zdPZ{Z&C>6+Xi~4R{*-zJ7%EQUVu1Ruyx+&_ z4^8m0dS$;w=ixW^kxyLd$n1HzY%Y}$5iW@wVRYhM6}TM_lfEIAj{X6y!*Zt*3tYP$ zP4Ajdt>km!)q{+u<wn<hTW^>(%^T*oYF&dHbf%waQdy6mX$rH9pmFy3$8qf#Bq8=` z*-#l^)3_`;pSYRMCt{T!8H5H4#s{T=YWlxIgLpoW29f^-XfQ?!N&~uYI!C@ImaPj+ zR7NBOck7Tfp7dnI8meu#bfh#GY8#qCCGv9`+zrwuN#C|&sL~Pd*=+nlvkLkWLFKwu zsGh-DA_aa&RF=EZ6;2#|)@da-^nxvrN7Wb299KC4V%@x&cd45>(3&mPscDv<`?zZT zH0uz-EofZVz(7)^WMePum=9{UmFUeIGl&}r-)3dsyzT0QSdrf{Z-^*ApxMen#Z3me z(Im#V?L;%pB!Dd`tosTLVh|oV3PSe0k0!LhZ)w2O^7MNw(ObEh=v+tL;2JM%byq>H zt}~#cRUlTRFfL0YjEi*Lw^hX=r5u%=g7d3r=kaK#GD5IN3eio`P5kz*IKeJx%o7DU zQjqV_sM}>Hj9sJK9GXbMt|BvNg8d#1X2Ea&GOpsV$q?N}cB`O1jx`zV_t1SS_xW+{ zAFlUTQs<~EI@G|7dC_@@@;y1J0O#Tz<Qu!nfW{keUzT0XZxOVDW9}7Xn}JENXKIy) zM^OEi3%b)jOUv&N6XxOG!3cgQFqeInMoFJQHq4Ib&mW5VdR)S?B9^R(WNP9?gI7(E z@uQ#HZZ>R82PC3WjtV>Du<Pp`kIm$$P_ZvDvM^-bKauL#Bg#V9y6@a~kcR|*i^|y* zi~Z(0x2nPIwoWEq)tb^Cs?k}8;rBFKuX^?O-KpVp>5&d+L&>=z-Q&Yi)x{j0&i3FM z&|R)duzl>de?U!rGKVZ^Mfoe7I)rZgSt0(gx>1zdg!nyz^IUjRV@|;jVp3;@oc*p& z<X<|%+nz;LD1!;RJEx$rqpPPaqgDh|uE}s{hDe)Skp!`5FJi6|!2w(?AMj+|09hwB z3eMhe`A||zPC-kCEUwpeeCZe(t8X!D^dD8IMfn>ssX4=*y<V49&?f0SR^K4%zp`8} ziyL)-E4pG5^$q55QQu4>+aW+oI<)c#MXaMMW1RS|PQYDtkluDqy#{0|d!vrdkz^+| zrnF}{yTX)2kSWYLOx-7scq2u{$&E?juL9Kft{Lg2CJ>wwbRVSFpW~lg2v12H*|8}= zLWBG{Sh2zfI$~S2lAWKjq?H?=#qZ<LU;0rMt9~wAZjpP1j<3X|E}^F*L(Z+y!8ok3 z<AfmZ6QU0a@lEX5_6$1&WviRL1Kf_|xbA=TKA=7EY`Qay%w090u?;l>iz-XsvRW&L z*@37ojs2nZK$!iK?Sw|sx32jL*kRvID*ROI*Vvt;vCosn{t-~}H1=`c_8e*KeWbCQ zE~BwaS!0Xx{(<d{t=*P^jR@6{TQeNPwfZ)5xS&5+5hm{^EuOp4)8YyGR*Mef%B=zI zjWIpV{TW5g+uWI#XzsLh=-0y!OoN`>(^l>VXr5;WX&)p@$3I8|eL@-tSj)eKc3+}} zT0Jd<=TzcJnU~WzP4XAri}5p9_#{A*qNTs>O1S6OzfBNE6n7%-NsZLG_V$tlU7Xy4 zNF%Qz&N7(Zt$;SvEUDLnJJ2Z}(3cMY_6&6o%AP8CnJcS+?8u_bMMlnud<&TEfV|2s zen61_0FdvKY~6tT`88k3F-wzGkY#u!0Qs1xc6Pr&$_QT!FZk^+LXD%WCaU*P@*}Cw zhl_FtN&^fr{OP?O1cISVDBkYHd7}sC^?>t!q2tRe+gXBh$G?oTXJ{@a-L@S@)I$9M z0eGCcOdiuP9#y0m-5`hm9s<Q^=$UQ3>DHlOeI$tX42?a^rM30ytZLC7Mm`s%2b`?_ zUrGmjH|2kHK#)!$VWyuBXqrrQz|P74PwRlL8~?x60XNS;9q?7se*+zGdy-EFOi21~ zp#!QW5go98Qa>HAYSMoL9k7352p#aZiT@iqAY1+{%l_b~!1auD&2IR<5#Cc7H?y@) z#D&RG^v#_r!VnPq5Gh+em*bef30)7*l+R<>bWwKUQX^6RQFg(9YqtI?>jXs{5p4hN zqa(@w-P^RdfT&Zb=Vt0GLuW=>v@@eDnwc@y@Eo<%r3m%00BvW(`6tKYG2%5ET;wM2 z)wl9B|3OYABvfkQYjDLHx%tNP=1IKKxA3)2JTX>oG05GBX|n#jb($*@au$-lhs>+b zC0l-Q#Z{k6tBSL^uc_dxPb3TKvqIgKIqHKDg`xnl)_hidF3B>r`rKs8r0R2-{DwK` zF8`ci?UmK%3iu5Ic{1`(;(m*5L$F)E-R*YgBssUC=hyCOZd}~i@+R(xa_PLq#Y}4R zmgZ6mYF6Hiwl$yOS=_$QH#1`S+EtLpHk_5{{t8Bxj*J5{wJWY7PF$&9FDR^gFY%`n zn9>@%E!-Qa`_H)H>Rd8kdv%!SognY+eu}tlZGl_?L&!LSWbAr%02(#;oepTh*Tj*V z$$ZU7a+7S?(*30eG5+xa_drbe8Z%97nSzA88u6&9gjc=_)Fb`E=xULfXpMA>SnV+4 zEDjj1`)17HL^5g2>T{9&6Sy#xlI46KE|uLY*t&=CHORpp2C<m&A`-^H*;c`JHjJ-D zuMBC=lVvD;4W6l!<5)nD8-}&2{SB_90^W9SBWK~tE!`z#iwm&Q_pTvc#<2WcePUYm zIW7OhZHOp3`|dV-+b4>?c+f-iKX@GIb}yrGpv=CR+U1>C?r<pA+UYB^I}75FJKNbP z%d&3J6Yd<j$yE#&z{8b~NbR8wC%lu4c#TEYy2X+GSB~G&=qQoe)?J)Coa3ruD89ms zjy0dVMt*n?ymRpomw)mJNbd{$wtEFFgtdr0Le#tXnj&0G>>jmTS6`EWbeS2xI!Xw0 z*3qY&q=P$0Az9Vm>(BF#Pt}lDg6)7CBu(vx*Z7z^+VTU=Z{*?1S7KcrR@!-Jf`<~O zuL<k<TzyK^|7eX+zeZLO!rNqPMAB<yks+-F|Kv_J-oNQ`yZQAm5x4a>Z%sgFv8VD7 z%SYkWnizPgo}l7-KF8OPO)C23d?<m$z_Yq{l6j_WXx0jJ-{fw|)|~4Aj6ie0yr{Ny zMUXRuaOtGJiLbdHi`XRWKsJ;dL-8c14JI+|Ci4Vz<WJT(p;t#Oag0h_GU9ZQQ-Qvv z2`pDLzvZqdxe1pxEfM)G-6kP^FM60Ui75))JK;XpWQac{Iy72zEMpS%PTsaLj4Zv{ z%iHQvK(}AqiIZpgM*fLM$@9)T=<|w5NK@3k9HXPR1e}348PrYu_S13jJQ8YNXpMzy zo;3>VzodIUiP~x%1t|N)jKov!G-;zPZ;+LeV98?Daz)2|8d2Yo>Ck{$$xWD^UC^@j zUO~Qax5F|tFWd2`Hoi~bw+u1xTX<1ED)Mi%$ijsT$BkOOg2q!fn!v~G#TP{VQH$E7 znud#srf1oj!?JAOg^5YW;5{yrn_jg|Oge-!^rHG3D6dKu<=lh?_+?@4*02UTw<ml+ z7P^W0rnLqEXX(tTm|d<QA2g`johRZ9>b+o0IJ@Hj-7!$NUD1tV^g&F32eKgk3$VkO zTjj)eRc4H`vIHj^O+B6bmNqD)F}=o;Fc)m@V=U`N;b1pr+7%}pbUBa5iP4?H!4qQi zUa;{H^IVdnwFMO)sz@jUKe_9hELTCsPE&L<o@OzZ)Wj8Tl0~{lD4p^X;X-KV<`uER zy5nv)==pVLxoQ<>T?jGfq3}@d#5ME+yt)s{nTHP(kf9!cr~4rJF6&SeE`WFd8x&nk zs++LX2V4<w2RHW-YPxv(G!ObM%JRVBR0M#PoE7ny<vf!idN)?XL=Rd4!jYpnmcaia z*EJ@g=kqZQ@q5C#YIhZSQ9_x5|3Z+f+HDuyZo+_2S{_t*k-R#=1cKla<PH<qkLTr9 zdL+R#xz!|hkl9=^cp+qPjWKznxp?3G`x?^miV2b_8js@;?CBs+0AdBZ6eid!hv06Z z&Ft*m*OTdFJ4esneRJU1yVUlH9n|(|8yaBy@LN{G`11<dR$1~9QO?rvTMmHO?iZRf zH|>MVvv~O}UY^6t^LTjyFTcafi+I_Lm*3;%59i_X(jBZx9i?s<7Q`7+zBa{Q1d5B~ zXcHuMHm>bVcFc`|w%un5ubUs{QrBgM!P5onG=qL0UyH}n8T5bWYriHQPWAhFv9UQ* zlMHPYFV;PXvBkQA@a}7)P}(o@wYbx6E8#ZLJ_bx8Yd9pg#DW|hA8U@xc7#uU3>wBn z3cMPbkmDMx!ypc>HV@Zg;1!tcHhh%|uTHMR?r^qdJ2B;6<#GMluE6zYg$X*PG`i1C zT;bPcs$Dlhy1xdbs|c3v7D(5esUBjGKkL39v?p|(d%!|LX<P2>9wo>P$fRbcqRn>1 zY#R%L^C6aEC~k<&;W)=|Da+QKXR@zOc$A#XRE~!~OFOU|UD}?L;aDFw^yCNM?!<1? zc{Wz$cOFCoR_OT@iCVJ<Rmd>NxFHTQ?)en+A_1?fv1=3)EWqLA0=jB;=ECR(bw)O^ zjsd510UZvNtLYg6L({VyH`;Lt`vOoJR?eJC&KzN<W25FUfaah}42kk!3#l=IM~T!V zJWZG}CkiF>QDG+v4!`9r@F9#tJ~O5CnsDd>)y#vNKD;T!OOfapszn;y1kJjKxBZnW zl>@x(r7+Tw?&qI)7VZcc;PJqUC`?w_{XC7hi|CU|=u}!!OW=zU2Drouzyr~Qu8($C z(YX7p*FsJFqYf3*j2i0@xN??P1o<b_`h|jg5t!JaxkZ$FB+w<$#rI`9mO&#H4lOst zpHDdny`}*jhz(5;<xfDL2y*%bIvCf$SX^z8I|Tb&&?lc*G$w;;lp*QIEZZ(nCnv*1 z{m)fSva=gRO29Re4Pk=%M<|b~lOk-nJdZkQ0W!Kt&$n-F2303FLw^Mrwt2KkgM0v# zi9>S-RO<lMB@i1=oWgc4LP^c5+J*0`Oc-Tl9_jKuy5u9V20BLz81zSJ#-K|S$g(T$ z;CG-&qI-!Vab_iTKob>`+^qXZ&gk)JIMGW&H0jCn2<lXS<k9ZPqcysy*61Z#BNxIK z+4j2iPHP6-k|tUN4>wTr1D;UA_b_#_1e?pJE|z%Ig^5th^R(zgVk8mqA_C-LmygX; z5TBa_^v1Xgs*U+u0RM6}KJ_SxO3W|a^&ld#2rIZ8iz|n;g=ip=OuSNM5~EwlF;I`X zT1-7(kiz=sM@#e;C&=HS&&yQOA)1(jn7Qy~x+~I~FLE*{I}~^&mKa%&ogu8NZWXp6 zK@IW+>;w2M>l5nH0zz?uUgvvL{KrJ1z+gLVir-BH3k<gJiE!z6^R{P*MfEXnTkn;s z$HD>y>hXU;pz=HdmB`j3_(vZuroEhi=Vn-=@D2@V%kyB5q48M=oQiwR{{hB2$`)w- z?<5C10M}81^5sI|;<pSF<qkB}GA^Li$)>NIM7TsdywrDqaEYqXhNQ0~+wL$hp+UI5 zs%jL`8>J!11@eV1u>|#bgZ^96vsT%V&_&qLJ_*|qAYffy0c!`*A_CU#6);h~9|g?m z6EMsT8rLUa5G9C!8Pw-##tk4*fdZz0(0T<dmkJo<Y|vjI0@mm!V7XoaBkUu5$fRsH zO4*lG%FYofo9~k{!C%TI_(_?*nFv`)C?OO5gp79TP}KwGYr)7m2K)_N-k<SZ*+hoG zM#G6lKRKcjgVN+>c$W_I8C-N|<#1^i*rKAzu0~2`TgGlupBD5#RgDByRg#dr6(_<R zQVcITyI<_VQFU%Y<<=4Oup3}iG-@mLryZ3)@^elL&J#eV6Mc8!OhSv?2*x-zvl0g_ zEJing#jI}6N;+@-5~LJyCz6X;SFX{c-sRtGhmf^XA+aDk51xRwgNB4=G$eI^4GvjE zAA|^1Uj!z0l&U1hDvhB3Hd{W-Z@^u7P%<5s0q@gINh--cL>9D=wf#;lqQ>x2w^PiZ zXO>&w6$HQwj}8Vc(2ZjX(UA}fkwpEMC?;JM*9i_umC`QgTX2ZeTA>E>R+OE!?Z}C( zptN;@V>(#ur$J+#uE2MqdOcZ|Ey%kv9m5l_q?E5k)Pm6s@_rbtL_$eIk_&4U?W7fi zwsI<?#Ja+SRhnd>E-Xjg0hL@EMTp)#icBkY2=!rboq6->Qdf*nJtNIJRA>%MhF978 z!xg9S5&`Kzl*bsj(c+{Iq56b6i{H^G*3DN#)}zposK51GK0aXkUw`Wvib%F<S@u8R z<yAjUX^u!{%(DDvj}IrZcMtuk(7k@)Wh(EIiCF6DHcx{WEuMr*yu9wbJDuZd+xZ$1 zJ;;4XHxk1r@<A|@hT_67Ia6y;9|c=Uj+Qeu&<jV(2Svwlu*<Mh!Ijm~?E;V(C>?2l z(VF}bZEQ$nzy?1egJ}`n2IP-QX|P`<+UILT`-9L6HnLt&kfD=T<M9jlktSuYfFaNi zV93YzOik@xO9am6+cUL*fCSm4v`fxz9V!G7nL^a>#kik{_SqWX3XP~*szsl}V7~%8 zsUX>WEjGB^01O9Qro=@bgc3pV+2?D~djq87cjUkbL8G+~O%R}e*3j<x6T8{~IRb+T z1TklS#D)OIfLE6Kq^;S_*EaUK-L_R)&N>x{1@)90WvBDYShOqQ-+4SXx^3%eH!8bK ztx4Srq_9UDpymhp?FCxie2Y9=Bdg^$5DVF9S0kUEh>LDS>Tbin9m<q3;aM1*M>jwh z&qF>HADQf{qHqODEV9&f@zm=tb7f4t7!wB#1I{IPj5uQT96i1`%zN~>=6QN__-hNi zM~8cl73Y5LBVpx>eaDK=JkGIW#V0*W&NK;n{<*C%A)Ow6E;(YJfwGlyHLd|h@A8j( zQCWSc&x6X!=O`-U20_L86Gi2s$%l&IMdig!fQoy3YP{#5bKm(_AQ`dQ_TdS*v`w3n zax@$A9F?8amcwUs7_;ST$K!cvIr@%@ktWbX-02+0bKGgSTWD6}TkGj;8PbxKO153G z-j$RA`6sedGIMc+LY9_ZiRXY_uK{|rDYG?w#PtdE?l3sHQrH?s_UmZaX(8!Mc27w5 zoK*NvgaJ$<Il(X|8E%uQ^DxWMJqB`=oNUm!!j&ifaS>DN7W$Ig*629vh-^6r%t1rB zB;Q*k$vJt-AG-#`#130NC~K8}oF5RjZ5Sfg>mC>og8^T71H7lhdBTTc_|Aa|Z6DHA z=TY=XvlrZh;1l!24|qu4aUJz)?|;1TK7X`R_O8Qk-3|OkrwqUTC=wKA2E#pmV1V+S zE8tx+p<_8`iAdS2{Mbjrk^?D+C|unig?&NrHKZJ+u?2o(6Wv?dFE)uUpOC}DuUB!l zu0DJCg>fp*KaMXyM@%_{DX-qy=idhY;dvM?2M?c%;Y)*ur(^i+;Ni&_o-`mF@!vg; z;r~Gh{7HJ3A!z<O3~vn{9!u&UJe(u-4<3G6hxIoMhJURG|J5PzC+U-d=ii0l(ZR#p zFx({u4R65k*5Ki9V)(1#VE7w6_|FW1KS{qdc>bF)e0K2gr%3&ShgXyO2M;eN_0Jp( z{||Kx|95r4@h>9v&kT~k>_9t9IiC}({G4=U?9qN5n18rq6G{K+#bD`EmEQ$s-Y+~+ zSsOCEQh7LJxK7!i4;7xQti3CA_`{b7zx@*7!yXJ3o~oRBpno{^+~aM7XUK5aP62MZ zbr6pu%U9y!Sp)hT{r*n@S<v-T_fnUckiiRN^{;J}F4i20#}_CojzD|t$<(1uK@MCP zRX1Ck(yqMvl$$zJT=-y9!1=D1gU_8leBS!=VEEkc&EZ3eP?b)L2+h$d-*h5Evvl~) z5D)%%WR%JNh?cAozMA2rd&G-WKYVf|<xh~F#O{8Q#rEg-f$^7n;%~cjd`I|%SNq&9 zKQ-##ev&e!B6RyX!XF5p-th|Y<8BTrUy^ccRtWx~q;EA3q_;=;LiwNkm6e}7uzZqU z4xRq0H-e_mDN;^lg~E^YAFWxT`C%d0cWdTK`Y$YF__%Z!Jw*qc6xyVPAZs^iFzto` z>@a}dTUvtATLyVMcIaZT_G0xt_DOJh5tm0vfm!q~|K#D|{8FT>T^_1GfcCyGbbqqr zzR>;2@9rCv9|Pzu0lm{Ni{6{o52Uw$d3nn1hEVvFD^tq*E<x|xzYIoiIVWARId#fM z_xk72KRi+SOUUqKr9Nc%0%gf||M33p8LI@gXaDezmEin_`Nt|B?FdzVtTN-XVByKi zM;#Y0(Z9Ua6TEz=`z6!Q?hRePX=g*!Pq}@AJ81jM_v#1^OJ)S8uM9f+n|9V8PpluL zKORW0-yR*DUT7~oyfqX*&Q&%z+#&6aQ0cKQGukgjPv=$cpz;s$yCoEUdCIBvq3D@N za2TC7fS$M?)vNIr7LoIyLBK~zvbB=zYTd8wI*qBC5>dLpCFI^-#}q!<k2zR<^OOx= zhn8QAbJtIOwEc=%hRFl;Dcdhg6N$1hS+HGDt%Xt+rebH5?a-VjX#VXfw*C0MAIa&V zo)<Klq4w*wV<ee4Dw7<;BOqA^!1I`(_D7r*XjPtVW6bo~6AT%)-*hl~rz@rRgsfjS zwSmFPp?C<oyB(SqK!JLFnybCbG5jMX@<&F1q9+Ctz+ZnnMeO0Z!R&3q-=maI{}!sh zNLRLp2w&$UI{i1kGW`1gbZQV%hs+<6NmKo*)QVw9x0_$Y!?9MSntvcQ`Q78RCh3m^ zT7&-fr9=k_G`nYLcK4)Kj0GD`7E;k0XAGXXVHZ-Z8p-~PWDGTbO|rj(WiR#5y}v%( z|859*yf>NX^r%}dArAo7=!n7thH4?`5|Mc8WPg$PbL{|;=-1y}5}$PC(VGYD?~*-z z$eE8Bi>B2MA}@jc#fEo6_ZK_rLi87oHe%ns6P(|a*SkX0huVj;gQrg<{5t8KVEmX! z_%$j-IOErU`i60V{q3->(DqL0+o9?6yC>X(+e3l<(R9)ujRQWBB!^}vb~w<vG!Z_r zrX#OBlK|cNP}UPk_!fJkIB4{_lKL<tdYUA_#E#)jn4%!TO?sq=eXP0fvJKWF1=@$l z-nvA8YnYpjr|_YydwU~8s<$gT74N2neg4=Wyfv`A(zk-p&#@$#D9oJfzCmXwNw}kh zoGba(Ani-TPh)sg(D0mCW%98Q`9t^%x4J`=KPn9J|I3?$=Pw&Hwk{QPL$NlarVnD{ zf+A)0n}G!m%<q9WgVu-SFe7L<Fx+*sL(wZ8UGJdGoOz=!aPl-DJY6{yBAm(0I|HU3 z`j;m=bYmdmN1p|)PdcIBXm_x1ay-CYZ}f!>KX-}rQE!ASpU~r**F)2z`SnZE<E5-n z^zgGEPb_qY(64iq-wMIPC1vf=Q1+puJRC9{^hfA$g5O=2!0%kTJH&V;&*;9yc;v2p zchK?11A8upvVTeXsQggn-?%tL`O3NG5c$*b_0d^D=R*>e9haUDd4EdK`Am}ks!;hq zJnNG484phB3qGGYHe~t+;yZHC^o}Lzcm}9)WOu+96k@VD4C&O*id^g2Y6vDxZ5_MU zWm8R^EgQhtzqedjMva1W$iq7km~u32p^kjdDi>u#0>oPY<;_(-q2=MEpYJoy`b}<k zh%Yfp7g#X9b6?uwiJtq??{iQ}L#iQ_f2N`T_bGc$IsC&Y#ZW{)%q6mqarmi@9qyBZ z_qNJW8fzwbTS=Wrk7f_lku-ZCPPnh7<D*)7w1<=^rQMZijev|*ff+yO&G??n%Xkv` zfM}~s=B#nbH=xY-RHM^g%$DW8$3R?!x}daV`b{x;u#U)YQWglGXLq~FH^y0Dl6U$% z+@{)Ak#j;;dAyCU@^~9x<vk~4cA|2!&Ua2otMWcHm~t2322AdMOvtVD6?Hsc*GpZ- z2edWe`o#YXJ!)RC*2fQ$BWB_|7v1u@>IGq(eck3vH7BpDA@?tn`#N&}3b|iT?q7p@ zU(Upja!LbEJ%`^PP7XC&K*294cz}Wj0oY^4hm&*5Mv`|iapc_y`jA0_Vy>dm3(r7( ztHz<TiItJf;nU$!<%-%9-lb7-se}ctI~YL{EO{HzN5t*xItiLDll#xe{VU|Yi`>6P z?!ShsB*#35sr5%Hu9IXn4sM3NrE<>&`HXoC1IWDD5%X7o>-Jm8(Qfm}AvWO;X;k!R z@$RS3UUbv*%2V1g9FmESj6~%G*XOp4kB=a(&%^h<1x;oTzmDJ<zP6F%bwdQHV=R4X zZzMTK!IR?9d1{>TGpq5TArOlUkz<as7VjSEEgRlOV#3bl<n;O7o)|y%UL<GAZ;vI8 zpkg+nBQ8fwj)q{_)7|R~47bqmzk0$u`-SJy@R)EGzO`TYbQ-?Q6TYcm_;4D&n}+|` zUCF``f3=G1F0_;IlMvo*v68w>gNk?WBlqExZy*F%JA@E!1%^Dm3KxO=yZ?5KQ4{z) zgZmgf#^5OixoasL&fsgF_v~-NNcwyWgCc`>Gx#urOBggW_&9@`82l51TN!L&@DPIv zgWS~=j$|;IL5aad3|2DuG=r}&_#T717(B+{DF!v8C>+b+O$^@2;35XA8QjR=D-1R= zc!<GM3=X-5!YdgZ$?B8Ho~JW-Cxf{R<}p~x;93U%#Nbv2KVq<p!5<h58_mjP@CVk8 zx3lNF7<`DqN(O5fe44>OG58*X`xrdN;3)?C7>s3nay^678BAwz9)ns&hYKSp{FcE_ z8QjO<dkl_c^%^@mkPoAn-%t&MvsDx_-<;Lk82kf+BUt!L?0Gwbi3~o+!bh{`YZ#1W zFq*;NGnm6*1cPZTy_P+XVK9=xAq);>FpR<B3|{5IlfjV;@(g<Fy`0f;34;$aSkq5V zH?Vepl)=pmE?`h(@FoVgGT6dkCxb=Tst4^)V($(^5C7bH2HUbJjLo62|KDbTBkyzX z<OU7DoImx|8}BAOj$JeI(#v6-b`z!KG%l07o6F~xaYjyr{{pUryPqrOO1WFO>D&~q z5S~kd#LMCg{bF4zo&YiPxpK||A!ZWK0%a}dj9y&-mGqh194_aw(-p#VDK{U=v;0ft zdD3Bt%OQ0E+!?sa%Si8`Iq9dkm4LSq=wHk&g6H{M8D|1aRzO;_A3pQBU%-DZ<dDOj z4N$_p+&suN7s7n;1QH_$@>}MYULyGw4#*elK&fVekOFVWoshl+o;>(@{xSi-W$>m9 z(iurw9lXmYc`SyvW=Ln`D*WPS15Q~$1NtXG+H${Vqz#tiq5a*E$2_=S2GGC#?<9F6 zeu1I)LD|S*86+=`)O|kc<@>4JY+`UDgHJJ7$6z^w3mB9bOl2^U!QT5Q>|(Hm!8aM) z%-|*ls~Ie3Z~=o7gKb5V7k+!LIHz{(xxbiySvDi?WjU&{?R?fN$)8)tH{N&Sjm0O+ zGBy-R8{(gsqN<A<nf8w@2cvfVD(BVJ7ycN(^p{hrZfMO?U(CsIOkJ>MtcHKl(Wg$G z_~pp#x1PP>?dsc~d0|$)^3?gatEH!t6JLn>&5%F8zyIMYZ&^Hf_Rg6R+`IC-V?NnB zNBkk@K>Fjqd?xMVQ`fw^D8EpbUs6(5kZ&n2D+RszGR1RvY+(PAS!Om=7F*_;%L<GY z(9FxAtqVxo7~$uWcwB!N?U(L4c-Htm|3|-P2Rv*2``docPxgC$s^9ak`aM70@A=pL zo^_dJ%gRfP7Nc&?q9w)xi!K|hUS__*8(xxMQK6HHjplrFLD5Q`XsjqO7nggY=rZyv zj4YC1Hs`No3H{&ulIZd+I;t6Uxhu<!{WC*51xa6`tFQq53v`wuvk@9(u{GaZNMqzJ z%P-AeY%J6*2V^0`g0k|Ja4D^@n62bRu>~;oWthj}EnkHATq?FN{w4D*Tv?jG3{cFs z7=aITg+^~o6a4$~^TaDIEw&WrmlQv042Y3uEYkfeDEh?@8M8l~{O}9Na3DQ{<X2vj zUtnBjEXArKzdX25S5Q(`VKp0RKK;W3LLt0tS!uBjnzp2(crm>5=7PLXYFt5XeC@y7 zWXWGtVhlhhAj80TH*k6La&xory+NYk)<TQUY_wR-rNyOCVBP>~^}}yqI}Az)zj%X^ zG@yM#@>#LjVuczM7FYO4w=BOr2;T<fhfB5ZrP{Ru$e3@Y%>k71%ZR2gG@A0QC6-{M z^OYYYJ*_~$w^**lOd4iTx%UZto(1}eGLs+OkcV!-d|AtT-kZG758uXdtKokF{Lh?u z8+ZHdw{hd)ek%M=hW{k^pM-H%L!1c!F%6E1P|r=|xEpa?1L3!$R}IVqAnx0m3jdRD zpTtc-k3@Kn|8Plyhe;%i<I2h@Z4oEr>2Z+$HuxWhc|k_EL!8?<FaHzX$GDF?Vl9Q< zVR5OkkfYCLBw2BRg=5d<7V|CB0Tz^)kp!IQy(z!K;(PJPBbK7#3jgN{OJP9#@_Y>D zyw3%N#)1-n*iMCs{cYoxN2va5VDL=_H#7JYgVhX{Gg!pn0tO`p4Gg9}K;b9`IR?9a z!OCMW-4ma|=?o?_cq4;}3??wBWAIuAV;LOEpq4=mgB*hw9%gn9gFi8Nn!#@wR2cl4 z!7c_rW3ZFKzcbjz;64Uh7~I8R1A`whxRt?o8GMt$*BE?-!Iv4_%;573ZenmFgLMp6 zGFZ-F9)l8tsSN5E<UI9T$na!vGlSI(E?_W~!B_@QKg8<G;42JnV(=*j>lmzLa4v%) zgQ*NAGN@%xd6417;3fvk8BAwT$6znxvo;1dGg!{x+y?^rbjp+|0rH><Q)|M9L}(+U zqKC!|<72P5@~Yt@MqWMYn$csfy>4urZrt_p3F9Z+kT`Kt(v6d+OiiA4Q_A$4Z@D!! zZH9j4ZMWZ%E@WhihC63TS$ECO&bfQe+<WHD&%O7)`xpG;fd?O2`0yin`HMgvO^b_) zmn<z=R$5m6OLK+Ax_m|D%12kNUbD7}Gh0h7#mkI3quC6-F2}{N35(q9IrHb!x8&9Q zth;CVJ#yll93ks&|2On+-Yv-~(_^B9QeA#|c}X!fdv!(m6`+d>jk<hzZ?PDcm0NU{ zGF?d-7-N<qu<LXlJW7fefnm53%$tHTvl(<j$;v5Fb4!d&YgzKaq{I|{x!+KstFV@r zmzg2Nn7@ozL(9s{M#uwhmytMAJUAkLDKSx#b%GBKE99LsKPwvw02EE;vSm8#^mJfr z8ka39S*a_uqHfWZLRQO-G?v%=BH2gfV*KLLLPW_3DRqmii{V+fvdn7s$90M>%c6s* z%gQP&P}ikK$Q`Q#oii%MG7~XrurQz$;xxGc?CIhXFsKrzLQg$WXR?+S5SkJ^^L<G9 z)G6AG7$}yM<m4CAx?{a>!g`mMS#-wIGV9_ZT}3(A34~lkSq2cypI+1Y(aUFg(#D&Y zOX+PX0;J1I3yf1PpC10@Bx5<48{+6Iq>$l%Q!0joT0=uF5RD>ZemTtv<J}sfo-2yW z`n8=e-7P`WfzAt&?q*C^4hD?QV}yAd30spy#CX$#=Kn}pDO&wgnek674{!d{(gN!Z zCP67_@3Im!gq9Z<7=03m@fn?rmE|Bmz&S{r{*sFEZtWLu8L(h68zKQmEcH)=@q^Qc zB`VCf<okC99QG%K75aAuX5%ldV2>E7_|Id)50wK`a#=C(G%zFb0E&UN)LMZ=U6KEP zu`7W3B&P+fkFgY5vaA$sXjUJLpBglNzIm|~BUgB9kMW7TnV^#+hHQCRF<9gt^e`Lj z{wQ~ITuyO;xvZkhWYOJMOlq5%l;ovLHtiJ2d@?IwX1Td+u^Fleqd_B(XlZHLic+uz zJxL7MbmO9;=F(_0bpQTOIsYa9bOU~g-k<I=ei9cO@>es+FEGYBzn|(dfBxwo^ZSKe z=FgM%f4E>U4k-F}bAZbCyWGD34p8}iVVC*yalrrS?^5;0-*EW(Klz7Uc9mJZ1D`Lq zzP@_*f1?WctW&-2F<VXT<4@Gt>*e*14NpGxtEYdx@tObl&8BC6``q&{{O-lgzyHHa zFaPmRe}3gZ|MKc<e|`OpH{W{uop=BC-j=P~w!i<uhdXvQI2)UG?QY)FviGCbeIM^X z&~~uB<L{pwI^22W)1#k#e(a0?1&lpy3E?FGfI~~%JqwgmMV8eGpYTr$NScA!oN-p8 zAOvW&MR3y)APh~D>4vdA+jC4qvUKlhA=4iO6(>3~J3VtaXS2u8^scV99>M0LMCH@+ zGiZY?pqrU>oW|jd!NIi^lprWUQTNt+w~~65s+R^)cQ$<<H&yr6y|=1vRo$w(FC>q? z^VehV{?B_o?|*Ro#D^c9Or84p^qEgSJ)1uF+2`lK`0}f-y#Y`=_`TWyeAo5=n{WSo z8!$Eg|3v%yd{b|~eQIOoVkrop@y_}1andiV;G^ZwpFc4eoTw-K^9d=%i$HH^3G9(V z4Xk|m@)d^k0@#tzWMwGa#1N&;OPd>;2>DTSy~giH;Dc&+SmA~`dXO}q-VCt&snFtv zX7qhD+L~or668`@lt1N7c~X9q7nEN`c~L&JJS{^iYnqxHf;AeS*$s904feUU%?*v2 z6d|{Sg3Cf&#=>SjHGlasEwi#2VNDa|L(9`Ll#bF+yjE^bh~4Gf0^6YFcT_g%7eJ7| zs4>)_UyjVpdZnc(5AbC*jZLLX=&sJcJlq`4<m-7lJ2D?Q*DMXqSiVv(xu|kh#gxet zyk%v$%9UC5a}0!_7pMnXg0i49s7`C3wI?(Yv=lTLv>P-Zv?4Snv?(+#v@mVxOK|T8 z`fHardc~>Tz;<={DwgDKekZW{YV_sc-csYN2rcz$C!F&_t7fgdMWbJ#-A&h#DP*$Y zPMrU^n=|+P5&FNgdN5spX+Nedm=0jtis@QR_rdf^O!vcd3#R*Gx>b-D7v%K_^6V>& z@?0y7@~T!C<*i&{l;<P!$V^hf-AB*U?yvcDS?1PWPcK5~&)gR4X|Ir;34eTg7P*z& zrrkW3l1lBSyb{tCWC8pwl+e*z^a@Co1NJsZ(GnFobY)O_CU7i+@ACo91l(LGGfSXj z<tv4Jzm_{2xKwE6%Ynlz$oIncg`_k`o)`WtH^GZ~)2N4X;6Inlq35u8e;d6+zrXb! zEHK>Twy(wWK*XP4aA~1)9opAQIiBefdE8=1M<18RyRf{}U6zZAcVY1sw!4k;7_{Y! zm0{ylC~wV_AM6=oQl8y)dxY|qY<W}peG&SF@_jOVZ187QmdAK0Qmd%HHBbHfv;I+) z_n4Pw?b{)g@9hWUzDQEp{x;J-%$)YDzPSEpu?)`D7pFh#UC-)^Yd>aNfr~6Zl#REG z)PES8H&!d{*Hi;L>wjf=^G_kd#OjM1KXeWHI=gW_ZpjO)cq2d>@3e$a->*W8d!o5| z6qO$y8o{MUPnBjOp(tGq31;}+qD4w&BhGZcVix2!Xwfv;crF?nHA{<jqS00}NHcK% zCruWOouV;sRF65mq?@VfRRc6~TK1ulY<i8BX%SXgYF@8OcxYQRLp{s1=)e$H-$oM} zU0=Ob=L4SR&jx8V7`0}^dtp`Mv9ulyT0NSyR%Sk#9-$b77Q6%XSfXj4^|zL4eDz)m zXQIal>YAHhuhn`fwjMFWJ<^qb0$}R3$UXf--{qil?E`OE40Bf}q@CQDEe+Q+G|{8j zOdOz3Tgywex|VBeIML!V=R*JR@pJ0PL#NieHBgsq{GC_xer9TMf_{)PSMw66{`%)9 z=&P`Nzvd^+$w*}NasAO)pQ=9!^^rti%JgCUb_x7WnDXNzLXBJ*zp6Kl{94}3<!6la z%;lr~;vmO|uDNM}5B0Cg(B~sud-3(t;%Wb6F|3`{koIwWD4lk{&C$`dtOL>>j&2hA zw)a&pzP65>oB7DNSlgIq?_A2tr@M{i$zcm|OXL(EHquQyY^)cf8~>J(t{BoOj;<B` zy69cHALn^ihXM2>qsK7)D;@d~Px(_{CC%}tYpUbV#`+F{m3jbKtwH@?<9>nW+yxY3 zoUC5%E`$TPzSW~qtD)a$+-kiRJsQHO*Pt?bwOX6Oeg?BvoyI@d>p0hH{e6L?Ue7ol z4=h>+JHxuhrceV704%FpJbQTq-C$?VA2h2fg&HozeWDj~%Ch&>rlqrTx}LI_`sJRu z4%-kW;@SS88i$V<?LTtF*gvCR+8KRf^X=a4<@VPP?EBC5Y1h7Xvge*%-i{|9YrArI zY2){ce%n*=uQf9sd*-V<+ZX)wo*Kov)`07wKGQa5){Q$d>!K0U(93nUG0(cxkY`;A z<yrUi^<x3d`2Va$bvJQ*dHu5XSI(_kFfLk8u5-SUD7^m$()Q|*1MAtisQ-&a^JT^W zr1RGrfG%Nt@^tpMb-KXYxpWj?)nn1pU4W<aW9seP@y^qEk~&>&GMA3#2acj#fOJeo z0s1BLN9w3?{zxB{^LyYOouBs|onI%wutY!iUo8e7*aPVfj;?0(wMQm-4wwG=m$QB` z??~r6`<{4cSa<r01zWCuzVGnc=A4YJ$9R`d(B9AJFo`gQkRU#SaCU)lT$Ms?{oFd7 z+=%f(=WxD57(FK+XXG;-*8Yoe|C-MaFA&DJ*l*rrdcV~lGq!VN6Y4in-}k$}FphIp zKKiaj+e3D|YqX>G?HFG)STCO#q{AqKIRA?<g5}z<TpQB6F&%H!>8g+}g83eVDWoU= zuG6^@rVz#sU_bg$kB{Yg#F5U8auUd&AdI0L`+p!`g#L$hXv1<brZ>`u5e9yT{f_lX zJcM?&4cA937h!TR?Zk4P-x=fTJFr}s(IHG?`NV_R4hZciFNTmjjd5I9&W+_f2-~n- zVyvC!U_D;K{87g9p~P?GcA8Y=r!e0p+VyWSE>6g|W4=SkZ}}C*tqJ+9nC}wuoyf;6 z<hwDyq?hANeBXlfF|OZzJWDoCKb0ta@>b$`@aS6~^cB(;A?-PE)ud(K*9-5xj%*<F zI)2>t=+TqM2K=FLT>**s-Xec-?n3(?iuQ&5l0ul?iS~ea&!cE(2&0do9kpQ^VH{x! zVdQa~hY+R^CXj!m5bXfvv>~)Vfp&H`jthhdgl%(iyxy&t2UhE_oz(;7#E^fK)f?&J z_h5ZcZUV=jAImwB-i<J@0ms+ns0TtP+OcEJh1oB&JDbAp?7g%j@jac(1Uq8u_%Gkn z=ilo0ESk(G-^=ye`FYyiqtDZ|J;r&yK*4`gk8wYA2+{$rTzC(*ZxPOGqp{ydo6qk) zEayQwC&E~faej9qU6SP^3>013`8~ZG?U>aAp?|db{GPyaZl)K~r;5zy_jXne=?QDE zBJ=q@g5?rO*M`tj)VulJhx3J#wI4!zQSat=634jY(enAG`$g1m^fxo##E^fI$!GoZ zy-Pdaw4j_AvrpttzGpt)w4%MXVYvwF*U`P3Z^ZH1@xJbtCEw5Wf3<P^0s7q^=>BgD zz$%W8o(0iU82Zj<1^0gEeAx8_Vb4N$J@ihi22Z;9e8S0b9Jd(m07{OV?*pR8(H}f+ zzONuBbUN3GTskdY|AcWLP<6s6*M;_IzY^{DD)e{$9^3iKY`e<%Z8;%7zi@wOq&p(e zB~fndDuvu@a6a3I_Ta*PM(B1K?IDS2|J7I?Avulq`*R!z46eoTxDNeA^vgX@VSWVZ zt}*&!EvQcd<wcktOs|7_x$rzJ_d1T71dgZQ<M{e-9FGY7Zy+5)&!2Gq?l#U};k~#Y zKzU(=QKrvta2%ul@gHD5>g7I!^0D3#gee9QA9)Suqx&yx{SHUu>v#IT3tPX%_i|Ns zRq~-=SNqY=8HfFXFgotr>7Ndi??HJ^CU@MoW3Sz4pMI3rhA=Yjo3RhuEAstq^cD5K zm-buhNBaB~{z#vnV;|+tUzE;$Qm3<>)aiUD&F90mllpwvrJ!^6vl{M#(<hDgqrXl# zZQ;$%rsed7lVwY@=gC_8o-x|r_>_G96X~iXbTq#+rR)6&KzcrXBqg86$Db0;gHIXx zIl9m<xlul!MsGCE<08K`r{wFA*j`%%x*!eA&uy;kIg}tLeM;V5BHj3pjdazS`?^Z9 zL_3?LcM=mIRjd7SK|OchwUoQ%tA-W1f-KTb78^6Cgd`{ar8?&%yITA0h9%nhW+URN z4L4hjke&%^eS=0%&nADOojEoF4gFn)YV9_No^|W*<u_>b^miM)khfGjU#=z#wBL20 z_aQaf8K<sqb>=?VxSuT$(yaZ0R;!`?Jg4RTx$rCFx$>IR#{JIiHQ|Ykp{AT3W%k<V zjBc+-PV3`w%o+JOTXV)J=aDl;zp8H8ikkYmpp%owUJEuIZ^<+Aan$Ei)aw&{A2;Sx zIi35gQ7_+FxjjbC8s)Z}Rq#vW{FK(muP>duf28d+;+%fY+6j0X1K>TEdk-bk@BBHr z-#Y$to!^nqbicI>((MABR{nEczc)VD+vSJnjrRzu`W`tiuW!p2I={dddVSjfmPqK% ze__0L8}X&F|5bKd|E0V?M7jqgbhN&mUkdk`U-oVs1izB^n+v2-%I>f9eyf6XK%k?) zZDcFR>PO$rjzQX9kfozhiu65iZ+$(xLaGcktjJs)HEXva*?SqFo4c&BDf8mAsvR7V z?oE5uOXz65+c-LEM_mG4JFY9S4aRjPvcc%jBoKNwqF;*8xflJYwdn8s9LxO_{rgqu zN8O40{OQJXkH{vY|6TIvh54hZ&*=ll7ghY@GYcNQ&aq<g(=+d7c2V5NxZZjD7~7-d zAo^ENqhEv2^YpjV9-_aq2K3X`Wq|xVoMw7HBlidVn~nZ}y{}+beXY`YCj$A}y#YWv zpS1Ng%Kf@=zZri(&?ha?N9Lcn`x)ujI-~h1PP)uAHZRtH^u@5Qjj>q`^Oe27RXYF0 z`Wxv2y`<|>(1~)3ZSs1q;pnvW6w>Z*pxqxCU^SdmJPB$3ezC7`pI%UPc=dg)|5f<d zda{Ak&*-!WX>r_LVKv^PiT8WrdB1qCZohTnHdpBPg%1^iO?-dIkmU5T8<$V}L*c!5 zk@$jDcW$RY@>*aL_ep>C)ofm9IfU(lak?yCcai?aq%*W~NhqxUG?VtZn#h0mZCEem zeN&%Dk~nW(Lk#eT@8Udz^*naeSWo)<Q(_(ICp6COruH`JiXWGkmQy&ld^XXcSA&&W zer8+_6~^UIqh0GizmoMaRpkOh<>ML4hnF|jX_{74dMoe$+0CQ3pS8@s@BM%Kcxrs( zILgU8wR%Q<u(TmmQ(YPi&Rs^|5AcST)K^!8v^RsRC(UG8b7x&&JRuxhEWP*DVn&@- z((<H*{w9~{J#ia{j|sGthZqY<{jnB-j+dL71ZCD*Xe_yDT(x6u7Vn1dRcmwUDX#*F zd?L^~Cd>7VthFfX-OAxa*@kum-U-0BuQhMS9uA)tXgv!35+-tMp^R^xg~r62$_;S% zus~a@kn3BgmK%jKalp5l$faDnIeePx`ILpMd`e!1^0Y|whzl}0Cd>QVr{GI-0~}7J zLsHQWZBMD~ql3eVJPmW`6e~#qzRQFcT?1|HS$qk6547vLb^vTyZ!w=Br&u#<0<V8c zkm;TxZ@-pyb^En(IHr^M2_Rpaz&B~aH_hSfP`{G(YQ7{7-`Es+{{_~o+k7R56J;}g zwmkg!eojJ}ZotP(`ik~*io-iMz`hxt7(Dik7E-&>yq}Ybe(n}z+KR22cNloO@CG@5 z%Cm*T^;Rcev3%TiE96j}QXDRyjFw_~|Cel3+m)Zgsd&eV<^3DosJ54O4%Z>jF@7Wu zKZCtM8QUfcjrmf_q&};26Soe*_Y0mIP*z`wezr|&{an{sNju;po6OhgIEU}vBwwc~ zFIhjfo5=S=8Q0Sm8iS;4ABVPA&Ejp(ScscGo56nJ>4wK2gLZ<)@vMb};c11(@tlQt z;EBW215elU7LtO;u?6t(#NqL51>1qA2Oj%23yE&a-_DonL+d_D(q1m1En0x?atU44 zGZyLGLwSZd+~0az#n7%iV*NL(=Z7$dYuPMccVY^A75TDt!jo^^xgLKHU-VOBCbrGt zTroL6l80a5digrAGNxV!q8yI52bJ%p`FGdL*MVeAy$+-~Ts|4j8|3}rc~;%eRUA&m zTjux8kobL`8|3~?+(dpihf68sdldB&`7%9idGxGBes+Oh?Q?29BOI>vIk}#-3Oz-> zOiz0rJ)<}1_Tmuu*`HV2i;Khg;CuLall{aEa(fi{cPQ%B`n<ZmVjNDT1LNz+!<V&} zBTsuJk)Knv|1Bo=&*8#b6!xzgS6k$II`imBN_2iMfnSe_o@6UGPPZ!hv_!6Fk3vsZ z9z9*i&n^0ETh)5DbGW!dPnSYZkuTHJokvd}@+%Sj-)$!TFNdq$CfC!a&{O2g^eoAv zCm$oj{I(8>j(p4vqf09290HwfyPVD`(76?KE`hE}LFX3eA_}?^fv#Oaml=c5=4qfw zY*(-O^qke+k;O;hdj~u#U$Bric)H;6>;PFivObz^r|zS<cj`V`6~M^OOXGi0org;7 zBrVjT9q5M0*8dK9n`k^=kj$IkQC*q8=jx@u=gQ;nB}#I~w{{-$g1YZ*JGgmphnyeD z!_R%A+~2F+q4xJ89FA{qGk>q^M)~@h*r8s(dpKM^8A*k|m9yTJ$o(C0UGPZOS=sq& ztz?~3orl_laoxVte7?(!|DERZ9ivO{G@tJnopYD@yyKc`C1IfP?K0m-M<w{G-Ty!K z)3gm_`|0p5b-%K9i|jV<S4P*q+q_>HU1GO+zcRY?Zu51F(K+{+uVb11-($XxF}m=c zJnI<H#et@EkNG;5l;8s|e#h(CRQY-q-(xbqvA!)Y<{95e7ke?!_(r<!7xRp7q$6?j z{^$TYKhU`1>i*E)4dC$6IG!KI&Cd@hZ`pd{7i6*Z)0SubG~5FMZ`)oAjh#2u+qsw9 z_wDVS-YJFNw!P|pcHd+rt$+{jRqI22oEV39z69e6o-{npm*G1+ad=#vS$l5j)a}`} zPq*i<^PxHpmhD#sooj(^kZittNq#O!c}69;Z>w(1ejL5@zZ`k|ujozkbv*pCx^G)J zT<gnnek2dS)J<}`>v>u2f00gZU&*zvng11;CilPmoofH9mc!+f(LPN+o@1TreP<Vk zOLoe6GrlAb-^4VzU+3PZmha<mfqioM359%-FF&udd7)*W`8>?%VhXy9UojneW50#I z+h97+IQQq`qx-+z`G)E$n{UW|lY1kqU&sDDeiPCq_nWtCEzr4NvCwxjlzLM8_Hp=H z_^!H(VmxKz$Nh>)+yj*90DLr$9tjSg%A-eAp+|>_9vx7|(`BLWNSLmhRUAIj)ywsM zx_tifbeXK<P$mKRb`yPQ>~czi_q+;wf>*P8rQv({0JPbG{Bxjm-JfpFj5EVNPmt}t z*_!$7LBl!StLm{Eli)6u?tz<g&&{bm&I9T;E#YuJfsXMbdHBU|miKq-0rh$n<8ZyL zZ{Q!~c1{ke*DD8y%O``k$2iCeK-rRm=Jpto;1dTgtvym*WcC<1s2)!?kCiwNS!m3& z>G&==#I1LSdN;l)Z&`mk52^K`v2!#|uH}&VJiQWlcLPoAka@g7io@Gplh2Kmmu#Kx zK6GL2KVVcpGOBn88Pza6UKq9q9vG?X{4fl(t?+~=S~OVb=t~@nN5n4+7Y6LGab|R9 z0p}<rWb;H_?tqatGO}qP85tZvMi#^Oio!Ufeeg0us)rMD7-$0k3;S6}zY2?+;RlZ( z<W_h-VZ8bjkUlfAvStCCi{B{}@pS-i$L|_+4kpfEA#pCW6KC;I;%pd`8l7|`E{~50 z7Y^)01{U`t11I+j)ACf}o1+Lh3eQltF8@>bJ{BD5379S%-iHh??oWnK9+oL{XA$^p zMcFdD;rp2)uFRN$WK3`v83XdiG&oY1Cr2bMi`&CY=bOGyi1+UZnS=BLoI{ASvxqpG z9H9Fs(ED=YEVzsmrA8%3CbD&%29CSWseeEA1Att83dRm5W19w%vB804?7{(LEcC<J z$wkRgiIMSwVg1Ok;2<)rcpw>8F(_P6G>{ZE4IxFr!K7&6AW{VRMGZh_D<HNRjIT}S zJHSc?6zn1v=>Gz(pWzAihkouyMoun_7v|<AGWG;z{tQnY*0TWnzM#K_^e=dr=x}RJ zpPnry<eKYX-GOox>iYKw{Q*uM6xM8La@K}^UGl$uU3+X>)fxY;>-e4c+Hq1lX`7_4 zlro0vxJlZA8lbQaI_3q7m!NY|HcbMC7eyP>q|$W-TAETf1=LO3ND&f`F=o<ks}S2v z+ey_PV3lrSeY)=yI_7r$qfl+y@0{;*e6LgX$I<oo-E+?OIN$4>n|nj_GqkrVbRr&# z44|dm6v3EC!pz2IyD2=dlfuaz6gKkY&mx|uVC&fEv0b<)>_WdIx`gO`v_Hw5u{IBx zNt4XMK+#w5WZfB8N{v_NL?NZmz0f0kAO;_ZL3gqKrU^Z4fs@{GQ*|z_#{+)$8TOZw zp2Ipm(Nt<IR{iMh+lYSfC8CpdU8X`)eKd8zgg*zBKbJ$LV6nd7pO9nQmx->u9XgF$ z{Oh5ruHV4DU1*I99Qtarl|k5w&!O}ZHyRw&knqK03+fln8ZxO3_T38mp4t^2Y$yjx zzM`k#O0iCrPGZ;9-`X}5q1J&$@D`@VTN=iEWlzafbQT=aPrWO~^g^I#QgA=$HT$SJ z9i(Q=-8>jBnZ<@eAnVU)c?V%T0S5()5V5_7VDBdEJqUYmpy?xG?@C6*omeBws%WY6 z!C0sN*4Ql(jIJ;HOWvZpP?vRPro=1!WGDCmFPJkpCi0I#eq|%+5c&4Ivg-eA79K@R zLv!wTP)D7E>accJT&<ojeH-}45U-(Ubv3*Od2!#k(MLB9d8rp`ZbI*7+DB%8pkS=@ z(aOC(x)1l#X%Bf5b;T(e$nQbTKjw_b=F}lB`J9c0%jptZZg1!R0b2epuHVDH_XFV# zK48Te^PDtq$gO-RW6Z6ixyh;U@d!CEPpnn>`+M5o)tniZ#Df8eGY|Xd;l1^AGh&C< z5%eA$@v}}=BbGmbJ#U3>y1|AsR(WXEUXvEWcDy5yC+mpEI+S1EO+h0?>{YTB4kZhS z4}FDb;7+3CS1J1>>=i9@z@g==h1Ks%Xv-C>^n|f?oRd75%ULs5tfP+U7hMIX&`*JW zXoiPoAfCn$Pa{|#_*?dY{RTx>J9PfdE?}R^E#UXG@(cKV%_6S)Z#oz7d+KHa`=h5h zXaDhOIU`#y-;P_)Ii<Ls>$}JX*{5vaGpOHh;QoK!z~euUr*Yvao?xC*33>NE!93*> z%u_zWJQZ;*%batbk^Rs!@_mJ8n5Xzg=4ogn^R#Ot^E6|a`(Hc!|9R?tf_W+nPiB{V zU#W|EN_8<$*)HZOhigjad{StXhMA|nP0Ukn6Z3Rn6Y~^(mU&wJEcf5|ERQ!F1}VS( zJl@s|Z}~3ftth;eg*P+Fyv38uTME~_%zavD^=+1SK{iVbw^`oX&oOV0=a{#nIqv^) zPV^OX={RrYrzrenlVVf2#<y_)%oeGex5zV$5r%IZ5m{9}fj>4Omp379Hw_{$Pj?|E zhAFV0y-M5d8j)FO6mcEh%5&`5%5z@aD$gpOV|dzgeE$mq=LHT;^U$<(n4*Z={xOcE zibkK%C}ZxD^zDA0$KLfk!^&697l^J$E1rR0hMW{aJgP&CvEfO73yMylwg0;s%WOE( z-;bhUw7w4kJF#9vO*Whnb|LRKQ~094;LUhaddxPW@1qTUSe@63<Cw=a0oOx8@{Qp4 zat|#>9ta|@1)*P+v($WjKPUPo+CDX3y_4z@x9hOJR=i=lY%xC6;iC@8Uophdz=)1O z+8)-39?gXg^<60ayZ%Mi<JVub`W@GB5v)7%qaORJjE!S#PWtYXv5lkEHR!|ddq?fM zwc$vAYl@n-PhKY*p7b}UXxDc8Ts9o(??2H?XqWy0c)o|`pE7CYfe@LfeLcuQ*89d% zH!V#^k?X@$S4O7Dz?bLyX@2?|<g0nqY_wCbRA0o3W<9v4eMsa^LGH{eEaz*lvD}@n zSLDXdb1%Gd2p*b-x57?SzaV-9ZTKMgQne%Q2ZvO?p8`4T_jO#!sBgg`zpv$dTgVd~ zK`R`r)B-LWPS+I3;X%}xs9!U&Za>XVwoxN;ZlLTd@v0-cBVO(OyFu|EI%q`pc-e&# z59FGcYZ2GdTij>u7|Zzd7{fmnc=`_Z<)u3q-m`<_)M<ft@09NV>}2@OUsr9TjNc=_ zLH%+_a_PYBHe76`8!_?@GL2>AEx5ClylpyIC+)ve--|<>o*3V6!^PU_s6Krc)f;zG zrGClC*l+v+c@NDzT&=BaIOSjPEkX<>;O3*H6kbVJi&NukaN3^}T#3eJpspNq#FgHQ zYaMjI=)Ej@HoMicFUI}kUDnf~cUiA(yXD+$cSUcgS1wJ1ZMA}r7WF+i8s38rN7(+= z?>ErSE51x8nds|5UmITQ%0AXGp=;QRx8yF?6{e*0UQF+C;P;3nktA|SzbSD_Vpgjk zwRbDErdv>_N2wL#c^9h2Vo!t`EP|L588f9X`lP3#Z!`Lat9|vH0Ui5v&2^CIb+qD< zs-N3%YV8jZ-G9j5$BN?`8~%{i{*aCNr;z_<cghuKKVH5L_QCs()C7zgE&5XRETV$9 zo{i~udgYtV4hwGC(dzdw^!Z#jf0x6Gi+4M0f6rIB*8cC0++n_V<uJqPBMhtYIwyB? z9dSoD^RZI!tGl_LcvIk5z)67wax<h>vSe#y*6=JBwTv_uD^geRwKA_bHd*H0V|JOT zXR^!%k+~=`EIrEjmya@B5MKW(G940`J`sGdhh@6CM`W__07O8$zrRiKU(b7>3T!<e z)8BEa;W5?2{KStj{T0U;KPYfY=segXwe3~t7Ha4gu0l6mveR87baO)I4WYYV;59;L zlh7UQv7R%)|D?85KB)7-aiR-o#gZi-Sa4jgc~P(73V&7SC{`K9l?<K8?PD$FXvx0* z<5!Vq#c^JTDRKs?*Z;U(#<Iw0#pQdhZu9C|>~Tz-O<S*KFLLV%sTof&eq7+jliX*? zN#^Aqfj6DxI{3a*3_o;=`{zZEp&*|NDf!GNrFH?GT&3SB$zK9%UG=lBdeJ|I_!l#h zPFpUGb1qf)w{}!@<&f)|6I|Cj<ypVNJ#xaXvwZJlpUDbN+hgzKb617W^*ScblPlMf z@IK`X)4Jyj<3BwkIs7d1^0%`*#xpK;_c+7v3!D|2u{dg4<3XoB!ANob%0SlrGiCjx zUm4fzIq~OnO!Kh7#|18Z%sh3Sm-_Mo-ygof@Y@1^B=Bbf2QD(a;-c(BqCSeE9*v?N zjiMfn_H!07I$hL>dUyu!cQQu6MS-NB0{y%<Q9cvDO!Ql{%$Z6aciC||kK1vzG4%1L zfK&UP0Y%@dY$RL3*ZR!8r|fHOF5-19ea5nwR~WzeiolC_j<!V{1HLA(t|u=cNgnV! zX$TArG&xfkvkfh9n)6{TtbXrAy9^#WqArSJyos?MjJ4fUwE*U|j*rbn?l$V3?h;o5 zs&49&bDz?G(C5EI%TLSLQ`gyWvDseO%ooXDo;dqTRnB=*hCPn%dP?$7zdio!x{5Ae zK5f@!W|72G!_c}rCI4Rc8VAD}(VfxaqZZgj3u=KD)w*R=T}!tuio1m1?jiVExVr=h z5Fog_yL)i=;O_43?(XjH?)KPwf3lCf^G>_1-5-y+YC(<i8l(5>H5)Tvv<0XtpGP5E z-vSf$XBM*Uq2_0Y;z}!eW|w%}>3r(4l}`u!Q8}x&9@LfzB4*Xt>-mSd{7<aWq%9E3 zg<VDOxLK60chW+^xsTOc2m@2Jix}I5Kx#G~T~}2MrbBp)P7R$sa7#>pH^s$={m=09 zcbEigno8T-6-Be$M{eyaN^s~teotmZ+YyRqGLmW|X|?6M2P6TfuUx70nCxbaSs)D) z9j314k@HVy8J(WIWL9(o_qdXR{nfNzy0cL|Af6%V&=?Lb@@JbSgR7Se4IYl}60y_F z(uey_8DcTixzBe6My8*M_Z|~E$Txv;7qYHbpl~?GMXS~3;HxMBBee<7_4IM)Nc4MZ zNu9OyBeri$BTQ}611>J;inIIiVI}FSDE_>G7q6be4W6no#I9i=TSzB+e5rM~0xRS_ z>H;gH8RHH$nYK1OI(~)_Mo@jd06K=8BdeJ^EJa1ev4V7gTV(BinSv8gw;fzNeN)}C z#Ogk^b)gaYhb8-m;l`vUQ{b{foBYkn5Q9rTutnsiLHXw4Oh=+svC>lb-Gx<Bx{VK1 z*Y^|pt+LnHYr{P$g=A6KG~sN|8@W6#JzQATM9tjWX_uk_jxIrRpQ)|##)e%RVe*)1 zeB#(Wvef=F=FW%Y-A&le?b{L0o@`hy;E~^Q;yQ{k<boAdOW(~LtJ$lWOqmg5P&5ge z>5<rJQQS0SXf-upcs({?;Dt9}@MIm;QymuPE%rQ>b4lHl9nUiZ>aNSr-R?%19_5jr zXeKIiotsuCym@$COMIC>)fX=B7RIm0?DKd<pqA^Lp9)E-pQeUueK1S&Ts6zPr}hew zpc=QST{U9QQpM97+kEz8UwLn3M_;!oi0COi*Po`TaX67?Cs?%3ESRqQvc5!On4VE@ zKsSCnq?Y!K?^VjRGto}-V4u2TnKL~mNN|xR#fhw-MvJ_yy1Q}#74X!?at+XQ`n2H0 z#1}yTGYM`SBQOZ?6S=tt*ayb|6(EgfL1U7pwN0e_3!KT+SR`H$r1}pU_y-}OcHe`P zveLqk8`z~(FF4wX(~}OxJ><p(5SqL(9(;A9pH@==2Uk5@1l$pb<>|zY=DLW#l|4pI zr5oTyCfF~(E6qo$L#_I=oCoG=)NGX8#d&I+xK3EC!)Yd?&b!N2OSg8W@!mXkBF?6; zE%mzatoORKPxX4tN9sLzGJjVJ12X*ak6t_K@OCq^iS6%XzP@AtSmHt7Pu{X2rkx-% zpc3B(e1yOd27P}$3`9Q0d`}n&je&)#JGx*aK(FiB7#bFEI`9@HZzEDMmCIF~TS~eW zyNp#)i)u1sv7oK{dEb2h{K`1Ka9iW*5Rq#8w$HlmsJZ@n=D2?U_O1)Rpx%e7fh_f! zErT50t7Mr$kP=LyIOgd)G>alkCmpFqkn;?-^Dqw<cT98O8Q?04*4Xn(rl`Sn>zOU2 z!o2L$iCms8?Ke1!*hr&j{o-1_b;AR>8g?TqdBxSC#B7-^a5<+rdiGpq@Q$oGdX)x_ zFZ2F2^biM0&I<9_7y|#S-sk0M(*ed~z3EF8{z=qh-0?}9o^~B_Y4tsh#isrg_oun~ zkuaJVuM7rkzNGkZ9qhc(Ev_{Nc=uj4DcvqLi}`DQ(PPx7^L?j~0cq$iWD*S^XN~$G zsmtEUgadg3Chgk`KJW^EnksGIz_w+d4?2F;<|>{w;E{D)+jG>GO%vH?uQdeNWri=w zA&GLC+TvJg3%#Eiay1daR@M;LUDAYMEcuOSk?n*HE_q_m^-C*S9lXaF@yN`1)@U-j z_(;vLwa4eM>)pl>A$uvYI$ZQ?ChKlD$p`4LTg4cR&TDd`TU+Mc`!;^|c=3$JpIIWd zg_-ioi<bKo7fN-yUSB)}#|!ySIMc<@t$E~NG{cAcF+$OGIr|X`QbV60?DKMT4)DPG zZf3;@Y|jQP6X_(65O}M95c~JRrWxsfaggCI>T)Uywx5Dmk;vwXM4J8<V60I#UFgiz zS8EuAXZoc#hB&&$4rPC{wuTZ-@tg#SQy<vRYzsU=zp3kuvM(@Jys1;T>OLOt$k*1r z{d$}4Xp!-TM!S1cN4I-(PowWl0RBq0@+@OnGdQSIwMz3vwYo=dXnm&>7JU18)IG6v zo2xJ;W`I_8M|qSapD3j7@epg@_KnklcvT?u9Jbkn{VhR1MPrCT%9Gfrzv|$0oU&(D z)SUkw?(X^t4vF!~#oUPSOT-)IRLnJJHg72MCSqys^;)#(>^W+-5Nl(y!W15mCvIG( zC9UA0%L2|86{Y5--75`=bd(V`vnA9iivKcK)(uwsGEq(>@b{yQG+jj+y#ua${{b;4 z;{(d>dvistuYgCsoz){II@D16In>-NCTqpnch;&m!}Wn1Z(N{(XreP*BmSx)R)XVP zOgiU**c<oWqaj0=lfbK|Pny?wLfpG$L*mfK$d>v0J%&c~QhLHyC8&bkgWN>vE6*c{ zVVZH2gOL|5d4Vym{QOl3wgno-+w!Ztc)7?aRmt`-ian3iR9($2u(T|5y*RiL@5|;T z#UFpqX4ee>iy$v=G5P~N8a$!ib>uswt`FZsZc-lHH%_Dh(ztsmDi>;H>Pv$;5J0ii z)bA+Stw%o-`>o(LyGI*8u^@j%7};)uC!IIAKBcitPTlpK9D5`z)J^*ZIPVgHf+O8e zR+kk~=9z7|HXHFl*DPCf6!}P};drD$<D~N^ys*R4_bmgrhWssg+H)tId%|Ul)Q(io zTsxO?sn=~D%+rLW2C4&QJB=GzB6;oW182Nnejji9Nq!%`*`+rpi0?Pg@MMaZpMJO1 z_|cjL7?o5S?{tQ<A0r8jxb~BIE{l=198Iy1V;p`(9#u2oH8)`QgmjcFGkuVqaSl{7 zjULFgR<U4Ce~~{ekVCaStb8X1u)^&5old$sncIX8)J0${&Y?v~ZeN~^g=*9)HUcN= z5KsCzYFI12WH~A31yUzR_n_a2Z7oAOlgJH!&hwgl<r+u!MXV1g;T1XC?R^D~jD;*f z3Czg```3qP-83s{9$L)p@AK58^UUr0*<(>>ye|0PZ3kqmQ|mO3(uu4FPOTZ9X1+)h zQhveEo5G@$#4=>sNeZ=F_H~0?ep{^IatQ`M_3*GRNTcZmqMUn-t0FhfSG${Ojz2mR z+|0BaIwEgfVOF>DXz%FKr1L8nV)^%JW)Bj`&OD0PpH(r^X`Xtm=LJO^9=5@#azx>E zZM$~@N$_=-Z=_-Z#@#M8TCMkr1MMbVIfrB2q4$l3@V!`O1>WUYqQ~C!O7@clom3n? zFYY;2jhaPCy5uRKZx>In6dOkX1F$6-BDwU2nbyvjSGu0H*3-N0!uLhXK<_c3pEklJ zX|CJNx;Tcu%spam3}2X-F{PVxA~QwQ_aXDHE%`9hJ=Bl%W3zX)jN;v=CbN&avf3uO zXN-5hE;TP84V?*aW)9h-#hPZ}C_>-cbN^1;wYaN)vIy^YcGOE>ptpBGzAkSGcwL3y zuz!Jxs<W=4$mLm#_I--H02x~)CUn2Hp8NC!h}|e5&V;^9;cIDc2w2|LL=kswHG`ji zRAtj7S7lpAR9$$_qmA6A?z?=9?3eWhqG<DW$(!vunbg^|+<Wsh$%ibss=x8wwEeiu zCl^Vx>`E)KTPJYP6e&FpS_tHkk?pKg`iZkh;qV(_{cbl_<Q$bVaJ?4M)(5GicRi$0 zlH%AwpW^t5=)jS4@%6mUHvQqip(LI!0$RL5t^YSeYr*g3gmbUG*U3qekf#`$A|GXq zH9}_1WV_j(#6=Z}4;<JP((@i3KV4$Y6P2~eE_}K&r0Ra+!yYRJ<L)S9c#D&uuV@c# zH>MkUTxM|gy|Qpa$!u9ZqBOh@w|V;_&RT)Y2I4sFjTQA}njDXMntWur(`B&%+_nne zOhWopi<@A%_a>lu;dP7dj<7j-b^b)Vb-gLT{B4-K<h+(w>nXZ5$p!kv@s2?qW(n>| zFFx<;;e!VaG1}7)O#~>fV|*FL+lhWVd!+u@d$bjB?svKYmE67jn(1cPAL3gj?UW3V zzmvCmj|Ql(X>$}5wn&rxZc?&|oNnAE%5Od;8fJF-^b8ij_P&f{{g%$#^XPf{sremu zg^^J2{tB9OIip$+)#KtkpdFeonO-`}`Yu;nH@ss_Kzc!?;ShR-!0w0ZjAO#~!xf;P z{S{_OQbV`m!i}_IoDp986@G!P8KXk|&ihRBmq(WO6IxI070mwm7-`D7d4?mwCeuCP z=9MSbO$^Na3d-EJG-9GvKZzUC&q_?&47d?5m}bIFz&UT1wZ{uge&UVMj!SRH+JP%! zG~t?oeXn1g^ey_rGhd4+LGK#$!4sUW+sLt1TtCy~h0+0s8i1b5QusN;GC2Pp7=G>3 z&lbimnqAU*f@^T9uQ~D~*(j7Tl~mw*N)x5=Zc5(ksubqt-6QAuNG5K3L}sM8snM<9 zp3(fw;C{uTrWrkI-}5PwS4K=9%F~imZEZWsGz@d2o#2?$qs#5VmN&d{Y&+$xIwOoZ z+9N9@EwD}G^U)U)qsMn^m$cvrd=*mIO~2A8h=BRM&`-7{x;+EnS5OFt9wy!iM-n-e zKfunbW#5yM;`z3-m~b!?ceu%B+l#KwvpAlZ_RqJbQ_>T3Q`(nwOU|Jt)^tzWHWMl> zf;mB@A<iI}WZYJ*JW=1)g&!m$Y~7|K7}f1kR^#yqdD_D1W?IERJ|(=LTs~QFZY_p6 zt&4CF`m}-EM{)NleQBa|iHsvOwkIyt=yLOItqj;UIoNFQoa;7j1${zT;boqRHoSr# z>AEpF7&K!(6Lfj~CaoswzRHMa(a(rCE;w%0Qk<^;lxhgR{g_24+nTq(L*1tw<@+hk zAOh7PWqbdQSQ&vUA9gu{Nn1>>89smaeLQWx#}QRKK+-y@rNYU7k40g`d}hVb=)0O_ z8&&Sfa+{rXp*zj!Cdv8PAW*FLtwZ^cYs%*ka%}$zlWo1;tL<DkkI*yf@DBAm@@k<I z$y)X<SqNTI{EiYVe6-M5Xh*6t0VDZj0%g=vCqxu8_zTd@K^x&w@g8k9g*tIhtwl8E zjGWiaa3VT^eEl_w$4>L+z%<FpFKv;mUPwy!ryfpX5Xtl!DMM+0AuqSc>!F-LYLEg) zt`(_n@4%y*zxZlElrxd~{?BW7UD8(Ad?p!zar1d?yaK)c)kX>{!gxFFG9>nFU2V^w zB53(k6!xM_QF~UfA7WEXdux|lrtSQjtzu)km6-h*pOmMArh=uvp&IwTa&4y}llAYk z05Pbb^EVMxOVl=q#Lsd@C#ZJN^;?3HB{_zXE95rVlY&p9#II2CQS8k8IkK(@xH6>f zq^m;_OxEz+LGZe0;!o{l>V9_eX-<}stAb@nt@lZ<m0#-8wmD|`6R;dG7cTCR8fo8X zpXI*J;}(t%<gk!dGiJ!o+2;Y;aq^DE#D1Pr1dA~l!YX%G3*pz_Q$PP;5w&%r9xvSG z(p)`u<417hwdY%tX5Q}!L8Fz&s?N%6&Sw~bh1-UQpXM!#7)~?uonn-8F%TbL5wlJd z4U{2-*i$?r@H;UrG$-K3V%s&$$vhdah{tn|AW_dj=yT0+ZH8%jRu6NP=Bcx{bx8S! zgAk**w~ouuHNvV%JPedhs71(>Lb@Tp55F2nrA;x7s-omYZC@HEYh;c6I`u8C279MF z=BH)JD8&6cK6ImG8{wT@=*7;@z0~BPmUYQp4`O?j9iD43xOCpI*ZR&?Uc~j|RE$Rd z74)0aqK!%|N38dqn}x`GrXIxmF{-zmmWEH{8qDRmsMH2wL3X$>A)0N^#g2k{FMX_O z-mmtpXphX*;na!y5z%owb|~*VfGVtWBsfoczxSj8yB${guGhpeYz=}K$|kPIyz;nw z(qOJtYLaQ^*ZC1sR^fTi07@5}D|Nh07w$*n8+uuXo&GCFY_G>@?AMOW*Pt6dj)4B& z;I<<yYc}SN;qh>E^f)Y_zS^&OVA{<ORMI1#7s;_8dCUY_{<pEumKk53Tm{ky$KMD* z+7R53od~|#U`=~Pgd)!l>tlb{M5KYFgIa?ygL3h51akx<1iJ%~23v<ngAD%OhoHq% z0oDMwfOG;u07U?v2GR!2g&aDpGXgmV5(lmb`r7gQE5M5$<fA%tUo!UeFYJMFv<b)# zn+$X%WIIqxXdZ|Y&^Cw@Xe2P*swg_EPrFJmPaGSF9S$1?S`-(=8^Dd>j{9HxUYa11 z6)_UOAUjC3m;s<J4KU5G5KcG`3>R1c%*UZoq}py7BbCX$C(JD4W6)QG3lJ;36=ZJ@ zj6lbsr~3|WTqd5ogMQBC7pMFjPhKk&s~l@JoXyKI(sw5<5&*$Rtw$M&*TarV{}evA z<-Uk>>8CKaazBD(FIG_2fZ6Hu?3H=&=3m2JxgFRY1RG)-lv;99MlBLWL&2t{jE3K< zhv{+N)l@T{#g|$%R(Gpeob8iar|5dbOIH?EvY+D?Q_Pzdie4I2Rm|vIW4m)PLwvEe zelDuG>uZ$1e1A{{qBo7ooz2=4x1lSZ+Rimu*f*T$pKi5$wPkKNZR$O>dbBHlX#6_s zb9k&T4j=kk;hVVdc0@6(n0BKbr31$*;*3w<ESvo*sZB0g$jTi{z6O65`z;4?5!v{b zJuBMssYYw9d|;4@a<gD1*&{bL{WG0)eWRN|Nffb(n}Y$|C3NDlO@Lf|+4VtJXBkU* z`Ka8X$|)U2xhzsjlQjJ$hg&#Qa<z!%kM&k2=$xp`-Fli3WB<azli!VV94!`#@RW@r z?sV0)N-gx$L3W?Qx_t{!ok@@I99nY*_iCFkYuVkyACKLd9_(+NzF}Gx%Vxfacec{9 zyhR@12CE7POM3Mt2UE?ex@+8XSd%#zC!eVsPPS70D)x#M+O1LD8#^*m0xx}~8L-Gu zWx#8nnrl)>U(>Pw@unI}aG3s}pCW%>$ENnXKn86qopk#XVb5$+(oeC-+l}pfv>-Ho zF3MpGrTv73p*dN1c~#x)v)Uh%ayeTJ#v#LaKb=?-$QFHe<QrE_m$-J#>Es>s>CzqX z!;o?$f=0JZuVvdPmrr@D&COyhRB>e%bRtiZWWzSv^KJ(Hm&&dTqn0q~9@`sy`}+K3 zMJ0wX2HywCt{EQDXFn^Gn}s#8m3Ao};|X>Ka)|RS#u&*u$m}ZZ)<#wMRmxi=<D)Gu zTIy1%lfm`Y@~AE7#JBcsTUmF8$uiGNmT@Fk8)?JGi;&W$v4t-XA6GRY#-OJC@YK_k z(=8Uqi1MN&@M~sB_;T;K@b-;__{1CMQ^aU7aw8p0v4)z0evM!qiWCEX{uxPpzD}`u zxI!z<#pSYX_r4U3A~CKCS2)Kd#!=o+rPKz|#gerx;1OwW>+FWIS=*PaYEn~LYfn6i zT!-?qIn`D3HK^!zp+inS)modXFFs|c!kxP^b5hoL(Q`wRRL81jipJ2ka6f6tr5uat z_6py3kt~ZNdNFVPrM}fq`_cIJ>P6dcQ2-eXisXM%v`y$W`OET7VQ{2KITV#r7PHi- z;>eY<R+(TN9Uln^|58A-OdW{FBZqPRRE?gS1Vf_lU>057likd>PG_7Q@Z-@u8gJI^ zTes|BAbGUno{1@c!Pb<1Z=ASb5wjkug6eUSunWA(T^vZhN<DBKd!sOI(>Tml^~}DW zrl6E2m3V3p8ea9#<aSU&BAiaV$b?EFm%>B^hgzbS?24SUz`nNj=qqKw8r2>uua^2% z>+s2Vf$=;F{?EFu)0rqQv8vVzCZ*M?mVuemDn5aIzQlW41@~9qg-pxbAw!Hw`J0(( zUFU?o!=x`y#vn7o()8SppFDB7pAVgV)AlJYj@nne!cnIshL#E?@0nc;M+<03wZ)5z zgbHJl=oCwb#j@xe)~SpapV-VxOC=PT<<z6_atWhT-ef!33R3Up4%TYPSglRe*M6+c zKkw3RpDW$ZGY~+z{Cezw&}xsZv}E5_&bUlwDR)YYz)4ER*OL+!7JTbkM{Kes@sxg+ zczMZw%bJH0efgd+JY=n-sI^iw#3<;yrW)LdBY-iad?weootnzv#<13(grLE&6=NaB zZ-EU%Z5>+K2a>k3{Jk61hfyus6a7GEf;@v3Mh?*fu>$F`oNr0$LKULjRjmwvci@pw zFD$^5S8oku1?FDTYCY6x=Qxrs-;n;`HFE#c)HB6JgkYOy*DGy<VVIse7Dve4+L%$z z1LK)z;d?pmn<wYn$G7FJ;fVK%l!d7HTg1&AH@hA8;d^rPouS<%E3M1Jlfm5aFZk28 zfJuhf*LxCm(h`15^}E@tmspicZO?;N|5ta$lJ&Zx&a!d~GaIII>$--OG*zR7#k#w> zJNx6sRwoZJW93Kh;Gts-1zMGso~oLrK9%MYi^t&Oc6Qp1^(I8O>hE1ftThR2%v@|j zh;FZa_P7+Cuf#2cM(;kMxOcajKQ}Gzsky$tdD>jubZ){qc4K~nez<v`@C069J$mkT zB!Vw)b%Prsm*DZdE#DV=N*H%E+}ud!U-yjWCrgh9-n=gr-aql?CvKeLO)ZeKE&5tB zAEaiWhH(>4^flC$M;ULcVsP^3<Gk_bW4l0c&lLz~gjouts*Khw9%%9z;<^Gd`f)G4 z#(;NieEZ&Q8I0VM3!I?l2kz`f*(t}T-!*k^s1d){<GM0s%ws=7B2r^IdbJsy+<LJf z$vN|R8pb{pZ-s)NOTSvKjX}^A6}@g7iZCA43RKV32=%&W*QkY{$m9@FbjrSe${@P( z2M|LgeaTCV-EFH;(rw(0p3xi*MU#+3MMu@7Ed5%`6kkzb74m+cXgd=UUT}MUd+q%4 z#>RD@Vmt0|zA~J$zl$Mm9(MPv^MhY`aq)N`#MU!9IWJMSVaUo)yKYmqTiD;Cd(l4z zu^K_$|I*(bkrXl2U)!G>(FYOVUmbxHtBw%?U}n59Gci6fUs1Jr*gw3lspG+;)39DK z0aypj1D36#Hn~2!Q1++mKBkIqZ)bP)oO<$pj59s64d=Re@1ERSUwqEzrFEUJy|WpQ z-DOy><t%$mL5cD-ZMB1XZ{5~iK5%J9EcLW3pu4OdIUG~+WF#~k<e)mY-L-7g8zs&L z`Q8@C(WCIzAhlOr*y55-xlOQ4dETvuut{B>)?KM*yW%$v{UteF{np%tV1a3Mk>&ip z9NR^s&%mT<WPJZDS<>SS{u;jhy9f5#^)U0}u4bg>o#x26`Bm~thMR}SrDA+~{XSr| zDUTxE74P@}2Yb)T=@$1BCgHZT**;bh!TE$|?$IdyrkV!&v!6p)1hOQo6c!p9D^n&( z`-LxYp>cQjw(Qnt)Tx^6`RmAlgtUC^J+hYPTi99Y{;930G0c<Ma_J#m%0g_)t<BmN zi$X!Jhz*w>#P9ju`x31}9=j>S?#=zCZ(eV*-aOfBg@uQ!jQD8`+~eoBF?$y?559Wp zWwkdF^Y?BRX}0ABsaTj(yb)vw6Vemh;qe6&q+i+Cm7j$<=y<Nw_~Uur;E>9+UU1go zp1J+k`+V==&QRxC-T5B(n#`UZLvY#Hh}W!xc*+~_W8_d{p!&!LipOjjw`_LV3C?f` z_oE$uw06<Qx6fXehvo<7{1#Ga>jJeud}+#cS;}_vdp$?E;mVBoxSE`zl1AL%hiAa! zyhlF<Kv5vt_vRww;c@iDo*baM@S|j+eL8A|@W92u*(v-*@LgLBeCOW$QJ(LYC!eDG z(N&p*hSAM;$#6sC#;j{P&9LB?vAMNp7jYiJfP93LHz5IWm)=LAoc>&7Tq^o~>O0%K z+@{Y{Qvu!lVlG_@2bgH_N|!FVnlTy-gwsfK=qttP`?Q`)CR@2nnXU#;q?DI}r2dU+ zg~o@9th@xF64EYPFC;RZFKoxovD=R)+L%a()rV`MxAI|z5-4-T?$)rLo<9|5BIclM zQd<d+6y6%wcHiV@$|w)55jG!!F&o-b#v#Ess~+tnzn5fuQM65|k1p4HnesysJKROS z;qe%E){uEl!EN71st#SXHAXM(Q{?d|6;7x;&h_;)ThW*SXuJx@$$p;d+SxS}hrEv{ zsn+Wimche&54$|q2XSik{Ps=kJE7VeR9CX*QN>Nd3_sA=nlcC${m~h_A9Hp`yx&q_ z2~`Z7JIvwH*>Mv^amix0@A|Qu9&2XbbJJW;bJU4W(O3V6EA=K}+jv7kXUco2wR2E- zYw+a`b3k?aHhr&lbu11?^Hw`<<aj2gd*APUp8VmVGnVuC+?p!!C-=LAs;VlLJ?tVb zLp*bHtoqj%wiUZkXZNZ76o(dt+Y|>6mudD>P1)Cyu_X5Ax#}f)LrL>e>he{!{alBv zeS*<th5eXRWR90$P0d4-N~1-8cCql61I93<l{?w;rGS18g7ijLk$T*6=gP&ad3=hw zCZCA#LLTFhX+n-Uhs9bgS7oEt5orewSyl{5uHUundbc&g>b7alCDJkB^lzI~IM~0h zZza}K5^Rqy<U$CKSndNT?si|NN=6%iVLr)Eb82c&;pc6L$I?)Q8cG+(gaPf%o;{(b ztEg8z$u`^Gjw`kIt+U(yzDe={Vc5JUL8IK=&rqkDY^A#U&5Es#OeAibUI(tMLXIAr zw}r36S(s?!x5Hs6yp`@N;f(Y*o|zRgH?|aaWOQjVPo^=omKMQp9Mt4y*TvN@Y4!Kv z>gz@cDNl1PrOr?5g&qCptseKPbdTjs6`pSUmaeUA)VWU!>tMXAiwv1}_wJ@1728f) zZ<2`pelxJjP1>84eEr_{G12jw*VfOM0pQDP$*4?Q9c726@7KB;6ozAFA-IaPq?Utk z9W2`K*Xj>X%+rQ173@|=Pl03I-t}`z*F#qwmY)@+&llVm@y{*N2@ck+w(r@CIoGl8 zy8=5JcwXnYZ!LNTjtF}p&UohbdZ|qFcx;CYH~8K=9s@YWEU%^ygh#<eX;YhdDLnKd zUdo?WST6>toDoSG`{E?AZO?zlq?$xvEfg%LHcB+lcv^@C<O>><${IR2u5o6TOQ$*_ zpW(J=$nJ-2H$kgEzYTXUog1$fo^IQ>8#U~g>1M_}JE~orB&~?HCB5HxvnsCLzHZzX z(Vo1DShXX&sj|SWt{<g2w34hX-YI2^y;6-2zwX7z<Re+MY~K=6+<5AV$JdTkBAReN z@OAxS)TN*;XK?>n`&!!Oth<bvOy${{ap7V)-u-sy$?O&j7oU*5d^$vVDF%GBu>10Y zW@}Mfd|ScKoXarz2B>S2&E;L>9%)G|6lt=`Z800DFP6VxHQPaIrt%YG{yo%9v4N3G zQbBs~Eg?vL)!_a|o9UNbxbw2YpAu8gT{6t}E((&5;lE_L#Vnx}XQ%8j&PsESNlP4X zcemug@7g5uMZ45RFuOK5#36r3ZyF{bKU#Wk+SfXC$=KI=V!TWo;63<FifXkk7j^@i zuY6uD=5K?%-<t%Fi>wT|bE^u+;gtHN2~{yQ=6@8DOci&9`Y-XK(%mSUI7F$_dSizv zhmhgtF=@97G;8@7+`umpiZC<ob{&eqhg5VLZKjXf;VM{2y{aDA(*NpLJ-C^+a+Y`^ zc$ZZwj+MIiSyi1*%enVeRXuLn?ba>brMILm)M3jClSRG2h8<oycrk_i`gkpRi*wku z!D+whOAUOKve;8Ec{aaIu<mf8NxyNfaOKQ}o9w-i!gwdKYi=g*3%R4WDF68ldNqxE zvp<3Uu(85XR6XF^LK~xgHfP6Y8VuT$X<@?SGm>YIqlV}%KQHmHZbKA1$KHu9Np<^V z7)I~k;%#2+V1x&G$EZ-A9pWC9#XcAQ1Y|L1@T4vWx}=*U1WhZ8R#Jho&*YvD{DF7M zkP&_dbw$f^g_!4xMReCjC@X$`nIT%Y&~`k`8)P(zH`A>Nq*AHUoNU9!L*CSqPsR^| zmSZUIJ^&(tak))@nAA2{9<;*eub)|tvunq@#dB}vO-OhSFA(B9xy`4f3r%%?tME4= zyWuZ~ICK;0+_15KHMSmcpYo%HKDa@;cm-{GRpfW&G6id5z~c?Ph2;h<!^wH|GlVks zjQzH(gFg{<F-$fGeWT&Dv0elFMC5i297Ewop2O;5&+=3EKVU&=0}9n=GLIEhIKb(G z(3V6<##w`%OHcN5Y|><}UWjIgXpjC}g7D;BV4r>HK9{q9$LNNl%Y`G8Za`WN8H;!P z7IEBm?Ni6Z-RHI`DVT@}ZKUcX*)-OV=`l3hC=~8@nwEj+$dJFmUjo&nwj#TLf9#EM z*Q=66(LIXIG4A%@>R;y50%4L;Xb*xgIJ3Xyjp|<wHCSnNX_cCWXd3z>%{}vVV_JHu z?qR1ZTl&Z?SUWaqX&uvnuy8unYWkbI8E^!vR}!n=pwm&*_+9N`QZ7_*aQZX2d;^H8 z7luXuUgq^?<zyarqjd}Kuv+`ZwTQI;Y(Ey^L)7F|>-c#noj-NjoT&s)3710tb63#z z0jDwa!aMe=<{VqWoKj&I?e-x>jTQ1<1V)?=^F-I?_!XlwTt83oH2GX%55_3X1W<%L z&u~_qqb|Q^!tQ*klF2=PqW!(nbwMxKf;Gq)n>)5BiU2-elGMFET&~fO<94xhTihb8 zvlhZU43p9gl$u1HO>t^+&MB(P)X*A{w#HQnpSrgnhhFx9eC{)C=pG}#dJQvAjuj|I z2u523`()$Aj#(=bL`%txv=YW)TX}^=dshE<76fN`Q;L>-`=P#m9BSDHgkcf*dEGMs ze0ZBK+>vqt{N+mvR(*G4ddzy61h3v0I=m3!4<{h67`Qdrn~9EdZ14~c%V32_c4#Je z>1XW@n^*5AG536)mubKq?h|c5w#^R798X?a$N8|B@*KmeIKik!+^KgMmP5LHH|TU1 z!R&s<IC?z$^@@4KMc$VE;@&*2=zttR$8xV#arBw{&0YJL+(7advBb!eLD2qJn%MNo zu1<+Yk4$x|MOk+<mXfy6OA!|o1Q$`$_1&9Uo6{I%RsG`|kca5Wm`&G3gESQ#0l4J$ z;T1vn^InY@Td(G|*?qc8{D?B4Xp6AcuVzu*4Fd44+H^Ijb5BZ|m?f1Mem?U*=v17* zhDB6$N#MFG>5MXaRLz3x`qa_p2IY^K`r$aWMJFs8fQt3zJT2y_XY{;mJw`#94;K_A z-8;Hr=0;)eUr%1y?M2{YDsPQ8WzA4HFj<y$p3w3vCm#(v`<zR7cd$W_anup2>y8?~ z&@7siVJ`o6VNSpGwPQtC$}BIHQZlA67igkSiO|Q_LFhPxRN>tG4YoRF;k0kDhwz4^ zR33TUpeDC5BygGz@9JjE)83)`v6VCBcB>^oG{5;%?Y2xm`%2j8d~*M+3sf3t+7&-q zVa!g$yCYYvAo;JAuT-A8_Y?1`WB9a}w`rXU?xy!WEzcP69qZ+Rmuh-v>6=66H?3LB z4yhH>_rF6hM6@JA?7lYupD*dBte4w5g4?QHx6*R)bj;k!w<EdV;a{te37w8Gr!m`Y zG!+Hjqsu(9r7P8Ha4p_P)sD4u*GFp+9GI72(_ej>#L_A}3ez~}*tEOyD2xJL9gxqv zgD)_7ywS7$B9d;D*e-n=_qxEcXT|z@#ik<w=Q&dG3EG?a4H}W{%nI?$aq$(i#%1kB znc%}QSb7&SAFDI-@VDo?^71pZQ=Y@p=&E7pqg6>TtETj<=~+s$s4x89c<y~JU*&w( zX|ov-TU*yR^tr6ZWP+zlwuC`NsXbT{T>=5PP!=pz-#7eu&8Ae+Z}1kZt|KYSFS`=S zXp=3*BFtSsEQ~zGk5&L)QMY=s>$4f2ic?n(yk)~!-UkjJ6uZ&^gf$hTw<!@T$Q?o@ zFtm8uQ`K5Ao{L=W`@ej`=!#6_tXYjtz4Jqn8Yc6yEM`=;)Z7nE<&cJ|`tm+I6nt@A zUf@RPyvruf`x$@4B7d9_{(3V(%fbw59#%^h+7f#w1fTs8i<>`6pg7<On&js*vF1vQ zuUB**I?YC^MLI3X)%y@ai*jq>34k0K;gY>GlN=ay{atT0t~!9(vf&3J!XVq9*GNkW zXN;M}Jlmp65N&Fj^PPySxT(m}ShT=^KJk{!Zih!#;#+O-X^RSRLG?0v1e1bka*-c` zo_(}$pWFBQL|E)ED#AyragUvSZM}HHYTKFL!T~tA0TEVAdmLH1=Xf0kgp-%{8s<83 z&PJvyc$?TG`vt4rE|Q0wZeUvLc?Mh^69y`r+9Hgrd&(2_jTW}rBDSZbmkvl;_Jh?} zbEcW&thhY0LwPAVhMkctEU}>uT|o1j%BpoSuSwww(_cJuu$nAOh>lQLgc2?Io6ieo zH5Z>)_>Z)Ll6Aw1N!5bUGySM5-9C(Q)csv~=H_XJqH|arU7JdrQ+{&5kC12yvJ_p; zBp>@;->fV+@%fs3kKpLKI(&a?I_>RMx!)Muf0k;_TFIl&JLELY>Fc;-hIxoRLQFCz z!&}7iaPJosq)r_%OsTG}@Z$xtT25eo`0)d2a)oohJzf-Ls`2_Z2hX>km`@SMDm0;O z@ixM$I<88(o-l-nne7u@uu5o4IQ@cb`4p%A7#5vXlaE#=1*5iz_T8Sm9V$cI)$n7T zJ8#Nu$%~vLBajWarc{R)VOC4miuktK*Mc+rI=UUpuFEqnHH0aP0k-s$)?fE-b!n+5 zFUgK>`=QOl(1}yL9y9!|D`hY1dn_yZoIhFgh-CS>R_fJM@S~mn!f5kjpXjnzlBns? zKR}hlpO|}qoMVHYQ-YaOg6+CdTKYt*7S=e~HC{Prv<XTBPg_DLx=Q8%b`mW7TDFak zreps;Q3;=fq~*@1y8RjEUU$)GbM*2zInPBn#M~(F&Dx`kPoq@q((tJ|y;@kQD7<Y2 z`hgl&qTcmNKu_1_Y<>D?(ghE<;7#+vk<^$wo97Am^xhPsP1OYORK#gHK+Vaf$1==N zwC-jG#biE~;zeK7j&0H-q@&K^0g01Ij&i!_W<(h2YLj83)r1_&Eso09=V)oJ(t8SI z!cq3DQr8Ih2%Xr;u1j5ZX*WIki=^!YIl~)*Ro5>Q&<7+B8@5j>q^@Sj{aF*rRpWQp zF0|-hbhh7Sp0zOBIyi3g*OFa^$mUWQS`Dwgj8o{Fu<jB%xfI><d@M(2PGb-)Q**~< z?nnrD(rb|j7wPZKNAhLKV-e?Rs|rDCPMnty&7TlxU1!evzGQ`vn^!6?Z<1tRYxk4y zy@7tAo1BNl{3$Wo*byah+ms3!k4yVJ!J^!^(yw_J=)Qq}6k2!oNR{G)Pp000LCrVp zQLa5~epK_&Jvl7-W~IQgy^|!K#x1A+K21_n@#$J$L-n4p_DqiI<s&lu<lo~T{V?wO zswTQpmAF)#@NBbY;a(JF<4SO?hQ+zZ^gX8@&lw56#kUH}@o1U1)<qk>kM|WfNM-7K zjwMwY=1G%}6C~Zc_q+(J-gl!(b-{hZ9P66PUbRv|Iwi$98=gEhSlym#g3hbZq`M}h zbwexm!)W@0@`x1AIE|?v?l{Wma}3L4USCF9p=p%HfjQ@X;fPOeeuua<5f=|otMoFs z=122kF0b@n?mW}`vzP>3a0B}=cvXXY&I;$=udJr{knez{d)v94aeL(|$K-X4Qa^sx zo5p*;af``aDSvY3C#B7#)0@fLP{IZJ^}WXx97sWjNGW`mt^<6IbS1WtgYRtS0X*f0 zR*jR3KkmjjUp;G6J<WdK;`f(3B2d%jegB+XK|7m6nTHzeusy?|x;*7zXJyP;>fiJI zP*wmI^FoxAL5y!&OtQ!`LFBQUoGgWMq$$CV#s~ojA*{B_7s7Ovz3NbcZ@PypuJBp& zeE<1N&C-x2i-%L|neDjy`7_tN>l2sabBl8c+jm;M7nFyQ^~L;6^$RljAml@wWQv8f z2RtQ5l2AG1^cr4BUT%~<UI=9O5g_sKu}b!6`i@ZhwTV|i0m1F2pR^kn!a3p2KH;mv z!@*$60i!4Ie!60`S3h6Lu}+Mg%bDsXK+E83!^3>$g$BVdPN{&?I@GrdgmJ%fFNv`| zp>%rkO+mx%x}#sN<Nl9^8={8YD<T^a<9;3}B?L&vvf$~2ND-&lbL@EQ=?xF6CirWJ zgijRDz*f48Mw)ZE+s*X1(Q%>|$p(wx_u3vLI+s|_Vs5~bhK@HdOk~e7n}#wO$G2-h zJ+NVedTsj#v#Sx)*>bB9z|+}=nGWvw-S<2(^<qz=lX~Nv&hK;%{{7kWj)I04iGpJB ztwAXTHA0`6kPRn7blDT(jTR;16^0iH-m?QpLwA;6^ZLALEuNm~4yu`i8?kqX#ASzn zP8{cnNic@!0r9r^<aEQ`4$Z?(PjK9m?v3s|f{%Hw+`;BVUeZSCgs3LdQ(5t3Wl8xA z-~vZp@4Gg2Yp{cT{)PK_@|NUXAol|FAto1({@|VzAenok;a@Jt`N&R^RuiJR)Qdah z9YTIbUNJ^jRv$9H;JSh9aOvL6W`;@sQ5N5;3(pHjqlxhpd!g-$!&CgsV?YS@ymB5O zdJ1ke!-I5ffvf={ajI{%d#as+wzA=Yb5?cV!Q;xyWkUEX`_7u}J{%wgO4HiC-7SBI zwxT87t$s(aV0a!7z&!?nXYYx(7wh^~F{1&cxF~1k!;P3udw=KUes<rTeFvIQ8`0g8 z?(EjEpaFG!O1WSm-A(6;JhJe-iSi6Gved7AHqOnXW=8LWKZE(ChVquk;nNOIQFvmA zmri4dU%2fA$HT8Lb*vV8{=WM}6Zy);B@%XU&6l8lw(oZxlc@<J5#zCz<1v1E>y3M2 z{J<q|CADv7#(Mv}3A~5antQcQaLk{F=lO;n-jl8NX#Vq=cS{D!xjbIR|3UTVV!M*4 z(~$eFgJzyhb;-GUsI}q&bv&oBB8y|O`r}HfgT8dTw0-*gBdM*eX5&PoqpQUQOA%i> zN~g$uZ10M;B7tqadg93Q$q*lpNNq%4_RH4$51)oApKEF^o|i)P$EsV0-9C#M^HkGr zy8GDWrgRQL&BUVq0;#duSYW~}!w|u!=H}(54OQugY{Q(px<vbQ+4151QtY5}M;SsN ze{&T&y_}_uRFPRvm!=bEcaD0ZyXooBmTTBje`BW2Qg}o8OKr%^r+u{{>}T%TZuWSa zQHFb`=1y1>PWRm;+M*lVPPk@<^SPy1*ZUgvM1^zNa+~lBgi_TaCv&S^iCIPG<u0V= zsw^bgX7+m7x7Cd2A)cff>g57os(n0BcH!H57rX@vMU6?iW(F1phh0$oT543IkutT6 z7n61otB)n}-8$&s*DS}bPwOjUjAr5NjXXwGSw=IjeX)X`mDF5h#lDZFxK2|~WYBfk z9om_9LAp?AzS74z8A>>;pf=poZ>};xT8d?5)KlCWA#b)Z{LPNq>QFI7$D^YNC0Vb| z&h)XpS&toMTuH!Y2IH$^E<+^)OgRVZ5cNdz=F=fsb|XcH!3_0Ba#RQX1hhHVv5KxT zx2Rf&U01X0xkFolhGq9%1H1}qPThergwWxi*!!kKEnm$p9xg1J8PHTthh!E^6wf-T z9rOu5YQ1m#R#%2Zb=XCxdCKh%a9k2rPv#lCEG;nYx!>Aa))1KwdQVrMxn0@a+CjJ6 zVJii4DZJ?F9vmmF5H7)c^a96^oY>O6$7ML6&itQGs@+F}$|O6iu>(rP)br8no}LPg zH6v;z;<pj!r<ZtctzGm~X@=Ss+cerqp5|W1y3#T|)jL9mF~=q%Y!VC(j?cS~ZS%^< zV?B;(UhkBjQmb#84G!<8-Z%V&ZdfNt+W==fAwdgsJ+sTH^yE4|@MUXK`kyD)BQzUZ zQ<qES;s{S9dI(Y&G%QLe6>y6~n0u0RX&=DN8Zq7^C(UzQ%is1q<!{UP$Co)g)95^^ zT;$}I`y?ak(V5GY7i~P{<;;zq*Ni2E-U&UH<BIRUD;q6&%OBbaj@~@CRTi{~2N%m0 z`X_BgXQ2zLHpH5!$SJBZOxsZ7;+PsX8T#|z-ac4zbfIxor0*@mTPCk1*-XPdoIfvV zOyV$BllR`wvM{rjD65~q&d;zYvNGqW%uqG%IfTB!bVY=|Bu6Z=Tu*!ON@LL8EbKim zu}C{B=a=p{j-MUPO&`psj1NgB6B=KWa%Gy9E6T`B&O3v!AK4Q>$p}iEsJlAJ$=9t@ zh%MJlK-c+Q-7HXk&Wwnu<I@tC%>4$BMv^fY5D05d6vd+xJ-3nJAN&KNg<rTheQU6o zeY85;ih}B!a0|p)hW_tFDsZ&j@YbPT?_cPxPWL?Q6zr0!ha+zH5w5(_$^A=)=e2Vh z&-HVQ&pVu^$N{NV9D^uDV+0k|Q09W}`tD&W`Tmx6UCaDt{>CGxolG-Q<weDErKR%7 za_v<b`IZGp6xK9UdP2VGCInJFfR7gBFFWOR9^9`NmI=CvQn{>IzTMpwZaN2B#s~cI z<V&?B($nL8FQ{b{#VXe4;tu(fLSOn~t<zjl`qa|%vQp4e)KHa27zy_hRt%XBtdW2B zLkKpafi%Er!Z}T{foK|;>ZA}_L|iepVG)kW4NU2|v9%*gl!qFov1%XCdRK78Vf1ve zg$o~oUv5J1qTo1qZwxfE!TsWqdTsyWGeDqKsI{>c960vPi^IwYF~`;;(}RYa8TVHz zrH}0)Vj_j_pk&V;^ia?sthZO^vsuQ~mYLZ%Y-_;*K35aRE>kU_U_3%JztCMC!g<cX z&@bDmnN9{@!GQxkJv^-gNguu62$Z@e4i8UUpH=M{>yEUd+0DEB>*Q5JPYM^kQHBq6 z^?b3g<FxfQeELW&dKi3_78JNc5&DU+WBe=SUjp?vlo|+MLqoy4Z+x(3B79MXBLS~k z^$!nrzONnFnkP_`Tr~#=A(;W3k!rz%QH(Q>aDC|<iPr)&N7)7K(vr{j;%}ac@~2ck zxPZcuPkoYksZXi>V-`*4J6Oy66BZG%FBHS&E(upj+Cz@3I}&G4Iw#TV?F^@qwufo+ ziyo+88a;|2tttr5yn&R4*O04c3sHJUPnFRmV@y)qFMJk=a%;JRt_NF)=Ch1)77e!% zEF*}(UHJ6V+LwpC#w}-o8<(l!OF9mWZrgK@n!P&Z<7*5;Dlw2}hm&L@?UShD*K&W? zwCSH*_sQmuO2enR<qW&|-or!XKiz3opAOR4Dd@u1^R;x2Q{ErC2Xjc9i@B0LY~BpI zvmc=ou5b)O7vBPOjC$fFvK`cLWSP8aQn>U6NSr&gN{kESG52sy=ZAJ}>fSIkYRsWf z_gnEiFe|+p4h)Y1oO~{`I{o`sdQ~?rVe-u#5z^EBH(ZJQHRoV1Eq206G<v>pJsEy) z3bTg6HsTT%Jh)d0#apC5P#o#ej<eXk7{=<$<HYu02imx>-IyLcp-pRGXN!Jrn3UlC ztl9`76}DqD*Dg!;?11R@Q-RLV{fqonF3sNK`T#qq(rZSYhN<2od}mB=?a1`0S*p+v zW?XW3WZpQu-Yk$C^+LtjLggf654QP&^4%0^kgxQt$Jt_^Nq|o&t!f06(CIX@B3DJC zkNsZreTwrqHOzR4utbB6JT20GTt(NUgc*3`-{L>TFw%g!$$}kEDnAK^YLa{R^ZwG` zqzKtnV^1@*Ytj!Z2%V)wJXvf=TO;%xvk;&tkC<z(Xb6(>A1{569sDH6i&lB5qgz{4 z7iUh0Y$Me{Sy?pJaXMdvmYOyeO*n@sIA4%sXo7QO%tH<Q9d8Xam99)|)vrBC!{)_W zu^kI`BU%it*BCJ;2{B)OY$u6=TVWpEnZ7ntY&uKj;}Yrqka6>yUz0Xs%gb@5;|#I0 z5W0NAvrr#S=Hu>DPa$sNltLU|eaR}O11ln@Kd}2%N<5Q3G+IrwdoYO9aNDwqY`5nZ z8g?Wmu8$m<_1sWGOg;Fe8`Hz?(b3WnWOcB$HIG*|B;=Uhe!wYX2VXu6ebw&OB~hR1 z1_$g1ReAg4K_1PBND3l`gTOoIR5JDRGw`A9rsQ1#SLzTJ<Q5p9N{sQ6@B^(=sz5<v zY{#&n(nAh{JNk1`3U=_^*)oPgYp`K55bC&~$c*tGX^3R`Yo0^Jv|A4{s{9gvF;3wL z=K6s8U~fi2LWMKT*P;IUK?Naj4G~Er2{m|OTVuzBg~<CT%d?S8;gg;YH`yrS=>ccR zBYfl5hNl0J$EoU5z8a_~A4lJr+%?x>xQ{Bt1GL@yuBP9k$WnBvKP#d})7RT;yXmP- ztnn?dSL_fZ)YZBW?}!^*>NYZM(wQj9HkOeoDVY{@^Oo@HT#W<s$mywVi%cmb*;1Cj zzgVa`I#K#}w__b0l442_7!3pO?8NJ*Bu57O$@_T{Tj{jLVYhg`;N2)6CxGi{^|dk` zat`a2=*=%Dy5Bu@sFN;Nq%K*tU#se)66bfi3VP>8bC2Oj?3qJD=ba{R8Jh{ce<`<T z9@8~hWFM1Vz0!tyH*UIi-K=2tI@Y8%hE}Hku1k-qBW%`ii>mAv7D4I)>3~{>m>uj; zT5V*}06X;&w#!c#PyJO3J0B-uq*`U~Gr|GHtBzW2yi-Lyz9Mya*Bx2Nyj_m_##u(I zI9;c=e2X+q7aH5}jT3A!my6CD9h9YE6@})hH90EG=K&@{=OO-UU<6OQv@R>LjfTKI zFY(kn9!(3>pw<QB3|qg?g$9Oz0oP;-!l?TvkqI}r(aj09I|~28P-Vqz>jT*JeCXmz zuj37fA5b#t;8gtFZnRi*&Blq|5e8PsztA_dAKE}@0@kTI87k1GVlQ4b9`Ny@A=lUR zqJphGNE=)`&Hy(+$iFecBZ$II(I<{vGW=Xh0#<4=Fba%I=e(eNC7X~yOT~Y&-{dE? z@m9j<bzMDHNa6Q1!OgA1)XMOSOI~Zh-ckjWH(J?=>l|%faI01SE^CGhN5Y6wN797) zA$gqR(`2l@{6y?jbt~hGT_l{q3MxuF^bGni)!ihMrW1*L?5nBcEAfEngC!$qS};M! zU6F@$6zWtSFgc8s9RM@bdW_*d5`c!(-;D9Li6;e>B+x`!nzZ4H_?jF5A)+2i08Z+j zmo`Ucvg$Q37_e@7=q{CG*Q_53K|39O>iSB%9MJz0YMHg8N@Rg?n?Cfg!=+MJ<@>U` zR;to*|B{AKwgYy}8(5$?^NcZmPjk{)h*u?~R+$XePM-ITR!<fdMMmxHw66BAeR*)J z-(MSuzVh?R%#@a{1|}bw93x&=;ojcbBF^I2rw&Cb=9kW~V&TkTUl-vX?G+)|KT2+y zwMfaAtLL*+Oh-5`S|!D)2cIp)Vcmv7xuo$5SO{-AROIrjuNKVXu*OxfdQ03KiQ;CW z*@t~EH}|IYyEPFszM-?exdB5p3uXYNm0>M3y;Qm3p;y%}D6uqI$e1(S4qK`+sd-*$ zIk7KN@!@E$$<a#ali7sqmY}D^$}kn<&zX*-qtrT8rlO9Cjg42NQ!n@d(0rqxHlkN$ z!i;7|L&_E025_q2<%HPSH+YvxDGto;9y#1LxTw3Ad0=Mv{=|tD-uxX%@)dSg@K%=F zYmHAcgBRp?%Y{3s?6<rqWiqMYZ{EKnWvje@N5RR8nS8@HCK=U(HzrmUi_RH9V)*6| zO<Wan^2K#PqblNr!b{#rvf4n|x_CfbiCm$uwu`EoszkiFuc$hy#K1IUR>!<HT488O z8&QR`l-M-Bc6mwnwDwN<xwPX;P3~fqS%ah=soCe`83pZ_MKqRNN!{ti?=01&y#|%F zOW$zyk1HU}Q|ls2hv&?}IS5*zW&P9*ENf#NhSs!^mpD&}UE|fEXtRCdD%rk?24qi9 z?jBg*u>WEl4dNVRDJsn_t)`uso1I&oo1R;qo1a^UQWH>2q8|2Z7NYASx0Y`}qeHDR zYL^g5EFhYd7F&`$?Yw()2wL7jYI<J%95LwQKp|Ye0i~jyQTDsK8{5u-LvW1FupYGr zc6n;4YUzSS26ys{F}x{b3WjV!0D?)Dov|86LB!(hR#k(FIw`&-C3!a5@93!?91HM_ zvjWNm3c)#Fi@@&+W8h@eKcT+<RB0|yUn(=2udT0%IhA$vQ{7W&h_wh)g?2S{sBfS> zQ(!&JTfwh5Pd$rl9$q~?v%YV7&LICKdLVYK=WG=*Am~I!P?+CEdi|A4{Noz!qrl** z!i6DS9B>1{t)8YKozJ>+dgb8i+S0nlW7&@R;M>Ne8Haoy<mM~A74t;p#*p5Xe`D;% zkv?d6SNlNIra*X@?S|i$Q9g}%W&haZ&fTV=nO?pQ{UYF*#5)}E4BOsAf2;VQ@8PF; zIR9Yp5wm_`d8ztR>M<q#$oazWna{g(e&zV=`qKKw<JnFK;p<hyrvQQ+2qwh$ITDHr ztm+p@27(b-(=SRbq#6hsuQ?Fx3^05ztqjIbaCVSQ;3&LR7YB`0SJ_|h-U(9PKM%Q@ zxz~B%R=}Sc-_dYdU@pQo_t4dn&QPC-HxF8P4M^MSv0DWU@UxL26=rvJ_Ccj~3%T-B z-+;rp2z+`HfN>FIy$R4bKzW^@@SUKp%Fql<@s->9%|V^Qkl$5kXOhB^KWOYw$3{D* zKyjFpB4f7ZqW9$1rK-Yfa;@|X7A;z?tV1fXpaFggGWBq?k{l*+0Nq_I*vCvBYVcbS z!nMGwH7lhR&r+xjrV=S?=_r#(N-)hLaK<BIB6%0xnS2edysP*!sfBh;fqoZJ00KE| z-4m}lOErU)jm$)t328DS&dA*&T<EBRc>xQ*js!QgJ1Q}3*zEgRwE_Qk6CyaDPxc^7 zim;?65$Z6PGhmg|;ItGz4#&R~<hqpnx({-^CcnaDBmcV01M9<r>qE`ro>_z5&VlI* zCkjP|2nEBCPVYxJofBS`fH2qfsynzwsYp-tAV1Yk1!dCSnKmWV-of!L<HLA<A9nZh z;Qs4*8w20fgWw_{N@A?uM$NY@U3hY5i0dFtW}McRp+fHN$qwv!Xuzg)Tk~b(GunzV z=+Ol$ab`hAjVy+Nl<A=qBma;#d|P#tdtz3wVQ+C>wN^n(eDpeDH&@tiD2`T6a15dS zb#HEmZ9YZwjMD1Mx#nq+$!Fh4lKWT0n63#alAKM&c#yX*r^w{qZL&4d7hGqrW>cTv zTaM78@FuZBe40u#<agKU1Eu#@+XcA72ZV%VUEtIvO%#ph=l8c_Z)YF3uzS=GAb7cx zxxKPS<1f)g<Wr?o+X)Ok%m5qL!-16B(LswnG?(AKc@)AVFfawG8Y+zTQW9+yP>Myr z)+BsIfKRoi&OAs_iP+zShYuRHwBiiv1%2C7|FzJPTJOxrR`ot~H3Ckn8tWLQexud7 zwTfGJ`ev~w-aAq*J*HA!XY%OY8$s~4+BCQ<XqZRnOm_HmGOiNVT+VxbzOa5XwR<N# z3y-m9iFNxj)ywFhAxpD#Y24)p+xR+a(Q8O?_DEM=eR)DRKDqy;U8Py5!Ek7CdcBOd zoL9}+sl00E1@k<tRx!B-yZw6ia^r{Y-Kc2b=s9Zdr2vd~Ljwc?YG5E|5MJDuic)2q zY#G-2jEu~sjA2XfRMrlpJw?_Tl<Z95FZsF)<6s1!M3F@H%|!7DQh@`UgDItp-@8rR zPk%W;iue$htHdG?2UQkK{_N3Vit2&eg%3jenHD?*>89aE0fd~?g|KqMJM6)-redPz z#<`?c{2g=+r<>7Z*#{tcwzB@(?{+3&Gqzcc>S4L7yqt6`!kgOY>>z6^ZqZ+4UG%zY z&8jM;xz_qz3jO8Va+~uT_h3qRpK@Pg=`h`h$A0W-|NRPM<MwIx4xRIOm>jdWs{viF z6vkqoU(w2RxCVQ>J*>3sZO!4jhsxx&r1VQ2V|e^s8TRUv-*v0t=(t-3m**J85zmpD z+V$gP5Hi8d7)n~So@$5#8rSm?EA;2HhUOL;pmw{9?3h=u^w8+K5-(5Ra{T4xP`2*r z-Yl;fjr+HEq2Y$s#%uF_MYo%tmgDJtsQ6Zx6nimg-ka_ubj9km==>v|hsz{O<V1$E zlc-9A-O3s4TUE&T_C}K=2Zpn5iC*L~=jN&lag>`j(u>%Br}Zwu?faDF+LyJ*_4Kmh zZy209t(MnF;S?oQsD_^p13%?O#AV~sJ-N8GiRWV&eyY#h^1YGS4ST9Bdir8+UYdj- zLB>XaGpj37>%;&=K@Sxlhr!&qo^{D~NUc-xJ39)rr1%ohZ%Jc|^BC=APu^!9l97)g zx{47cT(bOD-V<y<!#Ss(T=^4AwUUfL;OFxtE50X}7j$&m!rAKFLcQhTuI+g~fl4`t zQF-FcV>2%v{goMU9d+7@vrBiPva1|&YKu|RmC|wyB6)xY3|V`2qssHvrO)s+7y5PC z>v3TKLE3=pwn(QxW%&7Nd7UK8<rr_R-eWxFP{@>+bX%(1-C6eYm^tUe#dbvC^<%l2 zR6fQQVG!crRSRm~Ru*@CtIhJVAv5GzySwwlV(K*Sf^~nLJ#@Ol04@%4Y{U7=-Na?h zNHlAmTkF+p&J!ssubSQ7sV|V;(2_%)<8%jYx|g-5pYEO3_2rP%k~Zc2$Twh+G7jFf zOnu4j5q4bVM6*mjjAJ?W6{L3Gw>@{z^DuSiobIQ)$XfyND|WlP>GJbA1Ijj2W#cnp zC|12NiGO5Z03jE`C;iO^V0`4K>H(c9D{7$H3XHBFeC(sX9hz8v_5i)#CmI5iZvmeI zzxO-o;DuOvJQ-mL5KWLdZ?z-}S9(G89SY-mJg8VVxJ5fX_bD2**cB{>ygE-sqvDTK z9gV}DSCzx!dlJ7=cV6vSVoFhiM2ExoYbZS(<u95twzs?9;SbyCT<_vXn_J%AwINt| zxV=kA*uKs1m>+Jx@fHlVCBIE7_VcLP?yX{v|333{e>dFU<!!G&@1`hs=W?-JA7(Xl zyIS5wr4Y|^_q->`Qoc~!84e}HoI!b?9*YGLwl>&=QbCN5w4$V{AwAFmab<%L`bp>4 z0WzHVi4O}J%ipw*ov&92NjS`jOk|!BOyqJ%#ze_Syb4I2(4F8!ei@iUrZ<a4YQpv7 zp0_DKfB(n#s3OVPxf!M#&zAeQk7w<kwVeH+&f~NUT%v8^%+}pC-ixsQW|A3;u*Sh^ zPYs-hA@}puEV_+;CEzzwC-{r(b!;w`xCWo`&&P}L`UyTNt<2zHxHiAvaKKyEAWVFc z9AnLrHK5ATf#vvbUUbUwVNvDJPw9k`0S^yAI%I>#Nn#E<X=tm&CYRQ+uITB7gzJ>< z4!tmOa@1->A3Uhw9jc%f0T>2Im8R@iz-KF3`M}{lIEqQs%ObFBJ=sJRHGy6cW8v#e zp_6GVDo8b|o*_4rrUs$7fGrI9v;NPu6XZ`lT%JUfnUsUK!P8IAXM^g(QY^eJXEuFT z&ufJW&dK*wWTI!aZZ3n*<f4aN;j`dOlGwBqEP8Hc)9foI@7qUyYZ}YwsK~1&?(FKB zFV4$Og%alO!M$;|=@6qDjPE@Y0llqRsuIznl8;2?^{Z-Ub<ONNtWReR=Md!SD<k;K zCJ()%@c14cqlB*JVal|Dy6}-;qHGzyqqdR!@^)wrJpdf6HsS)}im`Niq1c{vXxyRx z4oXrvl0~VVkU%)ULWG*J(hy*AGp;$yKrh%9*c|uhXi5ODF)H@85xhz^s;yp4O$5-e z%Hen8Bzlnk7DdTdO|fP{WsxXBqkXD=&y=qpE|{ETdz8H2cjG}^d2q;HmaHJAx#S@I zrNtMY!`;D*S480NgAdANj*yQ)`7m>KDV|kpJQ}>3KA%s?py@f>=InWTdJTD9q+@uR zqsn4|_$i;lkg!3+C|-#oxEWu6ab}_I1U(}4==`@MF8pwO3*+@9E3eQSwT`N^(0T3g zaCL$C=-cp_!vqhme9+vpAP(VsRhj;9#d<6zot_>(9<G#oTkqXPn07W2bVI!}-5Jlu z>)OQvN-`Im+wnMFql4~wGlAqLvUCe)=Bb0b!C+tTZF~7knOwzPBdA>2iiNw@?$vaj z(Bc{Fvtz!3!)lE4YErwq{fP7}gV?VGk9pUJ#sftT#&byNu*A=<9L@p)`c=CFgVU(v zwflC2$+hD)@3)s@_4B1zTV*Y5Z*M+@`9aRzQe>rIm!+6)*NG2t>0C{=<>!%O2%P1@ zt`MurPnWd$5u3DuNIf2B!yJy$1`0vn1;{D&b9Hvrct|q4n2!Y5Uyf0{35e}7(j!9z zFXHC<GTTjlx#P4L$AmAWHxKhD@T}^4bXF$X*X4UIPjfXp^j76M#z#t|Le)Ld;5F`D z%_m215xSAGy}XXLdSzNrM=0?e*k8CmX6Iga3vjQV-Q*}*H0j@U$`pgk_b>Mq^iBb@ zvdT<nw{99$=^Gc?H<<QbrDQt1G4o|)2sLOfzB-)__bA+ZLObS^9sOLxR>`1z0@Pg; zZ#335AK>q|*y^rvG!IXj8J;d~%pZOVsKr3tlNK{~-k)mFuHAR!O6MAMTVKQ^3^y|# zTQV_hwQY8v+5pj%xxUn8<d&W#JfciKw;!NsR&03KoxTmpIh62caYJ+39tu$vbtrF= zTdv)XUtwpYwlyUjs~AJ7kImUj3&MM(#{D`D8kWKgCy&Nf*SQcg9$`NHjI~S#ht93Q zIhEpI>u!TL0}aew`eY;+e3;UA;{Tn)CyhU!UDaEic9f7J7X8<BBPVwtdwNVbb+c5{ z+^KR~*293Jyl}pbzmp=;Z7z4JC@`}^h%WZ}F|POrZVnSzfVSb146gsEJ=hf?xR*eR zAs<IZC$N(LhiD?08(h!=AvrpI=qd!$Z5=MR+JQK7r|Y|O&F(8{EePGG5UvEfFJb*A zf^PLATifuK9=K~{ajoYyx>B6(cC$T-q#pN1jcUa<#F&wH$vB=Zn%rkc{prH?)b!-F zIg4_&`ljm*Et}`U&py8U^^a<$6icFH4k0fpn5&XT&GeGP?J_eg=hZD*imuP>le=AM zP0kn&jp--DYi@?h{LZ5lp<_#B-IdGU`Ht!c<ya{e6eX3BU>}-~l`*@R_kGwOlXT#> ztH?}7#;H9+R@kSlh)fkZB^4NRJHqdi-S%fCem=&l8Wb*QtWjuSg6)os{T@pRmi4se z=WNo@{;S4tf!7luc6#=+#h?_kmN}Bjx8otaLR@$8jbTcxxlU7)etY{!nx$OZA{uwj zztw+FT2ptJ`nI^q_t)OFOe-iB8_++o7YQ<JEgc*Psvk;tqi-v;GulWF-R@SEVoKdw zATz+zL^P+wA6vZ?$E0$4+%_68*WJdZawm0~1T;+BJE-^43N}w8hhnC4uc6M*z-%gp zDU(yY@M(uB!x~Zf=Ec8J8mf>=uiBMFBffm=hnibK6=Ku^Gam=Z#Q)|kKpfTv`bGqM zl)P~)$Y_9Y7WAgIo|YYATDI_JMBaSsp9yO~So7*(r#P3VJF2Nr2URzFhI9P+QfA9O z-!EkR^vm`fchOzSgwq;_!Mvvli*zZeXN`H?(#DNj%ROd%!L#~(I8>NMr0KRx-`1M> zd_6At`rZ>WbnaMgo}+YY%TqieJ>-b#XLYqTCmZ*%G(^1#%VaYyRjE?7>iSlL;V5)) z4QBW;BMY`~pCSksKPw33X_QK{@S{|4L&|@N&2+&-EOLh<h46(&5kvDPfHjKuz9h&% zj0lJo-z^9h^)AY`>Q%+s6n*&YWhBIPkP5$N1R`9A@ip{<EILq+Bq|}VH2PX7dy^II z8?@;NnpO$k2(56fj0q9xS(q@hpvg~8c`&lL3^>3y`R<=4mA?V0U;tTgk)m6Js+)^g z64^-{>(O}sLbdMu3fW>jD@qa5oIp6h=OJHLw%`VlaYYFfkBy{QBZS^>aHiukfnbn& zx~4ln4=x#Y6tYV5hDcj#b%zsFm{wJ&!^0tzWx|RY#qH*L75Xca6hUc&obJ~~sNia< zI-H;6)q{S?awM6zKr8r&)iA4_j1B0D1Q?f|4x9FW#>i^yEyzb3j4qM$!W5bKa+(O$ zHx#;rW&%+LdG;M~f)9&W$RP&E?D1Jh(9f>_=#wev+Hj{mhKUajJ>-4E9r9GT)|_VF z%vfwzu!uy5*Rhyjtm_ZDRiIT}=FbY|;KE!+eNwhBh=;wu<-gzKs6g2=)`VJcu7Ts! zh_h!Uc;8X{#+jFi%aY##g>y=ykHkD{<@!=)#c~{?*5p7f^gH+4`w!%orcoLV+?0@P z!MLCzv2XLJ2hLn5AZ5fG_cR(eVqn*@L0B_%5O#|$Ltn`>VY49jkEXhhkBZ0MgH2tR zGz_kVsj#v|nrEUPFLYh05|V?Dgt<ErR?{Gel3{8EIove2z6t~08OcCPp~lcbUGj`O z?~JSn^#KIWbRz;LIg39tjQteO03_hEHD7*Vr(nqbSd-0K!SE|lLuf0(kpDtU&F9b~ zlV~Yc2B!!@QqI?3#y)_<7&&&`5emo08;~Ff0S^C|<-`mh8t~%#mEu0ur)@O7hazAR zk%rY$<Ak{kkxtxtsbjM4caR;MPf-wXNiA5HZmiV#E3b}cl+XGe!%u|Tq1_>dQpgP@ zO&zs#2Uc8j$*_J7APaaoZ*;uw?R;4O#kRv8V|gz9@r4MX=LL|t+lu^!T}i=XuD|L? z?n++-J2_$<{0F1`iCImE&IM9E?!tpmb}GNI436JX=VIt)7$7pGp7mlD)k*C0gHWas z#+VR76hYBuRz|&s-9{Es006i&J^GXo4_A_t!tbnv6RHl>`6@USkHX_p08Yx&#*;3Y z^&J%k))eR;2oC(|`?84ou!%rAAj*4Z3q<J$J*kBIX*%8tOTy>C%zQq+Im+v-1q;#g zc;d?RN-6lcVuc1u6_W%u)EdJ}S?0CniD?40-2I&x@0*vjVBf=b<?FDzr~lcrPzi!~ zO}TZ+g=l`gTO?|RXW%3(G6`DXWTVsPh);Id!KM!o{i57I)1!hat26H9qS`tN&JT1J z-Y)SyS{Qp87e#(3X}+Z9#`!9Y$WEqq^P(GGo#Y8v?rM3^U@-np?_~k&icJxcBBSsz z#lnVZLm`ut6#~H)|KgqAWXZ5gihzPx5;49m-lzD0w}37q!W&6CB7tQuP!omhz?}nI zS>h2s2zL6z@ri5UYe%WKE1{St&2fE`E-9jj_W4#H8VOSY(H9UQ5TF;tgnwEFFY>v# zMOq<^aY1hWXg6u-wZseRY5%5;+?_3in>T2_RSz|qbrPJ)XE9Kp+%RI>?HUcD?Z_H0 zJ(#S0=mVi&%|93jtP&uevO1Z)jdKIPF@Rk9-d`f{3jVZoIfn$t@%V+B!`#Vd`y*~} z2W?^txs2%`6=vxRBL@QkF`GmV$eA4IJ+@YV=erTixEaHZMK&I>KUhuw;{yl$iEv;_ zEP}|sVFyjjq~!Yk^VVUMh!g~*5#ddH`uqCy^T%i2L;BuU&h=dRg%i(uzoIJG*<qyi zC(%vG9FO|2;36{S3{SJ?Hia}AX?dj_py$eF&zPX^5pE|__GZkO^0NKl^c@o5jgAWi zOXdH~{~i$(8Z5&b9pS?S0|p8Tga^PvK~f`ugW*7e0JNdtsG&e1K)qSPKp`^Z05SlY zzge)e2!7##aQ*p6gXn<Rf>?r>f#`$SeI%Yg9su#*I)gxyWVZFQPH&uoSF%3}?A0y; zMKC<i@J9Ip@CJ7Qc!TL=fP;a8fqh~lpMQGLE>F9O-2YNLr!osb{MS@LAwMQ1_vakJ z<sqO@!Q|zDm;m%YGH|F!3i>w2a>j-hG(=(+x^zHl0OcPA;HV`3EFk)6Y_3lvXQyp$ zWo%(cB&ToVV63ZeOC-n-AizWfumV_s%z!_CR4@^N3?Er021aIfW_A^T+W&G;CIG`< zgHr#04f;o!z6}vAkthSeEB)__1cd|v_X-06cm;uZd4crQUdf`j1o~@HVu-8KOGKFl zL|rrgRAN4wWYN%(l$Bw!?s7H24;omd>M?=4V_i(Ji@J+0tEhE|yDSvf6&9s4g^!k! zpbkA#5)YYy-oc@H@GeqX92K~x?XX`9EA9`+Pcr)s6HBnRd~UdD(<RoGrp2|n)rOI+ z>tu}PT1pEB4hjOA?bQSD>I5)B!F+fh5)v8|6yhu33xMpOc>t(CmXV#E6$d@NrLL_N zox{iCZ9f)Br)y~rK={}Zd{j`-cL*>52!QdA93cb^fC}(6<4XpaKgmBD>e`t7hj#RK zwzjmo+H@aw0LCAU$p7d90RZ>ULBU}FNPpOo|FA=VgF$rw2>!^UKzz6-2Ni$<ME=;; zKfM9<Q;r`<%kZB<3EUeL6y!&*!~of^^&LdAt~H#>Ot8#6Z(0N&bT3voZzP%u6-@2g z1<1F+<;$q3Y6Tp=yyNILHueg87CVjv=^fUl#Gs*A0sM-_{){liji*^X2mxj(&`HKD z%mK+FivFuj|L<UIl0Hs-FLE2l8&CnOIdN$k2nk!cZSCHE-CCRLrC%5Nb0zea`f*iT zOW0v%*+?=OL+FE(j$5FKd4>34p=<T=$XdQl3;jCI93KR$K^y<skCFXL?a`S>-Nro- zGmS<tYe;U)o%@c8qe1#NNUk}YkNTsA+znQ>BC=KY^KEHt1`_6455_O8L1bzRe~8QD z8z+iM$lfz1RgFe5hAYMo^!0os+JB%=v>iKkJxo?a@P66+8zM00Kcmkp<Znn&;Rm7v zQ2)rlpdu*h+uG^dSP%(nTj>MQ0H6ObL!-hA+1u!7TR0e-nd$%2A8;T3Fw%Ck(+A=M zaQ`sCqoVy~AQIHKu`@O>*44H%wzL2e0`ULxAI3k5|G<*%KcVyw*fM?~mFeHG{Ugix zPuTun;R<h1lK%`>Z%|~A4?7 }!hJRFyL_N>mQ#9#j%we^DcKx!#G~Zm8Xwt%tYN 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 w>Dembx7n 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 VX{B*bG3ruNz7$CwLAm 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 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo new file mode 100644 index 000000000..0be755de5 --- /dev/null +++ b/SSL/src/CommonTemplates/КомпонентаСклоненияФИО/КомпонентаСклоненияФИО.mdo @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b107a4a8-0db8-44f4-93f7-9f231e850398"> + <name>КомпонентаСклоненияФИО</name> + <synonym> + <key>ru</key> + <value>Компонента склонения ФИО</value> + </synonym> + <templateType>BinaryData</templateType> +</mdclass:CommonTemplate> diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index 9fbd99ccf..62597b9e3 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -40,19 +40,6 @@ </v8:StringQualifiers> </valueType> </field> - <field xsi:type="DataSetFieldField"> - <dataPath>Опциональный</dataPath> - <field>Опциональный</field> - <title xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Опциональный</v8:content> - </v8:item> - - - xs:boolean - - Приоритет Приоритет @@ -138,6 +125,62 @@ + + НачальноеЗаполнение + НачальноеЗаполнение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начальное заполнение</v8:content> + </v8:item> + + + xs:boolean + + + + РежимВыполнения + РежимВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Режим выполнения</v8:content> + </v8:item> + + + xs:string + + 50 + Variable + + + + Монопольно + + + Оперативно + + + Отложенно + + + + Комментарий + Комментарий + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Комментарий</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + ИсточникДанных1 Обработчики @@ -318,6 +361,21 @@ true Always + + ОтложенноеОбновление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенное обновление</v8:content> + </v8:item> + + + xs:boolean + + false + true + Always + Ложь @@ -346,9 +404,6 @@ <dcsset:item xsi:type="dcsset:SelectedItemField"> <dcsset:field>ОбщиеДанные</dcsset:field> </dcsset:item> - <dcsset:item xsi:type="dcsset:SelectedItemField"> - <dcsset:field>Опциональный</dcsset:field> - </dcsset:item> <dcsset:item xsi:type="dcsset:SelectedItemField"> <dcsset:field>ВыполнятьВГруппеОбязательных</dcsset:field> </dcsset:item> @@ -364,6 +419,15 @@ <dcsset:item xsi:type="dcsset:SelectedItemField"> <dcsset:field>МонопольныйРежим</dcsset:field> </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>НачальноеЗаполнение</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>Комментарий</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>РежимВыполнения</dcsset:field> + </dcsset:item> </dcsset:selection> <dcsset:filter> <dcsset:item xsi:type="dcsset:FilterItemGroup"> @@ -430,6 +494,30 @@ </dcsset:item> <dcsset:item xsi:type="dcsset:FilterItemGroup"> <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ВерсияОт</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:string">0.0.0.0</dcsset:right> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">НачальноеЗаполнение</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">true</dcsset:right> + </dcsset:item> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Начальное заполнение</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ВерсияОт</dcsset:left> + <dcsset:comparisonType>NotEqual</dcsset:comparisonType> + <dcsset:right xsi:type="xs:string">0.0.0.0</dcsset:right> + </dcsset:item> <dcsset:item xsi:type="dcsset:FilterItemComparison"> <dcsset:left xsi:type="dcscor:Field">ВесВерсии</dcsset:left> <dcsset:comparisonType>Greater</dcsset:comparisonType> @@ -443,7 +531,7 @@ <dcsset:presentation xsi:type="v8:LocalStringType"> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>// Версии в интервале</v8:content> + <v8:content>// Обновление (версии в интервале)</v8:content> </v8:item> </dcsset:presentation> </dcsset:item> @@ -454,46 +542,112 @@ </v8:item> </dcsset:presentation> </dcsset:item> - <dcsset:item xsi:type="dcsset:FilterItemGroup"> - <dcsset:groupType>NotGroup</dcsset:groupType> - <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ВерсияОт</dcsset:left> - <dcsset:comparisonType>Equal</dcsset:comparisonType> - <dcsset:right xsi:type="xs:string">0.0.0.0</dcsset:right> - </dcsset:item> - <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <dcsset:left xsi:type="dcscor:Field">Опциональный</dcsset:left> - <dcsset:comparisonType>Equal</dcsset:comparisonType> - <dcsset:right xsi:type="xs:boolean">true</dcsset:right> - </dcsset:item> - <dcsset:presentation xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>// Опциональные</v8:content> - </v8:item> - </dcsset:presentation> - </dcsset:item> <dcsset:item xsi:type="dcsset:FilterItemGroup"> <dcsset:groupType>OrGroup</dcsset:groupType> - <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ОперативноеОбновление</dcsset:left> - <dcsset:comparisonType>Equal</dcsset:comparisonType> - <dcsset:right xsi:type="xs:boolean">false</dcsset:right> - <dcsset:presentation xsi:type="v8:LocalStringType"> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>// Не оперативное обновление - выбираем все</v8:content> - </v8:item> - </dcsset:presentation> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ОперативноеОбновление</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">false</dcsset:right> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Не оперативное обновление - выбираем все</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ОтложенноеОбновление</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">false</dcsset:right> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Не оперативное обновление - выбираем все</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">РежимВыполнения</dcsset:left> + <dcsset:comparisonType>NotEqual</dcsset:comparisonType> + <dcsset:right xsi:type="xs:string">Отложенно</dcsset:right> + </dcsset:item> </dcsset:item> - <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <dcsset:left xsi:type="dcscor:Field">МонопольныйРежим</dcsset:left> - <dcsset:comparisonType>NotEqual</dcsset:comparisonType> - <dcsset:right xsi:type="dcscor:Field">ПараметрыДанных.Ложь</dcsset:right> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ОперативноеОбновление</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">true</dcsset:right> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Не оперативное обновление - выбираем все</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>OrGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">РежимВыполнения</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:string">Монопольно</dcsset:right> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// При проверке оперативного - только требующие монопольного режима</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">МонопольныйРежим</dcsset:left> + <dcsset:comparisonType>NotEqual</dcsset:comparisonType> + <dcsset:right xsi:type="dcscor:Field">ПараметрыДанных.Ложь</dcsset:right> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// При проверке оперативного - только требующие монопольного режима</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">РежимВыполнения</dcsset:left> + <dcsset:comparisonType>NotFilled</dcsset:comparisonType> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// При проверке оперативного - только требующие монопольного режима</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Для обратной совместимости</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> + </dcsset:item> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ОтложенноеОбновление</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">true</dcsset:right> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">РежимВыполнения</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:string">Отложенно</dcsset:right> + </dcsset:item> <dcsset:presentation xsi:type="v8:LocalStringType"> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>// При проверке оперативного - только требующие монопольного режима</v8:content> + <v8:content>// Выбор только отложенных обработчиков</v8:content> </v8:item> </dcsset:presentation> </dcsset:item> diff --git a/SSL/src/CommonTemplates/СтруктураПодчиненности/Template.mxlx b/SSL/src/CommonTemplates/СтруктураПодчиненности/Template.mxlx index 47d05d908..da69d584a 100644 --- a/SSL/src/CommonTemplates/СтруктураПодчиненности/Template.mxlx +++ b/SSL/src/CommonTemplates/СтруктураПодчиненности/Template.mxlx @@ -2109,7 +2109,7 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>ДокументПомеченНаУделениеКоннекторНиз</name> + <name>ДокументПомеченНаУдалениеКоннекторНиз</name> <area> <type>Rectangle</type> <beginRow>11</beginRow> diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index b1e7da20c..765dfcc81 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,23 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="5dc86726-1271-42a5-ae5d-3e8c63f02501"> +<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a815e3f3-74a6-420e-aaea-9ade6d7f0d00"> <name>БиблиотекаСтандартныхПодсистем</name> <synonym> <key>ru</key> <value>Библиотека стандартных подсистем, редакция 2.1</value> </synonym> - <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="16de39c8-44b3-4765-a596-7f0f71b8a5c0"/> - <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="3644dd65-effc-422d-a2b2-3f67f7d11e2c"/> - <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="20d9d1fa-6a21-4bbe-9a16-882c8566bef3"/> - <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="43bc9ee1-19de-467d-bf7e-e0a5a30be15c"/> - <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="9c76cd79-56de-415f-b2fa-4af55656ed27"/> - <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="3e6e4ce6-bae0-4265-bdb2-4f1d38954d36"/> - <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="bdce9b96-ca72-42c0-8aab-06b878ae1ee7"/> + <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="30d5b422-8f88-4bf1-b3dc-c9b8ec33fd35"/> + <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="50816e26-a56c-4d89-aeba-6719e5cd7c6c"/> + <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="e3c2a4a2-50f3-4338-9015-21a031438ec9"/> + <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="389857cb-26ad-49e2-aaec-64315e89a5c4"/> + <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="6c4145d6-0747-4e88-a8aa-f8dc9832016d"/> + <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="ab46021f-1beb-4234-864f-b544239063d0"/> + <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="8e878fa5-77b1-44af-bf61-1ef153d28435"/> <defaultRunMode>ManagedApplication</defaultRunMode> <usePurposes>PersonalComputer</usePurposes> <scriptVariant>Russian</scriptVariant> <defaultRoles>Role.ПолныеПрава</defaultRoles> <vendor>Фирма "1С"</vendor> - <version>2.1.3.51</version> + <version>2.1.4.34</version> <updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress> <includeHelpInContents>true</includeHelpInContents> <usedMobileApplicationFunctionalities> @@ -63,12 +63,12 @@ </languages> <subsystems>Subsystem.НастройкаИАдминистрирование</subsystems> <subsystems>Subsystem.СтандартныеПодсистемы</subsystems> - <styleItems>StyleItem.ВидДняВоскресеньеЦвет</styleItems> - <styleItems>StyleItem.ВидДняНеУказанЦвет</styleItems> - <styleItems>StyleItem.ВидДняПраздникЦвет</styleItems> - <styleItems>StyleItem.ВидДняПредпраздничныйЦвет</styleItems> - <styleItems>StyleItem.ВидДняРабочийЦвет</styleItems> - <styleItems>StyleItem.ВидДняСубботаЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряВоскресеньеЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряНеУказанЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряПраздникЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряПредпраздничныйЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряРабочийЦвет</styleItems> + <styleItems>StyleItem.ВидДняПроизводственногоКалендаряСубботаЦвет</styleItems> <styleItems>StyleItem.ВидимыйВариантОтчетаЦвет</styleItems> <styleItems>StyleItem.ВыполненнаяЗадача</styleItems> <styleItems>StyleItem.ГруппаВариантовОтчетовЦвет</styleItems> @@ -117,7 +117,19 @@ <commonPictures>CommonPicture.Вопрос32</commonPictures> <commonPictures>CommonPicture.ВосклицательныйЗнакСерый</commonPictures> <commonPictures>CommonPicture.Встреча</commonPictures> + <commonPictures>CommonPicture.ВходящееСообщение</commonPictures> <commonPictures>CommonPicture.ВыполнитьРегламентноеЗаданиеВручную</commonPictures> + <commonPictures>CommonPicture.ВыравниваниеПоЛевомуКраю</commonPictures> + <commonPictures>CommonPicture.ВыравниваниеПоПравомуКраю</commonPictures> + <commonPictures>CommonPicture.ВыравниваниеПоЦентру</commonPictures> + <commonPictures>CommonPicture.ВыравниваниеПоШирине</commonPictures> + <commonPictures>CommonPicture.ГраницаВезде</commonPictures> + <commonPictures>CommonPicture.ГраницаВнутри</commonPictures> + <commonPictures>CommonPicture.ГраницаВокруг</commonPictures> + <commonPictures>CommonPicture.ГраницаСверху</commonPictures> + <commonPictures>CommonPicture.ГраницаСлева</commonPictures> + <commonPictures>CommonPicture.ГраницаСнизу</commonPictures> + <commonPictures>CommonPicture.ГраницаСправа</commonPictures> <commonPictures>CommonPicture.ДлительнаяОперация48</commonPictures> <commonPictures>CommonPicture.ДобавитьДопСвойствоВНабор</commonPictures> <commonPictures>CommonPicture.ДобавитьПростойВопрос</commonPictures> @@ -157,6 +169,7 @@ <commonPictures>CommonPicture.ЗнакСтопЧБ</commonPictures> <commonPictures>CommonPicture.ЗначокЗаставкиВнешнейОперации</commonPictures> <commonPictures>CommonPicture.ИерархическийСписок</commonPictures> + <commonPictures>CommonPicture.ИзменитьШрифт</commonPictures> <commonPictures>CommonPicture.Информация</commonPictures> <commonPictures>CommonPicture.Информация32</commonPictures> <commonPictures>CommonPicture.ИнформацияПоНедоступнымПолям</commonPictures> @@ -164,6 +177,7 @@ <commonPictures>CommonPicture.ИспользоватьПользовательскийМакет</commonPictures> <commonPictures>CommonPicture.ИспользоватьПоставляемыйМакет</commonPictures> <commonPictures>CommonPicture.ИсторияВерсий</commonPictures> + <commonPictures>CommonPicture.ИсходящееСообщение</commonPictures> <commonPictures>CommonPicture.КоллекцияВариантыВажности</commonPictures> <commonPictures>CommonPicture.КоллекцияВидыАктивныхПользователей</commonPictures> <commonPictures>CommonPicture.КоллекцияВидыСобытийЖурналаРегистрации</commonPictures> @@ -189,10 +203,14 @@ <commonPictures>CommonPicture.КонтактнаяИнформация</commonPictures> <commonPictures>CommonPicture.КонтактнаяИнформацияНеактуально</commonPictures> <commonPictures>CommonPicture.КонтактнаяИнформацияПерейтиПоСсылке</commonPictures> + <commonPictures>CommonPicture.КурсивноеНачертание</commonPictures> + <commonPictures>CommonPicture.НаписатьSMS</commonPictures> <commonPictures>CommonPicture.Напоминание</commonPictures> <commonPictures>CommonPicture.НастройкаВыполненияРегламентныхЗаданий</commonPictures> <commonPictures>CommonPicture.НастройкаИАдминистрирование48</commonPictures> + <commonPictures>CommonPicture.НетГраницы</commonPictures> <commonPictures>CommonPicture.ОбновитьФайлИзФайлаНаДиске</commonPictures> + <commonPictures>CommonPicture.ОбъединитьЯчейки</commonPictures> <commonPictures>CommonPicture.ОпубликоватьФайл</commonPictures> <commonPictures>CommonPicture.Органайзер</commonPictures> <commonPictures>CommonPicture.ОсвободитьФайл</commonPictures> @@ -219,10 +237,12 @@ <commonPictures>CommonPicture.Подменю</commonPictures> <commonPictures>CommonPicture.ПодписанЭЦП</commonPictures> <commonPictures>CommonPicture.Подсистема</commonPictures> + <commonPictures>CommonPicture.Подчеркивание</commonPictures> <commonPictures>CommonPicture.ПоказатьОтличия</commonPictures> <commonPictures>CommonPicture.ПоказатьТолькоВыбранныеРоли</commonPictures> <commonPictures>CommonPicture.ПолнотекстовыйПоискДалее</commonPictures> <commonPictures>CommonPicture.ПолнотекстовыйПоискНазад</commonPictures> + <commonPictures>CommonPicture.ПолужирноеНачертание</commonPictures> <commonPictures>CommonPicture.ПревьюТабличногоВопросаОтветыВКолонках</commonPictures> <commonPictures>CommonPicture.ПревьюТабличногоВопросаОтветыВСтроках</commonPictures> <commonPictures>CommonPicture.ПревьюТабличногоВопросаОтветыСтрокиИКолонки</commonPictures> @@ -284,8 +304,14 @@ <commonPictures>CommonPicture.СтрелкаВнизСправка</commonPictures> <commonPictures>CommonPicture.ТелефонныйЗвонок</commonPictures> <commonPictures>CommonPicture.ТипыМакетов</commonPictures> + <commonPictures>CommonPicture.ТолстаяГраницаВокруг</commonPictures> + <commonPictures>CommonPicture.ТолстаяГраницаСверху</commonPictures> + <commonPictures>CommonPicture.ТолстаяГраницаСнизу</commonPictures> <commonPictures>CommonPicture.УведомлениеСервиса</commonPictures> + <commonPictures>CommonPicture.УвеличитьШрифт</commonPictures> <commonPictures>CommonPicture.УдалитьПользовательскийМакет</commonPictures> + <commonPictures>CommonPicture.УменьшитьШрифт</commonPictures> + <commonPictures>CommonPicture.Успешно</commonPictures> <commonPictures>CommonPicture.УстановитьОтветственногоЗаВзаимодействие</commonPictures> <commonPictures>CommonPicture.УстановитьПредметВзаимодействия</commonPictures> <commonPictures>CommonPicture.УстановитьПризнакРассмотреноДляВзамодействия</commonPictures> @@ -301,6 +327,8 @@ <commonPictures>CommonPicture.ФорматWord2007</commonPictures> <commonPictures>CommonPicture.ФорматПустой</commonPictures> <commonPictures>CommonPicture.ФорумСервиса</commonPictures> + <commonPictures>CommonPicture.ЦветТекста</commonPictures> + <commonPictures>CommonPicture.ЦветФона</commonPictures> <commonPictures>CommonPicture.ЭлектронноеПисьмо</commonPictures> <commonPictures>CommonPicture.ЭлектронноеПисьмоВходящее</commonPictures> <commonPictures>CommonPicture.ЭлектронноеПисьмоИсходящее</commonPictures> @@ -308,6 +336,7 @@ <sessionParameters>SessionParameter.ВидыДоступаБезОграничения</sessionParameters> <sessionParameters>SessionParameter.ВидыДоступаЕдинственныеДляТипаЗначенияДоступа</sessionParameters> <sessionParameters>SessionParameter.ВидыДоступаЧерезПраваПоЗначениямДоступа</sessionParameters> + <sessionParameters>SessionParameter.ВыполняетсяОбновлениеИБ</sessionParameters> <sessionParameters>SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО</sessionParameters> <sessionParameters>SessionParameter.ЗагрузкаПараметровРаботыПрограммы</sessionParameters> <sessionParameters>SessionParameter.ИспользуемыеПланыОбмена</sessionParameters> @@ -326,8 +355,10 @@ <sessionParameters>SessionParameter.ОграничиватьДоступПоВидуУсловие</sessionParameters> <sessionParameters>SessionParameter.ОграничиватьДоступПоВидуУчетныеЗаписиЭлектроннойПочты</sessionParameters> <sessionParameters>SessionParameter.ПараметрыКлиентаНаСервере</sessionParameters> + <sessionParameters>SessionParameter.ПаролиСинхронизацииДанных</sessionParameters> <sessionParameters>SessionParameter.ПравилаВыборочнойРегистрацииОбъектов</sessionParameters> <sessionParameters>SessionParameter.ПравилаРегистрацииОбъектов</sessionParameters> + <sessionParameters>SessionParameter.ПриоритетныеДанныеОбмена</sessionParameters> <sessionParameters>SessionParameter.ТекущийВнешнийПользователь</sessionParameters> <sessionParameters>SessionParameter.ТекущийПользователь</sessionParameters> <roles>Role.АдминистраторСистемы</roles> @@ -348,6 +379,7 @@ <roles>Role.ДобавлениеИзменениеПользователей</roles> <roles>Role.ДобавлениеИзменениеРассылокОтчетов</roles> <roles>Role.ДобавлениеИзменениеРолейИсполнителей</roles> + <roles>Role.ДобавлениеИзменениеСтранМира</roles> <roles>Role.ДобавлениеИзменениеФизическихЛиц</roles> <roles>Role.ДобавлениеИзменениеШаблоновАнкет</roles> <roles>Role.ЗапускAutomation</roles> @@ -399,6 +431,7 @@ <commonTemplates>CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную</commonTemplates> <commonTemplates>CommonTemplate.ИнформационныеСсылки</commonTemplates> <commonTemplates>CommonTemplate.КомпонентаTWAIN</commonTemplates> + <commonTemplates>CommonTemplate.КомпонентаСклоненияФИО</commonTemplates> <commonTemplates>CommonTemplate.ПолучениеДереваОбработчиковОбновления</commonTemplates> <commonTemplates>CommonTemplate.СоответствиеТэговОбщимФормам</commonTemplates> <commonTemplates>CommonTemplate.СтруктураПодчиненности</commonTemplates> @@ -495,11 +528,12 @@ <commonModules>CommonModule.КалендарныеГрафикиСлужебныйВМоделиСервиса</commonModules> <commonModules>CommonModule.КомандыРаботыСБизнесПроцессамиКлиент</commonModules> <commonModules>CommonModule.КомандыРаботыСФайламиКлиент</commonModules> - <commonModules>CommonModule.КонтактнаяИнформацияВызовСервера</commonModules> - <commonModules>CommonModule.КонтактнаяИнформацияКлиент</commonModules> + <commonModules>CommonModule.КонтактнаяИнформацияXML</commonModules> <commonModules>CommonModule.КонтактнаяИнформацияКлиентСервер</commonModules> <commonModules>CommonModule.КонтактнаяИнформацияКлиентСерверПовтИсп</commonModules> <commonModules>CommonModule.КонтактнаяИнформацияСлужебный</commonModules> + <commonModules>CommonModule.КонтактнаяИнформацияСлужебныйВызовСервера</commonModules> + <commonModules>CommonModule.КонтактнаяИнформацияСлужебныйПовтИсп</commonModules> <commonModules>CommonModule.КонтрольДинамическогоОбновленияКонфигурации</commonModules> <commonModules>CommonModule.КонтрольДинамическогоОбновленияКонфигурацииГлобальный</commonModules> <commonModules>CommonModule.КонтрольДинамическогоОбновленияКонфигурацииКлиент</commonModules> @@ -538,6 +572,7 @@ <commonModules>CommonModule.ОбновлениеИнформационнойБазы</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыБСП</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыВызовСервера</commonModules> + <commonModules>CommonModule.ОбновлениеИнформационнойБазыГлобальный</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыКлиент</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый</commonModules> <commonModules>CommonModule.ОбновлениеИнформационнойБазыПереопределяемый</commonModules> @@ -608,6 +643,7 @@ <commonModules>CommonModule.ПрисоединенныеФайлыСлужебный</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера</commonModules> <commonModules>CommonModule.ПрисоединенныеФайлыСлужебныйКлиент</commonModules> + <commonModules>CommonModule.ПроверкаЛегальностиПолученияОбновленияГлобальный</commonModules> <commonModules>CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент</commonModules> <commonModules>CommonModule.РаботаВМоделиСервиса</commonModules> <commonModules>CommonModule.РаботаВМоделиСервисаПереопределяемый</commonModules> @@ -652,6 +688,8 @@ <commonModules>CommonModule.РезервноеКопированиеИБКлиентГлобальный</commonModules> <commonModules>CommonModule.РезервноеКопированиеИБСервер</commonModules> <commonModules>CommonModule.РезервноеКопированиеОбластейДанных</commonModules> + <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс</commonModules> + <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис</commonModules> <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп</commonModules> <commonModules>CommonModule.СоединенияИБ</commonModules> <commonModules>CommonModule.СоединенияИБВызовСервера</commonModules> @@ -668,10 +706,17 @@ <commonModules>CommonModule.СообщенияВМоделиСервисаПереопределяемый</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервисаПовтИсп</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервисаРазделениеДанных</commonModules> + <commonModules>CommonModule.СообщенияИнформационногоЦентраИнтерфейс</commonModules> <commonModules>CommonModule.СообщенияИнформационногоЦентраОбработчикСообщения</commonModules> + <commonModules>CommonModule.СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1</commonModules> + <commonModules>CommonModule.СообщенияИнформационногоЦентраРеализация</commonModules> + <commonModules>CommonModule.СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс</commonModules> + <commonModules>CommonModule.СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1</commonModules> <commonModules>CommonModule.СообщенияКонтрольРезервногоКопированияИнтерфейс</commonModules> + <commonModules>CommonModule.СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1</commonModules> <commonModules>CommonModule.СообщенияКонтрольУдаленногоАдминистрированияИнтерфейс</commonModules> <commonModules>CommonModule.СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3</commonModules> + <commonModules>CommonModule.СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4</commonModules> <commonModules>CommonModule.СообщенияОбменаДаннымиКонтрольИнтерфейс</commonModules> <commonModules>CommonModule.СообщенияОбменаДаннымиКонтрольОбработчикСообщения_2_1_2_1</commonModules> <commonModules>CommonModule.СообщенияОбменаДаннымиОбработчикСообщения</commonModules> @@ -683,10 +728,15 @@ <commonModules>CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_2</commonModules> <commonModules>CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_3</commonModules> <commonModules>CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4</commonModules> + <commonModules>CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5</commonModules> <commonModules>CommonModule.СообщенияУдаленногоАдминистрированияРеализация</commonModules> <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемИнтерфейс</commonModules> <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_2_1</commonModules> + <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1</commonModules> <commonModules>CommonModule.СообщенияУправлениеРезервнымКопированиемРеализация</commonModules> + <commonModules>CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс</commonModules> + <commonModules>CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1</commonModules> + <commonModules>CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация</commonModules> <commonModules>CommonModule.СообщенияУправленияПриложениямиИнтерфейс</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыВызовСервера</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыКлиент</commonModules> @@ -695,7 +745,6 @@ <commonModules>CommonModule.СтандартныеПодсистемыПовтИсп</commonModules> <commonModules>CommonModule.СтандартныеПодсистемыСервер</commonModules> <commonModules>CommonModule.СтроковыеФункцииКлиентСервер</commonModules> - <commonModules>CommonModule.СтруктураПодчиненности</commonModules> <commonModules>CommonModule.СтруктураПодчиненностиПереопределяемый</commonModules> <commonModules>CommonModule.ТрансляцияXDTO</commonModules> <commonModules>CommonModule.ТрансляцияXDTOПереопределяемый</commonModules> @@ -713,12 +762,12 @@ <commonModules>CommonModule.УправлениеКонтактнойИнформациейКлассификаторы</commonModules> <commonModules>CommonModule.УправлениеКонтактнойИнформациейКлиент</commonModules> <commonModules>CommonModule.УправлениеКонтактнойИнформациейКлиентСервер</commonModules> - <commonModules>CommonModule.УправлениеКонтактнойИнформациейСобытия</commonModules> <commonModules>CommonModule.УправлениеПечатью</commonModules> <commonModules>CommonModule.УправлениеПечатьюMSWordКлиент</commonModules> <commonModules>CommonModule.УправлениеПечатьюOOWriterКлиент</commonModules> <commonModules>CommonModule.УправлениеПечатьюВызовСервера</commonModules> <commonModules>CommonModule.УправлениеПечатьюКлиент</commonModules> + <commonModules>CommonModule.УправлениеПечатьюКлиентПовтИсп</commonModules> <commonModules>CommonModule.УправлениеПечатьюПереопределяемый</commonModules> <commonModules>CommonModule.УправлениеСвойствами</commonModules> <commonModules>CommonModule.УправлениеСвойствамиКлиент</commonModules> @@ -752,17 +801,22 @@ <xDTOPackages>XDTOPackage.AgentScripts</xDTOPackages> <xDTOPackages>XDTOPackage.ApdexExport</xDTOPackages> <xDTOPackages>XDTOPackage.ApplicationExtensionsCompatibility_1_0_0_1</xDTOPackages> + <xDTOPackages>XDTOPackage.ApplicationExtensionsControl_1_0_1_1</xDTOPackages> + <xDTOPackages>XDTOPackage.ApplicationExtensionsManagement_1_0_1_1</xDTOPackages> <xDTOPackages>XDTOPackage.ApplicationExtensionsManifest_1_0_0_1</xDTOPackages> <xDTOPackages>XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1</xDTOPackages> <xDTOPackages>XDTOPackage.CurrencyRates</xDTOPackages> <xDTOPackages>XDTOPackage.DataDump_1_0_1_1</xDTOPackages> + <xDTOPackages>XDTOPackage.MessageInfoCenter_1_0_1_1</xDTOPackages> <xDTOPackages>XDTOPackage.SuppliedData</xDTOPackages> <xDTOPackages>XDTOPackage.АдминистрированиеОбменаДаннымиКонтроль</xDTOPackages> <xDTOPackages>XDTOPackage.АдминистрированиеОбменаДаннымиУправление</xDTOPackages> <xDTOPackages>XDTOPackage.КонтактнаяИнформация</xDTOPackages> <xDTOPackages>XDTOPackage.КонтрольРезервногоКопированияОбластейДанных_1_0_2_1</xDTOPackages> + <xDTOPackages>XDTOPackage.КонтрольРезервногоКопированияОбластейДанных_1_0_3_1</xDTOPackages> <xDTOPackages>XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_3</xDTOPackages> <xDTOPackages>XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_4</xDTOPackages> + <xDTOPackages>XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_5</xDTOPackages> <xDTOPackages>XDTOPackage.ОбменДаннымиКонтроль</xDTOPackages> <xDTOPackages>XDTOPackage.ОбменДаннымиУправление</xDTOPackages> <xDTOPackages>XDTOPackage.Сообщения</xDTOPackages> @@ -771,8 +825,10 @@ <xDTOPackages>XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_2</xDTOPackages> <xDTOPackages>XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_3</xDTOPackages> <xDTOPackages>XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_4</xDTOPackages> + <xDTOPackages>XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5</xDTOPackages> <xDTOPackages>XDTOPackage.УправлениеПриложениями</xDTOPackages> <xDTOPackages>XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1</xDTOPackages> + <xDTOPackages>XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1</xDTOPackages> <webServices>WebService.Exchange</webServices> <webServices>WebService.Exchange_2_0_1_6</webServices> <webServices>WebService.InterfaceVersion</webServices> @@ -800,6 +856,7 @@ <eventSubscriptions>EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия</eventSubscriptions> <eventSubscriptions>EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольПравомерностиИзмененияРеквизитов</eventSubscriptions> <eventSubscriptions>EventSubscription.ДополнительныеОтчетыИОбработкиКонтрольУдаления</eventSubscriptions> + <eventSubscriptions>EventSubscription.ЗаписатьВерсиюОбъектаПриОбменеДанными</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьВСписокБизнесПроцессов</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьНаборыЗначенийДоступа</eventSubscriptions> @@ -841,7 +898,10 @@ <scheduledJobs>ScheduledJob.ОбновлениеАгрегатов</scheduledJobs> <scheduledJobs>ScheduledJob.ОбновлениеИндексаППД</scheduledJobs> <scheduledJobs>ScheduledJob.ОбновлениеОбластейДанных</scheduledJobs> + <scheduledJobs>ScheduledJob.ОбновлениеСтатусовДоставкиSMS</scheduledJobs> <scheduledJobs>ScheduledJob.ОбслуживаниеОбластейДанных</scheduledJobs> + <scheduledJobs>ScheduledJob.ОтложенноеОбновлениеИБ</scheduledJobs> + <scheduledJobs>ScheduledJob.ОтправкаSMS</scheduledJobs> <scheduledJobs>ScheduledJob.ОтправкаИПолучениеСообщенийСистемы</scheduledJobs> <scheduledJobs>ScheduledJob.ПерестроениеАгрегатов</scheduledJobs> <scheduledJobs>ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения</scheduledJobs> @@ -957,7 +1017,9 @@ <commonCommands>CommonCommand.СозданиеНачальногоОбразаСФайлами</commonCommands> <commonCommands>CommonCommand.СоздатьЗаметкуПоПредмету</commonCommands> <commonCommands>CommonCommand.СоздатьРезервнуюКопию</commonCommands> + <commonCommands>CommonCommand.СоставОтправляемыхДанных</commonCommands> <commonCommands>CommonCommand.СтруктураПодчиненности</commonCommands> + <commonCommands>CommonCommand.УдалитьНастройкуСинхронизации</commonCommands> <commonCommands>CommonCommand.УстановитьНапоминаниеПоПредмету</commonCommands> <commonCommands>CommonCommand.УстановитьРасширениеРаботыСФайлами</commonCommands> <commonCommands>CommonCommand.ФайлыВТоме</commonCommands> @@ -968,28 +1030,30 @@ <commandGroups>CommandGroup.ПараметрыОбменаДанными</commandGroups> <commandGroups>CommandGroup.Печать</commandGroups> <constants>Constant.АдресАгентаСервиса</constants> - <constants>Constant.АдресВебСервисаОбменаДанными</constants> + <constants>Constant.АдресПубликацииИнформационнойБазыВИнтернете</constants> + <constants>Constant.АдресУправленияКонференцией</constants> <constants>Constant.АлгоритмПодписи</constants> <constants>Constant.АлгоритмХеширования</constants> <constants>Constant.АлгоритмШифрования</constants> <constants>Constant.БлокировкаОтправкиБыстрыхСообщений</constants> <constants>Constant.ВерсияКлассификатораБанковРФ</constants> <constants>Constant.ВнутреннийАдресМенеджераСервиса</constants> - <constants>Constant.ВыполнитьЗагрузкуПараметровРаботыПрограммы</constants> <constants>Constant.ВыполнитьРезервноеКопированиеОбластиДанных</constants> <constants>Constant.ВыполнятьЗамерыПроизводительности</constants> <constants>Constant.ВыполнятьПроверкуЭЦПНаСервере</constants> <constants>Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО</constants> + <constants>Constant.ДатаПоследнегоСтартаКлиентскогоСеанса</constants> <constants>Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC</constants> <constants>Constant.ДатаУведомленияОНовыхЗадачах</constants> <constants>Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации</constants> <constants>Constant.ЗаголовокСистемы</constants> + <constants>Constant.ЗагрузитьСообщениеОбменаДанными</constants> <constants>Constant.ЗапрещатьЗагрузкуФайловПоРасширению</constants> - <constants>Constant.ЗапуститьОбновлениеИнформационнойБазы</constants> <constants>Constant.ЗарегистрированыИзмененияДанных</constants> <constants>Constant.ИзвлекатьТекстыФайловНаСервере</constants> <constants>Constant.ИзменятьЗаданияЗаднимЧислом</constants> <constants>Constant.ИмяПользователяАгентаСервиса</constants> + <constants>Constant.ИмяПользователяКонференцииИнформационногоЦентра</constants> <constants>Constant.ИмяСлужебногоПользователяМенеджераСервиса</constants> <constants>Constant.ИспользованиеКаталогаДополнительныхОтчетовИОбработокВМоделиСервиса</constants> <constants>Constant.ИспользоватьАвтономнуюРаботуВМоделиСервиса</constants> @@ -1049,7 +1113,9 @@ <constants>Constant.ПараметрыСлужебныхСобытий</constants> <constants>Constant.ПарольДляОтправкиSMS</constants> <constants>Constant.ПарольПользователяАгентаСервиса</constants> + <constants>Constant.ПарольПользователяКонференцииИнформационногоЦентра</constants> <constants>Constant.ПарольСлужебногоПользователяМенеджераСервиса</constants> + <constants>Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском</constants> <constants>Constant.ПоддержкаРезервногоКопирования</constants> <constants>Constant.ПредставлениеОбластиДанных</constants> <constants>Constant.ПрефиксОбластиДанных</constants> @@ -1061,6 +1127,7 @@ <constants>Constant.РазмерБлокаПередачиФайла</constants> <constants>Constant.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса</constants> <constants>Constant.РежимИспользованияИнформационнойБазы</constants> + <constants>Constant.СведенияОбОбновленииИБ</constants> <constants>Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы</constants> <constants>Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы</constants> <constants>Constant.СообщениеБлокировкиПриОбновленииКонфигурации</constants> @@ -1072,6 +1139,7 @@ <constants>Constant.СписокРасширенийФайловOpenDocumentОбластиДанных</constants> <constants>Constant.СтатусОбновленияКонфигурации</constants> <constants>Constant.ТипПровайдераЭЦП</constants> + <constants>Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы</constants> <constants>Constant.ХранитьФайлыВТомахНаДиске</constants> <constants>Constant.ЧасовойПоясОбластиДанных</constants> <constants>Constant.ЭтоАвтономноеРабочееМесто</constants> @@ -1079,9 +1147,7 @@ <commonForms>CommonForm.АвтономнаяРаботаВМоделиСервиса</commonForms> <commonForms>CommonForm.АдреснаяКнига</commonForms> <commonForms>CommonForm.АутентификацияВСервисе</commonForms> - <commonForms>CommonForm.ВводАдреса</commonForms> <commonForms>CommonForm.ВводПароляСОписаниями</commonForms> - <commonForms>CommonForm.ВводТелефона</commonForms> <commonForms>CommonForm.ВключениеЖурналаРегистрации</commonForms> <commonForms>CommonForm.Вопрос</commonForms> <commonForms>CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами</commonForms> @@ -1122,21 +1188,16 @@ <commonForms>CommonForm.НастройкаОтправкиSMS</commonForms> <commonForms>CommonForm.НастройкиАгентаСервиса</commonForms> <commonForms>CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным</commonForms> - <commonForms>CommonForm.НастройкиРезервногоКопированияПриложений</commonForms> <commonForms>CommonForm.НастройкиЭЦП</commonForms> - <commonForms>CommonForm.НерекомендуемаяВерсияПлатформы</commonForms> <commonForms>CommonForm.ОбменыДанными</commonForms> <commonForms>CommonForm.ОписаниеИзмененийСистемы</commonForms> <commonForms>CommonForm.ОтключениеАвтономногоРабочегоМеста</commonForms> - <commonForms>CommonForm.ОтображениеНовостей</commonForms> <commonForms>CommonForm.ОтправкаСообщения</commonForms> - <commonForms>CommonForm.ОтправкаСообщенияВТехподдержку</commonForms> <commonForms>CommonForm.ОтправкаТабличныхДокументовПоПочте</commonForms> <commonForms>CommonForm.ОтчетОСохраненииФайлов</commonForms> <commonForms>CommonForm.ПанельОтчетов</commonForms> <commonForms>CommonForm.ПараметрыАдминистрированияСервернойИБ</commonForms> <commonForms>CommonForm.ПараметрыПроксиСервера</commonForms> - <commonForms>CommonForm.ПарольДляСинхронизацииДанных</commonForms> <commonForms>CommonForm.ПерсональныеНастройкиЭЦП</commonForms> <commonForms>CommonForm.ПечатьДокументов</commonForms> <commonForms>CommonForm.ПодготовкаНовогоПисьма</commonForms> @@ -1152,11 +1213,11 @@ <commonForms>CommonForm.ПрисоединенныеФайлы</commonForms> <commonForms>CommonForm.ПрисоединенныйФайл</commonForms> <commonForms>CommonForm.РедактированиеДополнительныхСведений</commonForms> + <commonForms>CommonForm.РедактированиеТабличногоДокумента</commonForms> <commonForms>CommonForm.СертификатЭЦП</commonForms> <commonForms>CommonForm.СинхронизацияДанныхВМоделиСервиса</commonForms> <commonForms>CommonForm.СозданиеНачальногоОбразаСФайлами</commonForms> <commonForms>CommonForm.СозданиеРезервнойКопии</commonForms> - <commonForms>CommonForm.СообщениеОНеудачномОбновлении</commonForms> <commonForms>CommonForm.СохранениеПечатнойФормы</commonForms> <commonForms>CommonForm.СтруктураПодчиненности</commonForms> <commonForms>CommonForm.УстановкаВедущейКонечнойТочки</commonForms> @@ -1208,6 +1269,7 @@ <catalogs>Catalog.ПрофилиГруппДоступа</catalogs> <catalogs>Catalog.РассылкиОтчетов</catalogs> <catalogs>Catalog.РолиИсполнителей</catalogs> + <catalogs>Catalog.СообщениеSMSПрисоединенныеФайлы</catalogs> <catalogs>Catalog.СообщенияОбластейДанных</catalogs> <catalogs>Catalog.СообщенияСистемы</catalogs> <catalogs>Catalog.СтраныМира</catalogs> @@ -1215,7 +1277,6 @@ <catalogs>Catalog.ТелефонныйЗвонокПрисоединенныеФайлы</catalogs> <catalogs>Catalog.ТипыИнформацииИнформационногоЦентра</catalogs> <catalogs>Catalog.ТомаХраненияФайлов</catalogs> - <catalogs>Catalog.УдалитьКлассификаторВалют</catalogs> <catalogs>Catalog.УчетныеЗаписиЭлектроннойПочты</catalogs> <catalogs>Catalog.Файлы</catalogs> <catalogs>Catalog.ФизическиеЛица</catalogs> @@ -1227,6 +1288,7 @@ <documents>Document.Встреча</documents> <documents>Document.ЗапланированноеВзаимодействие</documents> <documents>Document.НазначениеОпросов</documents> + <documents>Document.СообщениеSMS</documents> <documents>Document.ТелефонныйЗвонок</documents> <documents>Document.ЭлектронноеПисьмоВходящее</documents> <documents>Document.ЭлектронноеПисьмоИсходящее</documents> @@ -1260,7 +1322,9 @@ <enums>Enum.РежимыИспользованияИнформационнойБазы</enums> <enums>Enum.РезультатыВыполненияОбмена</enums> <enums>Enum.СостоянияБизнесПроцессов</enums> + <enums>Enum.СостоянияДокументаСообщениеSMS</enums> <enums>Enum.СостоянияЗаданий</enums> + <enums>Enum.СостоянияСообщенияSMS</enums> <enums>Enum.СпособыPOP3Аутентификации</enums> <enums>Enum.СпособыSMTPАутентификации</enums> <enums>Enum.СпособыВызоваДополнительныхОбработок</enums> @@ -1286,7 +1350,6 @@ <enums>Enum.ТипыФайловДляВстроенногоРедактора</enums> <enums>Enum.ТипыХраненияФайлов</enums> <enums>Enum.УдалитьВидыКалендарей</enums> - <enums>Enum.УдалитьВидыПоставляемыхДанных</enums> <enums>Enum.УдалитьКлючевыеОперации</enums> <enums>Enum.УровниПроизводительности</enums> <enums>Enum.ФорматыСканированногоИзображения</enums> @@ -1326,8 +1389,10 @@ <dataProcessors>DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз</dataProcessors> <dataProcessors>DataProcessor.ЛегальностьПолученияОбновлений</dataProcessors> <dataProcessors>DataProcessor.НастройкаРезервногоКопированияИБ</dataProcessors> + <dataProcessors>DataProcessor.НастройкаРезервногоКопированияПриложения</dataProcessors> <dataProcessors>DataProcessor.НастройкиПользователей</dataProcessors> <dataProcessors>DataProcessor.НерекомендуемаяВерсияПлатформы</dataProcessors> + <dataProcessors>DataProcessor.ОбновлениеИнформационнойБазы</dataProcessors> <dataProcessors>DataProcessor.ОбновлениеКонфигурации</dataProcessors> <dataProcessors>DataProcessor.ОценкаПроизводительности</dataProcessors> <dataProcessors>DataProcessor.ПанельАдминистрированияБСП</dataProcessors> @@ -1338,6 +1403,7 @@ <dataProcessors>DataProcessor.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете</dataProcessors> <dataProcessors>DataProcessor.ПомощникСозданияАвтономногоРабочегоМеста</dataProcessors> <dataProcessors>DataProcessor.ПомощникСозданияОбменаДанными</dataProcessors> + <dataProcessors>DataProcessor.РегистрацияИзмененийДляОбменаДанными</dataProcessors> <dataProcessors>DataProcessor.РегламентныеИФоновыеЗадания</dataProcessors> <dataProcessors>DataProcessor.РезервноеКопированиеИБ</dataProcessors> <dataProcessors>DataProcessor.СдвигГраницыИтоговПриЗавершенииРаботы</dataProcessors> @@ -1405,6 +1471,7 @@ <informationRegisters>InformationRegister.ПравилаДляОбменаДанными</informationRegisters> <informationRegisters>InformationRegister.ПредметыПапкиВзаимодействий</informationRegisters> <informationRegisters>InformationRegister.ПрисоединенныеФайлы</informationRegisters> + <informationRegisters>InformationRegister.ПросмотренныеДанныеИнформационногоЦентра</informationRegisters> <informationRegisters>InformationRegister.ПутиМодулейКриптографииСерверовLinux</informationRegisters> <informationRegisters>InformationRegister.РабочиеКаталогиФайлов</informationRegisters> <informationRegisters>InformationRegister.РезультатыОбменаДанными</informationRegisters> @@ -1425,13 +1492,12 @@ <informationRegisters>InformationRegister.УдалитьБлокировкиСеансовОбластиДанных</informationRegisters> <informationRegisters>InformationRegister.УдалитьВерсииПодсистем</informationRegisters> <informationRegisters>InformationRegister.УдалитьЗамерыВремени</informationRegisters> - <informationRegisters>InformationRegister.УдалитьКурсыВалютПоКлассификатору</informationRegisters> <informationRegisters>InformationRegister.УдалитьОбластиДанных</informationRegisters> <informationRegisters>InformationRegister.УдалитьОбластиКРезервномуКопированию</informationRegisters> <informationRegisters>InformationRegister.УдалитьОчередьЗаданий</informationRegisters> <informationRegisters>InformationRegister.УдалитьОчередьИзвлеченияТекста</informationRegisters> <informationRegisters>InformationRegister.УдалитьПраваПоЗначениямДоступа</informationRegisters> - <informationRegisters>InformationRegister.УдалитьСвязиПоставляемыхДанных</informationRegisters> + <informationRegisters>InformationRegister.УдалитьСтраныМира</informationRegisters> <informationRegisters>InformationRegister.ФайлыВРабочемКаталоге</informationRegisters> <informationRegisters>InformationRegister.ХранимыеФайлыВерсий</informationRegisters> <chartsOfCharacteristicTypes>ChartOfCharacteristicTypes.ВидыДоступа</chartsOfCharacteristicTypes> diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 3a6033098..b40a81585 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -12,8 +12,6 @@ Перем ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Экспорт; // Структура параметров для клиентской логики по завершению работы в программе. Перем ПараметрыРаботыКлиентаПриЗавершении Экспорт; -// Признак того, что при запуске в сеансе администратора нужно вывести форму описаний изменений. -Перем ВывестиОписаниеИзмененийДляАдминистратора Экспорт; // Структура, содержащая в себе время начала и окончания обновления программы. Перем ПараметрыРаботыКлиентаПриОбновлении Экспорт; @@ -75,7 +73,7 @@ Процедура ПриНачалеРаботыСистемы() // СтандартныеПодсистемы - СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(Истина); + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); // Конец СтандартныеПодсистемы КонецПроцедуры diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index 3a6033098..b40a81585 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -12,8 +12,6 @@ Перем ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Экспорт; // Структура параметров для клиентской логики по завершению работы в программе. Перем ПараметрыРаботыКлиентаПриЗавершении Экспорт; -// Признак того, что при запуске в сеансе администратора нужно вывести форму описаний изменений. -Перем ВывестиОписаниеИзмененийДляАдминистратора Экспорт; // Структура, содержащая в себе время начала и окончания обновления программы. Перем ПараметрыРаботыКлиентаПриОбновлении Экспорт; @@ -75,7 +73,7 @@ Процедура ПриНачалеРаботыСистемы() // СтандартныеПодсистемы - СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(Истина); + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); // Конец СтандартныеПодсистемы КонецПроцедуры diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 7c093088d..40b8b9baf 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,0bbd6e08-6311-468a-9951-08cd8d1da53d,1,5cc1351f-403a-4ba6-959e-074837bde850,"2.1.3.51","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",4309,1,0,5dc86726-1271-42a5-ae5d-3e8c63f02501,5dc86726-1271-42a5-ae5d-3e8c63f02501,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,e3faac40-253a-47c3-bb4b-e0014b56daa9,e3faac40-253a-47c3-bb4b-e0014b56daa9,0,1,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,9e36087a-baa8-4812-956a-6e1ac73aa7e0,9e36087a-baa8-4812-956a-6e1ac73aa7e0,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,0,1,cbfef589-e7fb-4cbc-9103-e234861879ac,cbfef589-e7fb-4cbc-9103-e234861879ac,0,1,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,0,1,52176b25-0232-4326-9548-495db32b2660,52176b25-0232-4326-9548-495db32b2660,0,1,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,0,1,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,0,1,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,0,1,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0,1,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,0,1,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,0,1,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,0,1,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,0,1,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,7ef99dd3-d799-4f53-ab56-5528b4c9d782,7ef99dd3-d799-4f53-ab56-5528b4c9d782,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,0,1,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,0,1,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,0,1,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,0,1,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,0,1,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,0,1,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,0,1,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,0,1,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,0,1,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,0,1,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,0,1,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,0,1,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,0,1,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,0,1,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,0,1,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,0,1,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,0,1,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,041daf91-e5b3-471d-934d-55229f8a81d6,041daf91-e5b3-471d-934d-55229f8a81d6,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,2889ef9d-5091-4de3-bbcc-62e307ab7cad,2889ef9d-5091-4de3-bbcc-62e307ab7cad,0,1,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,0,1,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0,1,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,0,1,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,0,1,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,0,1,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,0,1,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,0,1,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,0,1,6cb35d15-936f-4ca8-a196-8a9a75ce54dd,6cb35d15-936f-4ca8-a196-8a9a75ce54dd,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,dd773b86-30fa-4e4a-9391-b4e12488a44e,dd773b86-30fa-4e4a-9391-b4e12488a44e,0,1,d92afab1-81df-4be8-8759-6964da6768bf,d92afab1-81df-4be8-8759-6964da6768bf,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,0,1,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,0,1,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,f3d3d91b-67a6-4f8c-a6d9-c8b80d1dd43f,f3d3d91b-67a6-4f8c-a6d9-c8b80d1dd43f,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,c1ea0b1b-da19-4ca5-8e93-b05a194c2829,c1ea0b1b-da19-4ca5-8e93-b05a194c2829,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,ecfc7ede-fffb-4bea-9598-3e18845f603d,ecfc7ede-fffb-4bea-9598-3e18845f603d,0,1,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,0,1,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,330933ca-c4d5-4014-8a6d-910124dfdc7e,330933ca-c4d5-4014-8a6d-910124dfdc7e,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,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,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,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,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,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,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,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,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,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,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,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,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,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,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,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,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,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,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,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,098d9444-e178-45b5-a8c3-97bd94371684,098d9444-e178-45b5-a8c3-97bd94371684,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,0,1,c8d797cf-e72c-4d99-bd6f-f4a8b0ca7c8d,c8d797cf-e72c-4d99-bd6f-f4a8b0ca7c8d,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,0,1,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,0,1,36d7d739-b198-487d-8644-76589356c2ec,36d7d739-b198-487d-8644-76589356c2ec,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,0,1,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,27bfc94e-e438-4854-9a9d-39a3b984c9b4,27bfc94e-e438-4854-9a9d-39a3b984c9b4,0,1,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,0,1,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,0,1,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,0,1,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,0,1,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,0,1,f7f99dab-9f1e-4814-84e6-e05eb425f67e,f7f99dab-9f1e-4814-84e6-e05eb425f67e,0,1,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,0,1,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,0,1,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,0,1,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,0,1,cc9be940-db0c-4fad-9655-f5ce2b3ac57e,cc9be940-db0c-4fad-9655-f5ce2b3ac57e,0,1,211ca200-977e-4d48-a0c2-6b4e47bc1838,211ca200-977e-4d48-a0c2-6b4e47bc1838,0,1,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,0,1,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,0,1,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,0,1,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,0,1,d12e7d62-9910-43e2-a3a8-39a723f6ff6e,d12e7d62-9910-43e2-a3a8-39a723f6ff6e,0,1,65bef8ef-f088-4bb6-abb4-c2a59f82f900,65bef8ef-f088-4bb6-abb4-c2a59f82f900,0,1,27a9d7f3-7f44-4268-931f-1308047ce462,27a9d7f3-7f44-4268-931f-1308047ce462,0,1,1504d923-a49f-4340-854f-6b79847bc8a1,1504d923-a49f-4340-854f-6b79847bc8a1,0,1,6e45158b-bace-44c9-81b2-cd96c605e575,6e45158b-bace-44c9-81b2-cd96c605e575,0,1,1be7114c-686a-422b-b759-2cc2dbf25c78,1be7114c-686a-422b-b759-2cc2dbf25c78,0,1,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,0,1,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,0,1,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,0,1,58351093-c827-48a1-b1a1-887d3f13b6df,58351093-c827-48a1-b1a1-887d3f13b6df,0,1,a9a0db31-6808-4790-be72-f345197b0c6e,a9a0db31-6808-4790-be72-f345197b0c6e,0,1,36554213-9af4-4fec-8944-35f50b306eda,36554213-9af4-4fec-8944-35f50b306eda,0,1,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,0,1,f561be64-9420-46ec-a4f7-9df0bea2e28b,f561be64-9420-46ec-a4f7-9df0bea2e28b,0,1,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,0,1,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,0,1,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,0,1,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,0,1,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,0,1,958033a6-2a8e-473a-903b-34eee6507f5a,958033a6-2a8e-473a-903b-34eee6507f5a,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,0,1,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,0,1,3a46c243-bdf5-4429-895a-edeae1c0396e,3a46c243-bdf5-4429-895a-edeae1c0396e,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,0,1,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,0,1,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,0,1,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,0,1,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,0,1,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,0,1,832fe1ae-ba81-44b2-9474-a29f36c3b863,832fe1ae-ba81-44b2-9474-a29f36c3b863,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,0,1,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,0,1,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,0,1,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,0,1,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,0,1,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,0,1,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,0,1,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,0,1,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,066f9ab6-ff76-4426-bddd-702e9b16aa5b,066f9ab6-ff76-4426-bddd-702e9b16aa5b,0,1,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,0,1,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,0,1,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,0,1,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,0,1,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,0,1,ac2d4f02-e893-4366-9702-369a11c5f9b8,ac2d4f02-e893-4366-9702-369a11c5f9b8,0,1,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,0,1,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,0,1,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,0,1,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,0,1,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,0,1,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,0,1,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,0,1,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,0,1,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,0,1,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,0,1,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,0,1,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,0,1,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,0,1,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,0,1,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,0,1,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,0,1,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,0,1,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,ac78ccb4-6560-4daf-80e2-07df4d71a13e,ac78ccb4-6560-4daf-80e2-07df4d71a13e,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,0,1,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,0,1,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,0,1,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,68f6d1b2-9c08-4b37-ba23-1e15539a9c35,68f6d1b2-9c08-4b37-ba23-1e15539a9c35,0,1,cb6df70e-c7cd-4343-bfa9-5bdb907b4580,cb6df70e-c7cd-4343-bfa9-5bdb907b4580,0,1,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,6c58cc27-215e-4169-88ae-004ecc657d53,6c58cc27-215e-4169-88ae-004ecc657d53,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,0,1,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,361271fa-2faa-497d-adfe-dea8b825405e,361271fa-2faa-497d-adfe-dea8b825405e,0,1,5dceae8b-1ff3-4760-a1c4-975a92be1023,5dceae8b-1ff3-4760-a1c4-975a92be1023,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,0,1,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,e2c0bc7a-7197-4972-b703-a2356d2a36ad,e2c0bc7a-7197-4972-b703-a2356d2a36ad,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,0,1,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,0,1,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,0,1,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0,1,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,0,1,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,0,1,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,0,1,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,0,1,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,0,1,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,0,1,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,0,1,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,0,1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,0,1,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,0,1,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,0,1,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,0,1,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,0,1,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,0,1,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,0,1,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,0,1,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,0,1,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,0,1,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,0,1,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,0,1,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,0,1,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,0,1,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,0,1,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,0,1,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,0,1,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,0,1,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,0,1,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,0,1,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,0,1,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,0,1,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,0,1,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,0,1,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,0,1,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,0,1,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,0,1,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,0,1,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,0,1,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,0,1,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,0,1,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,0,1,7572095f-d755-4929-8862-071b1c34f758,7572095f-d755-4929-8862-071b1c34f758,0,1,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,0,1,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,0,1,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,0,1,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,0,1,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,0,1,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,0,1,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,0,1,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,6287eded-23d8-4b04-8415-1d9afa17713b,6287eded-23d8-4b04-8415-1d9afa17713b,0,1,8ce3513d-d086-46f4-81c3-1761594a64c5,8ce3513d-d086-46f4-81c3-1761594a64c5,0,1,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,0,1,704f07f2-0513-4a54-bb41-27ca3deb5834,704f07f2-0513-4a54-bb41-27ca3deb5834,0,1,0504ea28-d8ed-43ac-afa5-c3f32c21b385,0504ea28-d8ed-43ac-afa5-c3f32c21b385,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,0,1,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,0,1,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,0,1,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,0,1,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,0,1,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,0,1,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,0,1,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,0,1,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,0,1,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,0,1,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,0,1,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,0,1,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,28dc34df-1daa-49a2-a12e-db91ee963459,28dc34df-1daa-49a2-a12e-db91ee963459,0,1,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,0,1,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,0,1,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,0,1,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,0,1,4e550d28-7174-412b-bfed-559a3dc753f6,4e550d28-7174-412b-bfed-559a3dc753f6,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,4aac940e-334b-42d2-bff1-0db9dfeff272,4aac940e-334b-42d2-bff1-0db9dfeff272,0,1,c33bcfcd-b5e2-46db-ba70-c373db613394,c33bcfcd-b5e2-46db-ba70-c373db613394,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,9376b18c-cffd-488b-8a1e-cca598f018bc,9376b18c-cffd-488b-8a1e-cca598f018bc,0,1,d78b5faf-b34b-4fa2-89a5-f4bc45203528,d78b5faf-b34b-4fa2-89a5-f4bc45203528,0,1,942a962a-bccb-42c0-b279-077a9b33c70a,942a962a-bccb-42c0-b279-077a9b33c70a,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,bb722783-1e0b-4543-b110-fdf69b4fe20e,bb722783-1e0b-4543-b110-fdf69b4fe20e,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,ffe7858a-6c92-4951-8dbf-327215894ace,ffe7858a-6c92-4951-8dbf-327215894ace,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,0,1,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,831f4abd-4f96-417f-a71a-9ff481c23922,831f4abd-4f96-417f-a71a-9ff481c23922,0,1,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,0,1,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,b95681f4-8f91-483e-a9c5-c8a21058679a,b95681f4-8f91-483e-a9c5-c8a21058679a,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,0,1,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,0,1,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,0,1,f3e2f35e-53f8-44e8-b24c-8385ba2c6974,f3e2f35e-53f8-44e8-b24c-8385ba2c6974,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,cd8244d1-0996-40ea-9263-7179c1e8aa26,cd8244d1-0996-40ea-9263-7179c1e8aa26,0,1,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,0,1,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,0,1,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,0,1,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,0,1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,0,1,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,0,1,5462f1ab-2095-4515-875e-471900f05db9,5462f1ab-2095-4515-875e-471900f05db9,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,0,1,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,0,1,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,0,1,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,0,1,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,0,1,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,0,1,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,0,1,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,0,1,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,0,1,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,0,1,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,0,1,1b887b59-9a72-4aa3-a985-7a8d6a427b95,1b887b59-9a72-4aa3-a985-7a8d6a427b95,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,05b6a743-5831-4c77-894c-b19005b0e141,05b6a743-5831-4c77-894c-b19005b0e141,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,f811b0b7-41b5-4591-9910-780f08780236,f811b0b7-41b5-4591-9910-780f08780236,0,1,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,0a5e38b7-2794-419f-8c29-076490c7b5ce,0a5e38b7-2794-419f-8c29-076490c7b5ce,0,1,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,0,1,230b80c7-620a-40d3-b473-b6289cfce8c0,230b80c7-620a-40d3-b473-b6289cfce8c0,0,1,00c37f5c-9380-4541-99e2-37bb97536e08,00c37f5c-9380-4541-99e2-37bb97536e08,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,0,1,138e674b-c9d4-4b89-b5ac-a50bd5313b98,138e674b-c9d4-4b89-b5ac-a50bd5313b98,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,0,1,b5f518af-59d0-4f91-8759-5f32a5055d07,b5f518af-59d0-4f91-8759-5f32a5055d07,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,d295f084-1c23-4c94-90eb-85928648224e,d295f084-1c23-4c94-90eb-85928648224e,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,0,1,5d0811eb-bcd5-42ce-b6e8-8341f3a04225,5d0811eb-bcd5-42ce-b6e8-8341f3a04225,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,9c5cd78a-990e-4134-8ce9-e7f191ee6726,9c5cd78a-990e-4134-8ce9-e7f191ee6726,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,645561e0-787a-45a1-824a-a2c649d516fe,645561e0-787a-45a1-824a-a2c649d516fe,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,f08afb10-3467-4af8-804c-ba7761f1dac9,f08afb10-3467-4af8-804c-ba7761f1dac9,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,0,1,e32b940d-3f23-4eea-a559-62ba1be7a425,e32b940d-3f23-4eea-a559-62ba1be7a425,0,1,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,b65afceb-a200-42d5-9948-831a5ad84b1b,b65afceb-a200-42d5-9948-831a5ad84b1b,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,0,1,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,0,1,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,0,1,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,0,1,538f0963-de90-4659-987d-df71a9586548,538f0963-de90-4659-987d-df71a9586548,0,1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,0,1,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,0,1,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,0,1,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,0,1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,0,1,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,0,1,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,0,1,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,79a0746b-4dbe-4068-8832-4d0da08d6fd3,79a0746b-4dbe-4068-8832-4d0da08d6fd3,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,0,1,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,0,1,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,0,1,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,0,1,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,0,1,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,3c4519ce-e6aa-43e3-87e5-fbd521fdc88e,3c4519ce-e6aa-43e3-87e5-fbd521fdc88e,0,1,892823b2-41ea-4c87-b0d7-e6fe5f190a1c,892823b2-41ea-4c87-b0d7-e6fe5f190a1c,0,1,05a1450f-7593-48d5-894d-b623e4458c57,05a1450f-7593-48d5-894d-b623e4458c57,0,1,bb8e10cb-6fa1-43f6-870f-0a26bede9d9c,bb8e10cb-6fa1-43f6-870f-0a26bede9d9c,0,1,02a0da6e-4045-49cf-bd14-ff22b534c7be,02a0da6e-4045-49cf-bd14-ff22b534c7be,0,1,726b9fed-3149-4697-8b0f-bc9051e939ae,726b9fed-3149-4697-8b0f-bc9051e939ae,0,1,e7050bde-5acb-4ad8-86f0-375739120d02,e7050bde-5acb-4ad8-86f0-375739120d02,0,1,c6b4c9b4-1064-49b0-bae4-b624582142c7,c6b4c9b4-1064-49b0-bae4-b624582142c7,0,1,11d5138e-df5b-4b0b-adf0-37c239d0de30,11d5138e-df5b-4b0b-adf0-37c239d0de30,0,1,f8b72dff-00a9-4b2f-b1a8-72d1f7670a88,f8b72dff-00a9-4b2f-b1a8-72d1f7670a88,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,0,1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,0,1,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,0,1,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,0,1,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,0,1,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,0,1,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,0,1,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,0,1,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,0,1,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,0,1,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,0,1,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,0,1,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,0,1,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,4cca4c80-62f5-4205-8196-78fcfa83de2f,4cca4c80-62f5-4205-8196-78fcfa83de2f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,2a365474-edba-4e3d-a69c-c856be0e4a4a,2a365474-edba-4e3d-a69c-c856be0e4a4a,0,1,c46fd680-efbe-49a8-91f0-73e36d791fa9,c46fd680-efbe-49a8-91f0-73e36d791fa9,0,1,6995567b-5a3c-4e03-9fb4-e22363ed6555,6995567b-5a3c-4e03-9fb4-e22363ed6555,0,1,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,0,1,375fd076-c54c-43c1-8d11-12607c0ce04e,375fd076-c54c-43c1-8d11-12607c0ce04e,0,1,3b9ded5a-f656-4a33-90f3-d7dbff234da9,3b9ded5a-f656-4a33-90f3-d7dbff234da9,0,1,eae94ac3-3aa3-49f0-940f-51c89fec66e2,eae94ac3-3aa3-49f0-940f-51c89fec66e2,0,1,a2b43b21-56e7-4644-9345-d4918a1dfe8e,a2b43b21-56e7-4644-9345-d4918a1dfe8e,0,1,6ef24453-482d-4a6e-a088-7a2faf8de1c8,6ef24453-482d-4a6e-a088-7a2faf8de1c8,0,1,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,0,1,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,0,1,f4cdb0ac-8993-4e8c-9d13-128710dec273,f4cdb0ac-8993-4e8c-9d13-128710dec273,0,1,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,0,1,b4f824aa-9b2f-40c9-a5f6-98d452019c38,b4f824aa-9b2f-40c9-a5f6-98d452019c38,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,0,1,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,0,1,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,0,1,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,0,1,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,0,1,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,0,1,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,0,1,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,0,1,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,0,1,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,0,1,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,0,1,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,0,1,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,0,1,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,0,1,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,0,1,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,0,1,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,0,1,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,0,1,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,0,1,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,0,1,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,0,1,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,0,1,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,0,1,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,0,1,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,0,1,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,0,1,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,0,1,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,0,1,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,0,1,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,0,1,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,0,1,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,ead0a902-bd87-4ee5-bfee-1a131dd28bd6,ead0a902-bd87-4ee5-bfee-1a131dd28bd6,0,1,d4ce8dd2-a391-49d0-9742-a6a6a07b1684,d4ce8dd2-a391-49d0-9742-a6a6a07b1684,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,0,1,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,0,1,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,0,1,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,0,1,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,0,1,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,0,1,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,0,1,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,0,1,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,0,1,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,0,1,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,0,1,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,0,1,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,0,1,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,0,1,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,0,1,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,0,1,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,0,1,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,0,1,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,0,1,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,0,1,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,0,1,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,0,1,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,0,1,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,0,1,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,0,1,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,0,1,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0,1,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,0,1,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,0,1,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,0,1,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,0,1,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,0,1,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,0,1,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,0,1,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,0,1,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,0,1,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,0,1,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,0,1,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,0,1,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,0,1,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,0,1,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,0,1,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,0,1,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,0,1,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,0,1,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,0,1,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,0,1,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,0,1,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,0,1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,0,1,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,0,1,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,0,1,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,0,1,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,0,1,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,0,1,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,0,1,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,0,1,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,0,1,edaed496-d446-423a-a709-434cb643ad5e,edaed496-d446-423a-a709-434cb643ad5e,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,e6ae5164-fe3b-48fd-8180-f31941e35238,e6ae5164-fe3b-48fd-8180-f31941e35238,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,9a388c1c-bf74-464e-be2d-bdb2e36232b5,9a388c1c-bf74-464e-be2d-bdb2e36232b5,0,1,06e9fb36-cc47-4517-baac-d666703bdf03,06e9fb36-cc47-4517-baac-d666703bdf03,0,1,cef67574-e5cd-40f9-b7b9-47cff1a1f703,cef67574-e5cd-40f9-b7b9-47cff1a1f703,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,21d296a1-6809-4ff6-a4da-b455cad86cc2,21d296a1-6809-4ff6-a4da-b455cad86cc2,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,0,1,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,0,1,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,0,1,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,0,1,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,0,1,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,0,1,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,0,1,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,0,1,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,254a58a9-76ac-43b9-92f7-40579d43f90c,254a58a9-76ac-43b9-92f7-40579d43f90c,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,2fac5a7b-cb3e-4442-892f-77f338035eeb,2fac5a7b-cb3e-4442-892f-77f338035eeb,0,1,f2076747-0bc4-41dd-bab9-33cec85111f0,f2076747-0bc4-41dd-bab9-33cec85111f0,0,1,9f74c0bb-b876-4a37-b954-c93898a21067,9f74c0bb-b876-4a37-b954-c93898a21067,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,b2265070-9cd3-4176-92c8-6d9f32c2ca84,b2265070-9cd3-4176-92c8-6d9f32c2ca84,0,1,b347e774-2261-4f76-9bdb-3c6736983589,b347e774-2261-4f76-9bdb-3c6736983589,0,1,be7e2715-1243-49a8-8c7c-55d632d3cf6c,be7e2715-1243-49a8-8c7c-55d632d3cf6c,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,c35904cf-4954-434e-96fd-5ca537a88c66,c35904cf-4954-434e-96fd-5ca537a88c66,0,1,5545798f-72dc-4630-a5ba-88039f4bfe3c,5545798f-72dc-4630-a5ba-88039f4bfe3c,0,1,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,0,1,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,0,1,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,0,1,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,0,1,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,0,1,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,0,1,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,0,1,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,0,1,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0,1,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,0,1,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,0,1,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,0,1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0,1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,0,1,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,0,1,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,0,1,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,0,1,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,0,1,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,0,1,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,0,1,04ec4cb1-bab2-4bdd-b119-86540947b0ef,04ec4cb1-bab2-4bdd-b119-86540947b0ef,0,1,e93157d3-3a87-4f54-be95-d2d254c58349,e93157d3-3a87-4f54-be95-d2d254c58349,0,1,a8c1f22e-2589-4c02-93cf-8d88ef511ace,a8c1f22e-2589-4c02-93cf-8d88ef511ace,0,1,2f54f6d5-9d57-450b-a386-e917b5e46b0c,2f54f6d5-9d57-450b-a386-e917b5e46b0c,0,1,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,0,1,b7c40101-60b7-4c36-abcd-38101bc8b7d8,b7c40101-60b7-4c36-abcd-38101bc8b7d8,0,1,a4a9535b-b8a6-4d94-97e7-e28d795268ad,a4a9535b-b8a6-4d94-97e7-e28d795268ad,0,1,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,0,1,b6845833-530b-43b3-8715-f88b092d83bc,b6845833-530b-43b3-8715-f88b092d83bc,0,1,d2854e39-4157-45f3-a992-4d161c38b1da,d2854e39-4157-45f3-a992-4d161c38b1da,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,0,1,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,0,1,75b9ab9f-7cbb-4468-9570-39f719fd682b,75b9ab9f-7cbb-4468-9570-39f719fd682b,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,0,1,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,0,1,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,0,1,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,0,1,3dd37cb7-f1e0-4882-a9a3-1044a3390a3e,3dd37cb7-f1e0-4882-a9a3-1044a3390a3e,0,1,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,0,1,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,0,1,ff700f82-aba3-417c-be1b-b1b37ad98543,ff700f82-aba3-417c-be1b-b1b37ad98543,0,1,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,0,1,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,0,1,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,0,1,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,0,1,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,0,1,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,0,1,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,0,1,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,0,1,cbf6f37a-874a-434a-9c76-c357e6acf215,cbf6f37a-874a-434a-9c76-c357e6acf215,0,1,72edf604-8b73-49d2-a09d-a548c8c69596,72edf604-8b73-49d2-a09d-a548c8c69596,0,1,c6c33e0a-ebaa-4bb0-8a3a-3fe5632c6f47,c6c33e0a-ebaa-4bb0-8a3a-3fe5632c6f47,0,1,01e4c0ce-71ca-4421-a5a6-cd868bbd54fe,01e4c0ce-71ca-4421-a5a6-cd868bbd54fe,0,1,2a659a77-162f-4e1b-8339-695040f04559,2a659a77-162f-4e1b-8339-695040f04559,0,1,6d29693c-8379-46b8-806b-56311826810b,6d29693c-8379-46b8-806b-56311826810b,0,1,4d371b01-b215-4a39-a309-d6d3dc64d9ff,4d371b01-b215-4a39-a309-d6d3dc64d9ff,0,1,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,0,1,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,0,1,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,0,1,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,0,1,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0,1,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,0,1,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,0,1,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,0,1,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,0,1,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,0,1,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,0,1,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,0,1,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,0,1,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,0,1,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,0,1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,0,1,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,0,1,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,0,1,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,0,1,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,0,1,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,0,1,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,0,1,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,0,1,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,0,1,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,0,1,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,0,1,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,0,1,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,0,1,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,0,1,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,0,1,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,0,1,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,0,1,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0,1,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,0,1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,0,1,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,0,1,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,0,1,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,0,1,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,0,1,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,0,1,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,0,1,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,0,1,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,0,1,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,0,1,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,0,1,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,0,1,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,0,1,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,e85695f1-ec94-42ce-8f80-2bda4c90685b,e85695f1-ec94-42ce-8f80-2bda4c90685b,0,1,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,db15717d-1b6a-42fd-9b8f-959e1d5841e9,db15717d-1b6a-42fd-9b8f-959e1d5841e9,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,495ddb5f-f75d-46c9-b134-e925c814b890,495ddb5f-f75d-46c9-b134-e925c814b890,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,0,1,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,0,1,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,0,1,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,0,1,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,0,1,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,0,1,04d8ae53-67d9-40a5-b942-59fdebfd6ed7,04d8ae53-67d9-40a5-b942-59fdebfd6ed7,0,1,8c83a662-50e5-402c-913b-5e548b57201d,8c83a662-50e5-402c-913b-5e548b57201d,0,1,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,0,1,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,0,1,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,0,1,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,0,1,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,0,1,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,0,1,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,0,1,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,0,1,59364444-4564-42d9-8b94-01ed1b4a1204,59364444-4564-42d9-8b94-01ed1b4a1204,0,1,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,0,1,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,0,1,836d0590-a8ee-40d0-a649-41cf4fae36a6,836d0590-a8ee-40d0-a649-41cf4fae36a6,0,1,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,0,1,6ddbc80a-38c8-4eda-8cdf-6d64331818a3,6ddbc80a-38c8-4eda-8cdf-6d64331818a3,0,1,eda3c675-04b7-4c14-b78a-0caa22843ac0,eda3c675-04b7-4c14-b78a-0caa22843ac0,0,1,fc097ab3-8b3e-4b8f-9e51-d888735a69bd,fc097ab3-8b3e-4b8f-9e51-d888735a69bd,0,1,23c2c28b-867e-41d0-ba61-b9ee20fa38d1,23c2c28b-867e-41d0-ba61-b9ee20fa38d1,0,1,e5ddc65a-e886-4ed6-9598-bec30ddb7341,e5ddc65a-e886-4ed6-9598-bec30ddb7341,0,1,6cf48813-8097-44ae-8630-58f5b002ff31,6cf48813-8097-44ae-8630-58f5b002ff31,0,1,e0cee0ee-24b9-400a-95af-c61debec912b,e0cee0ee-24b9-400a-95af-c61debec912b,0,1,578bc873-5e23-4222-a655-7d653d761a4c,578bc873-5e23-4222-a655-7d653d761a4c,0,1,09bccd03-1492-4ebe-bfb4-8ace744d367f,09bccd03-1492-4ebe-bfb4-8ace744d367f,0,1,4d9294db-1abd-4e34-812f-fdcac0cf657d,4d9294db-1abd-4e34-812f-fdcac0cf657d,0,1,14bc3be4-3075-418d-90ec-be5d2686f875,14bc3be4-3075-418d-90ec-be5d2686f875,0,1,adffd81c-a566-4b4f-89d5-6abc705da36f,adffd81c-a566-4b4f-89d5-6abc705da36f,0,1,9f67e6d4-0b7c-4318-b127-7c8b7daf1d1b,9f67e6d4-0b7c-4318-b127-7c8b7daf1d1b,0,1,23ced9be-cb9d-451f-aea7-aa211054bd4d,23ced9be-cb9d-451f-aea7-aa211054bd4d,0,1,3991175c-0152-44c6-8e1c-4090d960050a,3991175c-0152-44c6-8e1c-4090d960050a,0,1,aa2760cf-b8cd-4eb3-b2f1-0e1fbdec09a8,aa2760cf-b8cd-4eb3-b2f1-0e1fbdec09a8,0,1,d1fabcdd-c072-4341-85d4-9a9ba168f301,d1fabcdd-c072-4341-85d4-9a9ba168f301,0,1,030a9c93-322b-4421-ad70-0acaa94870a2,030a9c93-322b-4421-ad70-0acaa94870a2,0,1,7121d241-9450-4bf2-b7ff-a0e963bbfd0a,7121d241-9450-4bf2-b7ff-a0e963bbfd0a,0,1,01a3ab71-56fa-4ddc-a5a3-9c923ee9c74a,01a3ab71-56fa-4ddc-a5a3-9c923ee9c74a,0,1,5c660f50-c63a-466d-bb32-de5699ad8a95,5c660f50-c63a-466d-bb32-de5699ad8a95,0,1,032587fa-2993-463c-af9f-bdd67f12604f,032587fa-2993-463c-af9f-bdd67f12604f,0,1,64d4aaed-e068-431b-bed0-faef7b5358f3,64d4aaed-e068-431b-bed0-faef7b5358f3,0,1,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,0,1,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,0,1,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,0,1,37c3d087-21c5-48ac-b8bd-17dffa071d21,37c3d087-21c5-48ac-b8bd-17dffa071d21,0,1,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,0,1,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,0,1,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,0,1,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,0,1,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,0,1,bba58a89-2910-44c6-afd9-a59a74ec8b4e,bba58a89-2910-44c6-afd9-a59a74ec8b4e,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,eb3d278b-e8fe-4d43-90a8-dd361009196f,eb3d278b-e8fe-4d43-90a8-dd361009196f,0,1,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,0,1,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,0,1,02e1c293-7302-4751-a248-4bbeed9cbad5,02e1c293-7302-4751-a248-4bbeed9cbad5,0,1,c946cde8-c0d7-4acb-a3be-8858e392fc40,c946cde8-c0d7-4acb-a3be-8858e392fc40,0,1,3a111e0d-6466-46fd-95a2-1798b6e51ba0,3a111e0d-6466-46fd-95a2-1798b6e51ba0,0,1,645edcb0-e358-4d32-a9a9-9534af0398ca,645edcb0-e358-4d32-a9a9-9534af0398ca,0,1,efa1b4e5-d16c-4921-a48a-fe700e39dc71,efa1b4e5-d16c-4921-a48a-fe700e39dc71,0,1,e93402db-e7dd-465e-8c62-2a41efd811b8,e93402db-e7dd-465e-8c62-2a41efd811b8,0,1,e0157f72-a362-4b9f-a272-68ca8078b91c,e0157f72-a362-4b9f-a272-68ca8078b91c,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,0,1,20f1114a-0b98-464f-aed8-80ce706b808e,20f1114a-0b98-464f-aed8-80ce706b808e,0,1,988b05ae-987a-4433-b446-bcc7bf5d9ea4,988b05ae-987a-4433-b446-bcc7bf5d9ea4,0,1,07e3de4e-28d9-48dc-9253-a2c39c34f827,07e3de4e-28d9-48dc-9253-a2c39c34f827,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,0,1,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,0,1,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,0,1,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,0,1,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,0,1,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,a75ed1c8-20c2-49a8-a730-22237ef91366,a75ed1c8-20c2-49a8-a730-22237ef91366,0,1,1c0ebdfd-1913-48fe-b80a-10c30201129b,1c0ebdfd-1913-48fe-b80a-10c30201129b,0,1,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,0,1,14025e38-09af-43b2-a49b-403e398a28ea,14025e38-09af-43b2-a49b-403e398a28ea,0,1,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,0,1,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,0,1,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,0,1,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,0,1,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,0,1,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,0,1,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,0,1,4d83ed3c-755c-4b9b-a2b8-17fa2c5c3a61,4d83ed3c-755c-4b9b-a2b8-17fa2c5c3a61,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,1a4991f8-7832-4ca9-8809-88a97de88749,1a4991f8-7832-4ca9-8809-88a97de88749,0,1,4f44c1c0-0480-415e-8058-41b28f2f43a0,4f44c1c0-0480-415e-8058-41b28f2f43a0,0,1,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,0,1,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,0,1,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,0,1,5d9863e6-aab7-4808-a516-8bc42dae5d01,5d9863e6-aab7-4808-a516-8bc42dae5d01,0,1,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,0,1,218302fa-674d-45e1-a7e2-2cce2d011342,218302fa-674d-45e1-a7e2-2cce2d011342,0,1,70264a0a-95c5-426f-a1bf-0f57b86d4030,70264a0a-95c5-426f-a1bf-0f57b86d4030,0,1,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,0,1,3291428e-6727-43cc-a1f8-c62f90320e90,3291428e-6727-43cc-a1f8-c62f90320e90,0,1,d867720c-c937-4689-b241-0afda05ef993,d867720c-c937-4689-b241-0afda05ef993,0,1,1390da8f-bac6-44ee-8413-1438f1f66074,1390da8f-bac6-44ee-8413-1438f1f66074,0,1,9616956d-a537-44fd-9d3f-5071fb5f4883,9616956d-a537-44fd-9d3f-5071fb5f4883,0,1,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,0,1,41d31712-6181-4cfe-9aa4-02b7a50150b0,41d31712-6181-4cfe-9aa4-02b7a50150b0,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,0,1,6b02f5e0-2b50-492d-ada4-d8fe43b0a748,6b02f5e0-2b50-492d-ada4-d8fe43b0a748,0,1,bbfc7a9c-ac22-47b1-bb18-74993b7ec5b0,bbfc7a9c-ac22-47b1-bb18-74993b7ec5b0,0,1,17dcf8bc-6830-4623-b1b2-9084c5495e20,17dcf8bc-6830-4623-b1b2-9084c5495e20,0,1,a3114825-cf97-4051-907d-9a31e1ac88eb,a3114825-cf97-4051-907d-9a31e1ac88eb,0,1,9886143e-70dd-4c1e-8b00-dc5587403246,9886143e-70dd-4c1e-8b00-dc5587403246,0,1,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,0,1,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,0,1,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,0,1,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,0,1,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,0,1,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,0,1,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,0,1,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,0,1,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,0,1,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,0,1,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,0,1,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,0,1,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,0,1,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,063ef64f-97ec-451e-8470-d3cdf6d08947,063ef64f-97ec-451e-8470-d3cdf6d08947,0,1,b76492d0-17f3-49c0-b23b-6a140122f20f,b76492d0-17f3-49c0-b23b-6a140122f20f,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,0,1,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,0,1,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,0,1,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,0,1,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,0,1,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,0,1,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,0,1,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,0,1,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,0,1,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,0,1,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,0,1,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,0,1,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,0,1,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,0,1,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,0,1,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0,1,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,0,1,d08857b9-bc84-48f8-a7a1-09db961427c9,d08857b9-bc84-48f8-a7a1-09db961427c9,0,1,53ea8238-cae6-42c0-b92d-b4539c71c34a,53ea8238-cae6-42c0-b92d-b4539c71c34a,0,1,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,0,1,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,0,1,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,0,1,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,0,1,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,0,1,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,0,1,84562495-1887-495e-8433-2649202684cc,84562495-1887-495e-8433-2649202684cc,0,1,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,0,1,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,0,1,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,0,1,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,0,1,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,554b1360-d3cb-48c5-bfa6-ebcba5c9afc9,554b1360-d3cb-48c5-bfa6-ebcba5c9afc9,0,1,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,0,1,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,0,1,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,0,1,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,0,1,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,0,1,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,0,1,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,0,1,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,0,1,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,0,1,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,0,1,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,0,1,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b57eca91-04c2-4412-b5e2-f3c71f8ec602,b57eca91-04c2-4412-b5e2-f3c71f8ec602,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,0,1,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,0,1,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,0,1,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,0,1,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,0,1,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,0,1,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,0,1,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,0,1,c7b89521-f006-4749-b213-d7f7b0c8a004,c7b89521-f006-4749-b213-d7f7b0c8a004,0,1,401e8f3a-82a4-4f12-9ff1-27440d0a0ed6,401e8f3a-82a4-4f12-9ff1-27440d0a0ed6,0,1,7918eee4-7c9e-4a7a-808e-4ed0fd7bbe41,7918eee4-7c9e-4a7a-808e-4ed0fd7bbe41,0,1,81f8f558-c98b-4999-83f3-4ac06fb79dca,81f8f558-c98b-4999-83f3-4ac06fb79dca,0,1,7b8f082d-0a64-4fad-a33d-af7011a7f33d,7b8f082d-0a64-4fad-a33d-af7011a7f33d,0,1,49f61632-e899-425a-b16a-769f795bdf5f,49f61632-e899-425a-b16a-769f795bdf5f,0,1,c264a337-b573-408a-b77b-c6524ca1687b,c264a337-b573-408a-b77b-c6524ca1687b,0,1,92396874-0d4a-4d8e-b15b-01bc7504d5da,92396874-0d4a-4d8e-b15b-01bc7504d5da,0,1,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,0,1,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,0,1,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,0,1,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,0,1,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,0,1,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,0,1,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,0,1,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,0,1,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,0,1,f8d8f958-bf7b-4070-9b5a-8410b9786cbf,f8d8f958-bf7b-4070-9b5a-8410b9786cbf,0,1,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,0,1,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,0,1,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,0,1,1faacc47-680d-48ac-8933-daa76519f24f,1faacc47-680d-48ac-8933-daa76519f24f,0,1,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,0,1,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,0,1,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,0,1,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0,1,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,0,1,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,0,1,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,0,1,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,0,1,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,0,1,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,0,1,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0,1,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,0,1,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,0,1,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,0,1,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,0,1,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,0,1,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,0,1,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,0,1,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,0,1,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,0,1,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,0,1,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,0,1,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,0,1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,0,1,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,0,1,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,0,1,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0,1,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,0,1,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,0,1,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,0,1,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,0,1,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,0,1,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,0,1,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,0,1,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,0,1,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,0,1,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,0,1,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,0,1,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,0,1,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,0,1,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,0,1,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,0,1,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,0,1,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,0,1,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,0,1,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,0,1,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,0,1,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,0,1,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,0,1,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,0,1,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,0,1,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,0,1,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,6200ebce-5189-473a-9824-db733d78fcb2,6200ebce-5189-473a-9824-db733d78fcb2,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,0,1,600092a5-0fc4-4ea1-91bd-8fadcc137d8a,600092a5-0fc4-4ea1-91bd-8fadcc137d8a,0,1,c6e65fa9-3077-43c2-aff7-61cc05760fac,c6e65fa9-3077-43c2-aff7-61cc05760fac,0,1,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,0,1,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,0,1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,0,1,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,0,1,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,0,1,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,0,1,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,9f021ea4-cb5b-4248-a79e-0a23e0fac748,9f021ea4-cb5b-4248-a79e-0a23e0fac748,0,1,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,0,1,46d94d4c-f76e-4fb4-b0be-39733f0493d9,46d94d4c-f76e-4fb4-b0be-39733f0493d9,0,1,e5936679-41a1-4b0d-9f11-6c83eb6740e8,e5936679-41a1-4b0d-9f11-6c83eb6740e8,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,0,1,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,0,1,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,0,1,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,0,1,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,0,1,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,5786dce7-e9a3-437a-b694-ca93ea87363f,5786dce7-e9a3-437a-b694-ca93ea87363f,0,1,e3f81324-3366-4de5-b834-688fee5ea625,e3f81324-3366-4de5-b834-688fee5ea625,0,1,205928c7-042b-4f11-919b-5ca9d1fc1ecb,205928c7-042b-4f11-919b-5ca9d1fc1ecb,0,1,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,0,1,e1c11609-5400-43ed-887c-22ba3a48a384,e1c11609-5400-43ed-887c-22ba3a48a384,0,1,1c99dd99-fd0a-4342-b7dd-ccf859e41f38,1c99dd99-fd0a-4342-b7dd-ccf859e41f38,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,d671bea8-51b2-4a93-9594-3ae6bb1ace52,d671bea8-51b2-4a93-9594-3ae6bb1ace52,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,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,f96691ef-4f36-458a-a90d-a4be7b82ea99,1,14d03b2b-30c1-4406-8262-941500a53afc,"2.1.4.34","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",4483,1,0,a815e3f3-74a6-420e-aaea-9ade6d7f0d00,a815e3f3-74a6-420e-aaea-9ade6d7f0d00,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,e3faac40-253a-47c3-bb4b-e0014b56daa9,e3faac40-253a-47c3-bb4b-e0014b56daa9,0,1,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,9e36087a-baa8-4812-956a-6e1ac73aa7e0,9e36087a-baa8-4812-956a-6e1ac73aa7e0,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,0,1,cbfef589-e7fb-4cbc-9103-e234861879ac,cbfef589-e7fb-4cbc-9103-e234861879ac,0,1,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,0,1,52176b25-0232-4326-9548-495db32b2660,52176b25-0232-4326-9548-495db32b2660,0,1,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,0,1,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,0,1,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,0,1,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0,1,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,0,1,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,0,1,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,0,1,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,0,1,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,7ef99dd3-d799-4f53-ab56-5528b4c9d782,7ef99dd3-d799-4f53-ab56-5528b4c9d782,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,0,1,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,0,1,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,0,1,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,0,1,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,0,1,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,0,1,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,0,1,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,0,1,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,0,1,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,0,1,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,0,1,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,0,1,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,0,1,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,0,1,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,0,1,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,eb226ca1-6478-4d38-b1ee-b7ec38525249,eb226ca1-6478-4d38-b1ee-b7ec38525249,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,0,1,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,0,1,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,0,1,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,0,1,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,0,1,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,0,1,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,0,1,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,0,1,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,0,1,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,0,1,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,0,1,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,3befd4a6-8f77-4159-9a99-09202d5c83c2,3befd4a6-8f77-4159-9a99-09202d5c83c2,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,0,1,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,0,1,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,0,1,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,0,1,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,041daf91-e5b3-471d-934d-55229f8a81d6,041daf91-e5b3-471d-934d-55229f8a81d6,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,2889ef9d-5091-4de3-bbcc-62e307ab7cad,2889ef9d-5091-4de3-bbcc-62e307ab7cad,0,1,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,0,1,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,0,1,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0,1,89574884-bce2-406d-9961-d1656b306eb8,89574884-bce2-406d-9961-d1656b306eb8,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,0,1,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,0,1,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,0,1,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,0,1,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,0,1,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,0,1,6cb35d15-936f-4ca8-a196-8a9a75ce54dd,6cb35d15-936f-4ca8-a196-8a9a75ce54dd,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,dd773b86-30fa-4e4a-9391-b4e12488a44e,dd773b86-30fa-4e4a-9391-b4e12488a44e,0,1,d92afab1-81df-4be8-8759-6964da6768bf,d92afab1-81df-4be8-8759-6964da6768bf,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,0,1,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,0,1,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,0,1,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,0,1,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,0,1,f3d3d91b-67a6-4f8c-a6d9-c8b80d1dd43f,f3d3d91b-67a6-4f8c-a6d9-c8b80d1dd43f,0,1,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,0,1,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,c1ea0b1b-da19-4ca5-8e93-b05a194c2829,c1ea0b1b-da19-4ca5-8e93-b05a194c2829,0,1,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,0,1,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,ecfc7ede-fffb-4bea-9598-3e18845f603d,ecfc7ede-fffb-4bea-9598-3e18845f603d,0,1,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,0,1,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,330933ca-c4d5-4014-8a6d-910124dfdc7e,330933ca-c4d5-4014-8a6d-910124dfdc7e,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,0,1,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,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,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,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,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,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,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,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,5bfd74f4-811a-45db-b33d-8f93ba9c873a,5bfd74f4-811a-45db-b33d-8f93ba9c873a,1,0,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,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,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,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,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,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,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,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,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,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,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,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,098d9444-e178-45b5-a8c3-97bd94371684,098d9444-e178-45b5-a8c3-97bd94371684,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,0,1,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,0,1,c8d797cf-e72c-4d99-bd6f-f4a8b0ca7c8d,c8d797cf-e72c-4d99-bd6f-f4a8b0ca7c8d,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,a5cc5ae2-be80-4957-8aca-9e477433dfcc,a5cc5ae2-be80-4957-8aca-9e477433dfcc,0,1,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,0,1,36d7d739-b198-487d-8644-76589356c2ec,36d7d739-b198-487d-8644-76589356c2ec,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,0,1,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,27bfc94e-e438-4854-9a9d-39a3b984c9b4,27bfc94e-e438-4854-9a9d-39a3b984c9b4,0,1,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,0,1,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,0,1,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,0,1,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,0,1,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,0,1,f7f99dab-9f1e-4814-84e6-e05eb425f67e,f7f99dab-9f1e-4814-84e6-e05eb425f67e,0,1,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,f26bdf61-8dc9-47e3-bc13-e6b7d8252ebd,0,1,10302ca9-850c-4561-a774-d099c20b1919,10302ca9-850c-4561-a774-d099c20b1919,0,1,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,c62c30d6-ffac-43e0-bb20-25fa8eeb62fd,0,1,d693bfcf-e117-445b-b0e1-d895bc5227c4,d693bfcf-e117-445b-b0e1-d895bc5227c4,0,1,cc9be940-db0c-4fad-9655-f5ce2b3ac57e,cc9be940-db0c-4fad-9655-f5ce2b3ac57e,0,1,211ca200-977e-4d48-a0c2-6b4e47bc1838,211ca200-977e-4d48-a0c2-6b4e47bc1838,0,1,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,0,1,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,0,1,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0508e7ab-3dd9-42b4-9542-089ce0656bbb,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,0,1,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,0,1,d12e7d62-9910-43e2-a3a8-39a723f6ff6e,d12e7d62-9910-43e2-a3a8-39a723f6ff6e,0,1,65bef8ef-f088-4bb6-abb4-c2a59f82f900,65bef8ef-f088-4bb6-abb4-c2a59f82f900,0,1,27a9d7f3-7f44-4268-931f-1308047ce462,27a9d7f3-7f44-4268-931f-1308047ce462,0,1,1504d923-a49f-4340-854f-6b79847bc8a1,1504d923-a49f-4340-854f-6b79847bc8a1,0,1,6e45158b-bace-44c9-81b2-cd96c605e575,6e45158b-bace-44c9-81b2-cd96c605e575,0,1,1be7114c-686a-422b-b759-2cc2dbf25c78,1be7114c-686a-422b-b759-2cc2dbf25c78,0,1,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,0,1,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,0,1,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,caf79125-bde8-4f52-8ad2-f915c7a884cc,caf79125-bde8-4f52-8ad2-f915c7a884cc,0,1,a9a0db31-6808-4790-be72-f345197b0c6e,a9a0db31-6808-4790-be72-f345197b0c6e,0,1,36554213-9af4-4fec-8944-35f50b306eda,36554213-9af4-4fec-8944-35f50b306eda,0,1,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,0,1,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,0,1,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,0,1,f561be64-9420-46ec-a4f7-9df0bea2e28b,f561be64-9420-46ec-a4f7-9df0bea2e28b,0,1,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,0,1,820383e1-9b95-4c0f-8464-722f1fe64ad5,820383e1-9b95-4c0f-8464-722f1fe64ad5,0,1,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,3d6cf2ab-29b2-45af-a6e2-8796284acf2d,0,1,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,0,1,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,0,1,958033a6-2a8e-473a-903b-34eee6507f5a,958033a6-2a8e-473a-903b-34eee6507f5a,0,1,a2704bf4-3c9b-470d-8be2-ac1335667557,a2704bf4-3c9b-470d-8be2-ac1335667557,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,0,1,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,0,1,3a46c243-bdf5-4429-895a-edeae1c0396e,3a46c243-bdf5-4429-895a-edeae1c0396e,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,0,1,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,0,1,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,0,1,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,0,1,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,0,1,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,0,1,832fe1ae-ba81-44b2-9474-a29f36c3b863,832fe1ae-ba81-44b2-9474-a29f36c3b863,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,0,1,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,0,1,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,0,1,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,a2b2f025-3108-4f13-9440-8909b5e685f5,a2b2f025-3108-4f13-9440-8909b5e685f5,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,0,1,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,0,1,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,0,1,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,0,1,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,0,1,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,066f9ab6-ff76-4426-bddd-702e9b16aa5b,066f9ab6-ff76-4426-bddd-702e9b16aa5b,0,1,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,0,1,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,b8d07e97-f67d-4669-972a-96ce0f5e8c0d,0,1,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,5c9c5f87-e85f-49b3-a7ca-01e2220d4f39,0,1,b953eafc-20be-4463-8c3e-903184e18402,b953eafc-20be-4463-8c3e-903184e18402,0,1,dcefdde9-645e-43c7-9244-384dadc75439,dcefdde9-645e-43c7-9244-384dadc75439,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,0,1,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,0,1,b98a3511-4a6d-4b95-b7f5-eb3043e2289e,b98a3511-4a6d-4b95-b7f5-eb3043e2289e,0,1,ac2d4f02-e893-4366-9702-369a11c5f9b8,ac2d4f02-e893-4366-9702-369a11c5f9b8,0,1,cac7aa71-b5ed-4b0a-87cd-67149b718538,cac7aa71-b5ed-4b0a-87cd-67149b718538,0,1,9bd0ffb9-5ba6-43d3-83fd-2b165dea85f6,9bd0ffb9-5ba6-43d3-83fd-2b165dea85f6,0,1,fa787228-aed5-4a16-b958-d102b78bf776,fa787228-aed5-4a16-b958-d102b78bf776,0,1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,d511a261-4f9b-44e8-b3a1-1e6d393ec6e1,0,1,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,0,1,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,0,1,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,0,1,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,0,1,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,0,1,be900d20-c02d-476d-9ede-2bc5303ef6cb,be900d20-c02d-476d-9ede-2bc5303ef6cb,0,1,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,ddce1d3c-4a23-4c92-8083-c395dd3b7f6d,0,1,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,0,1,0dbec644-cb98-4368-ab76-5997259cbce7,0dbec644-cb98-4368-ab76-5997259cbce7,0,1,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,c05a7d33-8a58-4b5f-a433-4ba54c88d5f4,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,0,1,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,0,1,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,0,1,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,0,1,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,0,1,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,0,1,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,0,1,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,0,1,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,0,1,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,0,1,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,0,1,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,966ecce5-ec91-4f8e-82b2-364b38eb7ff4,0,1,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,66a2df23-3a08-40d2-8e6c-2db10a3bca7a,0,1,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,5ee4b3ee-b795-48c1-9bad-f4010b559b0e,0,1,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,0,1,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,0,1,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,0,1,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,0,1,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,68f6d1b2-9c08-4b37-ba23-1e15539a9c35,68f6d1b2-9c08-4b37-ba23-1e15539a9c35,0,1,cb6df70e-c7cd-4343-bfa9-5bdb907b4580,cb6df70e-c7cd-4343-bfa9-5bdb907b4580,0,1,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,0,1,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,361271fa-2faa-497d-adfe-dea8b825405e,361271fa-2faa-497d-adfe-dea8b825405e,0,1,5dceae8b-1ff3-4760-a1c4-975a92be1023,5dceae8b-1ff3-4760-a1c4-975a92be1023,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,2c04d747-c363-4218-92c9-5c83393e928b,2c04d747-c363-4218-92c9-5c83393e928b,0,1,093b8255-7ee5-4463-bd20-542b1d63e799,093b8255-7ee5-4463-bd20-542b1d63e799,0,1,5afb95e0-51a3-4a0f-bea7-e06716421974,5afb95e0-51a3-4a0f-bea7-e06716421974,0,1,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,e2c0bc7a-7197-4972-b703-a2356d2a36ad,e2c0bc7a-7197-4972-b703-a2356d2a36ad,0,1,3dbfed86-380d-4fc5-80f8-64add08fa2d2,3dbfed86-380d-4fc5-80f8-64add08fa2d2,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,593be64c-6792-46d9-8618-84c50c9ad9e4,593be64c-6792-46d9-8618-84c50c9ad9e4,0,1,208d29cb-040f-4282-b8e8-dda8417b8e92,208d29cb-040f-4282-b8e8-dda8417b8e92,0,1,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,0,1,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,0,1,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0,1,ba5e7c41-0442-4f74-ba41-631d864eafb4,ba5e7c41-0442-4f74-ba41-631d864eafb4,0,1,3913f78f-ce34-4ae3-840a-ccdf06319cbb,3913f78f-ce34-4ae3-840a-ccdf06319cbb,0,1,104cf3e3-2104-4ac2-bdc6-792750a63ea0,104cf3e3-2104-4ac2-bdc6-792750a63ea0,0,1,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,0,1,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,0,1,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,0,1,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,0,1,e4294611-a770-4e67-9578-a1f370879476,e4294611-a770-4e67-9578-a1f370879476,0,1,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,0,1,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,0,1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,0,1,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,0,1,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,0,1,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,0,1,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,0,1,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,0,1,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,0,1,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,0,1,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,0,1,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,0,1,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,0,1,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,0,1,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,0,1,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,0,1,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,0,1,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,0,1,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,0,1,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,0,1,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,0,1,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,0,1,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,0,1,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,0,1,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,0,1,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,0,1,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,0,1,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,0,1,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,0,1,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,0,1,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,0,1,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,0,1,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,0,1,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,3f1578ba-3d55-4eff-bbdd-6329dd5060d5,0,1,7572095f-d755-4929-8862-071b1c34f758,7572095f-d755-4929-8862-071b1c34f758,0,1,4e36184e-d818-4f38-9257-6d91d9cc85ae,4e36184e-d818-4f38-9257-6d91d9cc85ae,0,1,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,afcba8a1-5d3e-4a76-9be9-5fbda20d55bd,0,1,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,cbdc8d7e-b685-4c8d-9f47-d8bfb08300d4,0,1,3893a258-a9c7-441a-b80c-1cc8c3f4735c,3893a258-a9c7-441a-b80c-1cc8c3f4735c,0,1,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,f9ad1ef3-7475-4d55-a1ef-eadceda9bf6b,0,1,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,0,1,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,0,1,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,6287eded-23d8-4b04-8415-1d9afa17713b,6287eded-23d8-4b04-8415-1d9afa17713b,0,1,8ce3513d-d086-46f4-81c3-1761594a64c5,8ce3513d-d086-46f4-81c3-1761594a64c5,0,1,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,0,1,704f07f2-0513-4a54-bb41-27ca3deb5834,704f07f2-0513-4a54-bb41-27ca3deb5834,0,1,0504ea28-d8ed-43ac-afa5-c3f32c21b385,0504ea28-d8ed-43ac-afa5-c3f32c21b385,0,1,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,0,1,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,0,1,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,0,1,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,0,1,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,0,1,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,0,1,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,0,1,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,0,1,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,0,1,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,0,1,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,0,1,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,0,1,60f30706-9919-4767-a17c-660754b9d542,60f30706-9919-4767-a17c-660754b9d542,0,1,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,7de19812-ed6c-41b5-82aa-b9a8e6d808f2,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,28dc34df-1daa-49a2-a12e-db91ee963459,28dc34df-1daa-49a2-a12e-db91ee963459,0,1,e590825f-10c6-4fdd-98cd-3da01da2ed4f,e590825f-10c6-4fdd-98cd-3da01da2ed4f,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,0,1,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,0,1,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,0,1,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,0,1,4e550d28-7174-412b-bfed-559a3dc753f6,4e550d28-7174-412b-bfed-559a3dc753f6,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,4aac940e-334b-42d2-bff1-0db9dfeff272,4aac940e-334b-42d2-bff1-0db9dfeff272,0,1,c33bcfcd-b5e2-46db-ba70-c373db613394,c33bcfcd-b5e2-46db-ba70-c373db613394,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,9376b18c-cffd-488b-8a1e-cca598f018bc,9376b18c-cffd-488b-8a1e-cca598f018bc,0,1,d78b5faf-b34b-4fa2-89a5-f4bc45203528,d78b5faf-b34b-4fa2-89a5-f4bc45203528,0,1,942a962a-bccb-42c0-b279-077a9b33c70a,942a962a-bccb-42c0-b279-077a9b33c70a,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,bb722783-1e0b-4543-b110-fdf69b4fe20e,bb722783-1e0b-4543-b110-fdf69b4fe20e,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,ffe7858a-6c92-4951-8dbf-327215894ace,ffe7858a-6c92-4951-8dbf-327215894ace,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,0,1,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,831f4abd-4f96-417f-a71a-9ff481c23922,831f4abd-4f96-417f-a71a-9ff481c23922,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,0,1,bc96a131-9e79-4ea2-9294-84b3bd1cc85f,bc96a131-9e79-4ea2-9294-84b3bd1cc85f,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,0,1,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,b95681f4-8f91-483e-a9c5-c8a21058679a,b95681f4-8f91-483e-a9c5-c8a21058679a,0,1,0a07041a-159c-4b15-9b5f-c7982a8a245a,0a07041a-159c-4b15-9b5f-c7982a8a245a,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,9059defa-047f-4dac-9749-3d0a6a77308a,9059defa-047f-4dac-9749-3d0a6a77308a,0,1,6010c27f-e857-4fc3-be13-1eea51f02ea7,6010c27f-e857-4fc3-be13-1eea51f02ea7,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,fbbb2449-9a07-4229-8ea5-bee0afab5f56,fbbb2449-9a07-4229-8ea5-bee0afab5f56,0,1,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,9fdddb51-0605-4f64-8d2e-aa7dbcd37262,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,9039f720-5728-4918-87d5-8b2d07cabcfd,9039f720-5728-4918-87d5-8b2d07cabcfd,0,1,f3e2f35e-53f8-44e8-b24c-8385ba2c6974,f3e2f35e-53f8-44e8-b24c-8385ba2c6974,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,3705a086-46e6-4090-a52a-535908eea8a5,3705a086-46e6-4090-a52a-535908eea8a5,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,cd8244d1-0996-40ea-9263-7179c1e8aa26,cd8244d1-0996-40ea-9263-7179c1e8aa26,0,1,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,0,1,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,0,1,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,0,1,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,0,1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,0,1,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,0,1,5462f1ab-2095-4515-875e-471900f05db9,5462f1ab-2095-4515-875e-471900f05db9,0,1,4f8e3f81-7445-4e68-b773-b477a05aa6b3,4f8e3f81-7445-4e68-b773-b477a05aa6b3,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,0,1,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,0,1,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,0,1,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,e7d0cc1f-f3ee-486e-b1f3-db8e6a6162cc,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,0,1,df48bfa3-5502-4a61-a79f-1dea043dac36,df48bfa3-5502-4a61-a79f-1dea043dac36,0,1,adee37e6-f087-422f-91b3-681f3d73189c,adee37e6-f087-422f-91b3-681f3d73189c,0,1,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,0,1,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,0,1,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,5b7eb8bc-ad6b-4191-a6c1-92561bb944f2,5b7eb8bc-ad6b-4191-a6c1-92561bb944f2,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,0,1,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,0,1,1f3057c2-135f-44b2-9f86-34481fbc5596,1f3057c2-135f-44b2-9f86-34481fbc5596,0,1,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,f8f0d92c-b7f0-496c-8d33-f8a57dfa16f2,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,f811b0b7-41b5-4591-9910-780f08780236,f811b0b7-41b5-4591-9910-780f08780236,0,1,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,0a5e38b7-2794-419f-8c29-076490c7b5ce,0a5e38b7-2794-419f-8c29-076490c7b5ce,0,1,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,0,1,230b80c7-620a-40d3-b473-b6289cfce8c0,230b80c7-620a-40d3-b473-b6289cfce8c0,0,1,6a03be63-e2b1-4f26-a7bf-1c9fe0d7a15f,6a03be63-e2b1-4f26-a7bf-1c9fe0d7a15f,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,e2c76c41-4c47-4588-a081-7bd81ac1698b,e2c76c41-4c47-4588-a081-7bd81ac1698b,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,0,1,138e674b-c9d4-4b89-b5ac-a50bd5313b98,138e674b-c9d4-4b89-b5ac-a50bd5313b98,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,f08afb10-3467-4af8-804c-ba7761f1dac9,f08afb10-3467-4af8-804c-ba7761f1dac9,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,0,1,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,b65afceb-a200-42d5-9948-831a5ad84b1b,b65afceb-a200-42d5-9948-831a5ad84b1b,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,0,1,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,0,1,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,0,1,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,0,1,538f0963-de90-4659-987d-df71a9586548,538f0963-de90-4659-987d-df71a9586548,0,1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,0,1,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,0,1,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,0,1,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,0,1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,5f6c6be3-058a-43c8-aa33-3e89af2ea3f1,0,1,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,0,1,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,0,1,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,79a0746b-4dbe-4068-8832-4d0da08d6fd3,79a0746b-4dbe-4068-8832-4d0da08d6fd3,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,0,1,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,0,1,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,0,1,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,0,1,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,0,1,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,3c4519ce-e6aa-43e3-87e5-fbd521fdc88e,3c4519ce-e6aa-43e3-87e5-fbd521fdc88e,0,1,892823b2-41ea-4c87-b0d7-e6fe5f190a1c,892823b2-41ea-4c87-b0d7-e6fe5f190a1c,0,1,05a1450f-7593-48d5-894d-b623e4458c57,05a1450f-7593-48d5-894d-b623e4458c57,0,1,bb8e10cb-6fa1-43f6-870f-0a26bede9d9c,bb8e10cb-6fa1-43f6-870f-0a26bede9d9c,0,1,02a0da6e-4045-49cf-bd14-ff22b534c7be,02a0da6e-4045-49cf-bd14-ff22b534c7be,0,1,726b9fed-3149-4697-8b0f-bc9051e939ae,726b9fed-3149-4697-8b0f-bc9051e939ae,0,1,e7050bde-5acb-4ad8-86f0-375739120d02,e7050bde-5acb-4ad8-86f0-375739120d02,0,1,c6b4c9b4-1064-49b0-bae4-b624582142c7,c6b4c9b4-1064-49b0-bae4-b624582142c7,0,1,11d5138e-df5b-4b0b-adf0-37c239d0de30,11d5138e-df5b-4b0b-adf0-37c239d0de30,0,1,f8b72dff-00a9-4b2f-b1a8-72d1f7670a88,f8b72dff-00a9-4b2f-b1a8-72d1f7670a88,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,0,1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,0,1,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,0,1,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,0,1,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,0,1,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,0,1,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,0,1,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,0,1,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,0,1,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,0,1,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,0,1,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,0,1,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,0,1,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,4cca4c80-62f5-4205-8196-78fcfa83de2f,4cca4c80-62f5-4205-8196-78fcfa83de2f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,2a365474-edba-4e3d-a69c-c856be0e4a4a,2a365474-edba-4e3d-a69c-c856be0e4a4a,0,1,c46fd680-efbe-49a8-91f0-73e36d791fa9,c46fd680-efbe-49a8-91f0-73e36d791fa9,0,1,6995567b-5a3c-4e03-9fb4-e22363ed6555,6995567b-5a3c-4e03-9fb4-e22363ed6555,0,1,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,0,1,375fd076-c54c-43c1-8d11-12607c0ce04e,375fd076-c54c-43c1-8d11-12607c0ce04e,0,1,3b9ded5a-f656-4a33-90f3-d7dbff234da9,3b9ded5a-f656-4a33-90f3-d7dbff234da9,0,1,eae94ac3-3aa3-49f0-940f-51c89fec66e2,eae94ac3-3aa3-49f0-940f-51c89fec66e2,0,1,a2b43b21-56e7-4644-9345-d4918a1dfe8e,a2b43b21-56e7-4644-9345-d4918a1dfe8e,0,1,6ef24453-482d-4a6e-a088-7a2faf8de1c8,6ef24453-482d-4a6e-a088-7a2faf8de1c8,0,1,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,0,1,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,0,1,f4cdb0ac-8993-4e8c-9d13-128710dec273,f4cdb0ac-8993-4e8c-9d13-128710dec273,0,1,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,0,1,b4f824aa-9b2f-40c9-a5f6-98d452019c38,b4f824aa-9b2f-40c9-a5f6-98d452019c38,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,0,1,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,0,1,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,0,1,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,0,1,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,0,1,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,0,1,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,0,1,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,0,1,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,0,1,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,0,1,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,0,1,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,0,1,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,0,1,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,0,1,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,0,1,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,0,1,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,0,1,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,0,1,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,0,1,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,0,1,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,0,1,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,0,1,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,0,1,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,0,1,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,0,1,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,0,1,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,0,1,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,0,1,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,0,1,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,0,1,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,0,1,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,0,1,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,0,1,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,ead0a902-bd87-4ee5-bfee-1a131dd28bd6,ead0a902-bd87-4ee5-bfee-1a131dd28bd6,0,1,d4ce8dd2-a391-49d0-9742-a6a6a07b1684,d4ce8dd2-a391-49d0-9742-a6a6a07b1684,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,0,1,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,0,1,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,0,1,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,0,1,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,0,1,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,0,1,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,0,1,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,0,1,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,0,1,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,0,1,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,0,1,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,0,1,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,778c28e6-4548-45f3-a1bc-cb1dbf0cb388,0,1,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,a2d6f2d9-0610-4ca9-bc15-58e341a049a4,0,1,4dbf114a-5402-40b0-9cab-19601aa8328e,4dbf114a-5402-40b0-9cab-19601aa8328e,0,1,a0856ca2-6a66-4108-b6d4-82443cdccca6,a0856ca2-6a66-4108-b6d4-82443cdccca6,0,1,378b0708-a0a1-4c82-b55a-796acb27e696,378b0708-a0a1-4c82-b55a-796acb27e696,0,1,8e462c0e-c67a-45e9-9871-1f976b01632d,8e462c0e-c67a-45e9-9871-1f976b01632d,0,1,c5335e1f-3e47-46b7-b695-0653f825d855,c5335e1f-3e47-46b7-b695-0653f825d855,0,1,d7faad11-1e35-460c-8943-49370f328c03,d7faad11-1e35-460c-8943-49370f328c03,0,1,e4726010-85c5-4ccc-b574-4b3b55f0d391,e4726010-85c5-4ccc-b574-4b3b55f0d391,0,1,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,5d6770f2-9b3d-45c7-9e34-4c8626e482cf,0,1,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,b01ace0e-7f21-4b6b-b751-074dcd9a8f54,0,1,1f4f839a-4e19-45b8-a988-13ee604c269c,1f4f839a-4e19-45b8-a988-13ee604c269c,0,1,b3aa97e1-baef-45f4-9179-052f35527a5e,b3aa97e1-baef-45f4-9179-052f35527a5e,0,1,d613941f-ed4c-4957-b469-ea6b0d2a121d,d613941f-ed4c-4957-b469-ea6b0d2a121d,0,1,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0d8d08e3-194f-416c-a1e0-aa92b40b7911,0,1,af0178fe-eb3a-485b-9acf-35c8702aa330,af0178fe-eb3a-485b-9acf-35c8702aa330,0,1,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,9e2c01b1-ccfe-4a68-a6af-8284e3e2396f,0,1,c513ceb0-0855-43ce-a311-c9bea88e2563,c513ceb0-0855-43ce-a311-c9bea88e2563,0,1,974bfc13-85c2-454a-b562-e72384eb4c31,974bfc13-85c2-454a-b562-e72384eb4c31,0,1,69cd6adc-b129-4fbc-804d-8d5aaef77280,69cd6adc-b129-4fbc-804d-8d5aaef77280,0,1,3431a3de-cb9d-46dc-b597-3203831796a9,3431a3de-cb9d-46dc-b597-3203831796a9,0,1,f3866271-04ed-4963-852e-cf41e9e18e1d,f3866271-04ed-4963-852e-cf41e9e18e1d,0,1,b77e5ec2-35cd-43ae-957f-af35214fa621,b77e5ec2-35cd-43ae-957f-af35214fa621,0,1,4a04d83d-cadd-4f36-9ec8-f926259c18ba,4a04d83d-cadd-4f36-9ec8-f926259c18ba,0,1,85e670c0-1616-4611-984c-3d40e890b2e9,85e670c0-1616-4611-984c-3d40e890b2e9,0,1,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,48ed25b0-afb9-414b-9a4e-8647fbdd95c3,0,1,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,1e3a1148-1e9c-47b0-8f3c-f218c3b0094f,0,1,f1693207-2637-412a-972f-2bc79b9c7fc8,f1693207-2637-412a-972f-2bc79b9c7fc8,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,0,1,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,0,1,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,0,1,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,0,1,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,0,1,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,0,1,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,0,1,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,0,1,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,0,1,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,0,1,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,0,1,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,0,1,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,0,1,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,0,1,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,0,1,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,0,1,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,0,1,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,0,1,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,0,1,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,0,1,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,0,1,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,0,1,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,0,1,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,0,1,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,0,1,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,0,1,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,0,1,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,0,1,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,0,1,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,0,1,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,0,1,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,0,1,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,0,1,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,0,1,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,0,1,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,0,1,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,0,1,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,0,1,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,0,1,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,0,1,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,0,1,52c016dd-f0df-4251-94c2-2e29ed5bc2d6,52c016dd-f0df-4251-94c2-2e29ed5bc2d6,0,1,c559ab26-8ed8-418e-9342-0559442dbcbf,c559ab26-8ed8-418e-9342-0559442dbcbf,0,1,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,0,1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,0,1,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,0,1,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,0,1,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,0,1,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,0,1,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,0,1,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,0,1,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,0,1,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,0,1,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,e6ae5164-fe3b-48fd-8180-f31941e35238,e6ae5164-fe3b-48fd-8180-f31941e35238,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,21d296a1-6809-4ff6-a4da-b455cad86cc2,21d296a1-6809-4ff6-a4da-b455cad86cc2,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,0,1,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,0,1,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,0,1,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,0,1,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,0,1,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,0,1,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,0,1,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,0,1,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,0,1,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,0,1,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,0,1,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,0,1,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,0,1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,0,1,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,0,1,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,0,1,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,0,1,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,0,1,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,0,1,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,0,1,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,0,1,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,0,1,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,0,1,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,0,1,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,0,1,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,0,1,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,0,1,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,0,1,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,0,1,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,0,1,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,0,1,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,0,1,3e3eb4de-4811-4282-917d-9b28e9b87a44,3e3eb4de-4811-4282-917d-9b28e9b87a44,0,1,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,88879822-e4a6-47e2-b849-2ec0783cda6b,88879822-e4a6-47e2-b849-2ec0783cda6b,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,0,1,80bfaf42-86b7-46b0-aae2-20e8d773b00e,80bfaf42-86b7-46b0-aae2-20e8d773b00e,0,1,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,0,1,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,0,1,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,0,1,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,2fac5a7b-cb3e-4442-892f-77f338035eeb,2fac5a7b-cb3e-4442-892f-77f338035eeb,0,1,f2076747-0bc4-41dd-bab9-33cec85111f0,f2076747-0bc4-41dd-bab9-33cec85111f0,0,1,9f74c0bb-b876-4a37-b954-c93898a21067,9f74c0bb-b876-4a37-b954-c93898a21067,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,b2265070-9cd3-4176-92c8-6d9f32c2ca84,b2265070-9cd3-4176-92c8-6d9f32c2ca84,0,1,b347e774-2261-4f76-9bdb-3c6736983589,b347e774-2261-4f76-9bdb-3c6736983589,0,1,be7e2715-1243-49a8-8c7c-55d632d3cf6c,be7e2715-1243-49a8-8c7c-55d632d3cf6c,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,c35904cf-4954-434e-96fd-5ca537a88c66,c35904cf-4954-434e-96fd-5ca537a88c66,0,1,5545798f-72dc-4630-a5ba-88039f4bfe3c,5545798f-72dc-4630-a5ba-88039f4bfe3c,0,1,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,c343495b-5947-4fe7-a94b-d1f2b2455b4f,c343495b-5947-4fe7-a94b-d1f2b2455b4f,0,1,fbce7316-bb9a-40c1-af3c-352f4b559ab6,fbce7316-bb9a-40c1-af3c-352f4b559ab6,0,1,a3721457-b33b-4742-b6e1-531af10969d1,a3721457-b33b-4742-b6e1-531af10969d1,0,1,9619a603-e578-4f30-bcc6-adfddfa915c0,9619a603-e578-4f30-bcc6-adfddfa915c0,0,1,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,0,1,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,0,1,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,0,1,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,0,1,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,0,1,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,0,1,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,0,1,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,0,1,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,0,1,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,0,1,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,0,1,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,0,1,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,0,1,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,0,1,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,0,1,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,0,1,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,0,1,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0,1,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,0,1,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,0,1,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,0,1,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0,1,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,0,1,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,0,1,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,0,1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0,1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,0,1,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,0,1,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,0,1,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,0,1,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,0,1,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,0,1,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,0,1,75b9ab9f-7cbb-4468-9570-39f719fd682b,75b9ab9f-7cbb-4468-9570-39f719fd682b,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,0,1,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,0,1,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,0,1,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,0,1,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,0,1,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,0,1,ff700f82-aba3-417c-be1b-b1b37ad98543,ff700f82-aba3-417c-be1b-b1b37ad98543,0,1,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,0,1,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,0,1,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,0,1,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,0,1,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,0,1,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,0,1,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,0,1,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,0,1,cbf6f37a-874a-434a-9c76-c357e6acf215,cbf6f37a-874a-434a-9c76-c357e6acf215,0,1,f188a333-9bd8-4c54-99b9-72a8333dc80e,f188a333-9bd8-4c54-99b9-72a8333dc80e,0,1,72edf604-8b73-49d2-a09d-a548c8c69596,72edf604-8b73-49d2-a09d-a548c8c69596,0,1,c6c33e0a-ebaa-4bb0-8a3a-3fe5632c6f47,c6c33e0a-ebaa-4bb0-8a3a-3fe5632c6f47,0,1,01e4c0ce-71ca-4421-a5a6-cd868bbd54fe,01e4c0ce-71ca-4421-a5a6-cd868bbd54fe,0,1,2a659a77-162f-4e1b-8339-695040f04559,2a659a77-162f-4e1b-8339-695040f04559,0,1,af969b02-2d8b-4e48-9dae-f50a332ac05b,af969b02-2d8b-4e48-9dae-f50a332ac05b,0,1,4540062e-7a7b-4114-b96b-2597545cc85c,4540062e-7a7b-4114-b96b-2597545cc85c,0,1,fc98b0f2-7cfb-4a04-8dca-f4a6bd08104f,fc98b0f2-7cfb-4a04-8dca-f4a6bd08104f,0,1,6d6a94e3-77df-4d87-b058-905023fbef4a,6d6a94e3-77df-4d87-b058-905023fbef4a,0,1,6d29693c-8379-46b8-806b-56311826810b,6d29693c-8379-46b8-806b-56311826810b,0,1,4d371b01-b215-4a39-a309-d6d3dc64d9ff,4d371b01-b215-4a39-a309-d6d3dc64d9ff,0,1,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,0,1,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,0,1,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,0,1,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,0,1,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0,1,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,0,1,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,0,1,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,0,1,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,0,1,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,0,1,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,0,1,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,0,1,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,0,1,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,0,1,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,0,1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,0,1,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,0,1,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,0,1,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,0,1,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,0,1,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,0,1,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,0,1,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,0,1,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,0,1,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,0,1,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,0,1,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,0,1,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,0,1,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,0,1,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,0,1,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,0,1,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,0,1,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0,1,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,0,1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,0,1,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,0,1,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,0,1,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,0,1,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,0,1,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,0,1,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,0,1,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,0,1,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,0,1,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,0,1,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,0,1,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,0,1,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,0,1,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,0,1,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,0,1,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,0,1,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,0,1,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,0,1,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,0,1,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,0,1,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,0,1,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,e85695f1-ec94-42ce-8f80-2bda4c90685b,e85695f1-ec94-42ce-8f80-2bda4c90685b,0,1,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,db15717d-1b6a-42fd-9b8f-959e1d5841e9,db15717d-1b6a-42fd-9b8f-959e1d5841e9,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,495ddb5f-f75d-46c9-b134-e925c814b890,495ddb5f-f75d-46c9-b134-e925c814b890,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,0,1,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,0,1,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,0,1,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,0,1,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,0,1,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,0,1,04d8ae53-67d9-40a5-b942-59fdebfd6ed7,04d8ae53-67d9-40a5-b942-59fdebfd6ed7,0,1,8c83a662-50e5-402c-913b-5e548b57201d,8c83a662-50e5-402c-913b-5e548b57201d,0,1,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,0,1,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,0,1,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,0,1,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,0,1,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,0,1,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,0,1,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,0,1,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,0,1,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,0,1,59364444-4564-42d9-8b94-01ed1b4a1204,59364444-4564-42d9-8b94-01ed1b4a1204,0,1,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,d6bd5459-6f95-4f9c-8d84-c67bdc716acf,0,1,4a2d2790-debf-4dc2-8216-878d8808d161,4a2d2790-debf-4dc2-8216-878d8808d161,0,1,836d0590-a8ee-40d0-a649-41cf4fae36a6,836d0590-a8ee-40d0-a649-41cf4fae36a6,0,1,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,6dcbb379-d4f5-418a-a3ab-bb7c0e169058,0,1,6ddbc80a-38c8-4eda-8cdf-6d64331818a3,6ddbc80a-38c8-4eda-8cdf-6d64331818a3,0,1,eda3c675-04b7-4c14-b78a-0caa22843ac0,eda3c675-04b7-4c14-b78a-0caa22843ac0,0,1,fc097ab3-8b3e-4b8f-9e51-d888735a69bd,fc097ab3-8b3e-4b8f-9e51-d888735a69bd,0,1,23c2c28b-867e-41d0-ba61-b9ee20fa38d1,23c2c28b-867e-41d0-ba61-b9ee20fa38d1,0,1,e5ddc65a-e886-4ed6-9598-bec30ddb7341,e5ddc65a-e886-4ed6-9598-bec30ddb7341,0,1,6cf48813-8097-44ae-8630-58f5b002ff31,6cf48813-8097-44ae-8630-58f5b002ff31,0,1,e0cee0ee-24b9-400a-95af-c61debec912b,e0cee0ee-24b9-400a-95af-c61debec912b,0,1,578bc873-5e23-4222-a655-7d653d761a4c,578bc873-5e23-4222-a655-7d653d761a4c,0,1,09bccd03-1492-4ebe-bfb4-8ace744d367f,09bccd03-1492-4ebe-bfb4-8ace744d367f,0,1,4d9294db-1abd-4e34-812f-fdcac0cf657d,4d9294db-1abd-4e34-812f-fdcac0cf657d,0,1,14bc3be4-3075-418d-90ec-be5d2686f875,14bc3be4-3075-418d-90ec-be5d2686f875,0,1,adffd81c-a566-4b4f-89d5-6abc705da36f,adffd81c-a566-4b4f-89d5-6abc705da36f,0,1,9f67e6d4-0b7c-4318-b127-7c8b7daf1d1b,9f67e6d4-0b7c-4318-b127-7c8b7daf1d1b,0,1,23ced9be-cb9d-451f-aea7-aa211054bd4d,23ced9be-cb9d-451f-aea7-aa211054bd4d,0,1,3991175c-0152-44c6-8e1c-4090d960050a,3991175c-0152-44c6-8e1c-4090d960050a,0,1,aa2760cf-b8cd-4eb3-b2f1-0e1fbdec09a8,aa2760cf-b8cd-4eb3-b2f1-0e1fbdec09a8,0,1,d1fabcdd-c072-4341-85d4-9a9ba168f301,d1fabcdd-c072-4341-85d4-9a9ba168f301,0,1,030a9c93-322b-4421-ad70-0acaa94870a2,030a9c93-322b-4421-ad70-0acaa94870a2,0,1,7121d241-9450-4bf2-b7ff-a0e963bbfd0a,7121d241-9450-4bf2-b7ff-a0e963bbfd0a,0,1,01a3ab71-56fa-4ddc-a5a3-9c923ee9c74a,01a3ab71-56fa-4ddc-a5a3-9c923ee9c74a,0,1,5c660f50-c63a-466d-bb32-de5699ad8a95,5c660f50-c63a-466d-bb32-de5699ad8a95,0,1,032587fa-2993-463c-af9f-bdd67f12604f,032587fa-2993-463c-af9f-bdd67f12604f,0,1,64d4aaed-e068-431b-bed0-faef7b5358f3,64d4aaed-e068-431b-bed0-faef7b5358f3,0,1,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,0,1,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,0,1,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,0,1,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,0,1,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,0,1,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,0,1,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,0,1,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,eb3d278b-e8fe-4d43-90a8-dd361009196f,eb3d278b-e8fe-4d43-90a8-dd361009196f,0,1,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,0,1,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,0,1,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,0,1,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,0,1,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,0,1,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,0,1,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,0,1,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,0,1,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,0,1,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,0,1,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,0,1,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,0,1,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,0,1,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,0,1,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,0,1,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,0,1,02e1c293-7302-4751-a248-4bbeed9cbad5,02e1c293-7302-4751-a248-4bbeed9cbad5,0,1,c946cde8-c0d7-4acb-a3be-8858e392fc40,c946cde8-c0d7-4acb-a3be-8858e392fc40,0,1,3a111e0d-6466-46fd-95a2-1798b6e51ba0,3a111e0d-6466-46fd-95a2-1798b6e51ba0,0,1,645edcb0-e358-4d32-a9a9-9534af0398ca,645edcb0-e358-4d32-a9a9-9534af0398ca,0,1,efa1b4e5-d16c-4921-a48a-fe700e39dc71,efa1b4e5-d16c-4921-a48a-fe700e39dc71,0,1,e93402db-e7dd-465e-8c62-2a41efd811b8,e93402db-e7dd-465e-8c62-2a41efd811b8,0,1,e0157f72-a362-4b9f-a272-68ca8078b91c,e0157f72-a362-4b9f-a272-68ca8078b91c,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,0,1,20f1114a-0b98-464f-aed8-80ce706b808e,20f1114a-0b98-464f-aed8-80ce706b808e,0,1,988b05ae-987a-4433-b446-bcc7bf5d9ea4,988b05ae-987a-4433-b446-bcc7bf5d9ea4,0,1,07e3de4e-28d9-48dc-9253-a2c39c34f827,07e3de4e-28d9-48dc-9253-a2c39c34f827,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,0,1,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,0,1,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,0,1,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,0,1,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,0,1,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,a75ed1c8-20c2-49a8-a730-22237ef91366,a75ed1c8-20c2-49a8-a730-22237ef91366,0,1,1c0ebdfd-1913-48fe-b80a-10c30201129b,1c0ebdfd-1913-48fe-b80a-10c30201129b,0,1,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,0,1,14025e38-09af-43b2-a49b-403e398a28ea,14025e38-09af-43b2-a49b-403e398a28ea,0,1,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,0,1,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,0,1,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,0,1,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,0,1,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,0,1,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,0,1,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,0,1,4d83ed3c-755c-4b9b-a2b8-17fa2c5c3a61,4d83ed3c-755c-4b9b-a2b8-17fa2c5c3a61,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,1a4991f8-7832-4ca9-8809-88a97de88749,1a4991f8-7832-4ca9-8809-88a97de88749,0,1,4f44c1c0-0480-415e-8058-41b28f2f43a0,4f44c1c0-0480-415e-8058-41b28f2f43a0,0,1,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,0,1,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,0,1,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,0,1,5d9863e6-aab7-4808-a516-8bc42dae5d01,5d9863e6-aab7-4808-a516-8bc42dae5d01,0,1,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,0,1,218302fa-674d-45e1-a7e2-2cce2d011342,218302fa-674d-45e1-a7e2-2cce2d011342,0,1,70264a0a-95c5-426f-a1bf-0f57b86d4030,70264a0a-95c5-426f-a1bf-0f57b86d4030,0,1,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,0,1,3291428e-6727-43cc-a1f8-c62f90320e90,3291428e-6727-43cc-a1f8-c62f90320e90,0,1,d867720c-c937-4689-b241-0afda05ef993,d867720c-c937-4689-b241-0afda05ef993,0,1,1390da8f-bac6-44ee-8413-1438f1f66074,1390da8f-bac6-44ee-8413-1438f1f66074,0,1,9616956d-a537-44fd-9d3f-5071fb5f4883,9616956d-a537-44fd-9d3f-5071fb5f4883,0,1,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,0,1,41d31712-6181-4cfe-9aa4-02b7a50150b0,41d31712-6181-4cfe-9aa4-02b7a50150b0,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,0,1,6b02f5e0-2b50-492d-ada4-d8fe43b0a748,6b02f5e0-2b50-492d-ada4-d8fe43b0a748,0,1,bbfc7a9c-ac22-47b1-bb18-74993b7ec5b0,bbfc7a9c-ac22-47b1-bb18-74993b7ec5b0,0,1,17dcf8bc-6830-4623-b1b2-9084c5495e20,17dcf8bc-6830-4623-b1b2-9084c5495e20,0,1,a3114825-cf97-4051-907d-9a31e1ac88eb,a3114825-cf97-4051-907d-9a31e1ac88eb,0,1,9886143e-70dd-4c1e-8b00-dc5587403246,9886143e-70dd-4c1e-8b00-dc5587403246,0,1,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,0,1,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,0,1,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,0,1,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,0,1,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,0,1,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,0,1,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,0,1,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,0,1,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,0,1,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,0,1,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,0,1,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,0,1,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,0,1,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,063ef64f-97ec-451e-8470-d3cdf6d08947,063ef64f-97ec-451e-8470-d3cdf6d08947,0,1,b76492d0-17f3-49c0-b23b-6a140122f20f,b76492d0-17f3-49c0-b23b-6a140122f20f,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,0,1,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,0,1,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,0,1,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,2d279292-f9d6-4d5a-aaeb-f82f6485ac54,0,1,f335aa38-4e9e-4653-9a76-b6d4ae178c93,f335aa38-4e9e-4653-9a76-b6d4ae178c93,0,1,a62894bc-fab4-4ed4-a57d-cbe725527198,a62894bc-fab4-4ed4-a57d-cbe725527198,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,8ff109f7-db33-4713-92bf-000f70d2014a,8ff109f7-db33-4713-92bf-000f70d2014a,0,1,97a65f49-845f-4eed-ae81-61266ed3e05b,97a65f49-845f-4eed-ae81-61266ed3e05b,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,0,1,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,0,1,46c3341c-352c-43fb-b338-15c8ad487fbf,46c3341c-352c-43fb-b338-15c8ad487fbf,0,1,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,a2a8b35e-04e5-4176-8d3b-2cd4dfb6d653,0,1,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,ea7ad7f5-e502-49a9-b4a6-e9adceb15057,0,1,f9450d6a-849c-4621-b528-9cafc4819b44,f9450d6a-849c-4621-b528-9cafc4819b44,0,1,5b7cac99-2fca-4dbb-8d49-b84f310a2496,5b7cac99-2fca-4dbb-8d49-b84f310a2496,0,1,bb11c22e-0fbd-4985-be67-0866df7f7e61,bb11c22e-0fbd-4985-be67-0866df7f7e61,0,1,a4673d5c-9dae-48f7-9c91-53c1302a266a,a4673d5c-9dae-48f7-9c91-53c1302a266a,0,1,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,1a2a0dd2-b0dc-41e1-8c4f-f275f025bad2,0,1,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,c255932e-fc34-402c-a6e9-2fda1ffbcdf2,0,1,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0d323d88-2823-493e-8c1e-b2b9f3dcdd3e,0,1,3f410b53-e762-41fe-9469-d538dfec3a9a,3f410b53-e762-41fe-9469-d538dfec3a9a,0,1,d08857b9-bc84-48f8-a7a1-09db961427c9,d08857b9-bc84-48f8-a7a1-09db961427c9,0,1,53ea8238-cae6-42c0-b92d-b4539c71c34a,53ea8238-cae6-42c0-b92d-b4539c71c34a,0,1,92ea60c0-1027-4337-9130-40028951f09b,92ea60c0-1027-4337-9130-40028951f09b,0,1,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,46710ce6-0f82-4c4c-91e8-f8ee726e00ce,0,1,d64f18a4-ff93-4284-9eca-085109eafd24,d64f18a4-ff93-4284-9eca-085109eafd24,0,1,bf428e7a-2970-4bab-8c8e-35ea16151c0e,bf428e7a-2970-4bab-8c8e-35ea16151c0e,0,1,232dbd5f-b7f1-4463-946c-b8fbf93ac466,232dbd5f-b7f1-4463-946c-b8fbf93ac466,0,1,a1a74b34-4174-4769-8f03-bd4a32e83418,a1a74b34-4174-4769-8f03-bd4a32e83418,0,1,84562495-1887-495e-8433-2649202684cc,84562495-1887-495e-8433-2649202684cc,0,1,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,32fd1fe7-34d3-43ed-baba-16ccd43aa25a,0,1,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,8f4d1259-abdc-4495-8e1e-8c8abcd336ca,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,0,1,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,0,1,4f1752ae-42d0-477d-854b-de143c428a85,4f1752ae-42d0-477d-854b-de143c428a85,0,1,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,554b1360-d3cb-48c5-bfa6-ebcba5c9afc9,554b1360-d3cb-48c5-bfa6-ebcba5c9afc9,0,1,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,0,1,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,0,1,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,0,1,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,0,1,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,0,1,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,0,1,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,0,1,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,0,1,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,0,1,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,c6bf0d10-5406-44e8-b3f3-74b7db2b71e6,0,1,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,8d653af4-ac00-4ca9-a9e6-4e1a888c6dfb,0,1,703453e8-cb49-491b-8e19-a17b89894d1e,703453e8-cb49-491b-8e19-a17b89894d1e,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b57eca91-04c2-4412-b5e2-f3c71f8ec602,b57eca91-04c2-4412-b5e2-f3c71f8ec602,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,0,1,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,0,1,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,0,1,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,0,1,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,0,1,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,0,1,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,0,1,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,0,1,c7b89521-f006-4749-b213-d7f7b0c8a004,c7b89521-f006-4749-b213-d7f7b0c8a004,0,1,401e8f3a-82a4-4f12-9ff1-27440d0a0ed6,401e8f3a-82a4-4f12-9ff1-27440d0a0ed6,0,1,7918eee4-7c9e-4a7a-808e-4ed0fd7bbe41,7918eee4-7c9e-4a7a-808e-4ed0fd7bbe41,0,1,81f8f558-c98b-4999-83f3-4ac06fb79dca,81f8f558-c98b-4999-83f3-4ac06fb79dca,0,1,7b8f082d-0a64-4fad-a33d-af7011a7f33d,7b8f082d-0a64-4fad-a33d-af7011a7f33d,0,1,49f61632-e899-425a-b16a-769f795bdf5f,49f61632-e899-425a-b16a-769f795bdf5f,0,1,c264a337-b573-408a-b77b-c6524ca1687b,c264a337-b573-408a-b77b-c6524ca1687b,0,1,92396874-0d4a-4d8e-b15b-01bc7504d5da,92396874-0d4a-4d8e-b15b-01bc7504d5da,0,1,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,0,1,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,0,1,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,0,1,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,0,1,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,0,1,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,0,1,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,0,1,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,0,1,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,0,1,f8d8f958-bf7b-4070-9b5a-8410b9786cbf,f8d8f958-bf7b-4070-9b5a-8410b9786cbf,0,1,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,0,1,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,0,1,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,0,1,1faacc47-680d-48ac-8933-daa76519f24f,1faacc47-680d-48ac-8933-daa76519f24f,0,1,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,0,1,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,0,1,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,0,1,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0,1,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,0,1,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,0,1,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,0,1,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,0,1,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,53a5804c-e0a1-4cee-9840-d2042aac856a,53a5804c-e0a1-4cee-9840-d2042aac856a,0,1,11653320-6fe9-4c1a-82d0-448a22aec167,11653320-6fe9-4c1a-82d0-448a22aec167,0,1,0a7bad82-68a3-42c3-91d6-d9eec1a03e69,0a7bad82-68a3-42c3-91d6-d9eec1a03e69,0,1,2a304dc5-31a0-46a9-bb63-7ebdbfb810c0,2a304dc5-31a0-46a9-bb63-7ebdbfb810c0,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,0,1,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,0,1,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0,1,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,0,1,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,0,1,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,0,1,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,0,1,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,0,1,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,0,1,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,0,1,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,0,1,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,0,1,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,0,1,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,0,1,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,0,1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,0,1,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,0,1,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,0,1,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0,1,4e892154-3279-492c-9eae-124304225c5d,4e892154-3279-492c-9eae-124304225c5d,0,1,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,53a6ffa4-31f8-4717-9ecc-2852e6e4cce9,0,1,575a135a-6ffd-4ae8-a597-7e584df9bac4,575a135a-6ffd-4ae8-a597-7e584df9bac4,0,1,693a7196-f525-4bd2-a417-e902977f21cb,693a7196-f525-4bd2-a417-e902977f21cb,0,1,9bb39184-08b7-440e-a8f8-5caf0083ba0f,9bb39184-08b7-440e-a8f8-5caf0083ba0f,0,1,d48e817e-f6a4-47e5-a052-35d09e066490,d48e817e-f6a4-47e5-a052-35d09e066490,0,1,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,0,1,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,0,1,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,0,1,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,0,1,b69b611d-18d3-4e78-8a09-f010bcf9c261,b69b611d-18d3-4e78-8a09-f010bcf9c261,0,1,e8e087c1-9131-4037-8562-8bce8c38f78c,e8e087c1-9131-4037-8562-8bce8c38f78c,0,1,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,3b1c9126-9b9f-4658-967c-cc9ef5b1000f,0,1,6adaef8e-82b6-4664-9748-4f41b170d91a,6adaef8e-82b6-4664-9748-4f41b170d91a,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,0,1,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,a27244c2-ac65-423f-afce-42efd288a83d,a27244c2-ac65-423f-afce-42efd288a83d,0,1,d4002184-8e08-4dcc-9070-62f595e82e23,d4002184-8e08-4dcc-9070-62f595e82e23,0,1,62163fda-1a09-4d4f-b290-76ff324042ab,62163fda-1a09-4d4f-b290-76ff324042ab,0,1,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,f2816dd2-47dd-41e8-9709-6dac1e4f4d21,0,1,6e6a1557-06fa-45c0-ad98-c43809553cd7,6e6a1557-06fa-45c0-ad98-c43809553cd7,0,1,179f7436-e328-42b8-9382-19ee6f10c768,179f7436-e328-42b8-9382-19ee6f10c768,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,aec7df6a-21a1-495d-b0a9-3769e1069888,aec7df6a-21a1-495d-b0a9-3769e1069888,0,1,463b98bf-b4d4-4edb-995d-0a75ff29b60d,463b98bf-b4d4-4edb-995d-0a75ff29b60d,0,1,317f88a7-12a4-4d21-b637-3050525406f4,317f88a7-12a4-4d21-b637-3050525406f4,0,1,2d9d2319-68fb-436d-b431-98858b88a75a,2d9d2319-68fb-436d-b431-98858b88a75a,0,1,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,0,1,a8e14d2e-911d-4096-9027-deb7a08838e0,a8e14d2e-911d-4096-9027-deb7a08838e0,0,1,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,6200ebce-5189-473a-9824-db733d78fcb2,6200ebce-5189-473a-9824-db733d78fcb2,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,0,1,600092a5-0fc4-4ea1-91bd-8fadcc137d8a,600092a5-0fc4-4ea1-91bd-8fadcc137d8a,0,1,c6e65fa9-3077-43c2-aff7-61cc05760fac,c6e65fa9-3077-43c2-aff7-61cc05760fac,0,1,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,0,1,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,0,1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,0,1,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,0,1,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,0,1,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,0,1,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,0,1,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,0,1,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,0,1,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,0,1,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,0,1,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,0,1,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,0,1,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,d671bea8-51b2-4a93-9594-3ae6bb1ace52,d671bea8-51b2-4a93-9594-3ae6bb1ace52,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo b/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo deleted file mode 100644 index fb7ccf9d6..000000000 --- a/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c6c2fa57-a3c2-4f2a-bc02-4436f570cc78"> - <producedTypes> - <managerType typeId="c0f55589-96d9-47ea-94dd-663d026efcff" valueTypeId="f24ef974-426b-4643-b9a3-a414da28c45b"/> - <valueManagerType typeId="42404bea-aef6-447f-b221-80a139ce689b" valueTypeId="18841c76-aed2-4bb0-99bd-f2e2608862d6"/> - <valueKeyType typeId="9c058201-de5c-5f5f-a174-4410de673a68" valueTypeId="a2f87ee1-ec18-5ef5-b1b6-6ae4bc76618d"/> - </producedTypes> - <name>АдресВебСервисаОбменаДанными</name> - <synonym> - <key>ru</key> - <value>Адрес веб-сервиса обмена данными</value> - </synonym> - <type> - <types>String</types> - <stringQualifiers/> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <dataLockControlMode>Managed</dataLockControlMode> -</mdclass:Constant> diff --git a/SSL/src/Constants/АдресПубликацииИнформационнойБазыВИнтернете/АдресПубликацииИнформационнойБазыВИнтернете.mdo b/SSL/src/Constants/АдресПубликацииИнформационнойБазыВИнтернете/АдресПубликацииИнформационнойБазыВИнтернете.mdo new file mode 100644 index 000000000..006b6aa63 --- /dev/null +++ b/SSL/src/Constants/АдресПубликацииИнформационнойБазыВИнтернете/АдресПубликацииИнформационнойБазыВИнтернете.mdo @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="16392cf6-dd83-4df0-a54b-6efc29778a89"> + <producedTypes> + <managerType typeId="14939209-1d43-4e41-a5f2-1c5409bc0e8e" valueTypeId="38fdf64a-a7ec-4134-94a2-de6c563b04e2"/> + <valueManagerType typeId="9276932e-0fbc-43b0-adef-6576700e7747" valueTypeId="aae57248-bf0c-42d1-9b3b-69323f095fc5"/> + <valueKeyType typeId="29986738-9dc2-54a8-b219-7d2e4fb0f994" valueTypeId="37fdb0ca-3664-5824-95b6-7a8e24bafd7f"/> + </producedTypes> + <name>АдресПубликацииИнформационнойБазыВИнтернете</name> + <synonym> + <key>ru</key> + <value>Адрес публикации информационной базы в интернете</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>250</length> + </stringQualifiers> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/АдресУправленияКонференцией/АдресУправленияКонференцией.mdo b/SSL/src/Constants/АдресУправленияКонференцией/АдресУправленияКонференцией.mdo new file mode 100644 index 000000000..63a251b3b --- /dev/null +++ b/SSL/src/Constants/АдресУправленияКонференцией/АдресУправленияКонференцией.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bc96a131-9e79-4ea2-9294-84b3bd1cc85f"> + <producedTypes> + <managerType typeId="8eb80b43-d8f9-4300-a43d-c2c8ad2337bd" valueTypeId="115a2cb1-de7d-441b-8f21-0de460e30a35"/> + <valueManagerType typeId="a7cfa4eb-26cb-4441-9ecf-dd7deefe1a33" valueTypeId="20bff7ad-d5d7-434e-aaf0-f769ed3ae69d"/> + <valueKeyType typeId="6a400ab7-51a0-550e-9b7a-576128e9ad81" valueTypeId="c5cc226b-5d8e-5aa0-b207-80b4b98eef05"/> + </producedTypes> + <name>АдресУправленияКонференцией</name> + <synonym> + <key>ru</key> + <value>Адрес управления конференцией</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ДатаПоследнегоСтартаКлиентскогоСеанса/ДатаПоследнегоСтартаКлиентскогоСеанса.mdo b/SSL/src/Constants/ДатаПоследнегоСтартаКлиентскогоСеанса/ДатаПоследнегоСтартаКлиентскогоСеанса.mdo new file mode 100644 index 000000000..bdf8d1ae8 --- /dev/null +++ b/SSL/src/Constants/ДатаПоследнегоСтартаКлиентскогоСеанса/ДатаПоследнегоСтартаКлиентскогоСеанса.mdo @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="405c52c4-25fe-45ff-abab-bf01041e768d"> + <producedTypes> + <managerType typeId="f446d597-aa36-4413-ad99-8a4543322d2b" valueTypeId="aa1f5f75-d5bb-4d5f-b08d-79db6afd4c35"/> + <valueManagerType typeId="4cb96295-4ce7-4150-b14f-89f4f93477e9" valueTypeId="dc023fe1-6d0a-405f-b431-3a76fca6668d"/> + <valueKeyType typeId="5c524220-09de-5f42-b744-affff8bb365b" valueTypeId="b57b2191-92ec-59df-b713-75b5782a0a73"/> + </producedTypes> + <name>ДатаПоследнегоСтартаКлиентскогоСеанса</name> + <synonym> + <key>ru</key> + <value>Дата последнего старта клиентского сеанса</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Универсальная дата последнего запуска клиентского сеанса</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ЗапуститьОбновлениеИнформационнойБазы/ЗапуститьОбновлениеИнформационнойБазы.mdo b/SSL/src/Constants/ЗагрузитьСообщениеОбменаДанными/ЗагрузитьСообщениеОбменаДанными.mdo similarity index 63% rename from SSL/src/Constants/ЗапуститьОбновлениеИнформационнойБазы/ЗапуститьОбновлениеИнформационнойБазы.mdo rename to SSL/src/Constants/ЗагрузитьСообщениеОбменаДанными/ЗагрузитьСообщениеОбменаДанными.mdo index 9c04b3a19..32f5e6f31 100644 --- a/SSL/src/Constants/ЗапуститьОбновлениеИнформационнойБазы/ЗапуститьОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/Constants/ЗагрузитьСообщениеОбменаДанными/ЗагрузитьСообщениеОбменаДанными.mdo @@ -5,14 +5,18 @@ <valueManagerType typeId="ed469db1-1658-47f7-a5e0-c1420e4fae24" valueTypeId="b34ce38b-71ca-4b7d-8805-67a7bbe61a30"/> <valueKeyType typeId="9756958d-5ca2-53ed-ae0d-1d372041b129" valueTypeId="d9a595ed-42a0-5519-9901-678a255561ae"/> </producedTypes> - <name>ЗапуститьОбновлениеИнформационнойБазы</name> + <name>ЗагрузитьСообщениеОбменаДанными</name> <synonym> <key>ru</key> - <value>Запустить обновление информационной базы</value> + <value>Загрузить сообщение обмена данными</value> </synonym> <type> <types>Boolean</types> </type> + <toolTip> + <key>ru</key> + <value>В подчиненном узле РИБ указывает необходимость загрузки сообщения обмена после получения изменений конфигурации, но до запуска обновления информационной базы.</value> + </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <dataLockControlMode>Managed</dataLockControlMode> diff --git a/SSL/src/Constants/ИмяПользователяКонференцииИнформационногоЦентра/ИмяПользователяКонференцииИнформационногоЦентра.mdo b/SSL/src/Constants/ИмяПользователяКонференцииИнформационногоЦентра/ИмяПользователяКонференцииИнформационногоЦентра.mdo new file mode 100644 index 000000000..84958dbc8 --- /dev/null +++ b/SSL/src/Constants/ИмяПользователяКонференцииИнформационногоЦентра/ИмяПользователяКонференцииИнформационногоЦентра.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="0a07041a-159c-4b15-9b5f-c7982a8a245a"> + <producedTypes> + <managerType typeId="66dbeb2c-08a1-4c8b-b494-a11ba48ae48b" valueTypeId="c8583ec6-5ccb-4854-8dc1-ac354a5dcd49"/> + <valueManagerType typeId="67317609-5747-4bff-bb67-81bce0673521" valueTypeId="b9b6feaa-7a48-4315-ab85-8d2e6aca055e"/> + <valueKeyType typeId="f20d7a36-1c3a-5134-a132-a7297fa311e4" valueTypeId="84c80cb2-4950-5f24-8fb4-27bc3ef05433"/> + </producedTypes> + <name>ИмяПользователяКонференцииИнформационногоЦентра</name> + <synonym> + <key>ru</key> + <value>Имя пользователя конференции информационного центра</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index 805bdd842..422ae5fe9 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -16,8 +16,8 @@ Если ЗначениеИзменено Тогда ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(); Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); - Модуль.ОбновитьРолиПользователей(Тип("СправочникСсылка.ВнешниеПользователи")); + МодульУправлениеДоступом = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ОбновитьРолиПользователей(Тип("СправочникСсылка.ВнешниеПользователи")); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl index 6c6cf9d16..69568eb2b 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -9,6 +9,14 @@ Процедура ПриЗаписи(Отказ) + // Следующие константы взаимоисключающие, используются в отдельных функциональных опциях. + // + // Константа.ЭтоАвтономноеРабочееМесто -> ФО.РаботаВАвтономномРежиме + // Константа.НеИспользоватьРазделениеПоОбластямДанных -> ФО.РаботаВЛокальномРежиме + // Константа.ИспользоватьРазделениеПоОбластямДанных -> ФО.РаботаВМоделиСервиса + // + // Имена констант сохранены для обратной совместимости. + Если Значение Тогда Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); diff --git a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl index f8c169f99..058a5c4eb 100644 --- a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl @@ -225,8 +225,8 @@ Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервисаПовтИсп"); - МодельДанных = Модуль.ПолучитьМодельДанныхОбласти(); + МодульРаботаВМоделиСервисаПовтИсп = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РаботаВМоделиСервисаПовтИсп"); + МодельДанных = МодульРаботаВМоделиСервисаПовтИсп.ПолучитьМодельДанныхОбласти(); РазделенныеОбъектыМетаданных = Новый Соответствие(); Для Каждого ЭлементМоделиДанных Из МодельДанных Цикл diff --git a/SSL/src/Constants/ПарольПользователяКонференцииИнформационногоЦентра/ПарольПользователяКонференцииИнформационногоЦентра.mdo b/SSL/src/Constants/ПарольПользователяКонференцииИнформационногоЦентра/ПарольПользователяКонференцииИнформационногоЦентра.mdo new file mode 100644 index 000000000..fe7513317 --- /dev/null +++ b/SSL/src/Constants/ПарольПользователяКонференцииИнформационногоЦентра/ПарольПользователяКонференцииИнформационногоЦентра.mdo @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4f8e3f81-7445-4e68-b773-b477a05aa6b3"> + <producedTypes> + <managerType typeId="943feb81-3b14-4412-93cc-1488de2661d2" valueTypeId="5807e76f-1cad-4d5d-b44a-675c6f1a2ba1"/> + <valueManagerType typeId="8269bd64-8bcb-40cc-8866-91f4828723aa" valueTypeId="d1f11e1b-ed0a-4922-83ce-731d6da1738e"/> + <valueKeyType typeId="72d45d3a-e0a7-518d-a751-01d23666386d" valueTypeId="bf7170a3-5a96-5ecb-a0f2-a59ec84a06ff"/> + </producedTypes> + <name>ПарольПользователяКонференцииИнформационногоЦентра</name> + <synonym> + <key>ru</key> + <value>Пароль пользователя конференции информационного центра</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <passwordMode>true</passwordMode> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ВыполнитьЗагрузкуПараметровРаботыПрограммы/ВыполнитьЗагрузкуПараметровРаботыПрограммы.mdo b/SSL/src/Constants/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.mdo similarity index 78% rename from SSL/src/Constants/ВыполнитьЗагрузкуПараметровРаботыПрограммы/ВыполнитьЗагрузкуПараметровРаботыПрограммы.mdo rename to SSL/src/Constants/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.mdo index e5fc1047d..4f98dfcc9 100644 --- a/SSL/src/Constants/ВыполнитьЗагрузкуПараметровРаботыПрограммы/ВыполнитьЗагрузкуПараметровРаботыПрограммы.mdo +++ b/SSL/src/Constants/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском/ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.mdo @@ -5,10 +5,10 @@ <valueManagerType typeId="48071d35-f608-4b0e-b31f-eb160192ad73" valueTypeId="e5eff087-4e4c-4eb1-bd6c-464762bfe275"/> <valueKeyType typeId="20216445-a815-5149-ad7b-37aecca0eae1" valueTypeId="53a40aec-62e0-5a5c-a322-cf0071277703"/> </producedTypes> - <name>ВыполнитьЗагрузкуПараметровРаботыПрограммы</name> + <name>ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском</name> <synonym> <key>ru</key> - <value>Выполнить загрузку параметров работы программы</value> + <value>Повторить загрузку сообщения обмена данными перед запуском</value> </synonym> <type> <types>Boolean</types> diff --git a/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo b/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo index 089f055a7..1e49c3b13 100644 --- a/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo +++ b/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo @@ -8,7 +8,7 @@ <name>ПрефиксУзлаРаспределеннойИнформационнойБазы</name> <synonym> <key>ru</key> - <value>Префикс узла распределенной информационной базы</value> + <value>Префикс информационной базы</value> </synonym> <type> <types>String</types> diff --git a/SSL/src/Constants/РазделыОписанияИзмененийСистемы/РазделыОписанияИзмененийСистемы.mdo b/SSL/src/Constants/РазделыОписанияИзмененийСистемы/РазделыОписанияИзмененийСистемы.mdo index 0646c2f7f..7043f78ef 100644 --- a/SSL/src/Constants/РазделыОписанияИзмененийСистемы/РазделыОписанияИзмененийСистемы.mdo +++ b/SSL/src/Constants/РазделыОписанияИзмененийСистемы/РазделыОписанияИзмененийСистемы.mdo @@ -13,7 +13,6 @@ <type> <types>ValueStorage</types> </type> - <useStandardCommands>true</useStandardCommands> <toolTip> <key>ru</key> <value>Список всех версий, для которых есть описания изменений системы</value> diff --git a/SSL/src/Constants/СведенияОбОбновленииИБ/СведенияОбОбновленииИБ.mdo b/SSL/src/Constants/СведенияОбОбновленииИБ/СведенияОбОбновленииИБ.mdo new file mode 100644 index 000000000..1d4772aaa --- /dev/null +++ b/SSL/src/Constants/СведенияОбОбновленииИБ/СведенияОбОбновленииИБ.mdo @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ce6d1259-af90-482b-b19a-405512321bd9"> + <producedTypes> + <managerType typeId="3b532f50-1b1b-4f77-afe0-11d49576a526" valueTypeId="6f6253f4-07f0-4e64-a44f-b653c952e0d1"/> + <valueManagerType typeId="8e708227-a36d-4393-93bb-94123c92b084" valueTypeId="7d34e6e3-1b5e-415d-8d79-39b4738ca3eb"/> + <valueKeyType typeId="9e9c103a-515c-5b07-9d09-fba1b7f3b48f" valueTypeId="84510191-1507-5fe7-a3c4-6cd054af5aeb"/> + </producedTypes> + <name>СведенияОбОбновленииИБ</name> + <synonym> + <key>ru</key> + <value>Сведения об обновлении ИБ</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <toolTip> + <key>ru</key> + <value>Содержит информацию об основном и отложенном циклах обновления.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo b/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo new file mode 100644 index 000000000..7fcac80da --- /dev/null +++ b/SSL/src/Constants/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы/УдалитьПоказыватьКомандуДополнительныеПечатныеФормы.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="5b7eb8bc-ad6b-4191-a6c1-92561bb944f2"> + <producedTypes> + <managerType typeId="a7fefa97-851f-45e3-945d-a03569a6ad38" valueTypeId="fa05ef78-decb-45aa-9fdc-55530516be10"/> + <valueManagerType typeId="40a95a42-aa47-44ab-ab27-eba39e5b24b5" valueTypeId="fc051903-1f61-40a2-913d-bded4722ff59"/> + <valueKeyType typeId="dfb8f6bd-c758-573d-adbd-a48be31460fe" valueTypeId="0961156e-a2f6-5f3a-8cde-e29f4d84fcc9"/> + </producedTypes> + <name>УдалитьПоказыватьКомандуДополнительныеПечатныеФормы</name> + <synonym> + <key>ru</key> + <value>Удалить показывать команду дополнительные печатные формы</value> + </synonym> + <comment>Переназначить ФО.ИспользоватьДополнительныеПечатныеФормы на эту константу после окончательного перевода команд печати на версию 2.1.4</comment> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 04acdb673..acdd68291 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -3,11 +3,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + ВключеноИзвлечениеТекста = Ложь; ИнтервалВремениВыполнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения"); @@ -34,11 +37,18 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) -#Если ВебКлиент Тогда - Отказ = Истина; - Предупреждение(НСтр("ru = 'В Веб-клиенте извлечение текстов не поддерживается.'")); - Возврат; -#КонецЕсли + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'Извлечение текстов не поддерживается в Веб-клиенте.'")); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Извлечение текстов не поддерживается в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + Возврат; + КонецЕсли; КонецПроцедуры @@ -119,7 +129,8 @@ Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -152,7 +163,7 @@ #Если НЕ ВебКлиент Тогда ИзвлечениеТекстовКлиент(); -#КонецЕсли +#КонецЕсли КонецПроцедуры diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index 3ef2d4f87..31236844f 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html @@ -1,3 +1,3 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows нужно запустить тонкий или толстый клиент, и на нем открыть обработку «Автоматическое извлечение текстов». Эта обработка в автоматическом режиме будет извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.</p> <p>См. также: <a href="v8help://frame/form_common">Общая информация о формах</a>.</p></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 ed2795b86..37d2b3805 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl @@ -4,27 +4,37 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Или ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + ИнтервалВремениВыполнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения"); Если ИнтервалВремениВыполнения = 0 Тогда ИнтервалВремениВыполнения = 60; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); - КонецЕсли; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) -#Если ВебКлиент Тогда - Отказ = Истина; - Предупреждение(НСтр("ru = 'В Веб-клиенте извлечение текстов не поддерживается.'")); - Возврат; -#КонецЕсли + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'Извлечение текстов не поддерживается в Веб-клиенте.'")); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Извлечение текстов не поддерживается в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + Возврат; + КонецЕсли; // Здесь ТекущаяДата не пишется в базу, а используется только на клиенте // в информационных целях, поэтому заменять на ТекущаяДатаСеанса не надо. @@ -71,7 +81,8 @@ Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Извлечение текста'"), + НСтр("ru = 'Файлы.Извлечение текста'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , @@ -288,7 +299,7 @@ // если превысили нужное количество результатов, выходим Если КоличествоФайловВПорции <> 0 И Результат.Количество() >= КоличествоФайловВПорции Тогда Прервать; - КонецЕсли; + КонецЕсли; КонецЦикла; diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html index 3ef2d4f87..31236844f 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html @@ -1,3 +1,3 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows нужно запустить тонкий или толстый клиент, и на нем открыть обработку «Автоматическое извлечение текстов». Эта обработка в автоматическом режиме будет извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.</p> <p>См. также: <a href="v8help://frame/form_common">Общая информация о формах</a>.</p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form index 22ec0955e..ebb85686e 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form @@ -288,6 +288,10 @@ <items xsi:type="form:FormField"> <name>СписокПользователейРазделениеДанных</name> <id>34</id> + <title> + <key>ru</key> + <value>Область данных</value> + true true @@ -881,6 +885,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel Ignore @@ -888,7 +896,7 @@ OK Retry Yes - DontBlock + LockOwner true true true @@ -1031,7 +1039,7 @@ Number - 7 + 8 true @@ -1199,6 +1207,23 @@ true + + ОповещатьОЗакрытии + + <key>ru</key> + <value>Оповещать о закрытии</value> + + 7 + + Boolean + + + true + + + true + + ЖурналРегистрации diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html index 6b3b3bc76..ade7739ad 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Активные пользователи - это пользователи, которые сейчас работают с информационной базой. В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.</p> <p>Для анализа работы пользователя можно перейти к <a href="DataProcessor.ЖурналРегистрации.Form.ЖурналРегистрации/Help">журналу регистрации</a>, выбрав пользователя в списке и выполнив команду "Журнал регистрации".</p> <p>В клиент-серверном режиме работы также доступна команда "Завершить сеанс". Для того чтобы ею воспользоваться, может потребовать настроить дополнительные параметры подключения к серверу 1С:Предприятие (см. команду "Параметры администрирования информационной базы" в меню "Все действия").</p></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 ce2641b0c..f003b023a 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl @@ -8,6 +8,8 @@ Возврат; КонецЕсли; + Параметры.Свойство("ОповещатьОЗакрытии", ОповещатьОЗакрытии); + НомерСеансаИнформационнойБазы = НомерСеансаИнформационнойБазы(); УсловноеОформление.Элементы[0].Отбор.Элементы[0].ПравоеЗначение = НомерСеансаИнформационнойБазы; @@ -25,12 +27,23 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Элементы.СписокПользователейРазделениеДанных.Видимость = Ложь; + КонецЕсли; + ИмяКолонкиСортировки = "НачалоРаботы"; НаправлениеСортировки = "Возр"; ЗаполнитьСписокПользователей(); КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + Если ОповещатьОЗакрытии Тогда + ОповещатьОЗакрытии = Ложь; + ОповеститьОВыборе(Неопределено); + КонецЕсли; +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -140,7 +153,7 @@ ЗаполнитьСписокПользователей(); - // Восстанавливаем текущую строку по запомненному сеансу + // Восстанавливаем текущую строку по сохраненному сеансу Если ТекущийСеанс <> Неопределено Тогда СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Сеанс", ТекущийСеанс); @@ -279,7 +292,7 @@ ШаблонТекстаЗапроса, "Справочник.Пользователи"); - ТекстЗапросаПоВнешниемПользователям = + ТекстЗапросаПоВнешнимПользователям = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонТекстаЗапроса, "Справочник.ВнешниеПользователи"); @@ -294,7 +307,7 @@ Возврат Выборка.Ссылка; КонецЕсли; - Запрос.Текст = ТекстЗапросаПоВнешниемПользователям; + Запрос.Текст = ТекстЗапросаПоВнешнимПользователям; Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index d68d359de..c75b8b651 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Список содержит список пользователей, работающих в данный момент времени в системе. </p> <p>Для удобства просмотра списка можно использовать сортировку по любой колонке. Полужирным шрифтом выделена строка, соответствующая тому сеансу работы пользователя, из которого открыт список активных пользователей. </p> <p>С помощью команд меню <strong>Все действия</strong> можно настроить форму и вывести данные списка в табличный и текстовый документ. По команде <strong>Журнал регистрации</strong> можно перейти к <a href="DataProcessor.ЖурналРегистрации/Help">журналу регистрации</a> с установленным фильтром по выбранному пользователю. </p> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl index 7762f90c5..85c874e68 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Module.bsl @@ -4,6 +4,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + АктивныеПользователиШаблон = НСтр("ru = 'Активные пользователи (%1)'"); КоличествоАктивныхСеансов = ПолучитьСеансыИнформационнойБазы().Количество(); @@ -142,7 +146,7 @@ Попытка РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеОписаниеОшибки(ОписаниеОшибки()), , ); diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form index ec3b8b2e2..1e133d1f2 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form @@ -580,7 +580,6 @@ <contextMenu> <name>КодДляРазблокировкиКонтекстноеМеню</name> <id>11</id> - <autoFill>true</autoFill> </contextMenu> <type>InputField</type> <editMode>Enter</editMode> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl index a326ced83..61b39ae1a 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl @@ -17,6 +17,12 @@ Элементы.ГруппаПараметры.Видимость = Ложь; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Элементы.КодДляРазблокировки.Видимость = Ложь; + + КонецЕсли; + ПолучитьПараметрыБлокировки(); УстановитьНачальныйСтатусЗапретаРаботыПользователей(); ОбновитьСтраницуНастройки(); @@ -253,7 +259,7 @@ РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); Элементы.ГруппаОшибка.Видимость = Ложь; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда @@ -275,7 +281,7 @@ Попытка РеквизитФормыВЗначение("Объект").ОтменитьБлокировку(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда @@ -331,7 +337,7 @@ Обработка.ПолучитьПараметрыБлокировки(); Элементы.ГруппаОшибка.Видимость = Ложь; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + ЗаписьЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index 6d86e738f..ecefaaf99 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Имеется возможность временно запретить работу пользователей с программой, предварительно завершив работу всех активных пользователей (включая пользователя, инициировавшего блокировку). Эта возможность полезна, например, когда для выполнения административных действий требуется, чтобы текущие пользователи завершили свои сеансы работы, и в то же время новые пользователи не могли войти в программу.</p> <p class="Usual">При установке блокировки можно задать следующие параметры: </p> <ul><li>Период (время) начала действия и окончания действия блокировки; @@ -9,7 +9,7 @@ <p class="Usual">Для снятия блокировки до истечения срока блокировки нужно:</p> <ul><li> <p class="Usual">войти в приложение и открыть эту форму, выполнив команду "Снять блокировку";</p> -</li><li>открыть приложение, используя параметры запуска "/С РазрешитьРаботуПользователей" и "/UC" с кодом разрешения доступа, который был указан при установке блокировки.</li></ul><h3>Действия по завершению работы в клиентском приложении</h3> +</li><li>открыть приложение, используя параметры запуска "/С РазрешитьРаботуПользователей" и "/UC" с кодом разрешения доступа, который был указан при установке блокировки.<br>Примечание: запуск клиентского приложения с параметром "РазрешитьРаботуПользователей" предназначен только для снятия блокировки и не предназначен для работы с программой. </li></ul><h3>Действия по завершению работы в клиентском приложении</h3> <li> <p class="Usual">Примерно за 15 минут до начала действия блокировки, всем активным пользователем выдаются предупреждения о планируемом времени начала блокировки соединений и заданный текст сообщения блокировки.</p> </li><li> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo index 64fbac8c2..369322bd3 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo @@ -113,7 +113,7 @@ </type> <toolTip> <key>ru</key> - <value>Причина блокировки, которая выводится пользователю при попытке войти в заблокированную ИБ</value> + <value>Сообщение о причине блокировки, которое выводится пользователю при попытке войти в заблокированную ИБ</value> </toolTip> <multiLine>true</multiLine> <minValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index a54298016..3fe857698 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -21,13 +21,17 @@ <dataPath xsi:type="form:DataPath"> <segments>Страна</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Страна адреса</value> + </toolTip> <handlers> <event>OnChange</event> <name>СтранаПриИзменении</name> </handlers> <extendedTooltip> <name>СтранаРасширеннаяПодсказка</name> - <id>103</id> + <id>107</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -47,18 +51,46 @@ <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> + <handlers> + <event>TextEditEnd</event> + <name>СтранаОкончаниеВводаТекста</name> + </handlers> + <handlers> + <event>ChoiceProcessing</event> + <name>СтранаОбработкаВыбора</name> + </handlers> <width>15</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> + <choiceButton>true</choiceButton> <openButton>false</openButton> - <chooseType>true</chooseType> <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> <backColor xsi:type="core:ColorRef"> <color>Style.ФонУправляющегоПоля</color> </backColor> @@ -67,19 +99,19 @@ </items> <items xsi:type="form:FormField"> <name>КодСтраны</name> - <id>42</id> + <id>103</id> <visible>true</visible> <enabled>false</enabled> <userVisible> <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Страна.Code</segments> + <segments>КодСтраны</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> <name>КодСтраныРасширеннаяПодсказка</name> - <id>105</id> + <id>109</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -89,7 +121,7 @@ </extendedTooltip> <contextMenu> <name>КодСтраныКонтекстноеМеню</name> - <id>43</id> + <id>104</id> <autoFill>true</autoFill> </contextMenu> <type>LabelField</type> @@ -98,8 +130,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:LabelFieldExtInfo"> + <width>3</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>false</horizontalStretch> <font xsi:type="core:FontRef"> <font>System.DefaultGUIFont</font> <bold>true</bold> @@ -124,7 +158,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСтраныРасширеннаяПодсказка</name> - <id>102</id> + <id>106</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -155,13 +189,17 @@ <dataPath xsi:type="form:DataPath"> <segments>Индекс</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Почтовый индекс российского адреса</value> + </toolTip> <handlers> <event>OnChange</event> <name>ИндексПриИзменении</name> </handlers> <extendedTooltip> <name>ИндексРасширеннаяПодсказка</name> - <id>108</id> + <id>112</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -205,7 +243,7 @@ </toolTip> <extendedTooltip> <name>ГруппаИндексаРасширеннаяПодсказка</name> - <id>107</id> + <id>111</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -239,7 +277,7 @@ <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>СтранаАдресаРасширеннаяПодсказка</name> - <id>101</id> + <id>105</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -275,13 +313,17 @@ <segments>НаселенныйПункт</segments> </dataPath> <titleLocation>Top</titleLocation> + <toolTip> + <key>ru</key> + <value>Город, населенный пункт адреса</value> + </toolTip> <handlers> <event>OnChange</event> <name>НаселенныйПунктПриИзменении</name> </handlers> <extendedTooltip> <name>НаселенныйПунктРасширеннаяПодсказка</name> - <id>112</id> + <id>116</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -338,13 +380,17 @@ <segments>Улица</segments> </dataPath> <titleLocation>Top</titleLocation> + <toolTip> + <key>ru</key> + <value>Улица адреса</value> + </toolTip> <handlers> <event>OnChange</event> <name>УлицаПриИзменении</name> </handlers> <extendedTooltip> <name>УлицаРасширеннаяПодсказка</name> - <id>114</id> + <id>118</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -404,13 +450,17 @@ <segments>ТипДома</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Тип дома: дом, владение и т. п.</value> + </toolTip> <handlers> <event>OnChange</event> <name>ТипДомаПриИзменении</name> </handlers> <extendedTooltip> <name>ТипДомаРасширеннаяПодсказка</name> - <id>117</id> + <id>121</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -452,13 +502,17 @@ <segments>Дом</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Номер дома, владения</value> + </toolTip> <handlers> <event>OnChange</event> <name>ДомПриИзменении</name> </handlers> <extendedTooltip> <name>ДомРасширеннаяПодсказка</name> - <id>119</id> + <id>123</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -505,7 +559,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаДомРасширеннаяПодсказка</name> - <id>116</id> + <id>120</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -540,13 +594,17 @@ <segments>ТипСтроения</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Дополнительный тип здания: корпус, строение и т. п.</value> + </toolTip> <handlers> <event>OnChange</event> <name>ТипСтроенияПриИзменении</name> </handlers> <extendedTooltip> <name>ТипСтроенияРасширеннаяПодсказка</name> - <id>123</id> + <id>127</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -588,13 +646,17 @@ <segments>Строение</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Номер здания</value> + </toolTip> <handlers> <event>OnChange</event> <name>СтроениеПриИзменении</name> </handlers> <extendedTooltip> <name>СтроениеРасширеннаяПодсказка</name> - <id>125</id> + <id>129</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -641,7 +703,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаСтроениеНачальноеРасширеннаяПодсказка</name> - <id>122</id> + <id>126</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -677,7 +739,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаСтроенияДополнительноРасширеннаяПодсказка</name> - <id>127</id> + <id>131</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -712,7 +774,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаСтроенияРасширеннаяПодсказка</name> - <id>121</id> + <id>125</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -748,13 +810,17 @@ <segments>ТипПомещения</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Тип помещения: квартира, офис и т. п.</value> + </toolTip> <handlers> <event>OnChange</event> <name>ТипПомещенияПриИзменении</name> </handlers> <extendedTooltip> <name>ТипПомещенияРасширеннаяПодсказка</name> - <id>130</id> + <id>134</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -796,13 +862,17 @@ <segments>Помещение</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Значение помещения</value> + </toolTip> <handlers> <event>OnChange</event> <name>ПомещениеПриИзменении</name> </handlers> <extendedTooltip> <name>ПомещениеРасширеннаяПодсказка</name> - <id>132</id> + <id>136</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -847,7 +917,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаПомещениеНачальноеРасширеннаяПодсказка</name> - <id>129</id> + <id>133</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -883,7 +953,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаПомещенияДополнительноРасширеннаяПодсказка</name> - <id>134</id> + <id>138</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -918,7 +988,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаПомещениеРасширеннаяПодсказка</name> - <id>128</id> + <id>132</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -946,7 +1016,7 @@ </userVisible> <extendedTooltip> <name>ДобавитьОбъектРасширеннаяПодсказка</name> - <id>135</id> + <id>139</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -979,9 +1049,17 @@ </dataPath> <skipOnInput>true</skipOnInput> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Представление адреса</value> + </toolTip> + <handlers> + <event>OnChange</event> + <name>ПредставлениеАдресаПриИзменении</name> + </handlers> <extendedTooltip> <name>ПредставлениеАдресаРасширеннаяПодсказка</name> - <id>137</id> + <id>141</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -995,7 +1073,6 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> - <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -1003,6 +1080,7 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> <wrap>true</wrap> <multiLine>true</multiLine> <chooseType>true</chooseType> @@ -1030,7 +1108,7 @@ <verticalStretch>true</verticalStretch> <extendedTooltip> <name>ГруппаПредставленияРасширеннаяПодсказка</name> - <id>136</id> + <id>140</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1064,7 +1142,7 @@ </toolTip> <extendedTooltip> <name>РоссийскийАдресРасширеннаяПодсказка</name> - <id>111</id> + <id>115</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1094,7 +1172,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПредставлениеИностранногоАдресаРасширеннаяПодсказка</name> - <id>140</id> + <id>144</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1138,7 +1216,7 @@ </toolTip> <extendedTooltip> <name>ИностранныйАдресРасширеннаяПодсказка</name> - <id>139</id> + <id>143</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1167,7 +1245,7 @@ <verticalStretch>true</verticalStretch> <extendedTooltip> <name>ТипАдресаРасширеннаяПодсказка</name> - <id>110</id> + <id>114</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1204,7 +1282,7 @@ <verticalStretch>true</verticalStretch> <extendedTooltip> <name>ГруппаДополнительныхПолейРасширеннаяПодсказка</name> - <id>143</id> + <id>147</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1235,9 +1313,13 @@ <segments>Комментарий</segments> </dataPath> <titleLocation>Left</titleLocation> + <toolTip> + <key>ru</key> + <value>Дополнительный комментарий, не включаемый в представление адреса</value> + </toolTip> <extendedTooltip> <name>КомментарийРасширеннаяПодсказка</name> - <id>144</id> + <id>148</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1288,7 +1370,7 @@ </toolTip> <extendedTooltip> <name>ОбщиеДанныеРасширеннаяПодсказка</name> - <id>142</id> + <id>146</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1323,7 +1405,7 @@ </userVisible> <extendedTooltip> <name>ПроверитьЗаполнениеАдресаРасширеннаяПодсказка</name> - <id>148</id> + <id>152</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1347,7 +1429,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>Группа2РасширеннаяПодсказка</name> - <id>147</id> + <id>151</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1373,7 +1455,7 @@ </userVisible> <extendedTooltip> <name>ФормаКомандаОКРасширеннаяПодсказка</name> - <id>150</id> + <id>154</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1399,7 +1481,7 @@ </userVisible> <extendedTooltip> <name>ФормаОтменаРасширеннаяПодсказка</name> - <id>151</id> + <id>155</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1428,7 +1510,7 @@ </userVisible> <extendedTooltip> <name>ФормаОчиститьАдресРасширеннаяПодсказка</name> - <id>153</id> + <id>157</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1445,17 +1527,51 @@ <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> - <items xsi:type="form:Button"> - <name>ФормаЗагрузитьКлассификатор</name> - <id>91</id> + <items xsi:type="form:FormGroup"> + <name>ФормаВводАдресаВСвободнойФорме</name> + <id>101</id> + <items xsi:type="form:Button"> + <name>ВвестиАдресВСвободнойФорме</name> + <id>102</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ВвестиАдресВСвободнойФормеРасширеннаяПодсказка</name> + <id>159</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВвестиАдресВСвободнойФорме</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <visible>true</visible> <enabled>true</enabled> <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Форма ввод адреса в свободной форме</value> + + + ru + Форма ввод адреса в свободной форме + - ФормаЗагрузитьКлассификаторРасширеннаяПодсказка - 154 + ФормаВводАдресаВСвободнойФормеРасширеннаяПодсказка + 158 Label true true @@ -1463,14 +1579,7 @@ Left - Form.Command.ЗагрузитьКлассификатор - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu + ФормаСтандартныеДействия @@ -1485,7 +1594,7 @@ ИзменитьФормуРасширеннаяПодсказка - 156 + 161 Label true true @@ -1512,7 +1621,7 @@ СправкаРасширеннаяПодсказка - 157 + 162 Label true true @@ -1544,7 +1653,7 @@ ФормаСтандартныеДействияРасширеннаяПодсказка - 155 + 160 Label true true @@ -1569,7 +1678,7 @@ ФормаВсеДействияРасширеннаяПодсказка - 152 + 156 Label true true @@ -1596,7 +1705,7 @@ ФормаСправкаРасширеннаяПодсказка - 158 + 163 Label true true @@ -1627,7 +1736,7 @@ ПанельКомандФормыРасширеннаяПодсказка - 149 + 153 Label true true @@ -1655,7 +1764,7 @@ ПанельКомандРасширеннаяПодсказка - 146 + 150 Label true true @@ -1691,7 +1800,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner Use UseList true @@ -2186,9 +2295,7 @@ Вид контактной информации 22 - - CatalogRef.ВидыКонтактнойИнформации - + true @@ -2369,6 +2476,162 @@ true + + РазрешитьВводАдресаВСвободнойФорме + + <key>ru</key> + <value>Разрешить ввод адреса в свободной форме</value> + + 24 + + Boolean + + + true + + + true + + + + ЦветФонаФормы + + <key>ru</key> + <value>Цвет фона формы</value> + + 33 + + Color + + + true + + + true + + + + ПредставлениеАдресаИзменено + + <key>ru</key> + <value>Представление адреса изменено</value> + + 34 + + Boolean + + + true + + + true + + + + ЦветФонаУправляющегоПоля + + <key>ru</key> + <value>Цвет фона управляющего поля</value> + + 35 + + Color + + + true + + + true + + + + КодСтраны + + <key>ru</key> + <value>Код страны</value> + + 36 + + String + + + + true + + + true + + + + ТекстПредупрежденияПриОткрытии + + <key>ru</key> + <value>Текст предупреждения при открытии</value> + + 37 + + String + + + + true + + + true + + + + ПолеПредупрежденияПриОткрытии + + <key>ru</key> + <value>Поле предупреждения при открытии</value> + + 39 + + String + + + + true + + + true + + + + ВозвращатьСписокЗначений + + <key>ru</key> + <value>Возвращать список значений</value> + + 38 + + Boolean + + + true + + + true + + + + ЭтоПлатформа83 + + <key>ru</key> + <value>Это платформа83</value> + + 40 + + Boolean + + + true + + + true + + КомандаОК @@ -2378,7 +2641,7 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Команда ОК</value> + <value>Подвердить изменения и закрыть форму</value> </toolTip> <use> <common>true</common> @@ -2490,11 +2753,31 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВвестиАдресВСвободнойФорме</name> + <title> + <key>ru</key> + <value>Ввести адрес в свободной форме</value> + + 5 + + ru + Ввести адрес в свободной форме + + + true + + + + ВвестиАдресВСвободнойФорме + + + Auto + Auto + ВидКонтактнойИнформации - - CatalogRef.ВидыКонтактнойИнформации - + ЗначенияПолей diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index d5ab90494..780c32f7f 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -1,3 +1,22 @@ - -

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

            -

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

            \ No newline at end of file + +

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

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

            Например, для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литер Щ, офис 12345" необходимо ввести:

            +
            1. В поле "Город, населенный пункт" - Санкт-Петербург г. +
            2. В поле "Улица" - Пискаревский пр-кт. +
            3. В поле значения "Дом" указать 2. +
            4. В поле значения "Корпус" - 2. +
            5. Для ввода литеры необходимо добавить поле кнопкой "Добавить", выбрать из выпадающего списка значение "Литера" и проставить в поле значение Щ. +
            6. Вместо "Квартира" выбрать из выпадающего списка значение "Офис" и ввести в поле значения 12345.

            Аналогично, для ввода адреса, содержащего другие значения полей, например "Москва, улица Адмирала Лазарева, домовладение 89, корпус 16, строение 1 необходимо:

            +
            1. В поле "Город, населенный пункт" ввести Москва г. +
            2. В поле "Улица" - Адмирала Лазарева ул. +
            3. Вместо "Дом" выбрать из выпадающего списка значение "Домовладение", ввести в поле значения 89. +
            4. В поле значения "Корпус" указать 16. +
            5. Добавить поле кнопкой "Добавить", выбрать из выпадающего списка значение "Строение", проставить в поле значение 1.
            • Поле "Комментарий" позволяет указать произвольный комментарий к адресу, который не будет включаться в его представление и выводится на печать. +
            • Кнопка "Проверить заполнение" анализирует корректность заполнения адреса и выводит список ошибок.

            Из меню "Все действия" также доступны команды "Очистить адрес" и "Загрузить классификатор"

            +

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 8e5a56536..af16d9922 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -5,11 +5,14 @@ // ввода нового // Представление (строка) - представление адреса (используется только при работе со старыми данными) // ВидКонтактнойИнформации - ссылка на справочник ВидыКонтактнойИнформации, описывающий то, что мы -// редактируем +// редактируем или структура, совместимая по полям со справочником. // Комментарий (строка) - необязательный комментарий, для подстановки в поле "Комментарий" // +// ВозвращатьСписокЗначений (булево) - необязательный флаг того, что возвращаемое значение поля +// КонтактнаяИнформация будет иметь тип СписокЗначений (совместимость) +// // Результатом выбора является структура с полями: -// "КонтактнаяИнформация, Представление, Комментарий" +// "КонтактнаяИнформация, Представление, Комментарий, ВведеноВСвободнойФорме" // // ------------------------------------------------------------------------------------------------- @@ -24,45 +27,86 @@ Возврат; КонецЕсли; + Если Не Параметры.Свойство("ОткрытаПоСценарию") Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + + ЭтоПлатформа83 = ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83(); + + Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); + // Внутренняя инициализация - ЦветКорректногоПоля = Новый Цвет; // (243, 255, 243); - АвтоЦвет = Новый Цвет; - СтранаРоссия = Справочники.СтраныМира.Россия; + ЦветФонаУправляющегоПоля = ЦветаСтиля.ФонУправляющегоПоля; + ЦветФонаФормы = ЦветаСтиля.ЦветФонаФормы; + ЦветКорректногоПоля = Новый Цвет; // (243, 255, 243); + АвтоЦвет = Новый Цвет; - ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; + СтранаРоссия = Справочники.СтраныМира.Россия; - ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; - ЗапрещатьВводНекорректного = ВидКонтактнойИнформации.ЗапрещатьВводНекорректного; - - МожноЗагружатьКлассификатор = КонтактнаяИнформацияСлужебный.ЕстьВозможностьИзмененияАдресногоКлассификатора(); + ВидКонтактнойИнформации = УправлениеКонтактнойИнформацией.СтруктураВидаКонтактнойИнформации(); + ЗаполнитьЗначенияСвойств(ВидКонтактнойИнформации, Параметры.ВидКонтактнойИнформации); // Заголовок - Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); + Если ПустаяСтрока(Параметры.Заголовок) Тогда + Если ТипЗнч(ВидКонтактнойИнформации)=Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Заголовок = Строка(ВидКонтактнойИнформации); + // Иначе останется заголовок, заданный в форме + КонецЕсли; + Иначе + Заголовок = Параметры.Заголовок; + КонецЕсли; // Режимы - СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; + ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; + ЗапрещатьВводНекорректного = ВидКонтактнойИнформации.ЗапрещатьВводНекорректного; + МожноЗагружатьКлассификатор = КонтактнаяИнформацияСлужебный.ЕстьВозможностьИзмененияАдресногоКлассификатора(); + СкрыватьНеактуальныеАдреса = ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса; + + АдресТолькоРоссийский = ВидКонтактнойИнформации.АдресТолькоРоссийский; + ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; // Возможные варианты дома, строения, квартиры УстановитьСписокВыбораЭлемента(Элементы.ТипДома, Элементы.Дом, КонтактнаяИнформацияСлужебный.ВариантыДанныхДом()); УстановитьСписокВыбораЭлемента(Элементы.ТипСтроения, Элементы.Строение, КонтактнаяИнформацияСлужебный.ВариантыДанныхСтроение()); УстановитьСписокВыбораЭлемента(Элементы.ТипПомещения, Элементы.Помещение, КонтактнаяИнформацияСлужебный.ВариантыДанныхПомещение()); - АдресТолькоРоссийский = ВидКонтактнойИнформации.АдресТолькоРоссийский; + // Пытаемся заполнить из параметров + Если КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(Параметры.ЗначенияПолей) + И ТипКонтактнойИнформации=Перечисления.ТипыКонтактнойИнформации.Адрес + Тогда + РезультатыЧтения = Новый Структура; + XDTOКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияКонтактнойИнформации(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии + ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; + XDTOКонтактная.Представление = Параметры.Представление; + XDTOКонтактная.Состав.Страна = Строка(СтранаРоссия); + КонецЕсли; + Иначе + XDTOКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(Параметры.ЗначенияПолей, Параметры.Представление, ); + КонецЕсли; - // Пытаемся заполнить из параметра - XDTOКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(Параметры.ЗначенияПолей, Параметры.Представление, ВидКонтактнойИнформации.Тип); Если Параметры.Комментарий<>Неопределено Тогда // Ставим новый комментарий, иначе он придет из информации КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(XDTOКонтактная, Параметры.Комментарий); КонецЕсли; ЗначениеРеквизитовПоКонтактнойИнформации(ЭтаФорма, XDTOКонтактная); - ОтрисоватьДополнительныеЗданияИПомещения(); - - // По умолчанию все русские - Если Не ЗначениеЗаполнено(Страна) Тогда - Страна = СтранаРоссия; + Если ЗначениеЗаполнено(Страна) Тогда + // Нашли в справочнике стран + ИсходноеПредставлениеСтраны = ""; + + ИначеЕсли ПустаяСтрока(КодСтраны) Тогда + // Нашли в классификаторе, но не нашли в справочнике, возможно стоит завести? + ИсходноеПредставлениеСтраны = СокрЛП(XDTOКонтактная.Состав.Страна); + + Иначе + // Не нашли ни в классификаторе ни в справочнике + ИсходноеПредставлениеСтраны = СокрЛП(XDTOКонтактная.Состав.Страна); + КонецЕсли; + + ОтрисоватьДополнительныеЗданияИПомещения(); // Возможно пустые значения, чтобы не смущали Если ПустаяСтрока(Дом) И ПустаяСтрока(ТипДома) Тогда @@ -75,19 +119,56 @@ ТипПомещения = КонтактнаяИнформацияКлиентСервер.ПервыйИлиПустой(Элементы.ТипПомещения); КонецЕсли; - // Проверяем на вменяемость + // Проверяем на корректность Если АдресТолькоРоссийский Тогда + Элементы.Страна.Доступность = Ложь; + Элементы.Страна.ЦветФона = АвтоЦвет; Если Страна<>СтранаРоссия Тогда - // От нас хотят российский адрес, но выдают странную страну, сваливаемся только на просмотр - УстановитьТолькоПросмотр(); - Иначе - Элементы.Страна.Доступность = Ложь; - Элементы.Страна.ЦветФона = АвтоЦвет; + Если Не ПустаяСтрока(Параметры.ЗначенияПолей) Тогда + // Считаем адрес российским, но введенным в свободной форме. + ПредставлениеАдреса = СокрЛП( + СокрЛП(Страна) + " " + СокрЛП(ПредставлениеАдреса) + " " + СокрЛП(ПредставлениеИностранногоАдреса) + ); + РазрешитьВводАдресаВСвободнойФорме = Истина; + ПредставлениеАдресаИзменено = Истина; + КонецЕсли; + Страна = СтранаРоссия; КонецЕсли; КонецЕсли; + // По умолчанию все русские + Если Не ЗначениеЗаполнено(Страна) Тогда + Если ПустаяСтрока(ИсходноеПредставлениеСтраны) Тогда + Страна = СтранаРоссия; + Иначе + // Не определили страну, но точно не Россия + Если ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда + ПолеПредупрежденияПриОткрытии = "Страна"; + КонецЕсли; + ТекстПредупрежденияПриОткрытии = ТекстПредупрежденияПриОткрытии + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Страна ""%1"" не найдена в справочнике стран мира.'"), ИсходноеПредставлениеСтраны + ); + КонецЕсли; + КонецЕсли; + + // Инициализируем элементы Если Страна=СтранаРоссия Тогда + Элементы.ТипАдреса.ТекущаяСтраница = Элементы.РоссийскийАдрес; ТекущийЭлемент = Элементы.НаселенныйПункт; + Иначе + Элементы.ТипАдреса.ТекущаяСтраница = Элементы.ИностранныйАдрес; + ТекущийЭлемент = Элементы.ПредставлениеИностранногоАдреса; + КонецЕсли; + + // Обход особенности платформы 8.3 + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + МожноЗагружатьКлассификатор = Ложь; + Иначе + КнопкаПанели = Элементы.Добавить("ФормаЗагрузитьКлассификатор", Тип("КнопкаФормы")); + КнопкаПанели.ИмяКоманды = "ЗагрузитьКлассификатор"; + Элементы.Переместить(КнопкаПанели, Элементы.ФормаВсеДействия, Элементы.ФормаВводАдресаВСвободнойФорме); + Элементы.ФормаЗагрузитьКлассификатор.Видимость = МожноЗагружатьКлассификатор; КонецЕсли; УстановитьКлючИспользованияФормы(); @@ -95,20 +176,27 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - -#Если ВебКлиент Тогда - МожноЗагружатьКлассификатор = Ложь; -#КонецЕсли - Элементы.ФормаЗагрузитьКлассификатор.Видимость = МожноЗагружатьКлассификатор; + Элементы.ДобавитьОбъект.Доступность = МожноДобавлятьДополнительныеОбъекты(); ОбработкаИзмененияСтраныКлиент(); + СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме, Ложь); ВизуализироватьКорректностьВыбора(); + + Если Не ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда + ПодключитьОбработчикОжидания("Подключаемый_ПредупредитьПослеОткрытияФормы", 0.1, Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - УстановитьКлючИспользованияФормы(); - СохраняемыеВНастройкахДанныеМодифицированы = Истина; + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, + МодифицированностьПриВыборе(), ВыбраноДействиеВыбора() ); + + Если Не Отказ Тогда + УстановитьКлючИспользованияФормы(); + СохраняемыеВНастройкахДанныеМодифицированы = Истина; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -122,17 +210,66 @@ Контекст = КонтекстФормыКлиент(); ЗаполнитьПредставлениеАдреса(Контекст); КонтекстФормыКлиент(Контекст); + +#Если ВебКлиент Тогда + // Обход особенности платформы + Элемент.ОбновитьТекстРедактирования(); +#КонецЕсли + КонецПроцедуры + &НаКлиенте Процедура СтранаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонецПроцедуры + +&НаКлиенте +Процедура СтранаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + +#Если ВебКлиент Тогда + // Обход особенности платформы + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений; + Возврат; +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура СтранаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + +#Если ВебКлиент Тогда + // Обход особенности платформы + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений; + ДанныеВыбора.Добавить(Страна); + Возврат; +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + +#Если ВебКлиент Тогда + // Обход особенности платформы + Если ТипЗнч(ВыбранноеЗначение)<>Тип("СправочникСсылка.СтраныМира") Тогда + СтандартнаяОбработка = Ложь; + ВыбранноеЗначение = Неопределено; + Возврат; + КонецЕсли; +#КонецЕсли + + УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); +КонецПроцедуры + &НаКлиенте Процедура ИндексПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); ЗаполнитьПредставлениеАдреса(Контекст); КонтекстФормыКлиент(Контекст); КонецПроцедуры + &НаКлиенте Процедура ТипДомаПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); @@ -141,6 +278,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура ДомПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); @@ -149,6 +287,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура ТипСтроенияПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); @@ -157,12 +296,14 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура СтроениеПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); ОбновитьИндексИПредставление(Контекст); КонтекстФормыКлиент(Контекст); КонецПроцедуры + &НаКлиенте Процедура ТипПомещенияПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); @@ -171,6 +312,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура ПомещениеПриИзменении(Элемент) Контекст = КонтекстФормыКлиент(); @@ -188,6 +330,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура НаселенныйПунктНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -211,10 +354,10 @@ ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", Новый Структура("НаселенныйПунктДетально, СкрыватьНеактуальныеАдреса", НаселенныйПунктДетально, СкрыватьНеактуальныеАдреса - ), Элемент - ); + ), Элемент); КонецПроцедуры + &НаКлиенте Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Перем МожноЗагружатьРегион; @@ -242,15 +385,13 @@ РегионНеЗагружен = ВыбранноеЗначение.Свойство("МожноЗагружатьРегион") И ВыбранноеЗначение.МожноЗагружатьРегион; Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда // Предлагаем загрузить классификатор - КонтактнаяИнформацияКлиент.ПредложениеЗагрузкиКлассификатора( + УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление - ) - ); + НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление)); КонецЕсли; Иначе - // Иной источник, будет попытка репарсить + // Иной источник, будет попытка разобрать КодКлассификатораНаселенногоПункта = 0; НаселенныйПункт = Строка(ВыбранноеЗначение); @@ -259,13 +400,15 @@ ДомНайденТочно = Ложь; КонецЕсли; - // Если город был выбран точно, то по коду будет восстановлен детальный населенный пункт, иначе сохранится введенная детальная инфа + // Если город был выбран точно, то по коду будет восстановлен детальный населенный пункт, иначе сохранится введенная + // детальная информация Контекст = КонтекстФормыКлиент(); ОбработкаИзмененияНаселенногоПунктаСервер(Контекст, ФормироватьДетально); КонтекстФормыКлиент(Контекст); ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура НаселенныйПунктАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) @@ -287,6 +430,7 @@ ДанныеВыбора = АнализКлассификатора.ДанныеВыбора; КонецПроцедуры + &НаКлиенте Процедура НаселенныйПунктОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) // Выход из поля с текстом, измененным руками @@ -306,7 +450,7 @@ КодКлассификатораУлицы = 0; УлицаНайденаТочно = Ложь; - // Дом становится недостовернвм + // Дом становится недостоверным ДомНайденТочно = Ложь; Контекст = КонтекстФормыКлиент(); @@ -324,6 +468,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура УлицаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -335,12 +480,15 @@ Если КодКлассификатораНаселенногоПункта>0 Тогда ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса, КодКлассификатораНаселенногоПункта, Улица", - СкрыватьНеактуальныеАдреса, КодКлассификатораНаселенногоПункта, Улица - ); - КонтактнаяИнформацияКлиент.НачалоВыбораУлицы(Элемент, КодКлассификатораНаселенногоПункта, Улица, ПараметрыФормы); + СкрыватьНеактуальныеАдреса, КодКлассификатораНаселенногоПункта, Улица); + Иначе + // Родитель улицы неопределен, открываем форму в которой ничего нет + ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса, КодКлассификатораНаселенногоПункта, Улица, Заголовок", + СкрыватьНеактуальныеАдреса, -1, Улица, НаселенныйПункт + " (не найден)"); КонецЕсли; - + УправлениеКонтактнойИнформациейКлиент.НачалоВыбораУлицы(Элемент, КодКлассификатораНаселенногоПункта, Улица, ПараметрыФормы); КонецПроцедуры + &НаКлиенте Процедура УлицаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -357,7 +505,7 @@ Улица = ВыбранноеЗначение.Представление; УлицаНайденаТочно = Истина; Иначе - // Иной источник, будет попытка репарсить + // Иной источник, будет попытка разобрать КодКлассификатораУлицы = 0; Улица = Строка(ВыбранноеЗначение); @@ -371,6 +519,7 @@ ВизуализироватьКорректностьВыбора(); КонецПроцедуры + &НаКлиенте Процедура УлицаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) @@ -391,15 +540,15 @@ АнализКлассификатора = РезультатыАвтоПодбораУлицы(КодКлассификатораНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, ПредупреждатьОНеактуальных); ДанныеВыбора = АнализКлассификатора.ДанныеВыбора; КонецПроцедуры + &НаКлиенте Процедура УлицаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) // Выход из поля с текстом, измененным руками - СтандартнаяОбработка = Ложь; - Модифицированность = Истина; ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить(Текст); + Улица = Текст; // Улица становится непроверенной КодКлассификатораУлицы = 0; @@ -407,8 +556,12 @@ // Дом становится непроверенным ДомНайденТочно = Ложь; - - ВизуализироватьКорректностьВыбора(); +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеАдресаПриИзменении(Элемент) + ПредставлениеАдресаИзменено = Истина; + ПредставлениеАдресаПриИзмененииСервер(); КонецПроцедуры &НаКлиенте @@ -428,8 +581,8 @@ // Изменено значение адреса Контекст = КонтекстФормыКлиент(); - Результат = РезультатВыбора(Контекст); - Если ПроверятьКорректность И Результат.ОшибкиЗаполнения.Количество()>0 Тогда + Результат = РезультатВыбора(Контекст, ВозвращатьСписокЗначений); + Если ПроверятьКорректность И (Не РазрешитьВводАдресаВСвободнойФорме) И Результат.ОшибкиЗаполнения.Количество()>0 Тогда СообщитьОбОшибкахЗаполнения(Результат.ОшибкиЗаполнения, Ложь); Если ЗапрещатьВводНекорректного Тогда Возврат; @@ -437,6 +590,8 @@ КонецЕсли; Результат = Результат.ДанныеВыбора; + + СброситьМодифицированностьПриВыборе(); #Если ВебКлиент Тогда ФлагЗакрытия = ЗакрыватьПриВыборе; ЗакрыватьПриВыборе = Ложь; @@ -450,6 +605,8 @@ // Изменен только комментарий, пробуем вернуть обновленное Результат = РезультатВыбораТолькоКомментария(Параметры.ЗначенияПолей, Параметры.Представление, Комментарий); Результат = Результат.ДанныеВыбора; + + СброситьМодифицированностьПриВыборе(); #Если ВебКлиент Тогда ФлагЗакрытия = ЗакрыватьПриВыборе; ЗакрыватьПриВыборе = Ложь; @@ -464,12 +621,19 @@ КонецЕсли; Если (МодальныйРежим Или ЗакрыватьПриВыборе) И Открыта() Тогда + СброситьМодифицированностьПриВыборе(); Закрыть(Результат); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверитьЗаполнениеАдреса(Команда) + + Если РазрешитьВводАдресаВСвободнойФорме Тогда + Предупреждение(НСтр("ru='Адрес не может быть проверен, так как он введен в свободной форме.'")); + Возврат; + КонецЕсли; + Контекст = КонтекстФормыКлиент(); СписокОшибок = СписокОшибокЗаполнения(Контекст); СообщитьОбОшибкахЗаполнения(СписокОшибок, Истина); @@ -482,7 +646,7 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) - КонтактнаяИнформацияКлиент.ЗагрузитьАдресныйКлассификатор(); + УправлениеКонтактнойИнформациейКлиент.ЗагрузитьАдресныйКлассификатор(); КонецПроцедуры &НаКлиенте @@ -526,25 +690,77 @@ КонецПроцедуры +&НаКлиенте +Процедура ВвестиАдресВСвободнойФорме(Команда) + + Если РазрешитьВводАдресаВСвободнойФорме Тогда + ТекстВопроса = НСтр("ru='Изменения, введенные вручную, будут потеряны. + |Продолжить?'"); + Иначе + ТекстВопроса = НСтр("ru='Ввести адрес в свободной форме? + |Адреса, введенные в свободной форме, могут не пройти проверку по адресному классификатору.'"); + КонецЕсли; + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru='Подтверждение'")); + Если Ответ<>КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + РазрешитьВводАдресаВСвободнойФорме = Не РазрешитьВводАдресаВСвободнойФорме; + СостояниеВводаПредставленияАдреса(РазрешитьВводАдресаВСвободнойФорме); + + Модифицированность = Истина; +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // +&НаКлиенте +Функция МодифицированностьПриВыборе() + Возврат Модифицированность Или Комментарий<>КопияКомментария; +КонецФункции + +&НаКлиенте +Функция ВыбраноДействиеВыбора() + Возврат Не (Модифицированность Или Комментарий<>КопияКомментария); +КонецФункции + +&НаКлиенте +Процедура СброситьМодифицированностьПриВыборе() + Модифицированность = Ложь; + КопияКомментария = Комментарий; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПредупредитьПослеОткрытияФормы() + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); +КонецПроцедуры + &НаСервереБезКонтекста -Функция РезультатВыбора(Контекст) +Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений=Ложь) XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); - Результат.ДанныеВыбора = Новый Структура("КонтактнаяИнформация, Представление, Комментарий", - КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(XDTOИнформация), + Если ВозвращатьСписокЗначений Тогда + ДанныеВыбора = КонтактнаяИнформацияСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); + ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; + ИначеЕсли Контекст.Страна<>Контекст.СтранаРоссия И ПустаяСтрока(Контекст.ПредставлениеИностранногоАдреса) Тогда + // Иностранный адрес с пустой страной, вернем чистый адрес + ДанныеВыбора = ""; + Иначе + ДанныеВыбора = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(XDTOИнформация); + КонецЕсли; + + Результат.ДанныеВыбора = Новый Структура("КонтактнаяИнформация, Представление, Комментарий, ВведеноВСвободнойФорме", + ДанныеВыбора, XDTOИнформация.Представление, - XDTOИнформация.Комментарий - ); + XDTOИнформация.Комментарий, + КонтактнаяИнформацияСлужебный.АдресВведенВСвободнойФорме(XDTOИнформация)); Результат.ОшибкиЗаполнения = КонтактнаяИнформацияСлужебный.ОшибкиЗаполненияАдреса( XDTOИнформация.Состав, - Контекст.ВидКонтактнойИнформации - ); + Контекст.ВидКонтактнойИнформации); Возврат Результат; КонецФункции @@ -554,39 +770,46 @@ XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); Возврат КонтактнаяИнформацияСлужебный.ОшибкиЗаполненияАдреса( XDTOИнформация.Состав, - Контекст.ВидКонтактнойИнформации - ); + Контекст.ВидКонтактнойИнформации); КонецФункции &НаСервере Функция РезультатВыбораТолькоКомментария(КонтактнаяИнфо, Представление, Комментарий) Если ПустаяСтрока(КонтактнаяИнфо) Тогда - НоваяКонтакная = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(""); - КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(НоваяКонтакная, Комментарий); - НоваяКонтакная = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(НоваяКонтакная); - ИначеЕсли КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(КонтактнаяИнфо) Тогда - НоваяКонтакная = КонтактнаяИнфо; - // Модифицируем строку с КИ - КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(НоваяКонтакная, Комментарий); + НоваяКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса(""); + // Модифицируем значение "НоваяКонтактная" + КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(НоваяКонтактная, Комментарий); + НоваяКонтактная = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(НоваяКонтактная); + АдресВведенВСвободнойФорме = Ложь; + + ИначеЕсли КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда + // Копия + НоваяКонтактная = КонтактнаяИнфо; + // Модифицируем значение "НоваяКонтактная" + КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(НоваяКонтактная, Комментарий); + АдресВведенВСвободнойФорме = КонтактнаяИнформацияСлужебный.АдресВведенВСвободнойФорме(КонтактнаяИнфо); + Иначе - НоваяКонтакная = КонтактнаяИнфо; + НоваяКонтактная = КонтактнаяИнфо; + АдресВведенВСвободнойФорме = Ложь; КонецЕсли; - Возврат Новый Структура("ДанныеВыбора, ОшибкиЗаполнения", - Новый Структура("КонтактнаяИнформация, Представление, Комментарий", НоваяКонтакная, Представление, Комментарий), - Новый СписокЗначений - ); + Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения", Новый Структура, Новый СписокЗначений); + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", НоваяКонтактная); + Результат.ДанныеВыбора.Вставить("Представление", Представление); + Результат.ДанныеВыбора.Вставить("Комментарий", Комментарий); + Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", АдресВведенВСвободнойФорме); + Возврат Результат; КонецФункции &НаСервереБезКонтекста Процедура ОбработкаИзмененияНаселенногоПунктаСервер(Контекст, ПереформироватьДетально=Истина) Если Контекст.КодКлассификатораНаселенногоПункта<=0 Тогда - // Данные вводились вручную, пробуем репарсинг введенной строки + // Данные вводились вручную, пробуем разбор введенной строки АнализКлассификатора = НаселенныеПунктыПоПредставлению( - Контекст.НаселенныйПункт, Контекст.СкрыватьНеактуальныеАдреса - ); + Контекст.НаселенныйПункт, Контекст.СкрыватьНеактуальныеАдреса); Контекст.НаселенныйПунктНайденТочно = АнализКлассификатора.ДанныеВыбора.Количество()=1; Если Контекст.НаселенныйПунктНайденТочно Тогда ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; @@ -603,7 +826,7 @@ СформироватьДетальныйНаселенныйПункт(Контекст); КонецЕсли; - // Перепроверяем улицу, индекс и представление обновлятся там + // Перепроверяем улицу, индекс и представление обновятся там ОбработкаИзмененияУлицыСервер(Контекст); КонецПроцедуры @@ -611,10 +834,9 @@ Процедура ОбработкаИзмененияУлицыСервер(Контекст) Если Контекст.КодКлассификатораУлицы<=0 Тогда - // Данные вводились вручную, пробуем репарсинг введенной строки + // Данные вводились вручную, пробуем разбор введенной строки АнализКлассификатора = УлицыПоПредставлению( - Контекст.КодКлассификатораНаселенногоПункта, Контекст.Улица, Контекст.СкрыватьНеактуальныеАдреса - ); + Контекст.КодКлассификатораНаселенногоПункта, Контекст.Улица, Контекст.СкрыватьНеактуальныеАдреса); Контекст.УлицаНайденаТочно = АнализКлассификатора.ДанныеВыбора.Количество()=1; Если Контекст.УлицаНайденаТочно Тогда ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; @@ -627,7 +849,7 @@ Контекст.УлицаНайденаТочно = ЯвляетсяПотомком(Контекст.КодКлассификатораУлицы, Контекст.КодКлассификатораНаселенногоПункта); КонецЕсли; - // Перепроверяем дом, индекс и представление обновлятся там + // Перепроверяем дом, индекс и представление обновятся там ОбработкаИзмененияДомаСервер(Контекст); КонецПроцедуры @@ -641,7 +863,7 @@ &НаКлиенте Процедура ОбработкаИзмененияСтраныКлиент() ЭтоРоссийскийАдрес = Страна=СтранаРоссия; - Элементы.Индекс.Видимость = ЭтоРоссийскийАдрес; + Элементы.Индекс.Видимость = ЭтоРоссийскийАдрес; Элементы.ТипАдреса.ТекущаяСтраница = ?(ЭтоРоссийскийАдрес, Элементы.РоссийскийАдрес, Элементы.ИностранныйАдрес); // Проверять можем только российские адреса @@ -649,8 +871,14 @@ // Загружать можем только российские адреса Если МожноЗагружатьКлассификатор Тогда - Элементы.ФормаЗагрузитьКлассификатор.Доступность = ЭтоРоссийскийАдрес; + КнопкаПанели = Элементы.Найти("ФормаЗагрузитьКлассификатор"); + Если КнопкаПанели<>Неопределено Тогда + Элементы.ФормаЗагрузитьКлассификатор.Доступность = ЭтоРоссийскийАдрес; + КонецЕсли; КонецЕсли; + + // Вводить в свободной форме можем только российские адреса + Элементы.ВвестиАдресВСвободнойФорме.Доступность = ЭтоРоссийскийАдрес; КонецПроцедуры &НаСервере @@ -704,6 +932,7 @@ УстановитьЗначениеИндекса(Контекст, Инфо); ЗаполнитьПредставлениеАдреса(Контекст, Инфо); КонецПроцедуры + &НаСервереБезКонтекста Процедура УстановитьЗначениеИндекса(Контекст, XDTOКонтактная=Неопределено) Инфо = ?(XDTOКонтактная=Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); @@ -713,10 +942,22 @@ Контекст.Индекс = ИндексПоКлассификатору; КонецЕсли; КонецПроцедуры + &НаСервереБезКонтекста Процедура ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактная=Неопределено) - Инфо = ?(XDTOКонтактная=Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); + // Код страны ставим всегда + Если ТипЗнч(Контекст.Страна)=Тип("СправочникСсылка.СтраныМира") Тогда + Контекст.КодСтраны = Контекст.Страна.Код + Иначе + Контекст.КодСтраны = ""; + КонецЕсли; + + Если Контекст.РазрешитьВводАдресаВСвободнойФорме И Контекст.ПредставлениеАдресаИзменено Тогда + Возврат; + КонецЕсли; + + Инфо = ?(XDTOКонтактная=Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); Контекст.ПредставлениеАдреса = Инфо.Представление; КонецПроцедуры @@ -733,17 +974,43 @@ Контекст.КопияКомментария = Контекст.Комментарий; // Страна по наименованию - Если ПустаяСтрока(ДанныеАдреса.Страна) Тогда + НаименованиеСтраны = СокрЛП(ДанныеАдреса.Страна); + Если ПустаяСтрока(НаименованиеСтраны) Тогда Контекст.Страна = Справочники.СтраныМира.ПустаяСсылка(); Иначе - СтранаАдреса = Справочники.СтраныМира.НайтиПоНаименованию(ДанныеАдреса.Страна); - Если ЗначениеЗаполнено(СтранаАдреса) Тогда - Контекст.Страна = СтранаАдреса; + СсылкаНаРоссию = Справочники.СтраныМира.Россия; + Если ВРЕГ(НаименованиеСтраны)=ВРЕГ(СокрЛП(СсылкаНаРоссию.Наименование)) Тогда + Контекст.Страна = СсылкаНаРоссию; + Контекст.КодСтраны = СсылкаНаРоссию.Код; + Иначе + ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, НаименованиеСтраны); + Если ДанныеСтраны=Неопределено Тогда + // Не нашли ни в справочнике, ни в классификаторе + Контекст.Страна = Неопределено; + Контекст.КодСтраны = Неопределено; + Иначе + Контекст.Страна = ДанныеСтраны.Ссылка; + Контекст.КодСтраны = ДанныеСтраны.Код; + КонецЕсли; КонецЕсли; КонецЕсли; - // Представление иностранного адреса сохраняем - Если Не КонтактнаяИнформацияСлужебный.ЭтоРоссийскийАдрес(ДанныеАдреса) Тогда + ВычисленноеПредставление = КонтактнаяИнформацияСлужебный.СформироватьПредставлениеКонтактнойИнформации( + РедактируемаяИнформация, Контекст.ВидКонтактнойИнформации); + + Если КонтактнаяИнформацияСлужебный.ЭтоРоссийскийАдрес(ДанныеАдреса) Тогда + Контекст.РазрешитьВводАдресаВСвободнойФорме = Не ПустаяСтрока(ДанныеАдреса.Состав.Адрес_по_документу); + + // Дополнительно проверяем случай, когда представление по документу равно вычисленному + Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда + Если ПредставленияАдресаОдинаковы(ВычисленноеПредставление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) + И ПредставленияАдресаОдинаковы(РедактируемаяИнформация.Представление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) + Тогда + Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; + ДанныеАдреса.Состав.Адрес_по_документу = ""; + КонецЕсли; + КонецЕсли; + Иначе Контекст.ПредставлениеИностранногоАдреса = Строка(ДанныеАдреса.Состав); КонецЕсли; @@ -804,8 +1071,10 @@ ТаблицаДанных.Удалить(СтрокаДома); КонецЕсли; - Для Каждого СтрокаДома Из ТаблицаДанных Цикл - ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), СтрокаДома); + НомерСтроки = ТаблицаДанных.Количество(); + Пока НомерСтроки>0 Цикл + НомерСтроки = НомерСтроки - 1; + ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), ТаблицаДанных[НомерСтроки]); КонецЦикла; // Первое помещение указываем отдельно, остальные в списке @@ -821,10 +1090,7 @@ КонецЦикла; // Если переданное представление отличается от вычисленного, то адрес изменен - ВычисленноеПредставление = КонтактнаяИнформацияСлужебный.СформироватьПредставлениеКонтактнойИнформации( - РедактируемаяИнформация, Контекст.ВидКонтактнойИнформации - ); - Если Контекст.ПредставлениеАдреса<>ВычисленноеПредставление Тогда + Если Не Контекст.РазрешитьВводАдресаВСвободнойФорме И Не ПредставленияАдресаОдинаковы(Контекст.ПредставлениеАдреса, ВычисленноеПредставление) Тогда Контекст.Модифицированность = Истина; КонецЕсли; @@ -841,7 +1107,7 @@ Адрес = Результат.Состав; Адрес.Страна = Строка(Контекст.Страна); - Если Контекст.Страна<>Контекст.СтранаРоссия Тогда + Если ВРег(Контекст.Страна)<>ВРег(Контекст.СтранаРоссия.Наименование) Тогда Адрес.Состав = Контекст.ПредставлениеИностранногоАдреса; Результат.Представление = КонтактнаяИнформацияСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); Возврат Результат; @@ -853,8 +1119,7 @@ // Населенный пункт Если Контекст.КодКлассификатораНаселенногоПункта>0 Тогда КонтактнаяИнформацияСлужебный.УстановитьНаселенныйПунктАдресаПоКоду( - АдресРФ, Контекст.КодКлассификатораНаселенногоПункта - ); + АдресРФ, Контекст.КодКлассификатораНаселенногоПункта); // Добавляем возможно непустые данные Для Каждого КлючЗначение Из Контекст.НаселенныйПунктДетально Цикл ЧастьПункта = КлючЗначение.Значение; @@ -916,14 +1181,26 @@ КонецЕсли; КонтактнаяИнформацияСлужебный.ЗданияИПомещенияАдреса(АдресРФ, - Новый Структура("Здания, Помещения", ТаблицаЗданий, ТаблицаПомещений) - ); + Новый Структура("Здания, Помещения", ТаблицаЗданий, ТаблицаПомещений)); // Индекс КонтактнаяИнформацияСлужебный.ПочтовыйИндексАдреса(АдресРФ, Контекст.Индекс); - // Представление - Результат.Представление = КонтактнаяИнформацияСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); + // Представление и свободный ввод адреса + РасчетноеПредставление = КонтактнаяИнформацияСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); + ВведенноеПредставление = СокрЛП(Контекст.ПредставлениеАдреса); + Если Контекст.РазрешитьВводАдресаВСвободнойФорме И Контекст.ПредставлениеАдресаИзменено Тогда + Если ПредставленияАдресаОдинаковы(ВведенноеПредставление, РасчетноеПредставление) Тогда + Результат.Представление = РасчетноеПредставление; + АдресРФ.Сбросить("Адрес_по_документу"); + Иначе + Результат.Представление = ВведенноеПредставление; + АдресРФ.Адрес_по_документу = ВведенноеПредставление; + КонецЕсли; + Иначе + АдресРФ.Сбросить("Адрес_по_документу"); + Результат.Представление = РасчетноеПредставление; + КонецЕсли; Возврат Результат; КонецФункции @@ -935,8 +1212,7 @@ Если XDTOДанныеАдреса=Неопределено И Контекст.КодКлассификатораНаселенногоПункта>0 Тогда // Перезаполняем Контекст.НаселенныйПунктДетально = КонтактнаяИнформацияСлужебный.СписокРеквизитовНаселенныйПункт( - Контекст.КодКлассификатораНаселенногоПункта - ); + Контекст.КодКлассификатораНаселенногоПункта); Возврат; ИначеЕсли ТипЗнч(XDTOДанныеАдреса)=Тип("Строка") Тогда // Попытка разбора @@ -978,10 +1254,6 @@ КонецПроцедуры -&НаСервере -Процедура УстановитьТолькоПросмотр() - ЭтаФорма.ТолькоПросмотр = Истина; -КонецПроцедуры &НаСервере Процедура УдалитьГруппуЭлементов(Группа) Пока Группа.ПодчиненныеЭлементы.Количество()>0 Цикл @@ -998,10 +1270,10 @@ Функция ОтрисоватьДополнительныеЗданияИПомещения() Возврат Новый Структура("ИмяЗдания, ИмяПомещения", ОтрисоватьДополнительныеЗдания(), - ОтрисоватьДополнительныеПомещения() - ); + ОтрисоватьДополнительныеПомещения()); КонецФункции +&НаСервере Функция ОтрисоватьДополнительныеЗдания() Удалять = Новый Массив; @@ -1063,6 +1335,7 @@ Возврат Результат; КонецФункции + &НаКлиенте Процедура Подключаемый_ТипСтроенияПриИзменении(Элемент) НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипСтроения")); @@ -1077,6 +1350,7 @@ ВизуализироватьКорректностьВыбора(); Модифицированность = Истина; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_СтроениеПриИзменении(Элемент) НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("Строение")); @@ -1168,6 +1442,7 @@ ВизуализироватьКорректностьВыбора(); Модифицированность = Истина; КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ПомещениеПриИзменении(Элемент) НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("Помещение")); @@ -1194,8 +1469,7 @@ Для Каждого Элемент Из СписокОшибок Цикл ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент.Представление,,, - ПутьКДаннымФормыПоПутиXPath(Элемент.Значение) - ); + ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); КонецЦикла; КонецПроцедуры @@ -1302,6 +1576,9 @@ СформироватьДетальныйНаселенныйПункт(Контекст, XDTOКонтактнаяИнфо.Состав); ЗаполнитьПредставлениеАдреса(Контекст, XDTOКонтактнаяИнфо); + // Очищаем непосредственно на форме, в контексте уже очищено + ДополнительныеЗдания.Очистить(); + ДополнительныеПомещения.Очистить(); ОтрисоватьДополнительныеЗданияИПомещения(); КонецПроцедуры @@ -1323,10 +1600,16 @@ Возврат Результат; КонецФункции +&НаКлиенте +Функция МожноДобавлятьДополнительныеОбъекты() + ВариантыСтроения = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеЗдания, Элементы.ТипСтроения, 1); + ВариантыПомещения = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеПомещения, Элементы.ТипПомещения, 2); + Возврат ВариантыСтроения.Количество() + ВариантыПомещения.Количество() > 0 +КонецФункции + &НаСервере Процедура УстановитьКлючИспользованияФормы() - - КлючНазначенияИспользования = Строка(Страна); + КлючСохраненияПоложенияОкна = Строка(Страна); Количество = 0; Для Каждого Строка Из ДополнительныеЗдания Цикл @@ -1334,44 +1617,44 @@ Количество = Количество + 1; КонецЕсли; КонецЦикла; - КлючНазначенияИспользования = КлючНазначенияИспользования + "/" + Формат(Количество, "ЧН=; ЧГ="); + КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "/" + Формат(Количество, "ЧН=; ЧГ="); Количество = 0; Для Каждого Строка Из ДополнительныеПомещения Цикл Если Не ПустаяСтрока(Строка.Значение) Тогда Количество = Количество + 1; КонецЕсли; - КонецЦикла; - КлючНазначенияИспользования = КлючНазначенияИспользования + "/" + Формат(Количество, "ЧН=; ЧГ="); + КонецЦикла; - Параметры.КлючНазначенияИспользования = КлючНазначенияИспользования; + КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "/" + Формат(Количество, "ЧН=; ЧГ="); КонецПроцедуры -// ------------------------------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////////////////////////// + &НаСервереБезКонтекста Функция РезультатыАвтоПодбораНаселенногоПункта(Текст, СкрыватьНеактуальныеАдреса=Ложь, ПредупреждатьОНеактуальных=Истина) Возврат КонтактнаяИнформацияСлужебный.РезультатыАвтоПодбораНаселенногоПункта( - Текст, СкрыватьНеактуальныеАдреса, ПредупреждатьОНеактуальных - ); + Текст, СкрыватьНеактуальныеАдреса, ПредупреждатьОНеактуальных); КонецФункции + &НаСервереБезКонтекста Функция НаселенныеПунктыПоПредставлению(Текст, СкрыватьНеактуальныеАдреса=Ложь, ВыбиратьСтрок=50) Возврат КонтактнаяИнформацияСлужебный.НаселенныеПунктыПоПредставлению( - Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок - ); + Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок); КонецФункции + &НаСервереБезКонтекста Функция РезультатыАвтоПодбораУлицы(КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса=Ложь, ПредупреждатьОНеактуальных=Истина) Возврат КонтактнаяИнформацияСлужебный.РезультатыАвтоПодбораУлицы( - КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, ПредупреждатьОНеактуальных - ); + КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, ПредупреждатьОНеактуальных); КонецФункции + &НаСервереБезКонтекста Функция УлицыПоПредставлению(КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса=Ложь, ВыбиратьСтрок=50) Возврат КонтактнаяИнформацияСлужебный.УлицыПоПредставлению( - КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок - ); + КодНаселенногоПункта, Текст, СкрыватьНеактуальныеАдреса, ВыбиратьСтрок); КонецФункции + &НаСервереБезКонтекста Функция ЯвляетсяПотомком(КодКлассификатораУлицы, КодКлассификатораНаселенногоПункта) Возврат КонтактнаяИнформацияСлужебный.ЯвляетсяПотомком(КодКлассификатораУлицы, КодКлассификатораНаселенногоПункта); @@ -1382,11 +1665,12 @@ Функция КонтекстФормыКлиент(НовыеДанные=Неопределено) СписокРеквизитов = " |ВидКонтактнойИнформации, - |Страна, СтранаРоссия, СкрыватьНеактуальныеАдреса, + |Страна, КодСтраны, СтранаРоссия, СкрыватьНеактуальныеАдреса, |Индекс, ПредставлениеАдреса, ПредставлениеИностранногоАдреса, Комментарий, |НаселенныйПункт, КодКлассификатораНаселенногоПункта, НаселенныйПунктДетально, НаселенныйПунктНайденТочно, |Улица, КодКлассификатораУлицы, УлицаНайденаТочно, - |ТипДома, Дом, ДомНайденТочно, ТипСтроения, Строение, ТипПомещения, Помещение + |ТипДома, Дом, ДомНайденТочно, ТипСтроения, Строение, ТипПомещения, Помещение, + |РазрешитьВводАдресаВСвободнойФорме, ПредставлениеАдресаИзменено |"; СписокКоллекций = "ДополнительныеЗдания, ДополнительныеПомещения"; @@ -1414,4 +1698,153 @@ ЗаполнитьЗначенияСвойств(СвойствоПриемник.Добавить(), Значение); КонецЦикла; КонецЦикла; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +// Разрешение элементов для ввода в свободном формате +// +// Параметры: +// - Режим - Истина - можно редактировать представление адреса, Ложь - нельзя +// - ФормироватьПредставление - необязательный флаг. По умолчанию установлен. +// +&НаКлиенте +Процедура СостояниеВводаПредставленияАдреса(Режим, ФормироватьПредставление=Истина) + Элемент = Элементы.ПредставлениеАдреса; + + Элемент.РедактированиеТекста = Режим; + Если Режим Тогда + Элемент.РедактированиеТекста = Истина; + Элемент.ЦветФона = АвтоЦвет; + Иначе + Элемент.РедактированиеТекста = Ложь; + Элемент.ЦветФона = ЦветФонаФормы; + + Если ФормироватьПредставление Тогда + Контекст = КонтекстФормыКлиент(); + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); + КонецЕсли; + КонецЕсли; + + // Остальные поля ввода + СостояниеГруппыВвода(Элементы.СтранаАдреса, Не Режим); + СостояниеГруппыВвода(Элементы.ТипАдреса, Не Режим); + + Элементы.ВвестиАдресВСвободнойФорме.Пометка = Режим; + + // Проверять адрес, введенный вручную нельзя + Если Страна=СтранаРоссия Тогда + Элементы.ПроверитьЗаполнениеАдреса.Доступность = Не Режим; + КонецЕсли; + + // Страна - по прежнему управляющее поле + Если Элементы.Страна.Доступность Тогда + Элементы.Страна.ЦветФона = ЦветФонаУправляющегоПоля; + КонецЕсли; + + // Переключаем заголовок представления и текущий элемент ввода для индикации режима + Если Режим Тогда + Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Элементы.ПредставлениеАдреса.Заголовок = НСтр("ru='Адрес в свободной форме'"); + + Элементы.ГруппаПредставления.Отображение = ОтображениеОбычнойГруппы.Нет; + Элементы.СтранаАдреса.Отображение = Элементы.ГруппаПредставления.Отображение; + + ТекущийЭлемент = Элементы.ПредставлениеАдреса; + Иначе + Элементы.ПредставлениеАдреса.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элементы.ПредставлениеАдреса.Заголовок = ""; + + Элементы.ГруппаПредставления.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыОтступ(); + Элементы.СтранаАдреса.Отображение = Элементы.ГруппаПредставления.Отображение; + + ТекущийЭлемент = Элементы.НаселенныйПункт; + КонецЕсли; + +КонецПроцедуры + +// Установка доступности элементов в группе +// +// Параметры: +// - Группа - ГруппаФормы - Контейнер для элементов. +// - Режим - Булево - Флаг разрешения элементов. Истина - разрешены, Ложь - нет +// +&НаКлиенте +Процедура СостояниеГруппыВвода(Группа, Режим) + + Для Каждого Элемент Из Группа.ПодчиненныеЭлементы Цикл + ТипЭлемента = ТипЗнч(Элемент); + Если ТипЭлемента=Тип("ГруппаФормы") Тогда + Если Элемент<>Элементы.ГруппаПредставления И Элемент<>Элементы.ИностранныйАдрес Тогда + СостояниеГруппыВвода(Элемент, Режим); + КонецЕсли; + + ИначеЕсли ТипЭлемента=Тип("КнопкаФормы") Тогда + Если Элемент=Элементы.ДобавитьОбъект Тогда + Элемент.Доступность = Режим И МожноДобавлятьДополнительныеОбъекты(); + Иначе + Элемент.Доступность = Режим; + КонецЕсли; + + ИначеЕсли ТипЭлемента=Тип("ПолеФормы") И Элемент.Вид=ВидПоляФормы.ПолеВвода Тогда + Элемент.ТолькоПросмотр = Не Режим; + Элемент.ЦветФона = ?(Режим, АвтоЦвет, ЦветФонаФормы); + + Иначе + Элемент.Доступность = Режим; + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Представление разрешено менять только при вводе в режиме ввода в свободной форме +// Поэтому необходимо привести остальные поля к измененному представлению +// Страну не трогаем, режим свободного ввода возможен только в России +// +&НаСервере +Процедура ПредставлениеАдресаПриИзмененииСервер() + + // Пытаемся разобрать заново + XDTOКонтактная = КонтактнаяИнформацияСлужебный.ПарсингКонтактнойИнформации(ПредставлениеАдреса, ВидКонтактнойИнформации); + + // Представление + КонтактнаяИнформацияСлужебный.ПредставлениеКонтактнойИнформации(XDTOКонтактная, ПредставлениеАдреса); + + // Комментарий + КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(XDTOКонтактная, Комментарий); + + // И проставляем в реквизиты, кроме страны и представления + ТекущееПредставление = ПредставлениеАдреса; + ТекущаяСтрана = Страна; + + ОчиститьАдресСервер(ЭтаФорма); + + // Возможно будет отключен свободного ввода + ЗначениеРеквизитовПоКонтактнойИнформации(ЭтаФорма, XDTOКонтактная); + + ПредставлениеАдреса = ТекущееПредставление; + Страна = ТекущаяСтрана; + + ОтрисоватьДополнительныеЗданияИПомещения(); + + // Включаем режим свободного ввода принудительно + РазрешитьВводАдресаВСвободнойФорме = Истина; + Модифицированность = Истина; +КонецПроцедуры + +// Сравниваем два представления на эквивалентность +&НаСервереБезКонтекста +Функция ПредставленияАдресаОдинаковы(Знач Представление1, Знач Представление2, Знач ИгнорироватьЗнакНомера=Ложь) + Возврат ХешПредставления(Представление1, ИгнорироватьЗнакНомера)=ХешПредставления(Представление2, ИгнорироватьЗнакНомера); +КонецФункции + +&НаСервереБезКонтекста +Функция ХешПредставления(Знач Представление, Знач ИгнорироватьЗнакНомера=Ложь) + Результат = СтрЗаменить(Представление, Символы.ПС, ""); + Результат = СтрЗаменить(Результат, " ", ""); + Если ИгнорироватьЗнакНомера Тогда + Результат = СтрЗаменить(Результат, "№", ""); + КонецЕсли; + Возврат ВРег(Результат); +КонецФункции + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index 963f397de..369777bf9 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -22,6 +22,10 @@ КодСтраны Top + + ru + Код страны в телефонном номере + OnChange КодСтраныПриИзменении @@ -70,6 +74,10 @@ КодГорода Top + + ru + Код города в телефонном номере + OnChange КодГородаПриИзменении @@ -118,6 +126,10 @@ НомерТелефона Top + + ru + Номер телефона в телефонном номере + OnChange НомерТелефонаПриИзменении @@ -166,6 +178,10 @@ Добавочный Top + + ru + Добавочный номер + OnChange ДобавочныйПриИзменении @@ -285,6 +301,10 @@ Комментарий Left + + ru + Дополнительный комментарий, не попадающий в представление + КомментарийРасширеннаяПодсказка 52 @@ -638,11 +658,15 @@ -1 Left + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true Vertical @@ -873,6 +897,23 @@ true + + ВозвращатьСписокЗначений + + <key>ru</key> + <value>Возвращать список значений</value> + + 13 + + Boolean + + + true + + + true + + КомандаОК diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index aa242eee9..e885d3725 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -1,18 +1,18 @@ // Форма параметризуется: // -// Заголовок (строка) - заголовок формы -// ЗначенияПолей (строка) - сериализованное значение контактной информации или пустая строка для -// ввода нового -// Представление (строка) - представление телефона (используется только при работе со старыми данными) -// ВидКонтактнойИнформации - ссылка на справочник ВидыКонтактнойИнформации, описывающий то, что мы -// редактируем +// Заголовок - Строка - заголовок формы +// ЗначенияПолей - Строка - сериализованное значение контактной информации или пустая строка для +// ввода нового +// Представление - Строка - представление телефона (используется только при работе со старыми данными) +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации, Структура - описание редактируемого +// Комментарий - Строка - необязательный комментарий, для подстановки в поле "Комментарий" // -// Комментарий (строка) - необязательный комментарий, для подстановки в поле "Комментарий" +// ВозвращатьСписокЗначений - Булево - необязательный флаг того, что возвращаемое значение поля +// КонтактнаяИнформация будет иметь тип СписокЗначений (совместимость) // // Результатом выбора является структура с полями: // "КонтактнаяИнформация, Представление, Комментарий" // -// ------------------------------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -25,6 +25,8 @@ Возврат; КонецЕсли; + Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); + // Разбор параметров в реквизиты ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; @@ -36,12 +38,10 @@ Если ТипКонтактнойИнформации=Перечисления.ТипыКонтактнойИнформации.Телефон Тогда XDTOКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияТелефона( - Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации - ); + Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); Иначе XDTOКонтактная = КонтактнаяИнформацияСлужебный.ДесериализацияФакса( - Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации - ); + Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); КонецЕсли; Если Параметры.Комментарий<>Неопределено Тогда @@ -51,6 +51,11 @@ ЗначениеРеквизитовПоКонтактнойИнформации(XDTOКонтактная); КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность, ВыбраноДействиеВыбора()); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ // @@ -78,8 +83,7 @@ &НаКлиенте Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария( - Элемент.ТекстРедактирования, Комментарий, Модифицированность - ); + Элемент.ТекстРедактирования, Комментарий, Модифицированность); КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -106,18 +110,24 @@ КонецЕсли; КонецЕсли; Результат = РезультатВыбора(); + + СброситьМодифицированностьПриВыборе(); ОповеститьОВыборе(Результат); ИначеЕсли Комментарий<>КопияКомментария Тогда // Изменен только комментарий, пробуем вернуть обновленное Результат = РезультатВыбораТолькоКомментария(); + + СброситьМодифицированностьПриВыборе(); ОповеститьОВыборе(Результат); + Иначе Результат = Неопределено; КонецЕсли; Если (МодальныйРежим Или ЗакрыватьПриВыборе) И Открыта() Тогда + СброситьМодифицированностьПриВыборе(); Закрыть(Результат); КонецЕсли; @@ -132,16 +142,34 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // +&НаКлиенте +Функция ВыбраноДействиеВыбора() + Возврат Не (Модифицированность Или Комментарий<>КопияКомментария); +КонецФункции + +&НаКлиенте +Процедура СброситьМодифицированностьПриВыборе() + Модифицированность = Ложь; + КопияКомментария = Комментарий; +КонецПроцедуры + &НаСервере Функция РезультатВыбора() XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(); + Если ВозвращатьСписокЗначений Тогда + ДанныеВыбора = КонтактнаяИнформацияСлужебный.КонтактнаяИнформацияВСтаруюСтруктуру(XDTOИнформация); + ДанныеВыбора = ДанныеВыбора.ЗначенияПолей; + Иначе + ДанныеВыбора = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(XDTOИнформация); + КонецЕсли; + Возврат Новый Структура("КонтактнаяИнформация, Представление, Комментарий", - КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(XDTOИнформация), + ДанныеВыбора, XDTOИнформация.Представление, - XDTOИнформация.Комментарий - ); + XDTOИнформация.Комментарий); КонецФункции + &НаСервере Функция РезультатВыбораТолькоКомментария() @@ -155,14 +183,13 @@ КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(КонтактнаяИнфо, Комментарий); КонтактнаяИнфо = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(КонтактнаяИнфо); - ИначеЕсли КонтактнаяИнформацияКлиентСервер.ЭтоСтрокаXML(КонтактнаяИнфо) Тогда + ИначеЕсли КонтактнаяИнформацияКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда КонтактнаяИнформацияСлужебный.КомментарийКонтактнойИнформации(КонтактнаяИнфо, Комментарий); КонецЕсли; Возврат Новый Структура("КонтактнаяИнформация, Представление, Комментарий", - КонтактнаяИнфо, Параметры.Представление, Комментарий - ); -КонецФункции + КонтактнаяИнфо, Параметры.Представление, Комментарий); +КонецФункции // Заполняет реквизиты формы из XTDO объекта типа "Контактная информация" &НаСервере @@ -219,7 +246,7 @@ Представление = Инфо.Представление; КонецПроцедуры -// Возвращает список ошибок заполнения в виде списка значений +// Возвращает список ошибок заполнения в виде списка значений: // Представление - описание ошибки // Значение - XPath для поля &НаСервере @@ -237,11 +264,11 @@ КонецЕсли; ОчиститьСообщения(); + // Значение - XPath, представление - описание ошибки Для Каждого Элемент Из СписокОшибок Цикл ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Элемент.Представление,,, - ПутьКДаннымФормыПоПутиXPath(Элемент.Значение) - ); + ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl index 14c30a1d0..c621b1746 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -1,7 +1,7 @@ // Форма параметризуется при помощи: // // КодНаселенногоПункта (число) - если указано, то код текущего адресного классификатора для -// опредения и редактирования частей формы. +// определения и редактирования частей формы. // // НаселенныйПунктДетально - структура, зависящая от адресного классификатора с // описанием частей населенного пункта. Используется, только если @@ -52,9 +52,8 @@ Если Модифицированность Тогда Результат = Новый Структура("Код, Представление, НаселенныйПунктДетально", КодНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса), - КонтактнаяИнформацияКлиент.НаименованиеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса), - ЧастиАдреса - ); + УправлениеКонтактнойИнформациейКлиент.НаименованиеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса), + ЧастиАдреса); #Если ВебКлиент Тогда ФлагЗакрытия = ЗакрыватьПриВыборе; @@ -99,6 +98,11 @@ Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.КнопкаВыбора = Истина; + Часть.Свойство("Подсказка", Элемент.Подсказка); + Если ПустаяСтрока(Элемент.Подсказка) Тогда + Элемент.Подсказка = Часть.Заголовок; + КонецЕсли; + Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеПриИзменении"); Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_ПолеНачалоВыбора"); Элемент.УстановитьДействие("Очистка", "Подключаемый_Очистка"); @@ -140,7 +144,7 @@ ЧастьАдреса.Сокращение = Части.Сокращение; КонецЕсли; - // Ставим в форму, автогенерированые имена элементов и реквизитов совпадают + // Ставим в форму, автоматически сгенерированные имена элементов и реквизитов совпадают ЭтаФорма[Элемент.Имя] = ЧастьАдреса.Значение; Возврат ЧастьАдреса.Значение; @@ -156,9 +160,8 @@ Процедура Подключаемый_ПолеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - КонтактнаяИнформацияКлиент.НачалоВыбораЭлементаАдреса( - Элемент, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПараметрыФормы - ); + УправлениеКонтактнойИнформациейКлиент.НачалоВыбораЭлементаАдреса( + Элемент, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПараметрыФормы); КонецПроцедуры &НаКлиенте Процедура Подключаемый_Очистка(Элемент, СтандартнаяОбработка) @@ -169,14 +172,15 @@ Перем МожноЗагружатьРегион; Если ТипЗнч(ВыбранноеЗначение)=Тип("Структура") Тогда - РегионНеЗагружен = ВыбранноеЗначение.Свойство("МожноЗагружатьРегион") И ВыбранноеЗначение.МожноЗагружатьРегион; + + РегионНеЗагружен = (ВыбранноеЗначение.Свойство("МожноЗагружатьРегион") И ВыбранноеЗначение.МожноЗагружатьРегион) + Или (ВыбранноеЗначение.Свойство("СтруктураАдреса") И ВыбранноеЗначение.СтруктураАдреса.МожноЗагружатьРегион); + Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда // Предлагаем загрузить классификатор - КонтактнаяИнформацияКлиент.ПредложениеЗагрузкиКлассификатора( + УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление - ) - ); + НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление)); КонецЕсли; ВыбранноеЗначение = УстановитьЗначениеЧастиАдреса(Элемент, ВыбранноеЗначение); @@ -203,8 +207,7 @@ #КонецЕсли ДанныеВыбора = СписокАвтоПодбораЭлементаАдреса( - Текст, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПредупреждатьОНеактуальных - ); + Текст, ИмяЧастиАдресаЭлемента(Элемент), ЧастиАдреса, ПредупреждатьОНеактуальных); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПолеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) @@ -230,12 +233,10 @@ &НаСервереБезКонтекста Функция СписокАвтоПодбораЭлементаАдреса(Текст, КодЧастиАдреса, Знач ЧастиАдреса, ПредупреждатьОНеактуальных) Возврат КонтактнаяИнформацияСлужебный.СписокАвтоПодбораЭлементаАдреса( - Текст, КодЧастиАдреса, ЧастиАдреса, ПредупреждатьОНеактуальных - ); + Текст, КодЧастиАдреса, ЧастиАдреса, ПредупреждатьОНеактуальных); КонецФункции &НаСервереБезКонтекста Функция СписокВариантовЭлементаАдресаПоТексту(Текст, КодЧастиАдреса, ЧастиАдреса, ВыбиратьСтрок) Возврат КонтактнаяИнформацияСлужебный.СписокВариантовЭлементаАдресаПоТексту( - Текст, КодЧастиАдреса, ЧастиАдреса, ВыбиратьСтрок - ); + Текст, КодЧастиАдреса, ЧастиАдреса, ВыбиратьСтрок); КонецФункции diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Form.form deleted file mode 100644 index 238e97d14..000000000 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Form.form +++ /dev/null @@ -1,107 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <autoCommandBar> - <name>ФормаКоманднаяПанель</name> - <id>-1</id> - <horizontalAlign>Left</horizontalAlign> - <autoFill>true</autoFill> - </autoCommandBar> - <handlers> - <event>OnOpen</event> - <name>ПриОткрытии</name> - </handlers> - <handlers> - <event>OnCreateAtServer</event> - <name>ПриСозданииНаСервере</name> - </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> - <saveWindowSettings>true</saveWindowSettings> - <autoTitle>true</autoTitle> - <autoUrl>true</autoUrl> - <group>Vertical</group> - <autoFillCheck>true</autoFillCheck> - <allowFormCustomize>true</allowFormCustomize> - <enabled>true</enabled> - <verticalScroll>UseIfNecessary</verticalScroll> - <showTitle>auto</showTitle> - <showCloseButton>true</showCloseButton> - <attributes> - <name>Объект</name> - <id>1</id> - <valueType> - <types>DataProcessorObject.ВводКонтактнойИнформации</types> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - <main>true</main> - </attributes> - <attributes> - <name>ИмяОткрываемойФормы</name> - <title> - <key>ru</key> - <value>Имя открываемой формы</value> - - 2 - - String - - - - true - - - true - - - - ПараметрыОткрываемойФормы - - <key>ru</key> - <value>Параметры открываемой формы</value> - - 3 - - - true - - - true - - - - Заголовок - - String - - - - - ЗначенияПолей - - String - - - - - Представление - - String - - - - - ВидКонтактнойИнформации - - CatalogRef.ВидыКонтактнойИнформации - - - - - - - - diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Module.bsl deleted file mode 100644 index 88aa08661..000000000 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/Форма/Module.bsl +++ /dev/null @@ -1,42 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - ТипИнформации = Параметры.ВидКонтактнойИнформации.Тип; - ИмяФормыВидаКонтактнойИнформации = КонтактнаяИнформацияКлиентСерверПовтИсп.ИмяФормыВводаКонтактнойИнформации( - ТипИнформации - ); - - Если ИмяФормыВидаКонтактнойИнформации=Неопределено Тогда - Ошибка = НСтр("ru='Вид информации : ""%1""' нельзя открыть в диалоге"); - ВызватьИсключение СтрЗаменить(Ошибка, "%1", ТипИнформации); - КонецЕсли; - - // Транслируем параметры - ПараметрыОткрываемойФормы = Новый Структура; - ПараметрыОткрываемойФормы.Вставить("ВидКонтактнойИнформации", Параметры.ВидКонтактнойИнформации); - ПараметрыОткрываемойФормы.Вставить("Заголовок", Параметры.Заголовок); - ПараметрыОткрываемойФормы.Вставить("ЗначенияПолей", Параметры.ЗначенияПолей); - ПараметрыОткрываемойФормы.Вставить("Представление", Параметры.Представление); - - ПараметрыОткрываемойФормы.Вставить("ЗакрыватьПриВыборе", ЗакрыватьПриВыборе); - ПараметрыОткрываемойФормы.Вставить("ЗакрыватьПриЗакрытииВладельца", ЗакрыватьПриЗакрытииВладельца); -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - Отказ = Истина; - Если МодальныйРежим Тогда - Закрыть( ОткрытьФормуМодально(ИмяОткрываемойФормы, ПараметрыОткрываемойФормы, ВладелецФормы) ); - Иначе - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыОткрываемойФормы, ВладелецФормы, ,Окно); - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo index 1613ec1d5..a515b1f7d 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo @@ -9,8 +9,7 @@ ru Ввод контактной информации - true - DataProcessor.ВводКонтактнойИнформации.Form.Форма + DataProcessor.ВводКонтактнойИнформации.Form.ВводАдреса ВводАдреса @@ -25,24 +24,6 @@ PersonalComputer MobileDevice - - НаселенныйПунктАдреса - - ru - Населенный пункт адреса - - PersonalComputer - MobileDevice - - - Форма - - ru - Форма - - PersonalComputer - MobileDevice - ВводТелефона @@ -52,4 +33,13 @@ PersonalComputer MobileDevice + + НаселенныйПунктАдреса + + ru + Населенный пункт адреса + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index bdefe658a..2ec798ae8 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -11,7 +11,7 @@ 63 <key>ru</key> - <value>Для того чтобы синхронизировать данные необходимо указать пароль.</value> + <value>Введите пароль для входа в приложение в Интернете</value> true true @@ -141,40 +141,6 @@ Auto
            - - ЗапомнитьПароль - 56 - true - true - - true - - - WSЗапомнитьПароль - - Right - - ЗапомнитьПарольРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - ЗапомнитьПарольКонтекстноеМеню - 57 - true - - CheckBoxField - Enter - true - Left - true - - КоманднаяПанельВыполненияОбмена 60 @@ -189,7 +155,7 @@ true ВыполнитьОбменРасширеннаяПодсказка - 98 + 96 Label true true @@ -215,7 +181,7 @@ ФормаЗакрыть2РасширеннаяПодсказка - 99 + 97 Label true true @@ -241,7 +207,7 @@ КоманднаяПанельВыполненияОбменаРасширеннаяПодсказка - 97 + 95 Label true true @@ -259,6 +225,10 @@ true + + <key>ru</key> + <value>Запрос пароля пользователя</value> + ru Загрузка данных @@ -296,7 +266,7 @@ ДлительнаяОперацияРасширеннаяПодсказка - 101 + 99 Label true true @@ -334,7 +304,7 @@ СтатусЗагрузкиДанныхРасширеннаяПодсказка - 102 + 100 Label true true @@ -371,7 +341,7 @@ ОжиданиеСинхронизацииДанныхРасширеннаяПодсказка - 100 + 98 Label true true @@ -407,7 +377,7 @@ КартинкаОбменЗавершенУспешноРасширеннаяПодсказка - 106 + 104 Label true true @@ -422,7 +392,7 @@ 7 true - 3 + 2 true @@ -444,7 +414,7 @@ СтатусОбменЗавершенУспешноРасширеннаяПодсказка - 107 + 105 Label true true @@ -459,7 +429,7 @@ Label true - 3 + 2 true Left @@ -481,7 +451,7 @@ ОбменЗавершенУспешноРасширеннаяПодсказка - 105 + 103 Label true true @@ -511,7 +481,7 @@ КартинкаОбменЗавершенСОшибкойРасширеннаяПодсказка - 109 + 107 Label true true @@ -526,7 +496,7 @@ 7 true - 3 + 2 true @@ -549,7 +519,7 @@ СтатусОбменЗавершенСОшибкойРасширеннаяПодсказка - 110 + 108 Label true true @@ -564,7 +534,6 @@ Label true - 3 true Left @@ -586,7 +555,7 @@ ОбменЗавершенСОшибкойРасширеннаяПодсказка - 108 + 106 Label true true @@ -616,7 +585,7 @@ КартинкаОбменЗавершенСОшибкой1РасширеннаяПодсказка - 112 + 110 Label true true @@ -631,7 +600,7 @@ 7 true - 3 + 2 true @@ -656,7 +625,7 @@ СтатусОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка - 114 + 112 Label true true @@ -671,7 +640,6 @@ Label true - 2 true false @@ -689,7 +657,7 @@ ПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 115 + 113 Label true true @@ -721,7 +689,7 @@ СтатусноеСообщениеРасширеннаяПодсказка - 113 + 111 Label true true @@ -754,7 +722,7 @@ ОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка - 111 + 109 Label true true @@ -784,7 +752,7 @@ КартинкаОбменЗавершенСОшибкой2РасширеннаяПодсказка - 117 + 115 Label true true @@ -799,7 +767,7 @@ 7 true - 3 + 2 true @@ -821,7 +789,7 @@ None СообщениеОбОшибкеПользователюРасширеннаяПодсказка - 118 + 116 Label true true @@ -866,7 +834,7 @@ ОбменЗавершенСОшибкойПодключенияРасширеннаяПодсказка - 116 + 114 Label true true @@ -896,7 +864,7 @@ КартинкаТребуетсяОбновлениеРасширеннаяПодсказка - 121 + 119 Label true true @@ -911,7 +879,7 @@ 5 true - 3 + 2 true false @@ -927,7 +895,7 @@ ТребуетсяОбновлениеОграниченныеПрава 39 - ТекстТребуетсяОбновлениеОрганиченныеПрава + ТекстТребуетсяОбновлениеОграниченныеПрава 40 <key>ru</key> @@ -940,8 +908,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ТекстТребуетсяОбновлениеОрганиченныеПраваРасширеннаяПодсказка</name> - <id>124</id> + <name>ТекстТребуетсяОбновлениеОграниченныеПраваРасширеннаяПодсказка</name> + <id>122</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -950,7 +918,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ТекстТребуетсяОбновлениеОрганиченныеПраваКонтекстноеМеню</name> + <name>ТекстТребуетсяОбновлениеОграниченныеПраваКонтекстноеМеню</name> <id>41</id> <autoFill>true</autoFill> </contextMenu> @@ -978,7 +946,7 @@ </toolTip> <extendedTooltip> <name>ТребуетсяОбновлениеОграниченныеПраваРасширеннаяПодсказка</name> - <id>123</id> + <id>121</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1010,7 +978,7 @@ </userVisible> <extendedTooltip> <name>ТекстТребуетсяОбновлениеПолныеПраваРасширеннаяПодсказка</name> - <id>126</id> + <id>124</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1047,7 +1015,7 @@ </toolTip> <extendedTooltip> <name>ТребуетсяОбновлениеПолныеПраваРасширеннаяПодсказка</name> - <id>125</id> + <id>123</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1077,7 +1045,7 @@ <height>1</height> <extendedTooltip> <name>ПанельТребуетсяОбновлениеРасширеннаяПодсказка</name> - <id>122</id> + <id>120</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1105,7 +1073,7 @@ </toolTip> <extendedTooltip> <name>ТребуетсяОбновлениеРасширеннаяПодсказка</name> - <id>120</id> + <id>118</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1133,7 +1101,7 @@ </toolTip> <extendedTooltip> <name>СтатусЗавершенияОбменаРасширеннаяПодсказка</name> - <id>104</id> + <id>102</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1165,7 +1133,7 @@ </userVisible> <extendedTooltip> <name>ФормаЗакрытьРасширеннаяПодсказка</name> - <id>130</id> + <id>128</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1195,7 +1163,7 @@ </toolTip> <extendedTooltip> <name>КоманднаяПанельЗакрытьРасширеннаяПодсказка</name> - <id>129</id> + <id>127</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1223,7 +1191,7 @@ </toolTip> <extendedTooltip> <name>ДействияЗакрытьРасширеннаяПодсказка</name> - <id>128</id> + <id>126</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1253,7 +1221,7 @@ </userVisible> <extendedTooltip> <name>УстановитьОбновлениеРасширеннаяПодсказка</name> - <id>133</id> + <id>131</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1279,7 +1247,7 @@ </userVisible> <extendedTooltip> <name>ФормаЗакрыть1РасширеннаяПодсказка</name> - <id>134</id> + <id>132</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1309,7 +1277,7 @@ </toolTip> <extendedTooltip> <name>КоманднаяПанельУстановитьЗакрытьРасширеннаяПодсказка</name> - <id>132</id> + <id>130</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1337,7 +1305,7 @@ </toolTip> <extendedTooltip> <name>ДействияУстановитьЗакрытьРасширеннаяПодсказка</name> - <id>131</id> + <id>129</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1366,7 +1334,7 @@ </toolTip> <extendedTooltip> <name>ПанельДействийРасширеннаяПодсказка</name> - <id>127</id> + <id>125</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1394,7 +1362,7 @@ </toolTip> <extendedTooltip> <name>ЗавершениеОбменаРасширеннаяПодсказка</name> - <id>103</id> + <id>101</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1777,42 +1745,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>WSURLВебСервиса</name> - <title> - <key>ru</key> - <value>WSURLВеб сервиса</value> - - 9 - - String - - - - true - - - true - - - - WSИмяПользователя - - <key>ru</key> - <value>WSИмя пользователя</value> - - 10 - - String - - - - true - - - true - - WSПароль @@ -1953,23 +1885,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>WSЗапомнитьПароль</name> - <title> - <key>ru</key> - <value>Запомнить пароль</value> - - 20 - - Boolean - - - true - - - true - - АдресДляВосстановленияПароляУчетнойЗаписи @@ -2019,6 +1934,91 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ИспользоватьТекущегоПользователяДляАутентификации</name> + <title> + <key>ru</key> + <value>Использовать текущего пользователя для аутентификации</value> + + 23 + + Boolean + + + true + + + true + + + + ПарольСинхронизацииЗадан + + <key>ru</key> + <value>Пароль синхронизации задан</value> + + 9 + + Boolean + + + true + + + true + + + + ЗакрытьПриУспешнойСинхронизации + + <key>ru</key> + <value>Закрыть при успешной синхронизации</value> + + 10 + + Boolean + + + true + + + true + + + + ИспользоватьСохраненныеПараметрыАутентификации + + <key>ru</key> + <value>Использовать сохраненные параметры аутентификации</value> + + 20 + + Boolean + + + true + + + true + + + + ЗавершениеРаботыСистемы + + <key>ru</key> + <value>Завершение работы системы</value> + + 25 + + Boolean + + + true + + + true + + ПерейтиВЖурналРегистрации @@ -2120,6 +2120,18 @@ <stringQualifiers/> </valueType> </parameters> + <parameters> + <name>ЗакрытьПриУспешнойСинхронизации</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>ЗавершениеРаботыСистемы</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index 0e3e9e683..214d1fcfa 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -11,13 +11,16 @@ УстановитьПривилегированныйРежим(Истина); - УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; + АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; + ЗакрытьПриУспешнойСинхронизации = Параметры.ЗакрытьПриУспешнойСинхронизации; + УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; + ЗавершениеРаботыСистемы = Параметры.ЗавершениеРаботыСистемы; Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); + УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); Иначе @@ -27,7 +30,7 @@ КонецЕсли; - ЕстьОшибки = КонфигурацияИзменена() И ПланыОбмена.ГлавныйУзел() = УзелИнформационнойБазы; + ЕстьОшибки = ((ОбменДаннымиСервер.ГлавныйУзел() = УзелИнформационнойБазы) И КонфигурацияИзменена()); // устанавливаем заголовок формы Заголовок = НСтр("ru = 'Синхронизация данных с ""%1""'"); @@ -37,26 +40,26 @@ ВидТранспортаСообщений = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - НастройкиТранспортаWS = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы); - - ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкиТранспортаWS); - - КонецЕсли; + // При обмене в распределенной информационной базе через веб-сервис всегда переопределяем параметры аутентификации + // (пользователь и пароль), сохраненные в информационной базе. + // При обмене через веб-сервис для не-РИБ обменов параметры аутентификации (пароль) переопределяем (запрашиваем) только, + // если пароль не сохранен в информационной базе. + ИспользоватьТекущегоПользователяДляАутентификации = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); + ПарольСинхронизацииСохранен = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы).WSЗапомнитьПароль; + ИспользоватьСохраненныеПараметрыАутентификации = Не ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) И ПарольСинхронизацииСохранен; РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); РольДоступнаПолныеПрава = Пользователи.РолиДоступны("ПолныеПрава"); Элементы.ПанельТребуетсяОбновление.ТекущаяСтраница = ?(РольДоступнаПолныеПрава, Элементы.ТребуетсяОбновлениеПолныеПрава, Элементы.ТребуетсяОбновлениеОграниченныеПрава); Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок, УзелИнформационнойБазы); - Элементы.ТекстТребуетсяОбновлениеОрганиченныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеОрганиченныеПрава.Заголовок, УзелИнформационнойБазы); - - АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; + Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеОграниченныеПрава.Заголовок, УзелИнформационнойБазы); Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); СинхронизацияДанныхОтключена = Ложь; + ВыполнитьОтправкуДанных = Ложь; // Устанавливаем текущий сценарий работы обмена Если ЕстьОшибки Тогда @@ -65,13 +68,64 @@ ИначеЕсли ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - Если WSЗапомнитьПароль Тогда + ВыполнитьОтправкуДанных = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВыполнитьОтправкуДанных(УзелИнформационнойБазы); + + Если ИспользоватьСохраненныеПараметрыАутентификации Тогда - СценарийОбменаЧерезВебСервис(); + Если ПарольСинхронизацииСохранен Тогда + + Если ВыполнитьОтправкуДанных Тогда + + СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка(); + + Иначе + + СценарийОбменаЧерезВебСервис(); + + КонецЕсли; + + Иначе + + Если ВыполнитьОтправкуДанных Тогда + + СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); + + Иначе + + СценарийОбменаЧерезВебСервисСЗапросомПароля(); + + КонецЕсли; + + КонецЕсли; Иначе - СценарийОбменаЧерезВебСервисСЗапросомПароля(); + Если ПарольСинхронизацииЗадан Тогда + + Если ВыполнитьОтправкуДанных Тогда + + СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка(); + + Иначе + + СценарийОбменаЧерезВебСервис(); + + + КонецЕсли; + + Иначе + + Если ВыполнитьОтправкуДанных Тогда + + СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка(); + + Иначе + + СценарийОбменаЧерезВебСервисСЗапросомПароля(); + + КонецЕсли; + + КонецЕсли; КонецЕсли; @@ -96,20 +150,21 @@ &НаКлиенте Процедура ПерейтиВЖурналРегистрации(Команда) - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы), ЭтаФорма); + ПараметрыФормы = ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура УстановитьОбновление(Команда) Закрыть(); - ОбменДаннымиКлиент.ВыполнитьОбновлениеИнформационнойБазы(); + ОбменДаннымиКлиент.ВыполнитьОбновлениеИнформационнойБазы(ЗавершениеРаботыСистемы); КонецПроцедуры &НаКлиенте Процедура ЗабылиПароль(Команда) - ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(); + ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры @@ -373,8 +428,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -436,12 +490,15 @@ ДлительнаяОперацияЗавершенаСОшибкой = Ложь; СообщениеОбОшибке = ""; - СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, - WSURLВебСервиса, - WSИмяПользователя, - WSПароль, - СообщениеОбОшибке - ); + ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, + Неопределено, + Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации)); + + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( + ИдентификаторДлительнойОперации, + УзелИнформационнойБазы, + ПараметрыАутентификации, + СообщениеОбОшибке); Если СостояниеОперации = "Active" Тогда @@ -501,7 +558,7 @@ КонецФункции &НаСервереБезКонтекста -Процедура ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений) +Процедура ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, Знач ВидТранспортаСообщений) // запускаем выполнение обмена ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( @@ -509,8 +566,7 @@ УзелИнформационнойБазы, Истина, Ложь, - ВидТранспортаСообщений - ); + ВидТранспортаСообщений); КонецПроцедуры @@ -526,7 +582,7 @@ КонецФункции &НаСервереБезКонтекста -Процедура ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений) +Процедура ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, Знач ВидТранспортаСообщений) // запускаем выполнение обмена ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( @@ -534,8 +590,7 @@ УзелИнформационнойБазы, Ложь, Истина, - ВидТранспортаСообщений - ); + ВидТранспортаСообщений); КонецПроцедуры @@ -563,65 +618,23 @@ &НаКлиенте Функция Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ПроверитьПодключениеИСохранитьНастройки(Отказ); - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); - - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_ОжиданиеПроверкиПодключенияПарольЗадан_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ПроверитьПодключение(); КонецФункции -&НаСервере -Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтаФорма); - - СообщениеПользователю = ""; - Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); - Возврат; - КонецЕсли; - - Если WSЗапомнитьПароль Тогда - - Попытка - - УстановитьПривилегированныйРежим(Истина); - - // обновляем запись в РС - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); - СтруктураЗаписи.Вставить("WSПароль", WSПароль); - РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); - - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); - Возврат; - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура ПроверитьПодключение() - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтаФорма); + УстановитьПривилегированныйРежим(Истина); + + ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, + Неопределено, + Новый Структура("ИспользоватьТекущегоПользователя, Пароль", + ИспользоватьТекущегоПользователяДляАутентификации, ?(ПарольСинхронизацииЗадан, Неопределено, WSПароль))); + + WSПароль = ""; // Сбрасываем пароль после проверки подключения + + ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, ПараметрыПодключения, СообщениеОбОшибкеПользователю) Тогда СинхронизацияДанныхОтключена = Истина; @@ -639,6 +652,10 @@ Если Не СинхронизацияДанныхОтключена Тогда + ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, + Неопределено, + Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации)); + ЗагрузкаДанных_ОбработкаДлительнойОперации( Отказ, УзелИнформационнойБазы, @@ -646,8 +663,7 @@ ИдентификаторДлительнойОперации, ИдентификаторФайлаСообщенияВСервисе, ДатаНачалаОперации, - WSПароль - ); + ПараметрыАутентификации); КонецЕсли; @@ -660,13 +676,12 @@ &НаСервереБезКонтекста Процедура ЗагрузкаДанных_ОбработкаДлительнойОперации( Отказ, - УзелИнформационнойБазы, + Знач УзелИнформационнойБазы, ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДатаНачалаОперации, - Пароль - ) + Знач ПараметрыАутентификации) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -681,8 +696,7 @@ ИдентификаторОперации, ИдентификаторФайла, Истина, - Пароль - ); + ПараметрыАутентификации); КонецПроцедуры @@ -710,18 +724,20 @@ УзелИнформационнойБазы, "ЗагрузкаДанных", ДатаНачалаОперации, - СообщениеОбОшибке - ); + СообщениеОбОшибке); Иначе + ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, + Неопределено, + Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации)); + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Ложь, УзелИнформационнойБазы, ИдентификаторФайлаСообщенияВСервисе, ДатаНачалаОперации, - WSПароль - ); + ПараметрыАутентификации); КонецЕсли; @@ -739,6 +755,10 @@ Если Не СинхронизацияДанныхОтключена Тогда + ПараметрыАутентификации = ?(ИспользоватьСохраненныеПараметрыАутентификации, + Неопределено, + Новый Структура("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации)); + ВыгрузкаДанных_ОбработкаДлительнойОперации( Отказ, УзелИнформационнойБазы, @@ -746,8 +766,7 @@ ИдентификаторДлительнойОперации, ИдентификаторФайлаСообщенияВСервисе, ДатаНачалаОперации, - WSПароль - ); + ПараметрыАутентификации); КонецЕсли; @@ -760,13 +779,12 @@ &НаСервереБезКонтекста Процедура ВыгрузкаДанных_ОбработкаДлительнойОперации( Отказ, - УзелИнформационнойБазы, + Знач УзелИнформационнойБазы, ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, ДатаНачалаОперации, - Пароль - ) + Знач ПараметрыАутентификации) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -781,8 +799,7 @@ ИдентификаторОперации, ИдентификаторФайла, Истина, - Пароль - ); + ПараметрыАутентификации); КонецПроцедуры @@ -810,15 +827,13 @@ УзелИнформационнойБазы, "ВыгрузкаДанных", ДатаНачалаОперации, - СообщениеОбОшибке - ); + СообщениеОбОшибке); Иначе ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( УзелИнформационнойБазы, - ДатаНачалаОперации - ); + ДатаНачалаОперации); КонецЕсли; @@ -836,8 +851,7 @@ СтраницаОбменЗавершенСОшибкой = ?(РольДоступнаДобавлениеИзменениеОбменовДанными, Элементы.ОбменЗавершенСОшибкойДляАдминистратора, - Элементы.ОбменЗавершенСОшибкой - ); + Элементы.ОбменЗавершенСОшибкой); Если СинхронизацияДанныхОтключена Тогда @@ -873,15 +887,11 @@ Оповестить("ВыполненОбменДанными"); -КонецФункции - -&НаКлиенте -Функция Подключаемый_НачалоВыполненияОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ЭтоПереходДалее Тогда - - ПропуститьСтраницу = Истина; + Если ЗакрытьПриУспешнойСинхронизации + И Не СинхронизацияДанныхОтключена + И Не ЕстьОшибки Тогда + Закрыть(); КонецЕсли; КонецФункции @@ -905,7 +915,7 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ОжиданиеПроверкиПодключенияПарольЗадан_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); @@ -916,6 +926,32 @@ КонецПроцедуры +&НаСервере +Процедура СценарийОбменаЧерезВебСервис_ОтправкаПолучениеОтправка() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); + + // Отправка + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Получение + ТаблицаПереходовНоваяСтрока(5, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Отправка + ТаблицаПереходовНоваяСтрока(8, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(10, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(11, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + +КонецПроцедуры + &НаСервере Процедура СценарийОбменаЧерезВебСервисСЗапросомПароля() @@ -933,6 +969,33 @@ КонецПроцедуры +&НаСервере +Процедура СценарийОбменаЧерезВебСервисСЗапросомПароля_ОтправкаПолучениеОтправка() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ЗапросПароляПользователя",,, "ЗапросПароляПользователя_ПриОткрытии", "ЗапросПароляПользователя_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); + + // Отправка + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Получение + ТаблицаПереходовНоваяСтрока(6, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Отправка + ТаблицаПереходовНоваяСтрока(9, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(10, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(11, "ОжиданиеСинхронизацииДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(12, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + +КонецПроцедуры + &НаСервере Процедура СценарийКогдаЕстьОшибкиПриНачалеРаботы() diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Form.form index 04d66efe9..3ab22c685 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Form.form @@ -756,7 +756,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html index 1e760fad7..8e71ee94a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> -<p>Если в процессе записи при установленном флажке <strong>Изменять в транзакции </strong>не удается записать один из элементов (например, потому что он редактируется другим пользователем), то будут отменены изменения во всех элементах. По умолчанию флажок не установлен. </p> -<p>Если изменение элементов выполняется не в транзакции, то рекомендуется выполнять ее с установленным флажком <strong>Прерывать по ошибке</strong>. В этом случае, если запись элементов по каким-либо причинам не возможна, система выдаст предупреждение и предложит продолжить изменение оставшихся элементов, либо прервать для выяснения причин проблемы. Если флажок не установлен, а элемент записать нельзя, то он будет пропущен и продолжится изменение оставшихся элементов.</p> -<p>Установка флажка <strong>Обрабатывать дочерние элементы</strong> (по умолчанию флажок не установлен) позволяет изменять дочерние элементы выбранных групп и родительских элементов без необходимости установки флажков у всех элементов групп и дочерних элементах. Если флажок снят, то система обрабатывает саму группу, а не ее дочерние элементы.</p></body></html> \ No newline at end of file +<!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 9.00.8112.16470"></meta></head><body> +<p>Дополнительно <a href="DataProcessor.ГрупповоеИзменениеОбъектов/Help">на первой странице помощника</a> можно задать особые настройки с помощью команды <strong>Настроить параметры изменения</strong>. Система позволяет обрабатывать объекты в транзакции. Если в процессе записи при установленном флажке <strong>Изменять в транзакции </strong>не удается записать один из объектов (например, потому что объект редактируется другим пользователем), то будут отменены изменения во всех объектах. По умолчанию флажок не установлен. </p> +<p>Если изменение объектов выполняется не в транзакции, то рекомендуется выполнять ее с установленным флажком <strong>Прерывать по ошибке</strong>. В этом случае, если запись объекта по каким-либо причинам не возможна, система выдаст предупреждение и предложит продолжить изменение оставшихся объектов, либо прервать для выяснения причин проблемы. Если флажок не установлен, а объект записать нельзя, то обработка пропустит такой объект и продолжит изменение оставшихся объектов.</p> +<p>Установка флажка <strong>Обрабатывать дочерние элементы</strong> (по умолчанию флажок не установлен) позволяет изменять дочерние элементы выбранных групп и родительских объектов без необходимости установки флажков у всех элементов групп и дочерних объектов. Если флажок снят, то система обрабатывает саму группу, а не ее дочерние элементы.</p></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 f74260370..ff33fc76c 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl @@ -3,17 +3,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ИзменятьВТранзакции = Параметры.ИзменятьВТранзакции; - ОбрабатыватьРекурсивно = Параметры.ОбрабатыватьРекурсивно; - НастройкаПорции = Параметры.НастройкаПорции; - ПроцентОбъектовВПорции = Параметры.ПроцентОбъектовВПорции; - ЧислоОбъектовВПорции = Параметры.ЧислоОбъектовВПорции; - ПрерыватьПриОшибке = Параметры.ПрерыватьПриОшибке; + Параметры.Свойство("ИзменятьВТранзакции", ИзменятьВТранзакции); + Параметры.Свойство("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); + Параметры.Свойство("НастройкаПорции", НастройкаПорции); + Параметры.Свойство("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); + Параметры.Свойство("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); + Параметры.Свойство("ПрерыватьПриОшибке", ПрерыватьПриОшибке); Если НЕ Параметры.УчитыватьИерархию Тогда Элементы.ОбрабатыватьГруппыРекурсивно.Доступность = Ложь; @@ -51,15 +50,15 @@ &НаКлиенте Процедура ОК(Команда) - Настройки = Новый Структура; - Настройки.Вставить("ИзменятьВТранзакции", ИзменятьВТранзакции); - Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); - Настройки.Вставить("НастройкаПорции", НастройкаПорции); - Настройки.Вставить("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); - Настройки.Вставить("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); - Настройки.Вставить("ПрерыватьПриОшибке", ИзменятьВТранзакции Или ПрерыватьПриОшибке); + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ИзменятьВТранзакции", ИзменятьВТранзакции); + РезультатВыбора.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); + РезультатВыбора.Вставить("НастройкаПорции", НастройкаПорции); + РезультатВыбора.Вставить("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); + РезультатВыбора.Вставить("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); + РезультатВыбора.Вставить("ПрерыватьПриОшибке", ИзменятьВТранзакции Или ПрерыватьПриОшибке); - Закрыть(Настройки); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form index 79f2c6348..bd56bad6f 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form @@ -303,12 +303,6 @@ <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> - <choiceParameterLinks> - <name>Отбор._Владелец</name> - <datapath xsi:type="form:DataPath"> - <segments>Items.ТаблицаОпераций.CurrentData.Свойство</segments> - </datapath> - </choiceParameterLinks> <textSize>Normal</textSize> </extInfo> </items> @@ -542,6 +536,10 @@ <items xsi:type="form:FormField"> <name>ОбъектыДляИзмененияИзменять</name> <id>53</id> + <title> + <key>ru</key> + <value> </value> + true true @@ -1399,6 +1397,10 @@ Right + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl index 02fb67581..7d7077ee5 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl @@ -19,7 +19,7 @@ // с блокируемыми реквизитами (ФормаРаботыСБлокируемымиРеквизитами). // // ПолноеИмяФормыРаботыСБлокируемымиРеквизитами - строка - полное имя формы для использования -// в функции ОткрытьФормуМодально, Например, +// в функции ОткрытьФорму, Например, // "Справочник.Номенклатура.Форма.ФормаРаботыСБлокируемымиРеквизитами" // ------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// @@ -34,6 +34,11 @@ Возврат; КонецЕсли; + НекорректныйВызовОбработки = ТипЗнч(Параметры.МассивОбъектов) <> Тип("Массив"); + Если НекорректныйВызовОбработки Тогда + Возврат; + КонецЕсли; + ТипПереданногоОбъекта = ТипЗнч(Параметры.МассивОбъектов[0]); КоличествоОбъектов = Параметры.МассивОбъектов.Количество(); ШаблонЗаголовка = НСтр("ru = 'Изменение выделенных элементов ""%1"" (%2)'"); @@ -46,13 +51,6 @@ // При отсутствии права сохранения настроек необходимо спрятать весь функционал работы с настройками Элементы.ИсторияОпераций.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); - НекорректныйВызовОбработки = Ложь; - - Если ТипЗнч(Параметры.МассивОбъектов) <> Тип("Массив") Тогда - НекорректныйВызовОбработки = Истина; - Возврат; - КонецЕсли; - // Оптимизация, для того, что бы не переформировывать таблицу // изменяемых объектов при простом перелистывании ИзменитьТаблицуОбъектов = Ложь; @@ -109,6 +107,33 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ГрупповоеИзменениеОбъектов.Форма.Настройка") Тогда + + ПереформироватьСоставОперацийИДеревоОбъектов = Ложь; + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + Если УчитыватьИерархию И ОбрабатыватьРекурсивно <> ВыбранноеЗначение.ОбрабатыватьРекурсивно Тогда + ОбрабатыватьРекурсивно = ВыбранноеЗначение.ОбрабатыватьРекурсивно; + ПереформироватьСоставОперацийИДеревоОбъектов = Истина; + КонецЕсли; + Объект.ИзменятьВТранзакции = ВыбранноеЗначение.ИзменятьВТранзакции; + Объект.ПрерыватьПриОшибке = ВыбранноеЗначение.ПрерыватьПриОшибке; + ТОНастройкаПорции = ВыбранноеЗначение.НастройкаПорции; + ТОПроцентОбъектовВПорции = ВыбранноеЗначение.ПроцентОбъектовВПорции; + ТОЧислоОбъектовВПорции = ВыбранноеЗначение.ЧислоОбъектовВПорции; + КонецЕсли; + + Если ПереформироватьСоставОперацийИДеревоОбъектов Тогда + ЗаполнитьДеревоОбъектовИОпераций(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии() @@ -261,35 +286,17 @@ &НаКлиенте Процедура НастроитьПараметрыИзменения(Команда) - Настройки = Новый Структура; + ПараметрыФормы = Новый Структура; - Настройки.Вставить("ИзменятьВТранзакции", Объект.ИзменятьВТранзакции); - Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); - Настройки.Вставить("ПрерыватьПриОшибке", Объект.ПрерыватьПриОшибке); - Настройки.Вставить("НастройкаПорции", ТОНастройкаПорции); - Настройки.Вставить("ПроцентОбъектовВПорции", ТОПроцентОбъектовВПорции); - Настройки.Вставить("ЧислоОбъектовВПорции", ТОЧислоОбъектовВПорции); - Настройки.Вставить("УчитыватьИерархию", УчитыватьИерархию); + ПараметрыФормы.Вставить("ИзменятьВТранзакции", Объект.ИзменятьВТранзакции); + ПараметрыФормы.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); + ПараметрыФормы.Вставить("ПрерыватьПриОшибке", Объект.ПрерыватьПриОшибке); + ПараметрыФормы.Вставить("НастройкаПорции", ТОНастройкаПорции); + ПараметрыФормы.Вставить("ПроцентОбъектовВПорции", ТОПроцентОбъектовВПорции); + ПараметрыФормы.Вставить("ЧислоОбъектовВПорции", ТОЧислоОбъектовВПорции); + ПараметрыФормы.Вставить("УчитыватьИерархию", УчитыватьИерархию); - Результат = ОткрытьФормуМодально("Обработка.ГрупповоеИзменениеОбъектов.Форма.Настройка", Настройки); - - ПереформироватьСоставОперацийИДеревоОбъектов = Ложь; - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Если УчитыватьИерархию И ОбрабатыватьРекурсивно <> Результат.ОбрабатыватьРекурсивно Тогда - ОбрабатыватьРекурсивно = Результат.ОбрабатыватьРекурсивно; - ПереформироватьСоставОперацийИДеревоОбъектов = Истина; - КонецЕсли; - Объект.ИзменятьВТранзакции = Результат.ИзменятьВТранзакции; - Объект.ПрерыватьПриОшибке = Результат.ПрерыватьПриОшибке; - ТОНастройкаПорции = Результат.НастройкаПорции; - ТОПроцентОбъектовВПорции = Результат.ПроцентОбъектовВПорции; - ТОЧислоОбъектовВПорции = Результат.ЧислоОбъектовВПорции; - КонецЕсли; - - Если ПереформироватьСоставОперацийИДеревоОбъектов Тогда - ЗаполнитьДеревоОбъектовИОпераций(); - КонецЕсли; + ОткрытьФорму("Обработка.ГрупповоеИзменениеОбъектов.Форма.Настройка", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -303,9 +310,9 @@ &НаКлиенте Процедура ПерейтиВЖурналРегистрации(Команда) - ПараметрыЖР = Новый Структура("Пользователь", ТекущийПользователь); + ПараметрыФормы = Новый Структура("Пользователь", ТекущийПользователь); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПараметрыЖР, ЭтаФорма); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -345,8 +352,7 @@ // Представление - представление настройки пользователю Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ГрупповоеИзменениеОбъектов", - "ИсторияИзменений/"+ПолноеИмя - ); + "ИсторияИзменений/"+ПолноеИмя); Если Настройки = Неопределено Тогда Настройки = Новый Массив; @@ -368,8 +374,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ГрупповоеИзменениеОбъектов", "ИсторияИзменений/"+ПолноеИмя, - Настройки - ); + Настройки); ЗагрузитьИсториюОпераций(); @@ -380,8 +385,7 @@ ИсторияОпераций = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ГрупповоеИзменениеОбъектов", - "ИсторияИзменений/"+ПолноеИмя - ); + "ИсторияИзменений/"+ПолноеИмя); Если ИсторияОпераций = Неопределено Тогда Возврат; @@ -527,6 +531,10 @@ КонецЕсли; + Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Свойство) Тогда + ПараметрыВыбораМассив.Добавить(Новый ПараметрВыбора("Отбор.Владелец", Элемент.ТекущиеДанные.Свойство)); + КонецЕсли; + Поле.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); ВыборГруппИЭлементов = Элемент.ТекущиеДанные.ВыборГруппИЭлементов; @@ -576,8 +584,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "Обработка.ГрупповоеИзменениеОбъектов", ПолноеИмя, - СтруктураНастроек - ); + СтруктураНастроек); КонецПроцедуры @@ -586,8 +593,7 @@ СтруктураНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "Обработка.ГрупповоеИзменениеОбъектов", - ПолноеИмя - ); + ПолноеИмя); Если СтруктураНастроек <> Неопределено Тогда Объект.ИзменятьВТранзакции = СтруктураНастроек.ИзменятьВТранзакции; @@ -690,10 +696,12 @@ Если ЕстьФормаРазблокированияРеквизитов Тогда - РазрешенныеРеквизиты = ОткрытьФормуМодально(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + РазрешенныеРеквизиты = ОткрытьФормуМодально(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами, ПараметрыФормы, ЭтаФорма); Если ТипЗнч(РазрешенныеРеквизиты) = Тип("Массив") - И РазрешенныеРеквизиты.Количество() > 0 Тогда + И РазрешенныеРеквизиты.Количество() > 0 Тогда Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл Если ОписаниеОперацииСтрока.ЗаблокированныйРеквизит @@ -709,6 +717,8 @@ КонецЕсли; КонецЕсли; + + Иначе МассивСсылок = Новый Массив; @@ -930,7 +940,7 @@ Возврат; // досрочный выход из цикла и процедуры КонецЕсли; - ТекстВопроса = НСтр("ru = 'При изменении элеметнов (группы элементов) возникли ошибки. + ТекстВопроса = НСтр("ru = 'При изменении элементов (группы элементов) возникли ошибки. |Прервать изменение элементов и перейти к просмотру ошибок? |'"); Кнопки = Новый СписокЗначений; @@ -1036,13 +1046,13 @@ КонецЕсли; - КоллекцияОпраций = Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)); + КоллекцияОпераций = Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)); ОписаниеИзменения = Новый Массив; ШаблонПредставления = "[Поле]=<Значение>"; ПредставлениеИзменения = ""; - Для Каждого ОписаниеОперации Из КоллекцияОпраций Цикл + Для Каждого ОписаниеОперации Из КоллекцияОпераций Цикл СтруктураИзменения = Новый Структура; СтруктураИзменения.Вставить("ВидОперации", ОписаниеОперации.ВидОперации); @@ -1673,3 +1683,4 @@ Процедура ОтменитьВыполнениеЗадания(ИдентификаторЗадания); ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html index 8b12eeaf6..aaa548d0b 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Для очистки значения реквизита, нужно проставить напротив него флажок и, оставив колонку Новое значение пустой, нажать на кнопку Изменить.

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

            diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl index 0141cc412..98046280e 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl @@ -263,7 +263,7 @@ Возврат Ложь; КонецЕсли; - СтрокаИзменяемогоОбъекта = ОбъектыДляИзменения.Найти(Ссылка, "Ссылка"); + СтрокаИзменяемогоОбъекта = ОбъектыДляИзменения.Найти(Ссылка, "СсылкаНаОбъект"); Если СтрокаИзменяемогоОбъекта = Неопределено Тогда Если НЕ УправлениеСвойствамиМодуль.ПроверитьСвойствоУОбъекта(Ссылка, Свойство) Тогда diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo index 08187b7b8..4797e48e1 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo @@ -7,7 +7,7 @@ ГрупповоеИзменениеОбъектов ru - Изменение выделенных элементов + Групповое изменение объектов true DataProcessor.ГрупповоеИзменениеОбъектов.Form.Форма diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index cead9531b..277903bec 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -1982,7 +1982,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 5d52cae82..a336f31db 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -108,8 +108,7 @@ Элементы.Журнал.ТекущиеДанные, Поле, ИнтервалДат, - ОтборЖурналаРегистрации - ); + ОтборЖурналаРегистрации); КонецПроцедуры @@ -202,8 +201,7 @@ ОткрытьФорму( "Обработка.ЖурналРегистрации.Форма.ОтборЖурналаРегистрации", Новый Структура("Отбор, СобытияПоУмолчанию", ОтборФормы, ОтборЖурналаРегистрацииПоУмолчанию.Событие), - ЭтаФорма - ); + ЭтаФорма); КонецПроцедуры @@ -311,12 +309,14 @@ КонецФункции &НаСервере -Процедура ЗагрузитьПодготовленныеДанные() +Процедура ЗагрузитьПодготовленныеДанные() РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); СобытияЖурнала = РезультатВыполнения.СобытияЖурнала; - ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); - ИдентификаторЗадания = Неопределено; + ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор); + + ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); + ИдентификаторЗадания = Неопределено; КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index d4b299b87..e4ba86e6b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -145,9 +145,7 @@ ОповеститьОВыборе( Новый Структура("Событие, Отбор", "УстановленОтборЖурналаРегистрации", - ПолучитьОтборЖурналаРегистрации() - ) - ); + ПолучитьОтборЖурналаРегистрации())); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index ee562c7e6..f21189a3c 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -317,7 +317,7 @@ Если ЕстьИстина Тогда Если ЕстьЛожь Тогда - // есть и помеченные и непомеченные, у себя при необходимости ставим непомечено и проверяем родителя + // есть и помеченные и непомеченные, у себя при необходимости ставим не помечено и проверяем родителя Если Ветвь.Пометка Тогда Ветвь.Пометка = Ложь; ПроверитьСостояниеПометкиВетви(Ветвь.ПолучитьРодителя()); @@ -330,7 +330,7 @@ КонецЕсли; КонецЕсли; Иначе - // все подчиненные непомечены + // все подчиненные не помечены Если Ветвь.Пометка Тогда Ветвь.Пометка = Ложь; ПроверитьСостояниеПометкиВетви(Ветвь.ПолучитьРодителя()); diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html index 248e6a5b4..76f49a76c 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 8310b13e7..3a3d78c9a 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Список событий не является динамическим списком. Для того, чтобы увидеть события, которые попали в журнал регистрации после открытия формы, необходимо выполнить команду Обновить текущий список. Журнал отображает фиксированное количество записей, которое указывается в поле Количество отбираемых событий. Кроме предопределенных значений (200, 500, 1000 и 10000 событий) можно ввести произвольное количество событий, которое будет запомнено.

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

            diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 0c050aaa9..6cebca866 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -74,8 +74,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не задана дата начала периода загрузки.'"), , - "Объект.НачалоПериодаЗагрузки" - ); + "Объект.НачалоПериодаЗагрузки"); Возврат; КонецЕсли; @@ -83,8 +82,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не задана дата окончания периода загрузки.'"), , - "Объект.ОкончаниеПериодаЗагрузки" - ); + "Объект.ОкончаниеПериодаЗагрузки"); Возврат; КонецЕсли; @@ -140,8 +138,7 @@ Результат = РаботаСКурсамиВалютКлиентСервер.ЗагрузитьКурсыВалютПоПараметрам( СписокВалют, Объект.НачалоПериодаЗагрузки, - Объект.ОкончаниеПериодаЗагрузки - ); + Объект.ОкончаниеПериодаЗагрузки); ЕстьУспешноЗагруженныеКурсы = Ложь; БезОшибок = Истина; diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index e62b1a8c2..d0cbe379b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html @@ -1,4 +1,4 @@ - +

            Предназначен для загрузки курсов валют с сайта РБК.

            Нажмите "Добавить все валюты", удалите из списка валюты, курсы которых не требуется загружать, в полях "с" и "по" укажите интервал загружаемых курсов и затем нажмите "Загрузить".

            Реквизиты:

            diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl index 98161bca5..34c3db2a6 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl @@ -29,9 +29,8 @@ СписокВалют, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки, - ПриЗагрузкеВозниклиОшибки - ); + ПриЗагрузкеВозниклиОшибки); КонецФункции -#КонецЕсли \ 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..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Form.form @@ -0,0 +1,43 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + String + + + + true + + + true + +
            true
            +
            + + + + +
            diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ЗагрузкаПравилРегистрацииОбъектов.mdo b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ЗагрузкаПравилРегистрацииОбъектов.mdo index ab60c59b1..8e27ff84e 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ЗагрузкаПравилРегистрацииОбъектов.mdo +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ЗагрузкаПравилРегистрацииОбъектов.mdo @@ -9,6 +9,7 @@ ru Загрузка правил регистрации объектов + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Form.Форма ИмяПланаОбменаДляЗагрузки @@ -24,4 +25,13 @@ + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index ce1d576c1..68cb7f2cd 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -239,7 +239,9 @@ РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); СобытияЖурнала = РезультатВыполнения.СобытияЖурнала; - ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); + ЖурналРегистрации.ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор); + + ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); ИдентификаторЗадания = Неопределено; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form index dd400164b..3efa0c734 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Form.form @@ -162,6 +162,8 @@ AutoUse true true + false + false false true Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl index 5b3258de1..a04419943 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/ВыборВидаОбъектаСоставаУзла/Module.bsl @@ -103,12 +103,12 @@ ЭтаОбработка = ЭтотОбъект(); ГруппаДокументы = СтрокиПриемника.Добавить(); - ГруппаДокументы.ПредставлениеСписка = НСтр("ru='Все документы'"); + ГруппаДокументы.ПредставлениеСписка = ЭтаОбработка.ЗаголовокГруппыОтбораВсехДокументов(); ГруппаДокументы.ПолноеИмяМетаданных = ЭтаОбработка.ИдентификаторВсехДокументов(); ГруппаДокументы.ИндексКартинки = 7; ГруппаСправочники = СтрокиПриемника.Добавить(); - ГруппаСправочники.ПредставлениеСписка = НСтр("ru='Все справочники'"); + ГруппаСправочники.ПредставлениеСписка = ЭтаОбработка.ЗаголовокГруппыОтбораВсехСправочников(); ГруппаСправочники.ПолноеИмяМетаданных = ЭтаОбработка.ИдентификаторВсехСправочников(); ГруппаСправочники.ИндексКартинки = 3; diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form index b9d3caed6..88f5254e3 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Form.form @@ -12,7 +12,7 @@ 12 <key>ru</key> - <value>За период</value> + <value>За период:</value> true true @@ -23,6 +23,10 @@ ВыгружатьЗаПериод Right + + ru + Использовать общий отбор по периоду для всех документов + OnChange ВыгружатьЗаПериодПриИзменении @@ -65,6 +69,10 @@ ПериодДанных None + + ru + Общий отбор по периоду, применяется для всех документов + ПериодДанныхРасширеннаяПодсказка 23 @@ -406,6 +414,10 @@
            Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl index b8d1594f2..86f9786a0 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Module.bsl @@ -20,9 +20,14 @@ Иначе ВыгружатьЗаПериод = Ложь; Элементы.ВыгружатьЗаПериод.Видимость = Ложь; + Элементы.ПериодДанных.Видимость = Ложь; КонецЕсли; - УстановитьВидимостьПериодаОтбора(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьДоступностьПериодаОтбора(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -31,7 +36,7 @@ &НаКлиенте Процедура ВыгружатьЗаПериодПриИзменении(Элемент) - УстановитьВидимостьПериодаОтбора(); + УстановитьДоступностьПериодаОтбора(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -44,8 +49,7 @@ ОповеститьОВыборе(Новый Структура( "ДействиеВыбора, КомпоновщикНастроек, ПериодДанных", Параметры.ДействиеВыбора, - КомпоновщикНастроек, ?(ВыгружатьЗаПериод, ПериодДанных, Новый СтандартныйПериод) - )); + КомпоновщикНастроек, ?(ВыгружатьЗаПериод, ПериодДанных, Новый СтандартныйПериод))); КонецПроцедуры @@ -53,20 +57,9 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // -&НаСервере -Процедура УстановитьВидимостьПериодаОтбора() - Элементы.ПериодДанных.Видимость = ВыгружатьЗаПериод; - - Текст = СокрЛП(Элементы.ВыгружатьЗаПериод.Заголовок); - Если Элементы.ПериодДанных.Видимость Тогда - Если Прав(Текст, 1)<>":" Тогда - Элементы.ВыгружатьЗаПериод.Заголовок = Текст + ":"; - КонецЕсли; - Иначе - Если Прав(Текст, 1)=":" Тогда - Элементы.ВыгружатьЗаПериод.Заголовок = Лев(Текст, СтрДлина(Текст)-1); - КонецЕсли; - КонецЕсли; - +&НаКлиенте +Процедура УстановитьДоступностьПериодаОтбора() + Элементы.ПериодДанных.Доступность = ВыгружатьЗаПериод; КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form index 8f70d61ca..32fcd2cea 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Form.form @@ -218,6 +218,10 @@ true Top + + ru + Имя, под которым будут сохранены текущие настройки + ПредставлениеНастройкиРасширеннаяПодсказка 37 @@ -234,6 +238,7 @@ true InputField + true Enter true Left @@ -242,6 +247,7 @@ true true true + true true true true diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl index ae2aba885..6bd69c496 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Module.bsl @@ -80,8 +80,7 @@ КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Не заполнено имя для текущей настройки.'"), , "ПредставлениеТекущейНастройки" - ); + НСтр("ru='Не заполнено имя для текущей настройки.'"), , "ПредставлениеТекущейНастройки"); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl index c52b0b81d..3fe14fe0b 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Module.bsl @@ -51,8 +51,7 @@ Если ПараметрыРасшифровки<>Неопределено Тогда Если ПараметрыРасшифровки.ИмяМетаданныхОбъектаРегистрации=ПараметрыРасшифровки.ПолноеИмяМетаданных Тогда ОткрытьФорму(ПараметрыРасшифровки.ПолноеИмяМетаданных + ".ФормаОбъекта", - Новый Структура("Ключ", ПараметрыРасшифровки.ОбъектРегистрации) - ); + Новый Структура("Ключ", ПараметрыРасшифровки.ОбъектРегистрации)); ИначеЕсли Не ПустаяСтрока(ПараметрыРасшифровки.ПредставлениеСписка) Тогда ПараметрыРасшифровки.Вставить("АдресОбъекта", АдресЭтогоОбъекта()); ОткрытьФорму(БазовоеИмяДляФормы + "Форма.СоставВыгрузки", ПараметрыРасшифровки); @@ -193,8 +192,7 @@ ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных( АдресДанныхРасшифровки, - Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновки) - ); + Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновки)); ПолеИмяМетаданных = Новый ПолеКомпоновкиДанных("ПолноеИмяМетаданных"); Настройки = ОбработкаРасшифровки.Расшифровать(Расшифровка, ПолеИмяМетаданных); diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form index 79f3b5859..fcc2803eb 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Form.form @@ -276,6 +276,9 @@ true true + + Web.Blue + @@ -539,6 +542,7 @@ true + true ОбновитьКоличествоРасширеннаяПодсказка 88 diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl index 9f0875d2d..074844737 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/Форма/Module.bsl @@ -9,6 +9,10 @@ Возврат; КонецЕсли; + Если НЕ Параметры.Свойство("ОткрытаПоСценарию") Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + ЭтаОбработка = ЭтотОбъект(); Если Не ПустаяСтрока(Параметры.АдресОбъекта) Тогда ЭтотОбъект( ЭтаОбработка.ИнициализироватьЭтотОбъект(Параметры.АдресОбъекта) ); @@ -58,8 +62,7 @@ КомпоновщикНастроекПоИмениТаблицы(ТекущиеДанные.ПолноеИмяМетаданных, ТекущиеДанные.Представление, ТекущиеДанные.Отбор), ТекущиеДанные.Период ), - Элементы.ДополнительнаяРегистрация - ); + Элементы.ДополнительнаяРегистрация); КонецЕсли; КонецПроцедуры @@ -73,8 +76,7 @@ ОткрытьФорму(БазовоеИмяДляФормы + "Форма.ВыборВидаОбъектаСоставаУзла", Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы), - Элементы.ДополнительнаяРегистрация - ); + Элементы.ДополнительнаяРегистрация); КонецПроцедуры &НаКлиенте @@ -146,26 +148,19 @@ &НаКлиенте Процедура ПодтвердитьВыбор(Команда) - - ОповеститьОВыборе(Новый Структура( - "ДействиеВыбора, АдресОбъекта", - Параметры.ДействиеВыбора, ПоместитьВоВременноеХранилище(Объект, УникальныйИдентификатор) - )); - + ОповеститьОВыборе( РезультатВыбораСервер() ); КонецПроцедуры &НаКлиенте Процедура ПоказатьТекстОбщихПараметров(Команда) ОткрытьФорму(БазовоеИмяДляФормы + "Форма.ОбщиеПараметрыСинхронизации", - Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) - ); + Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы)); КонецПроцедуры &НаКлиенте Процедура СоставВыгрузки(Команда) ОткрытьФорму(БазовоеИмяДляФормы + "Форма.СоставВыгрузки", - Новый Структура("АдресОбъекта", АдресОбъектаДополнительнойВыгрузки() ) - ); + Новый Структура("АдресОбъекта", АдресОбъектаДополнительнойВыгрузки() )); КонецПроцедуры &НаКлиенте @@ -187,12 +182,12 @@ Текст = НСтр("ru='Сохранить текущую настройку...'"); СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); - ВыбраныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.НастройкиОтборов); - Если ВыбраныйВариант=Неопределено Тогда + ВыбранныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.НастройкиОтборов); + Если ВыбранныйВариант=Неопределено Тогда Возврат; КонецЕсли; - ПредставлениеНастройки = ВыбраныйВариант.Значение; + ПредставлениеНастройки = ВыбранныйВариант.Значение; Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда ТекстЗаголовка = НСтр("ru='Подтверждение'"); ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); @@ -209,8 +204,7 @@ Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", Истина, 3, Объект, ПредставлениеТекущейНастройки - ), Элементы.ДополнительнаяРегистрация - ); + ), Элементы.ДополнительнаяРегистрация); КонецЕсли; КонецПроцедуры @@ -218,6 +212,18 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // +&НаСервере +Функция РезультатВыбораСервер() + ОбъектРезультат = Новый Структура("УзелИнформационнойБазы, ВариантВыгрузки, КомпоновщикОтбораВсехДокументов, ПериодОтбораВсехДокументов"); + ЗаполнитьЗначенияСвойств(ОбъектРезультат, Объект); + + ОбъектРезультат.Вставить("ДополнительнаяРегистрация", РеквизитФормыВЗначение("Объект.ДополнительнаяРегистрация")); + + Возврат Новый Структура("ДействиеВыбора, АдресОбъекта", + Параметры.ДействиеВыбора, ПоместитьВоВременноеХранилище(ОбъектРезультат, УникальныйИдентификатор) + ); +КонецФункции + &НаКлиенте Процедура Подключаемый_ОжиданиеРасчетаКоличества() Если ЗагрузитьЗначенияКоличеств() Тогда @@ -276,8 +282,7 @@ Функция ДобавитьВДополнительныйСоставВыгрузки(Элемент) СуществующиеСтроки = Объект.ДополнительнаяРегистрация.НайтиСтроки( - Новый Структура("ПолноеИмяМетаданных", Элемент.ПолноеИмяМетаданных) - ); + Новый Структура("ПолноеИмяМетаданных", Элемент.ПолноеИмяМетаданных)); Если СуществующиеСтроки.Количество()>0 Тогда Строка = СуществующиеСтроки[0]; Иначе @@ -445,4 +450,3 @@ Функция АдресОбъектаДополнительнойВыгрузки() Возврат ПоместитьВоВременноеХранилище(ЭтотОбъект(), УникальныйИдентификатор); КонецФункции - diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index 0dcf9ede1..2d4d555c7 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -46,8 +46,7 @@ Возврат ОбменДаннымиСервер.ЗапуститьФоновоеЗадание( "ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки_ЗарегистрироватьДополнительныеИзменения", - ПараметрыЗадания, НСтр("ru='Регистрация дополнительных данных для отправки при синхронизации'") - ); + ПараметрыЗадания, НСтр("ru='Регистрация дополнительных данных для отправки при синхронизации'")); КонецФункции @@ -64,8 +63,7 @@ Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда АдресРезультата = ПоместитьВоВременноеХранилище( - СформироватьТабличныйДокументПользователя(ПолноеИмяМетаданных, Представление) - ); + СформироватьТабличныйДокументПользователя(ПолноеИмяМетаданных, Представление)); Возврат Неопределено; КонецЕсли; @@ -77,8 +75,7 @@ Возврат ОбменДаннымиСервер.ЗапуститьФоновоеЗадание( "ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки_СформироватьТабличныйДокументПользователя", - ПараметрыЗадания, НСтр("ru='Формирование отчета по составу данных для отправки при синхронизации'") - ); + ПараметрыЗадания, НСтр("ru='Формирование отчета по составу данных для отправки при синхронизации'")); КонецФункции // Запускает фоновое задание для формирования дерева значений с данными. @@ -103,8 +100,7 @@ Возврат ОбменДаннымиСервер.ЗапуститьФоновоеЗадание( "ОбменДаннымиСервер.ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений", - ПараметрыЗадания, НСтр("ru='Расчет количества объектов для отправки при синхронизации'") - ); + ПараметрыЗадания, НСтр("ru='Расчет количества объектов для отправки при синхронизации'")); КонецФункции @@ -129,14 +125,12 @@ // Нужный вариант ДанныеКомпоновки.КомпоновщикНастроек.ЗагрузитьНастройки( - ДанныеКомпоновки.СхемаКомпоновки.ВариантыНастроек[ИмяВарианта].Настройки - ); + ДанныеКомпоновки.СхемаКомпоновки.ВариантыНастроек[ИмяВарианта].Настройки); // восстанавливаем отборы ДобавитьЗначенияОтбораКомпоновки( ДанныеКомпоновки.КомпоновщикНастроек.Настройки.Отбор.Элементы, - НастройкиОтборов.Отбор.Элементы - ); + НастройкиОтборов.Отбор.Элементы); Параметры = ДанныеКомпоновки.СхемаКомпоновки.Параметры; Параметры.Найти("ДатаФормирования").Значение = ТекущаяДатаСеанса(); @@ -168,8 +162,7 @@ Вывод.УстановитьДокумент(Новый ТабличныйДокумент); Возврат Новый Структура("ТабличныйДокумент, Расшифровка, СхемаКомпоновки", - Вывод.Вывести(Процессор), ДанныеРасшифровки, ДанныеКомпоновки.СхемаКомпоновки - ); + Вывод.Вывести(Процессор), ДанныеРасшифровки, ДанныеКомпоновки.СхемаКомпоновки); КонецФункции // Возвращает данные в виде двухуровневого дерева, первый уровень-вид метаданных, второй-объекты @@ -255,8 +248,7 @@ Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных( - ПоместитьВоВременноеХранилище(СхемаКомпоновки, АдресСохраненияСхемы) - )); + ПоместитьВоВременноеХранилище(СхемаКомпоновки, АдресСохраненияСхемы))); Если Отбор<>Неопределено Тогда ДобавитьЗначенияОтбораКомпоновки(Компоновщик.Настройки.Отбор.Элементы, Отбор.Элементы); @@ -272,6 +264,16 @@ Возврат Метаданные().ПолноеИмя() + "." КонецФункции +// Возвращает заголовок для формирования представления отбора по всем документам +Функция ЗаголовокГруппыОтбораВсехДокументов() Экспорт + Возврат НСтр("ru='Все документы'"); +КонецФункции + +// Возвращает заголовок для формирования представления отбора по всем справочникам +Функция ЗаголовокГруппыОтбораВсехСправочников() Экспорт + Возврат НСтр("ru='Все справочники'"); +КонецФункции + // Возвращает описание периода и отбора строкой // // Параметры: @@ -309,7 +311,7 @@ Функция ПредставлениеОтбораВсехДокументов(Знач ОписаниеПустогоОтбора=Неопределено) Экспорт Если ОписаниеПустогоОтбора=Неопределено Тогда - ОписаниеПустогоОтбора = НСтр("ru='Все документы'"); + ОписаниеПустогоОтбора = ЗаголовокГруппыОтбораВсехДокументов(); КонецЕсли; Возврат ПредставлениеОтбора("", КомпоновщикОтбораВсехДокументов, ОписаниеПустогоОтбора); @@ -377,7 +379,6 @@ ИначеЕсли СоответствиеПолей<>Неопределено Тогда ИсходноеПолеСтрокой = Элемент.ЛевоеЗначение; - ИсходноеПолеНРег = НРег(ИсходноеПолеСтрокой); Для Каждого КлючЗначение Из СоответствиеПолей Цикл КонтрольНовое = НРег(КлючЗначение.Ключ); ДлинаКонтроля = 1 + СтрДлина(КонтрольНовое); @@ -385,7 +386,7 @@ Если КонтрольИсходного=КонтрольНовое Тогда ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючЗначение.Значение); Прервать; - ИначеЕсли КонтрольИсходного=КонтрольНовое+"." Тогда + ИначеЕсли КонтрольИсходного=КонтрольНовое + "." Тогда ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючЗначение.Значение + Сред(ИсходноеПолеСтрокой, ДлинаКонтроля)); Прервать; КонецЕсли; @@ -447,8 +448,7 @@ УстановитьПривилегированныйРежим(Истина); СписокВариантов = ХранилищеОбщихНастроек.Загрузить( ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, - ПараметрыНастроек, ПараметрыНастроек.Пользователь - ); + ПараметрыНастроек, ПараметрыНастроек.Пользователь); СписокПредставлений = Новый СписокЗначений; Если СписокВариантов<>Неопределено Тогда @@ -494,8 +494,7 @@ ЭлементСписка.Значение.Вставить("_НастройкиКомпоновщикаОтбораВсехДокументов", // Без фиксированных настроек! - КомпоновщикОтбораВсехДокументов.Настройки - ); + КомпоновщикОтбораВсехДокументов.Настройки); ПараметрыНастроек = СтруктураПараметровНастроек(); @@ -503,8 +502,7 @@ ХранилищеОбщихНастроек.Сохранить( ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, СписокВариантов, - ПараметрыНастроек, ПараметрыНастроек.Пользователь - ); + ПараметрыНастроек, ПараметрыНастроек.Пользователь); КонецПроцедуры // Удаляет вариант настроек из списка @@ -754,7 +752,7 @@ // Без дополнительных изменений вообще ТаблицаДополнительныхИзменений = Новый ТаблицаЗначений; - КонецЕсли; + КонецЕсли; // Дополнительные изменения Для Каждого Строка Из ТаблицаДополнительныхИзменений Цикл @@ -770,9 +768,10 @@ КонецЕсли; Набор = ЭлементыНабораИзменения.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); - Набор.АвтоЗаполнениеДоступныхПолей = Истина; Набор.ИсточникДанных = ИсточникДанных; - Набор.Имя = "Дополнительно" + Формат(ЭлементыНабораИзменения.Количество()-1, "ЧН=; ЧГ="); + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.Имя = "Дополнительно_" + СтрЗаменить(ИмяДобавляемойТаблицы, ".", "_"); + Набор.Запрос = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ | Ссылка КАК ОбъектРегистрации, @@ -781,6 +780,13 @@ |ИЗ | " + ИмяДобавляемойТаблицы + " |"; + + // Добавляем дополнительные наборы для получения данных их табличных частей отбора + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ИмяДобавляемойТаблицы", ИмяДобавляемойТаблицы); + ПараметрыДобавления.Вставить("СхемаКомпоновки", СхемаКомпоновки); + ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(Строка.Отбор.Элементы, ПараметрыДобавления) + КонецЦикла; КонецЦикла; @@ -817,8 +823,7 @@ КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных( - ПоместитьВоВременноеХранилище(СхемаКомпоновки, АдресСохраненияСхемы) - )); + ПоместитьВоВременноеХранилище(СхемаКомпоновки, АдресСохраненияСхемы))); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); Если ТаблицаДополнительныхИзменений.Количество()>0 Тогда @@ -870,8 +875,12 @@ КонецЕсли; // Добавляем элементы отбора с коррекцией полей "Ссылка" -> "ОбъектРегистрации" - ДобавитьЗначенияОтбораКомпоновки(ГруппаОтбора.Элементы, Строка.Отбор.Элементы, - Новый Структура("Ссылка", "ОбъектРегистрации") + ПараметрыДобавления = Новый Структура; + ПараметрыДобавления.Вставить("ИмяДобавляемойТаблицы", ИмяДобавляемойТаблицы); + + ДобавитьДополнительныеОтборыКомпоновкиТабличныхЧастей( + ГруппаОтбора.Элементы, Строка.Отбор.Элементы, ЭлементыНабораИзменения, + ПараметрыДобавления ); КонецЦикла; КонецЦикла; @@ -879,8 +888,171 @@ КонецЕсли; Возврат Новый Структура("ТаблицаМетаданныхСоставаУзла, СхемаКомпоновки, КомпоновщикНастроек", - ТаблицаМетаданныхСоставаУзла, СхемаКомпоновки, КомпоновщикНастроек - ); + ТаблицаМетаданныхСоставаУзла, СхемаКомпоновки, КомпоновщикНастроек); +КонецФункции + +Процедура ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(ЭлементыИсточника, ПараметрыДобавления) + + ИмяДобавляемойТаблицы = ПараметрыДобавления.ИмяДобавляемойТаблицы; + СхемаКомпоновки = ПараметрыДобавления.СхемаКомпоновки; + + ОбщийНабор = СхемаКомпоновки.НаборыДанных.РегистрацияИзменений; + ИсточникДанных = СхемаКомпоновки.ИсточникиДанных[0].Имя; + + МетаОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяДобавляемойТаблицы); + + Для Каждого Элемент Из ЭлементыИсточника Цикл + // Ветка разбора аналогична ветке в ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей + + Если ТипЗнч(Элемент)=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей(ЭлементыИсточника, ПараметрыДобавления) + КонецЕсли; + + // Это элемент, смотрим чтобы попало на нашу табличку + ИмяПоля = Элемент.ЛевоеЗначение; + Если Лев(ИмяПоля, 7)="Ссылка." Тогда + ИмяПоля = Сред(ИмяПоля, 8); + ИначеЕсли Лев(ИмяПоля, 18)="ОбъектРегистрации." Тогда + ИмяПоля = Сред(ИмяПоля, 19); + Иначе + Продолжить; + КонецЕсли; + + Позиция = Найти(ИмяПоля, "."); + ИмяТаблицы = Лев(ИмяПоля, Позиция-1); + МетаТабличнаяЧасть = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТаблицы); + + Если Позиция=0 Тогда + // Отбор к шапке, получим через ссылку + Продолжить; + ИначеЕсли МетаТабличнаяЧасть=Неопределено Тогда + // Табличная часть есть, но не наша + Продолжить; + КонецЕсли; + + // Наша табличная часть + ПутьКДанным = Сред(ИмяПоля, Позиция + 1); + Если Лев(ПутьКДанным + ".", 7)="Ссылка." Тогда + // Переадресуем на головную таблицу + Продолжить; + Иначе + Псевдоним = СтрЗаменить(ИмяДобавляемойТаблицы, ".", "") + ИмяТаблицы; + ИмяНабора = "Дополнительно_" + Псевдоним; + Набор = ОбщийНабор.Элементы.Найти(ИмяНабора); + Если Набор=Неопределено Тогда + Набор = ОбщийНабор.Элементы.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.ИсточникДанных = ИсточникДанных; + Набор.Имя = ИмяНабора; + Набор.Запрос = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Ссылка КАК ОбъектРегистрации, + | ТИП(" + ИмяДобавляемойТаблицы + ") КАК ОбъектРегистрацииТип, + | &ПричинаРегистрацииДополнительно КАК ПричинаРегистрации + | " + РеквизитыТабличнойЧастиДляЗапроса(МетаТабличнаяЧасть, Псевдоним) + " + |ИЗ + | " + ИмяДобавляемойТаблицы + "." + ИмяТаблицы + " + |"; + КонецЕсли; + + ПутьКДанным = Псевдоним + ПутьКДанным; + Поле = Набор.Поля.Найти(ПутьКДанным); + Если Поле=Неопределено Тогда + Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + Поле.ПутьКДанным = ПутьКДанным; + Поле.Поле = ПутьКДанным; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьДополнительныеОтборыКомпоновкиТабличныхЧастей(ЭлементыПриемника, ЭлементыИсточника, ЭлементыНабора, ПараметрыДобавления) + + ИмяДобавляемойТаблицы = ПараметрыДобавления.ИмяДобавляемойТаблицы; + МетаОбъекта = Метаданные.НайтиПоПолномуИмени(ИмяДобавляемойТаблицы); + + Для Каждого Элемент Из ЭлементыИсточника Цикл + // Ветка разбора аналогична ветке в ДобавитьДополнительныеНаборыКомпоновкиТабличныхЧастей + + Тип=ТипЗнч(Элемент); + Если Тип=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + // Группу копируем + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + + ДобавитьДополнительныеОтборыКомпоновкиТабличныхЧастей( + ЭлементОтбора.Элементы, Элемент.Элементы, ЭлементыНабора, + ПараметрыДобавления + ); + Продолжить; + КонецЕсли; + + // Это элемент, смотрим чтобы попало на нашу табличку + ИмяПоля = Строка(Элемент.ЛевоеЗначение); + Если ИмяПоля="Ссылка" Тогда + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации"); + Продолжить; + + ИначеЕсли Лев(ИмяПоля, 7)="Ссылка." Тогда + ИмяПоля = Сред(ИмяПоля, 8); + + ИначеЕсли Лев(ИмяПоля, 18)="ОбъектРегистрации." Тогда + ИмяПоля = Сред(ИмяПоля, 19); + + Иначе + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + Продолжить; + + КонецЕсли; + + Позиция = Найти(ИмяПоля, "."); + ИмяТаблицы = Лев(ИмяПоля, Позиция-1); + МетаТабличнаяЧасть = МетаОбъекта.ТабличныеЧасти.Найти(ИмяТаблицы); + + Если Позиция=0 Тогда + // Отбор к шапке, получим через ссылку + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации." + ИмяПоля); + Продолжить; + ИначеЕсли МетаТабличнаяЧасть=Неопределено Тогда + // Табличная часть есть, но не наша + Продолжить; + КонецЕсли; + + // Отбор к табличной части + ЭлементОтбора = ЭлементыПриемника.Добавить(Тип); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, Элемент); + + ПутьКДанным = Сред(ИмяПоля, Позиция + 1); + Если Лев(ПутьКДанным + ".", 7)="Ссылка." Тогда + // Переадресуем на головную таблицу + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРегистрации." + Сред(ПутьКДанным, 8)); + Иначе + // Корректируем имя + ПутьКДанным = СтрЗаменить(ИмяДобавляемойТаблицы + ИмяТаблицы, ".", "") + ПутьКДанным; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКДанным); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция РеквизитыТабличнойЧастиДляЗапроса(Знач МетаТабличнаяЧасть, Знач Префикс="") + Результат = ""; + Для Каждого МетаРеквизит Из МетаТабличнаяЧасть.Реквизиты Цикл + Имя = МетаРеквизит.Имя; + Псевдоним = Префикс + Имя; + + Результат = Результат + "," + Символы.ПС + Имя + " КАК " + Псевдоним; + КонецЦикла; + + Возврат Результат; КонецФункции // Возвращает параметры-ключи для сохранения настроек в разрезе плана обмена для всех пользователей @@ -919,8 +1091,7 @@ УстановитьПривилегированныйРежим(Истина); СписокВариантов = ХранилищеОбщихНастроек.Загрузить( ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, - ПараметрыНастроек, ПараметрыНастроек.Пользователь - ); + ПараметрыНастроек, ПараметрыНастроек.Пользователь); Возврат ?(СписокВариантов=Неопределено, Новый СписокЗначений, СписокВариантов); КонецФункции @@ -936,14 +1107,12 @@ УстановитьПривилегированныйРежим(Истина); Если СписокВариантов.Количество()=0 Тогда ХранилищеОбщихНастроек.Удалить( - ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, ПараметрыНастроек.Пользователь - ); + ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, ПараметрыНастроек.Пользователь); Иначе ХранилищеОбщихНастроек.Сохранить( ПараметрыНастроек.КлючОбъекта, ПараметрыНастроек.КлючНастроек, СписокВариантов, - ПараметрыНастроек, ПараметрыНастроек.Пользователь - ); + ПараметрыНастроек, ПараметрыНастроек.Пользователь); КонецЕсли; КонецПроцедуры @@ -956,10 +1125,11 @@ Возврат НСтр("ru='Без дополнительных данных.'"); ИначеЕсли ВариантВыгрузки=1 Тогда - ОписаниеПустогоОтбора = НСтр("ru='Все документы'"); - Возврат ПредставлениеОтбора(ПериодОтбораВсехДокументов, КомпоновщикОтбораВсехДокументов, ОписаниеПустогоОтбора); + ТекстВсеДокументы = ЗаголовокГруппыОтбораВсехДокументов(); + Результат = ПредставлениеОтбора(ПериодОтбораВсехДокументов, КомпоновщикОтбораВсехДокументов, ТекстВсеДокументы); + Возврат СтрЗаменить(Результат, "ОбъектРегистрации.", ТекстВсеДокументы + ".") - ИначеЕсли ВариантВыгрузки=2 Тогда + ИначеЕсли ВариантВыгрузки=2 Тогда Возврат ПредставлениеДетальногоОтбора(); КонецЕсли; @@ -982,4 +1152,4 @@ Возврат СтруктураРезультата; КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo index 728df5b44..236836b18 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ИнтерактивноеИзменениеВыгрузки.mdo @@ -9,7 +9,6 @@ ru Интерактивное изменение выгрузки - true DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.Форма УзелИнформационнойБазы diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Form.form new file mode 100644 index 000000000..b64044b42 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Form.form @@ -0,0 +1,1112 @@ + + + + ГруппаКоманд + 12 + + Обновить + 17 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualButton + Form.Command.Обновить + Normal + Auto + 10 + true + true + UserCmds + Auto + + + Предыдущие + 13 + true + true + + true + + + ПредыдущиеРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualButton + Form.Command.Предыдущие + Normal + Auto + true + true + UserCmds + Auto + + + Диапазон + 14 + true + true + + true + + + ДиапазонРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДиапазонКонтекстноеМеню + 15 + true + + Label + true + true + + 128 + + + Left + + + + Следующие + 16 + true + true + + true + + + СледующиеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualButton + Form.Command.Следующие + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа команд</value> + + + ГруппаКомандРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТаблицаВзаимодействий + 1 + true + true + + true + + + СписокВзаимодействий + + None + 2 + + ТаблицаВзаимодействийКартинкаТипаСообщения + 6 + true + true + + true + + + СписокВзаимодействий.КартинкаТипаСообщения + + + ТаблицаВзаимодействийКартинкаТипаСообщенияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ТаблицаВзаимодействийКартинкаТипаСообщенияКонтекстноеМеню + 7 + true + + PictureField + Center + Auto + true + Left + true + + true + true + true + true + true + + + 1 + + + + + ТаблицаВзаимодействийДатаСообщения + 8 + true + true + + true + + + СписокВзаимодействий.ДатаСообщения + + + ТаблицаВзаимодействийДатаСообщенияРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ТаблицаВзаимодействийДатаСообщенияКонтекстноеМеню + 9 + true + + InputField + Auto + true + Left + true + + true + 2 + true + true + + ru + ДФ='ддд дд.ММ.гггг ЧЧ:мм' + + + ru + ДФ='ддд дд.ММ.гггг ЧЧ:мм' + + true + true + true + Normal + + + + ТаблицаВзаимодействийТекстСообщения + 4 + true + true + + true + + + СписокВзаимодействий.ТекстСообщения + + + ТаблицаВзаимодействийТекстСообщенияРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ТаблицаВзаимодействийТекстСообщенияКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + 2 + true + true + true + true + true + Normal + + + + ТаблицаВзаимодействийКоманднаяПанель + 3 + Left + + + OnActivateRow + ТаблицаВзаимодействийПриАктивизацииСтроки + + + ТаблицаВзаимодействийСтрокаПоиска + 33 + + ТаблицаВзаимодействийСтрокаПоискаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ТаблицаВзаимодействийСтрокаПоискаКонтекстноеМеню + 34 + true + + ТаблицаВзаимодействий + + true + + + + ТаблицаВзаимодействийСостояниеПросмотра + 36 + + ТаблицаВзаимодействийСостояниеПросмотраРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ТаблицаВзаимодействийСостояниеПросмотраКонтекстноеМеню + 37 + true + + ViewStatusAddition + ТаблицаВзаимодействий + + true + + + + ТаблицаВзаимодействийУправлениеПоиском + 39 + + ТаблицаВзаимодействийУправлениеПоискомРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ТаблицаВзаимодействийУправлениеПоискомКонтекстноеМеню + 40 + true + + SearchControlAddition + ТаблицаВзаимодействий + + true + + + + ТаблицаВзаимодействийРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТаблицаВзаимодействийКонтекстноеМеню + 2 + true + + true + true + true + true + 7 + true + true + Row +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + + ГруппаСодержания + 19 + + СодержаниеТекущегоСообщения + 10 + true + true + + true + + + СодержаниеТекущегоСообщения + + None + + СодержаниеТекущегоСообщенияРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + СодержаниеТекущегоСообщенияКонтекстноеМеню + 11 + true + + FormattedDocumentField + true + Enter + true + Left + true + + 60 + true + 15 + true + true + true + + + + ТаблицаВзаимодействийВложения + 20 + true + true + + true + + + Items.ТаблицаВзаимодействий.CurrentData.Вложения + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + ТаблицаВзаимодействийВложенияИмя + 23 + true + true + + true + + + Items.ТаблицаВзаимодействий.CurrentData.Вложения.Имя + + + ТаблицаВзаимодействийВложенияИмяРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ТаблицаВзаимодействийВложенияИмяКонтекстноеМеню + 24 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаВзаимодействийВложенияКоманднаяПанель + 22 + Left + + + ТаблицаВзаимодействийВложенияСтрокаПоиска + 61 + + ТаблицаВзаимодействийВложенияСтрокаПоискаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ТаблицаВзаимодействийВложенияСтрокаПоискаКонтекстноеМеню + 62 + true + + ТаблицаВзаимодействийВложения + + true + + + + ТаблицаВзаимодействийВложенияСостояниеПросмотра + 64 + + ТаблицаВзаимодействийВложенияСостояниеПросмотраРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ТаблицаВзаимодействийВложенияСостояниеПросмотраКонтекстноеМеню + 65 + true + + ViewStatusAddition + ТаблицаВзаимодействийВложения + + true + + + + ТаблицаВзаимодействийВложенияУправлениеПоиском + 67 + + ТаблицаВзаимодействийВложенияУправлениеПоискомРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ТаблицаВзаимодействийВложенияУправлениеПоискомКонтекстноеМеню + 68 + true + + SearchControlAddition + ТаблицаВзаимодействийВложения + + true + + + + ТаблицаВзаимодействийВложенияРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ТаблицаВзаимодействийВложенияКонтекстноеМеню + 21 + + СохранитьФайл + 25 + true + true + + true + + + СохранитьФайлРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Command.СохранитьФайл + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + 25 + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + true + true + + true + + + <key>ru</key> + <value>Группа содержания</value> + + + ГруппаСодержанияРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
            + + ФормаКоманднаяПанель + -1 + + ФормаДобавитьНовоеСообщение + 18 + true + true + + true + + + ФормаДобавитьНовоеСообщениеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ДобавитьНовоеСообщение + Auto + true + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + 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 + + Picture + + + true + + + true + + + + ДатаСообщения + + <key>ru</key> + <value>Дата</value> + + 3 + + Date + + + + true + + + true + + + + ТекстHTML + + <key>ru</key> + <value>Текст HTML</value> + + 4 + + String + + + + true + + + true + + + + ВложенияHTML + + <key>ru</key> + <value>Вложения HTML</value> + + 5 + + ValueList + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 6 + + UUID + + + true + + + true + + + + Вложения + + <key>ru</key> + <value>Вложения</value> + + 7 + + ValueTable + + + true + + + true + + + + + СписокВзаимодействий.Вложения + + + Имя + + <key>ru</key> + <value>Вложенные файлы</value> + + 1 + + String + + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 2 + + UUID + + + true + + + true + + + + + + СодержаниеТекущегоСообщения + 3 + + FormattedDocument + + + true + + + true + + + + ИдентификаторОбращения + + <key>ru</key> + <value>Идентификатор обращения</value> + + 4 + + UUID + + + true + + + true + + + + ТекущийНомерСтраницы + + <key>ru</key> + <value>Текущий номер страницы</value> + + 1 + + Number + + 10 + + + + true + + + true + + + + Предыдущие + + <key>ru</key> + <value><< Предыдущие</value> + + 1 + + ru + Предыдущие + + + true + + + + Предыдущие + + + Text + Auto + Auto + + + Следующие + + <key>ru</key> + <value>Следующие >></value> + + 2 + + ru + Следующие + + + true + + + StdPicture.Forward + + + + Следующие + + + Text + Auto + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 3 + + ru + Обновить список сообщений + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + TextPicture + Auto + Auto + + + ДобавитьНовоеСообщение + + <key>ru</key> + <value>Добавить новое сообщение</value> + + 4 + + ru + Добавить новое сообщение + + + true + + + CommonPicture.СообщениеВТехПоддержку + + + + ДобавитьНовоеСообщение + + + TextPicture + Auto + Auto + + + СохранитьФайл + + <key>ru</key> + <value>Сохранить файл</value> + + 5 + + ru + Сохранить файл + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьФайл + + + 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..3ecb22db4 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ВзаимодействияПоОбращению/Module.bsl @@ -0,0 +1,284 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ИдентификаторОбращения = Неопределено; + Если Параметры.Свойство("ИдентификаторОбращения") Тогда + ИдентификаторОбращения = Параметры.ИдентификаторОбращения; + КонецЕсли; + + Если Параметры.Свойство("Наименование") Тогда + Заголовок = Параметры.Наименование; + КонецЕсли; + + ТекущийНомерСтраницы = 1; + + ОбновитьСодержимоеФормы(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ "ТаблицаВзаимодействий" + +&НаКлиенте +Процедура ТаблицаВзаимодействийПриАктивизацииСтроки(Элемент) + + ОбновитьОтображениеСодержания(Элемент.ТекущиеДанные.Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайл(Команда) + + Структура = ПолучитьАдресХранилищаФайла(Элементы.ТаблицаВзаимодействийВложения.ТекущиеДанные.Идентификатор); + Если Структура.Адрес <> Неопределено Тогда + ПолучитьФайл(Структура.Адрес, Структура.Имя, Истина); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Предыдущие(Команда) + + ОбновитьСодержимоеФормы(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура Следующие(Команда) + + ОбновитьСодержимоеФормы(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + + ОбновитьСодержимоеФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьНовоеСообщение(Команда) + + ПараметрыСообщения = СформироватьПараметрыСообщения(); + ИнформационныйЦентрКлиент.ОткрытьФормуОтправкиСообщенияВТехподдержку(ПараметрыСообщения); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьСодержимоеФормы(СмещениеСтраницы = 0) + + ТекущийНомерСтраницы = ТекущийНомерСтраницы + СмещениеСтраницы; + + Если ИдентификаторОбращения = Неопределено Тогда + ВызватьИсключениеСервисаОтображенияОбращений(); + КонецЕсли; + + Результат = ПолучитьСписокИКоличествоСообщенийПоОбращениюПользователя(); + Если Результат = Неопределено Тогда + ВызватьИсключениеСервисаОтображенияОбращений(); + КонецЕсли; + + ОтобразитьЭлементыШапки(Результат); + + ВывестиСписокСообщений(Результат); + +КонецПроцедуры + +&НаСервере +Процедура ВызватьИсключениеСервисаОтображенияОбращений() + + Если ИдентификаторОбращения = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Сервис по отображению обращений в техподдержку временно недоступен. + |Пожалуйста, повторите попытку позже'"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьСписокИКоличествоСообщенийПоОбращениюПользователя() + + Попытка + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); + Возврат Прокси.GetMessagesSupportService(ИдентификаторОбращения, ТекущийНомерСтраницы); + Исключение + ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +&НаСервере +Функция ПолучитьАдресХранилищаФайла(ИдентификаторФайла) + + Попытка + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); + Структура = Прокси.GetAttachmaent(ИдентификаторФайла); + Адрес = ПоместитьВоВременноеХранилище(Структура.binData); + Возврат Новый Структура("Адрес, Имя", Адрес, Структура.name) + Исключение + ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +&НаСервере +Процедура ОтобразитьЭлементыШапки(Результат) + + КоличествоСообщений = Результат.count; + КоличествоСообщенийНаСтранице = Результат.countOnPage; + + Если КоличествоСообщений = 0 Тогда + Возврат; + КонецЕсли; + + Диапазон = ПолучитьДиапазон(КоличествоСообщенийНаСтранице, КоличествоСообщений); + Элементы.Диапазон.Заголовок = ПолучитьШаблонДиапазона(Диапазон); + + ОтобразитьДоступностьКоманд(КоличествоСообщенийНаСтранице, КоличествоСообщений); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьДиапазон(КоличествоСообщенийНаСтранице, КоличествоСообщений) + + Начало = (ТекущийНомерСтраницы - 1) * КоличествоСообщенийНаСтранице + 1; + Конец = ТекущийНомерСтраницы * КоличествоСообщенийНаСтранице; + Конец = ?(Конец > КоличествоСообщений, КоличествоСообщений, Конец); + + Возврат Новый Структура("Начало, Конец", Начало, Конец); + +КонецФункции + +&НаСервере +Функция ПолучитьШаблонДиапазона(Диапазон) + + Шаблон = "%1 - %2"; + Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Диапазон.Начало, Диапазон.Конец); + + Возврат Шаблон; + +КонецФункции + +&НаСервере +Процедура ОтобразитьДоступностьКоманд(КоличествоОбращенийНаСтранице, КоличествоОбращений) + + Элементы.Следующие.Доступность = ?(ТекущийНомерСтраницы * КоличествоОбращенийНаСтранице < КоличествоОбращений, Истина, Ложь); + Элементы.Предыдущие.Доступность = ?(ТекущийНомерСтраницы > 1, Истина, Ложь); + +КонецПроцедуры + +&НаСервере +Процедура ВывестиСписокСообщений(Результат) + + Если Результат.messageList.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СписокВзаимодействий.Очистить(); + + Для Итерация = 0 По Результат.messageList.Количество() - 1 Цикл + + Сообщение = Результат.messageList.Получить(Итерация); + + Элемент = СписокВзаимодействий.Добавить(); + + Элемент.ТекстСообщения = Сообщение.text; + Элемент.КартинкаТипаСообщения = ?(Сообщение.ingoing, БиблиотекаКартинок.ВходящееСообщение, БиблиотекаКартинок.ИсходящееСообщение); + Элемент.ДатаСообщения = Сообщение.date; + Элемент.ТекстHTML = Сообщение.textHTML; + Элемент.Идентификатор = Сообщение.ID; + Элемент.ВложенияHTML.Добавить(ПолучитьСтруктуруФайловКартинок(Сообщение.filesHTML)); + ЗаполнитьСписокВложений(Элемент, Сообщение.attachments); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокВложений(СтрокаТаблицы, Вложения) + + Для Каждого Вложение Из Вложения Цикл + НовыйЭлемент = СтрокаТаблицы.Вложения.Добавить(); + НовыйЭлемент.Имя = Вложение.name; + НовыйЭлемент.Идентификатор = Вложение.id; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьСтруктуруФайловКартинок(Файлы) + + Структура = Новый Структура; + + Для Каждого СтруктураФайла из Файлы Цикл + Структура.Вставить(СтруктураФайла.name, Новый Картинка(СтруктураФайла.binData)); + КонецЦикла; + + Возврат Структура; + +КонецФункции + +&НаСервере +Процедура ОбновитьОтображениеСодержания(Идентификатор) + + Фильтр = Новый Структура("Идентификатор", Идентификатор); + МассивСтрок = СписокВзаимодействий.НайтиСтроки(Фильтр); + Если МассивСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = МассивСтрок.Получить(0); + + СодержаниеТекущегоСообщения.УстановитьHTML(СтрокаТаблицы.ТекстHTML, СтрокаТаблицы.ВложенияHTML.Получить(0).Значение); + + Элементы.ТаблицаВзаимодействийВложения.Видимость = ?(СтрокаТаблицы.Вложения.Количество() = 0, Ложь, Истина); + +КонецПроцедуры + +&НаСервере +Функция СформироватьПараметрыСообщения() + + УстановитьПривилегированныйРежим(Истина); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИдентификаторОбращения", ИдентификаторОбращения); + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОтКого", ИнформационныйЦентрСервер.ОпределитьАдресЭлектроннойПочтыПользователя()); + ПараметрыСообщения.Вставить("Вложения", ИнформационныйЦентрСервер.СформироватьXMLСТехническимиПараметрами(ДополнительныеПараметры)); + ПараметрыСообщения.Вставить("ОтображатьТему", Ложь); + + Возврат ПараметрыСообщения; + +КонецФункции + + + + + + diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеКомментария/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеКомментария/Module.bsl index a1ad45865..aae3229e5 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеКомментария/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеКомментария/Module.bsl @@ -36,7 +36,7 @@ КонецЕсли; - Результат = ДобавитьКомментрий(); + Результат = ДобавитьКомментарий(); Если Результат Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Комментарий добавлен.'")); Иначе @@ -52,9 +52,9 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере -Функция ДобавитьКомментрий() +Функция ДобавитьКомментарий() - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); ФабрикаXDTOВебСервиса = ПроксиИнформационногоЦентра.ФабрикаXDTO; ОписаниеКомментария = ПривестиКОбъектуXDTOКомментарийПользователя(ФабрикаXDTOВебСервиса); @@ -65,7 +65,7 @@ &НаСервере Функция ПривестиКОбъектуXDTOКомментарийПользователя(ФабрикаXDTOВебСервиса) - ТипКомментария = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "CommentListElement"); + ТипКомментария = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "CommentListElement"); ОписаниеКомментария = ФабрикаXDTOВебСервиса.Создать(ТипКомментария); ОписаниеКомментария.Text = Комментарий; diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеПожелания/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеПожелания/Module.bsl index f21dfb84d..f9198d66a 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеПожелания/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ДобавлениеПожелания/Module.bsl @@ -53,7 +53,7 @@ Функция ОтправитьПожелание() Попытка - Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); СообщениеПользователя = ПривестиКОбъектуXDTOСообщениеПользователя(Прокси.ФабрикаXDTO); Возврат Прокси.AddUserMessage(СообщениеПользователя); Исключение @@ -67,7 +67,7 @@ &НаСервере Функция ПривестиКОбъектуXDTOСообщениеПользователя(ФабрикаXDTOВебСервиса) - ТипСообщения = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "UserMessage"); + ТипСообщения = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "UserMessage"); ОписаниеСообщения = ФабрикаXDTOВебСервиса.Создать(ТипСообщения); ОписаниеСообщения.Content = ПолучитьСодержаниеСообщенияПользователя(ФабрикаXDTOВебСервиса); @@ -84,7 +84,7 @@ &НаСервере Функция ПолучитьСодержаниеСообщенияПользователя(ФабрикаXDTOВебСервиса) - ТипСодержания = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "HTMLContent"); + ТипСодержания = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "HTMLContent"); ОписаниеСодержания = ФабрикаXDTOВебСервиса.Создать(ТипСодержания); СписокВложений = Неопределено; @@ -101,8 +101,8 @@ &НаСервере Функция ПривестиСписокФайловСодержанияСообщенияПользователя(СписокВложений, ФабрикаXDTOВебСервиса) - ТипСпискаКартинок = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "FileList"); - ТипСтруктурыКартинки = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "FileListElement"); + ТипСпискаКартинок = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "FileList"); + ТипСтруктурыКартинки = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "FileListElement"); СписокКартинок = ФабрикаXDTOВебСервиса.Создать(ТипСпискаКартинок); diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Form.form index 17a4908f1..574d3e43f 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Form.form @@ -72,13 +72,6 @@
            true
            - - ПутьКФорме - - String - - - diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Module.bsl index 91e59e88c..45bb1fddc 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныеСсылкиВКонтексте/Module.bsl @@ -4,16 +4,22 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Если ПустаяСтрока(Параметры.ПутьКФорме) Тогда + Если Не Параметры.Свойство("ПутьКФорме") Тогда Отказ = Истина; Возврат; КонецЕсли; - ИнформационныйЦентрСервер.ВывестиКонтекстныеСсылки(ЭтаФорма, Элементы.ИнформационныеСсылки, 1, 20, Ложь, Параметры.ПутьКФорме); + ИнформационныйЦентрСервер.ВывестиКонтекстныеСсылки(ЭтаФорма, + Элементы.ИнформационныеСсылки, + 1, + 20, + Ложь, + Параметры.ПутьКФорме); КонецПроцедуры @@ -26,4 +32,15 @@ ИнформационныйЦентрКлиент.НажатиеНаИнформационнуюСсылку(ЭтаФорма, Элемент); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + + diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Form.form index 491ad8f22..d846f94b3 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Form.form @@ -95,7 +95,7 @@ 58 <key>ru</key> - <value>Написать в техподдержку...</value> + <value>Обращения в поддержку</value> true true @@ -203,7 +203,7 @@ 62 <key>ru</key> - <value>Подать идею...</value> + <value>Центр идей</value> true true @@ -311,7 +311,7 @@ 74 <key>ru</key> - <value>Обсудить на форуме...</value> + <value>Обсуждения на форуме</value> true true @@ -334,6 +334,7 @@ true Label + 16 true true @@ -714,10 +715,11 @@ Label true true + true Click - ДомашняяСтраницаНажатие1 + ДомашняяСтраницаНажатие true Left @@ -914,10 +916,27 @@ true - Наименование + СсылкаНаДанные <key>ru</key> - <value>Наименование</value> + <value>Ссылка на данные</value> + + 7 + + CatalogRef.ОбщиеДанныеИнформационногоЦентра + + + true + + + true + + + + ИмяЭлементаФормы + + <key>ru</key> + <value>Имя элемента формы</value> 1 @@ -931,53 +950,33 @@ true + + ТипИнформации + + <key>ru</key> + <value>Тип информации</value> + + 2 + + String + + + + true + + + true + + Идентификатор <key>ru</key> <value>Идентификатор</value> - 2 - - UUID - - - true - - - true - - - - Критичность - - <key>ru</key> - <value>Критичность</value> - 3 - Number - - 10 - - - - true - - - true - - - - ИмяНовости - - <key>ru</key> - <value>Имя новости</value> - - 4 - - String - + UUID true @@ -992,7 +991,7 @@ ru Внешняя ссылка - 5 + 4 String @@ -1020,17 +1019,6 @@ true - - Форум - 4 - - - true - - - true - - НайтиОтветНаВопрос diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Module.bsl index ed57926b1..fd37a7fd6 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ИнформационныйЦентр/Module.bsl @@ -7,6 +7,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; ИспользоватьРазделениеПоОбластямДанных = ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); @@ -21,12 +25,6 @@ Элементы.ДомашняяСтраница.Заголовок = ДомашняяСтраница.Имя; Элементы.ДомашняяСтраница.Видимость = ?(ПустаяСтрока(ДомашняяСтраница.Адрес), Ложь, Истина); - // Форум - ФорумСсылка = Справочники.ИнформационныеСсылкиДляФорм.Форум; - Форум = Новый Структура("Имя, Адрес", ФорумСсылка.Наименование, ФорумСсылка.Адрес); - Элементы.ГруппаФорума.Видимость = ?(ПустаяСтрока(ФорумСсылка.Адрес), Ложь, Истина); - - // Поиск информации ИнформационныйЦентрСерверПереопределяемый.ОпределитьСсылкуПоискаИнформации(СсылкаПоискаИнформации); Иначе // для локального режима @@ -49,14 +47,35 @@ &НаКлиенте Процедура НажатиеНаНовость(Элемент) - МассивНовостей = ТаблицаНовостей.НайтиСтроки(Новый Структура("ИмяНовости", Элемент.Имя)); - Если МассивНовостей.Количество() = 0 Тогда + Фильтр = Новый Структура; + Фильтр.Вставить("ИмяЭлементаФормы", Элемент.Имя); + + МассивСтрок = ТаблицаНовостей.НайтиСтроки(Фильтр); + Если МассивСтрок.Количество() = 0 Тогда Возврат; КонецЕсли; - Идентификатор = МассивНовостей.Получить(0).Идентификатор; - ВнешняяСсылка = МассивНовостей.Получить(0).ВнешняяСсылка; - ИнформационныйЦентрКлиент.ПоказатьНовость(ВнешняяСсылка, Идентификатор); + ТекущееСообщение = МассивСтрок.Получить(0); + + Если ТекущееСообщение.ТипИнформации = "Недоступность" Тогда + + Идентификатор = ТекущееСообщение.Идентификатор; + ВнешняяСсылка = ТекущееСообщение.ВнешняяСсылка; + + Если Не ПустаяСтрока(ВнешняяСсылка) Тогда + ПерейтиПоНавигационнойСсылке(ВнешняяСсылка); + Возврат; + КонецЕсли; + + ИнформационныйЦентрКлиент.ПоказатьНовость(Идентификатор); + + ИначеЕсли ТекущееСообщение.ТипИнформации = "УведомлениеОПожелании" Тогда + + ИдентификаторПожелания = Строка(ТекущееСообщение.Идентификатор); + + ИнформационныйЦентрКлиент.ПоказатьПожелание(ИдентификаторПожелания); + + КонецЕсли; КонецПроцедуры @@ -70,8 +89,7 @@ &НаКлиенте Процедура НаписатьВТехПоддержкуНажатие(Элемент) - ПараметрыСообщения = СформироватьПараметрыСообщения(); - ИнформационныйЦентрКлиент.ОткрытьФормуОтправкиСообщенияВТехподдержку(ИспользоватьРазделениеПоОбластямДанных, ПараметрыСообщения); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ОбращенияПользователя"); КонецПроцедуры @@ -83,7 +101,7 @@ КонецПроцедуры &НаКлиенте -Процедура ДомашняяСтраницаНажатие1(Элемент) +Процедура ДомашняяСтраницаНажатие(Элемент) Если Не ДомашняяСтраница.Свойство("Адрес") Тогда Возврат; @@ -96,11 +114,7 @@ &НаКлиенте Процедура ФорумНажатие(Элемент) - Если Не Форум.Свойство("Адрес") Тогда - Возврат; - КонецЕсли; - - ПерейтиПоНавигационнойСсылке(Форум.Адрес); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ОбсужденияНаФоруме"); КонецПроцедуры @@ -134,14 +148,19 @@ Если ТаблицаНовостей.Количество() = 0 Тогда Возврат; - КонецЕсли; + КонецЕсли; ГруппаНовостей = Элементы.ГруппаНовостей; Для Итерация = 0 По ТаблицаНовостей.Количество() - 1 Цикл - Критичность = ТаблицаНовостей.Получить(Итерация).Критичность; - Наименование = ТаблицаНовостей.Получить(Итерация).Наименование; + Наименование = ТаблицаНовостей.Получить(Итерация).СсылкаНаДанные.Наименование; + + Если ПустаяСтрока(Наименование) Тогда + Продолжить; + КонецЕсли; + + Критичность = ТаблицаНовостей.Получить(Итерация).СсылкаНаДанные.Критичность; Картинка = ?(Критичность > 5, БиблиотекаКартинок.УведомлениеСервиса, БиблиотекаКартинок.СообщениеСервиса); ГруппаНовости = Элементы.Добавить("ГруппаНовости" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаНовостей); @@ -166,12 +185,11 @@ ИмяНовости.Гиперссылка = Истина; ИмяНовости.УстановитьДействие("Нажатие", "НажатиеНаНовость"); - Если Критичность = 10 Тогда - ИмяНовости.Шрифт = Новый Шрифт(, , Истина, , , ); - КонецЕсли; + ТаблицаНовостей.Получить(Итерация).ИмяЭлементаФормы = ИмяНовости.Имя; + ТаблицаНовостей.Получить(Итерация).ТипИнформации = ТаблицаНовостей.Получить(Итерация).СсылкаНаДанные.ТипИнформации.Наименование; + ТаблицаНовостей.Получить(Итерация).Идентификатор = ТаблицаНовостей.Получить(Итерация).СсылкаНаДанные.Идентификатор; + ТаблицаНовостей.Получить(Итерация).ВнешняяСсылка = ТаблицаНовостей.Получить(Итерация).СсылкаНаДанные.ВнешняяСсылка; - ТаблицаНовостей.Получить(Итерация).ИмяНовости = "ИмяНовости" + Строка(Итерация); - КонецЦикла; ЕщеСообщения = Элементы.Добавить("ЕщеСообщения", Тип("ДекорацияФормы"), ГруппаНовостей); @@ -184,21 +202,6 @@ КонецПроцедуры -&НаСервере -Функция СформироватьПараметрыСообщения() - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыСообщения = Новый Структура; - ПараметрыСообщения.Вставить("ОтКого", ИнформационныйЦентрСервер.ОпределитьАдресЭлектроннойПочтыПользователя()); - ПараметрыСообщения.Вставить("Тема", НСтр("ru = 'Обращение в техподдержку'") + " (" + Формат(ТекущаяДатаСеанса(),"ДЛФ=DT") + ")"); - ПараметрыСообщения.Вставить("Текст", ИнформационныйЦентрСервер.СформироватьШаблонТекстаВТехПоддержку()); - ПараметрыСообщения.Вставить("Вложения", ИнформационныйЦентрСервер.СформироватьXMLСТехническимиПараметрами()); - - Возврат ПараметрыСообщения; - -КонецФункции - &НаКлиенте Процедура ПоискОтветаНаВопрос() diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/ConditionalAppearance.dcssca new file mode 100644 index 000000000..c8eed0ab5 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/ConditionalAppearance.dcssca @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ConditionalAppearance xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows"> + <item> + <selection> + <item> + <field>СписокОбращений</field> + </item> + </selection> + <filter> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">СписокОбращений.ИмеетНовыеСообщения</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">true</right> + </item> + </filter> + <appearance> + <dcscor:item xsi:type="SettingsParameterValue"> + <dcscor:parameter>Шрифт</dcscor:parameter> + <dcscor:value xsi:type="v8ui:Font" ref="sys:DefaultGUIFont" bold="true" italic="false" underline="false" strikeout="false" kind="WindowsFont"/> + </dcscor:item> + </appearance> + </item> +</ConditionalAppearance> diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Form.form new file mode 100644 index 000000000..365b92c57 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Form.form @@ -0,0 +1,883 @@ +<?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"> + <title> + <key>ru</key> + <value>Мои обращения в поддержку сервиса</value> + + + Шапка + 19 + + Обновить + 21 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualButton + Form.Command.Обновить + Normal + Auto + 10 + true + true + UserCmds + Auto + + + Предыдущие + 12 + true + false + + true + + + ПредыдущиеРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualButton + Form.Command.Предыдущие + Normal + Auto + true + true + UserCmds + Auto + + + Диапазон + 17 + true + true + + true + + + ДиапазонРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ДиапазонКонтекстноеМеню + 18 + true + + Label + true + true + + 51 + 153 + 102 + + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + Следующие + 14 + true + false + + true + + + СледующиеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualButton + Form.Command.Следующие + Normal + Auto + true + true + UserCmds + Auto + + + ФильтрОбращений + 24 + true + true + + true + + + ФильтрОбращений + + + OnChange + ФильтрОбращенийПриИзменении + + + ФильтрОбращенийРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ФильтрОбращенийКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + + + ru + Все + + + Все + + + + + ru + Не закрытые + + + Не закрытые + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Шапка</value> + + + ru + Шапка + + + ШапкаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СписокОбращений + 1 + true + true + + true + + + СписокОбращений + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + + ТаблицаСтатус + 4 + true + true + + true + + + СписокОбращений.Статус + + + ТаблицаСтатусРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ТаблицаСтатусКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + 12 + true + true + true + true + true + true + Normal + + + + ТаблицаНаименование + 8 + + <key>ru</key> + <value>Тема</value> + + true + true + + true + + + СписокОбращений.Наименование + + + ТаблицаНаименованиеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ТаблицаНаименованиеКонтекстноеМеню + 9 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаНомер + 10 + true + true + + true + + + СписокОбращений.Код + + + ТаблицаНомерРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ТаблицаНомерКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + 7 + true + true + true + true + true + true + Normal + + + + ТаблицаДата + 6 + true + true + + true + + + СписокОбращений.Дата + + + ТаблицаДатаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ТаблицаДатаКонтекстноеМеню + 7 + true + + InputField + Auto + true + Left + true + + 12 + true + true + true + + ru + ДФ='ддд дд.ММ.гггг ЧЧ:мм' + + + ru + ДФ='ддд дд.ММ.гггг ЧЧ:мм' + + true + true + true + Normal + + + + СписокОбращенийКоманднаяПанель + 3 + Left + true + + + Selection + СписокОбращенийВыбор + + + СписокОбращенийСтрокаПоиска + 35 + + СписокОбращенийСтрокаПоискаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + СписокОбращенийСтрокаПоискаКонтекстноеМеню + 36 + true + + СписокОбращений + + true + + + + СписокОбращенийСостояниеПросмотра + 38 + + СписокОбращенийСостояниеПросмотраРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СписокОбращенийСостояниеПросмотраКонтекстноеМеню + 39 + true + + ViewStatusAddition + СписокОбращений + + true + + + + СписокОбращенийУправлениеПоиском + 41 + + СписокОбращенийУправлениеПоискомРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + СписокОбращенийУправлениеПоискомКонтекстноеМеню + 42 + true + + SearchControlAddition + СписокОбращений + + true + + + + СписокОбращенийРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + СписокОбращенийКонтекстноеМеню + 2 + true + + true + true + true + true + Row +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + + ФормаКоманднаяПанель + -1 + + ОбратитьсяВСлужбуПоддержки + 20 + true + true + + true + + + ОбратитьсяВСлужбуПоддержкиРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ОбратитьсяВСлужбуПоддержки + Auto + true + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 90 + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + 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 + + Date + + + + 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 + + UUID + + + true + + + true + + + + ИмеетНовыеСообщения + + <key>ru</key> + <value>Имеет новые сообщения</value> + + 6 + + Boolean + + + true + + + true + + + + + ИдентификаторПользователя + + <key>ru</key> + <value>Идентификатор пользователя</value> + + 3 + + UUID + + + true + + + true + + + + ТекущийНомерСтраницы + + <key>ru</key> + <value>Текущий номер страницы</value> + + 1 + + Number + + 10 + true + + + + true + + + true + + + + ФильтрОбращений + + <key>ru</key> + <value>Показать обращения</value> + + 5 + + String + + + + true + + + true + + + + Следующие + + <key>ru</key> + <value>Следующие >></value> + + 1 + + ru + Следующие + + + true + + + + Следующие + + + Text + Auto + Auto + + + Предыдущие + + <key>ru</key> + <value><< Предыдущие</value> + + 2 + + ru + Предыдущие + + + true + + + + Предыдущие + + + Text + Auto + Auto + + + ОбратитьсяВСлужбуПоддержки + + <key>ru</key> + <value>Обратиться в службу поддержки</value> + + 3 + + ru + Обратиться в службу поддержки + + + true + + + CommonPicture.СообщениеВТехПоддержку + + + + ОбратитьсяВСлужбуПоддержки + + + TextPicture + Auto + Auto + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 4 + + ru + Обновить список обращений + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + 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..9f21ad12e --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбращенияПользователя/Module.bsl @@ -0,0 +1,223 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ИдентификаторПользователя = ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяСервиса; + УстановитьПривилегированныйРежим(Ложь); + + ТекущийНомерСтраницы = 1; + + ЗначениеФильтраПоУмолчанию = Элементы.ФильтрОбращений.СписокВыбора.Получить(0).Значение; + ФильтрОбращений = ЗначениеФильтраПоУмолчанию; + + ОбновитьСодержимоеФормы(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ФильтрОбращенийПриИзменении(Элемент) + + ОбновитьСодержимоеФормы(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ "Список обращений" + +&НаКлиенте +Процедура СписокОбращенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ИдентификаторОбращения", Элемент.ТекущиеДанные.Идентификатор); + ПараметрыФормы.Вставить("Наименование", Элемент.ТекущиеДанные.Наименование); + + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ВзаимодействияПоОбращению", ПараметрыФормы); + + УстановитьПризнакПросмотра(Элемент.ТекущиеДанные.Идентификатор); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Следующие(Команда) + + ОбновитьСодержимоеФормы(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура Предыдущие(Команда) + + ОбновитьСодержимоеФормы(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбратитьсяВСлужбуПоддержки(Команда) + + ПараметрыСообщения = СформироватьПараметрыСообщения(); + ИнформационныйЦентрКлиент.ОткрытьФормуОтправкиСообщенияВТехподдержку(ПараметрыСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + + ОбновитьСодержимоеФормы(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьСодержимоеФормы(СмещениеСтраницы = 0) + + ТекущийНомерСтраницы = ТекущийНомерСтраницы + СмещениеСтраницы; + + Результат = ПолучитьСписокИКоличествоОбращенийПользователя(); + Если Результат = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Сервис по отображению обращений в техподдержку временно недоступен. + |Пожалуйста, повторите попытку позже'"); + КонецЕсли; + + ОтобразитьЭлементыШапки(Результат); + + ВывестиСписокОбращений(Результат); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьСписокИКоличествоОбращенийПользователя() + + ПоказатьВсеОбращения = ?(ФильтрОбращений = Элементы.ФильтрОбращений.СписокВыбора.Получить(0).Значение, Истина, Ложь); + + Попытка + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); + Возврат Прокси.GetTicketsSupportService(ИдентификаторПользователя, ТекущийНомерСтраницы, ПоказатьВсеОбращения); + Исключение + ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +&НаСервере +Процедура ОтобразитьЭлементыШапки(Результат) + + КоличествоОбращений = Результат.count; + КоличествоОбращенийНаСтранице = Результат.countOnPage; + + Если КоличествоОбращений = 0 Тогда + Возврат; + КонецЕсли; + + Диапазон = ПолучитьДиапазонОбращений(КоличествоОбращенийНаСтранице, КоличествоОбращений); + Элементы.Диапазон.Заголовок = ПолучитьШаблонДиапазонаОбращений(Диапазон); + + ОтобразитьДоступностьКоманд(КоличествоОбращенийНаСтранице, КоличествоОбращений); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьДиапазонОбращений(КоличествоОбращенийНаСтранице, КоличествоОбращений) + + Начало = (ТекущийНомерСтраницы - 1) * КоличествоОбращенийНаСтранице + 1; + Конец = ТекущийНомерСтраницы * КоличествоОбращенийНаСтранице; + Конец = ?(Конец > КоличествоОбращений, КоличествоОбращений, Конец); + + Возврат Новый Структура("Начало, Конец", Начало, Конец); + +КонецФункции + +&НаСервере +Функция ПолучитьШаблонДиапазонаОбращений(Диапазон) + + Шаблон = "%1 - %2"; + Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Диапазон.Начало, Диапазон.Конец); + + Возврат Шаблон; + +КонецФункции + +&НаСервере +Процедура ОтобразитьДоступностьКоманд(КоличествоОбращенийНаСтранице, КоличествоОбращений) + + Элементы.Следующие.Доступность = ?(ТекущийНомерСтраницы * КоличествоОбращенийНаСтранице < КоличествоОбращений, Истина, Ложь); + Элементы.Предыдущие.Доступность = ?(ТекущийНомерСтраницы > 1, Истина, Ложь); + +КонецПроцедуры + +&НаСервере +Процедура ВывестиСписокОбращений(Результат) + + Если Результат.ticketList.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СписокОбращений.Очистить(); + + Для Итерация = 0 По Результат.ticketList.Количество() - 1 Цикл + + Обращение = Результат.ticketList.Получить(Итерация); + + Элемент = СписокОбращений.Добавить(); + + Элемент.Статус = Обращение.stage; + Элемент.Дата = Обращение.date; + Элемент.Наименование = Обращение.name; + Элемент.Код = Обращение.number; + Элемент.Идентификатор = Обращение.id; + Элемент.ИмеетНовыеСообщения = Обращение.havingNewMessages; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПризнакПросмотра(Идентификатор) + + Фильтр = Новый Структура("Идентификатор", Идентификатор); + МассивСтрок = СписокОбращений.НайтиСтроки(Фильтр); + Если МассивСтрок = 0 Тогда + Возврат; + КонецЕсли; + + МассивСтрок.Получить(0).ИмеетНовыеСообщения = Ложь; + +КонецПроцедуры + +&НаСервере +Функция СформироватьПараметрыСообщения() + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОтКого", ИнформационныйЦентрСервер.ОпределитьАдресЭлектроннойПочтыПользователя()); + ПараметрыСообщения.Вставить("Текст", ИнформационныйЦентрСервер.СформироватьШаблонТекстаВТехПоддержку()); + ПараметрыСообщения.Вставить("Вложения", ИнформационныйЦентрСервер.СформироватьXMLСТехническимиПараметрами()); + + Возврат ПараметрыСообщения; + +КонецФункции + diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Form.form new file mode 100644 index 000000000..7f8128ef1 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Form.form @@ -0,0 +1,376 @@ + + + + <key>ru</key> + <value>Мои обсуждения на форуме</value> + + + НовыеКомментарии + 1 + true + true + + true + + + <key>ru</key> + <value>Новые комментарии пользователей</value> + + + ru + Новые комментарии + + + НовыеКомментарииРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + НовыеТемы + 2 + true + true + + true + + + <key>ru</key> + <value>Новые темы</value> + + + ru + Новые темы + + + НовыеТемыРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаПодвала + 3 + + ИконкаФорума + 6 + + <key>ru</key> + <value>Иконка форума</value> + + true + true + + true + + + ИконкаФорумаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ИконкаФорумаКонтекстноеМеню + 7 + true + + 2 + true + 1 + true + + + CommonPicture.ФорумСервиса + + + + + НадписьФорума + 4 + + <key>ru</key> + <value>Форум</value> + + true + true + + true + + + НадписьФорумаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + НадписьФорумаКонтекстноеМеню + 5 + true + + Label + true + true + true + + + Click + НадписьФорумаНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа подвала</value> + + + ГруппаПодвалаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ИдентификаторПользователя + + <key>ru</key> + <value>Идентификатор пользователя</value> + + 2 + + UUID + + + true + + + true + + + + АдресФорума + + <key>ru</key> + <value>Адрес форума</value> + + 1 + + String + + + + true + + + true + + + + ПоказыватьФорму + + <key>ru</key> + <value>Показывать форму</value> + + 3 + + Boolean + + + true + + + true + + + + ТаблицаДляНовыхКомментариев + + <key>ru</key> + <value>Таблица для новых комментариев</value> + + 4 + + 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 + + ValueTable + + + true + + + true + + + ИмяЭлементаФормы + + <key>ru</key> + <value>Имя элемента формы</value> + + 1 + + String + + + + true + + + true + + + + Адрес + + <key>ru</key> + <value>Адрес</value> + + 2 + + 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..8d5a952f2 --- /dev/null +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОбсужденияНаФоруме/Module.bsl @@ -0,0 +1,188 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + АдресФорума = Справочники.ИнформационныеСсылкиДляФорм.Форум.Адрес; + + Элементы.ГруппаПодвала.Видимость = Не ПустаяСтрока(АдресФорума); + + УстановитьПривилегированныйРежим(Истина); + ИдентификаторПользователя = ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяСервиса; + УстановитьПривилегированныйРежим(Ложь); + + Результат = ПолучитьСписокТем(); + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ПоказыватьФорму = Истина; + + СформироватьЭлементыСтраницы(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ПоказыватьФорму Тогда + + Если Не ПустаяСтрока(АдресФорума) Тогда + ПерейтиПоНавигационнойСсылке(АдресФорума); + КонецЕсли; + + Отказ = Истина; + + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура НажатиеНаТемуСНовымиКомментариями(Элемент) + + Фильтр = Новый Структура("ИмяЭлементаФормы", Элемент.Имя); + НайденныеСтроки = ТаблицаДляНовыхКомментариев.НайтиСтроки(Фильтр); + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + АдресТемы = НайденныеСтроки.Получить(0).Адрес; + + ПерейтиПоНавигационнойСсылке(АдресТемы); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеНаНовуюТему(Элемент) + + Фильтр = Новый Структура("ИмяЭлементаФормы", Элемент.Имя); + НайденныеСтроки = ТаблицаДляНовыхТем.НайтиСтроки(Фильтр); + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + АдресТемы = НайденныеСтроки.Получить(0).Адрес; + + ПерейтиПоНавигационнойСсылке(АдресТемы); + +КонецПроцедуры + +&НаКлиенте +Процедура НадписьФорумаНажатие(Элемент) + + Если Не ПустаяСтрока(АдресФорума) Тогда + ПерейтиПоНавигационнойСсылке(АдресФорума); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПолучитьСписокТем() + + Попытка + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиУправленияКонференцией(); + Возврат Прокси.getForumTopics(Строка(ИдентификаторПользователя)); + Исключение + ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат Неопределено; + КонецПопытки; + +КонецФункции + +&НаСервере +Процедура СформироватьЭлементыСтраницы(Результат) + + Если Результат.commentTopics.topicDescriptionCollection.Количество() <> 0 Тогда + СформироватьЭлементыНовыхКомментариев(Результат.commentTopics.topicDescriptionCollection); + КонецЕсли; + + Если Результат.mainTopics.topicDescriptionCollection.Количество() <> 0 Тогда + СформироватьЭлементыНовыхТем(Результат.mainTopics.topicDescriptionCollection); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьЭлементыНовыхКомментариев(НовыеКомментарии) + + ШаблонТемыСНовымиКомментариями = "%1 (%2)"; + + Итерация = 0; + Для Каждого Комментарий Из НовыеКомментарии Цикл + + ИмяНовогоЭлемента = "ТемаСНовымиКомментариями" + Строка(Итерация); + НовыйЭлемент = Элементы.Добавить(ИмяНовогоЭлемента, Тип("ДекорацияФормы"), Элементы.НовыеКомментарии); + НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись; + НовыйЭлемент.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТемыСНовымиКомментариями, Комментарий.subject, Строка(Комментарий.messageCount)); + НовыйЭлемент.Гиперссылка = Истина; + НовыйЭлемент.РастягиватьПоГоризонтали = Истина; + НовыйЭлемент.УстановитьДействие("Нажатие", "НажатиеНаТемуСНовымиКомментариями"); + + ЭлементТаблицы = ТаблицаДляНовыхКомментариев.Добавить(); + ЭлементТаблицы.ИмяЭлементаФормы = ИмяНовогоЭлемента; + ЭлементТаблицы.Адрес = Комментарий.url; + + Итерация = Итерация + 1; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьЭлементыНовыхТем(НовыеТемы) + + Итерация = 0; + Для Каждого Тема Из НовыеТемы Цикл + + ИмяЭлементаГруппыНовойТемы = "ГруппаНовойТемы" + Строка(Итерация); + ГруппаНовойТемы = Элементы.Добавить(ИмяЭлементаГруппыНовойТемы, Тип("ГруппаФормы"), Элементы.НовыеТемы); + ГруппаНовойТемы.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаНовойТемы.ОтображатьЗаголовок = Ложь; + ГруппаНовойТемы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаНовойТемы.Отображение = ?(Итерация = 0, ОтображениеОбычнойГруппы.Нет, ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния()); + + ИмяЭлементаНовойТемы = "НоваяТема" + Строка(Итерация); + ЭлементНовойТемы = Элементы.Добавить(ИмяЭлементаНовойТемы, Тип("ДекорацияФормы"), ГруппаНовойТемы); + ЭлементНовойТемы.Вид = ВидДекорацииФормы.Надпись; + ЭлементНовойТемы.Заголовок = Тема.subject; + ЭлементНовойТемы.Гиперссылка = Истина; + ЭлементНовойТемы.РастягиватьПоГоризонтали = Истина; + ЭлементНовойТемы.УстановитьДействие("Нажатие", "НажатиеНаНовуюТему"); + + ИмяЭлементаПредмета = "Предмет" + Строка(Итерация); + ЭлементПредмета = Элементы.Добавить(ИмяЭлементаПредмета, Тип("ДекорацияФормы"), ГруппаНовойТемы); + ЭлементПредмета.Вид = ВидДекорацииФормы.Надпись; + ЭлементПредмета.Заголовок = Тема.topicName; + ЭлементПредмета.РастягиватьПоГоризонтали = Истина; + ЭлементПредмета.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право; + + ЭлементТаблицы = ТаблицаДляНовыхТем.Добавить(); + ЭлементТаблицы.ИмяЭлементаФормы = ИмяЭлементаНовойТемы; + ЭлементТаблицы.Адрес = Тема.url; + + Итерация = Итерация + 1; + + КонецЦикла; + +КонецПроцедуры + + + diff --git a/SSL/src/CommonForms/ОтображениеНовостей/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Form.form similarity index 92% rename from SSL/src/CommonForms/ОтображениеНовостей/Form.form rename to SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Form.form index 31e824c2f..0501b895c 100644 --- a/SSL/src/CommonForms/ОтображениеНовостей/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Form.form @@ -75,11 +75,11 @@ ГруппаНовости 5 - ВсеНовости + ВсеСообщения 7 <key>ru</key> - <value>Все новости</value> + <value>Все сообщения</value> true true @@ -87,7 +87,7 @@ true - ВсеНовостиРасширеннаяПодсказка + ВсеСообщенияРасширеннаяПодсказка 15 Label true @@ -97,7 +97,7 @@
            - ВсеНовостиКонтекстноеМеню + ВсеСообщенияКонтекстноеМеню 8 true @@ -108,7 +108,7 @@ Click - ВсеНовостиНажатие + ВсеСообщенияНажатие true Right @@ -323,10 +323,10 @@ - ИмяНовости + ИмяЭлементаФормы <key>ru</key> - <value>Имя новости</value> + <value>Имя элемента формы</value> 4 @@ -358,6 +358,24 @@ true + + ТипИнформации + + <key>ru</key> + <value>Тип информации</value> + + 6 + + String + + + + true + + + true + + diff --git a/SSL/src/CommonForms/ОтображениеНовостей/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Module.bsl similarity index 50% rename from SSL/src/CommonForms/ОтображениеНовостей/Module.bsl rename to SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Module.bsl index 2d68d5e08..38304cdf8 100644 --- a/SSL/src/CommonForms/ОтображениеНовостей/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтображениеСообщений/Module.bsl @@ -8,8 +8,8 @@ Возврат; КонецЕсли; - Если Параметры.Свойство("ОткрытьВсеНовости") Тогда - ОткрытьВсеНовости(); + Если Параметры.Свойство("ОткрытьВсеСообщения") Тогда + ОткрытьВсеСообщения(); ИначеЕсли Параметры.Свойство("ОткрытьНовость") Тогда Если Параметры.Свойство("Идентификатор") Тогда ОткрытьНовость(Параметры.Идентификатор); @@ -24,24 +24,33 @@ &НаКлиенте Процедура НажатиеНаНовость(Элемент) - МассивНовостей = ТаблицаВсехНовостей.НайтиСтроки(Новый Структура("ИмяНовости", Элемент.Имя)); - Если МассивНовостей.Количество() = 0 Тогда + Фильтр = Новый Структура; + Фильтр.Вставить("ИмяЭлементаФормы", Элемент.Имя); + + МассивСтрок = ТаблицаВсехНовостей.НайтиСтроки(Фильтр); + Если МассивСтрок.Количество() = 0 Тогда Возврат; КонецЕсли; - Идентификатор = МассивНовостей.Получить(0).Идентификатор; - ВнешняяСсылка = МассивНовостей.Получить(0).ВнешняяСсылка; - Если Не ПустаяСтрока(ВнешняяСсылка) Тогда - ПерейтиПоНавигационнойСсылке(ВнешняяСсылка); - Возврат; + ТекущееСообщение = МассивСтрок.Получить(0); + + Если ТекущееСообщение.ТипИнформации = "Недоступность" Тогда + + ОткрытьНовость(ТекущееСообщение.Идентификатор); + + ИначеЕсли ТекущееСообщение.ТипИнформации = "УведомлениеОПожелании" Тогда + + ИдентификаторПожелания = Строка(ТекущееСообщение.Идентификатор); + + ИнформационныйЦентрКлиент.ПоказатьПожелание(ИдентификаторПожелания); + КонецЕсли; + - ОткрытьНовость(Идентификатор); - КонецПроцедуры &НаКлиенте -Процедура ВсеНовостиНажатие(Элемент) +Процедура ВсеСообщенияНажатие(Элемент) Закрыть(); ИнформационныйЦентрКлиент.ПоказатьВсеСообщения(); @@ -53,13 +62,13 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере -Процедура ОткрытьВсеНовости() +Процедура ОткрытьВсеСообщения() - Заголовок = НСтр("ru = 'Новости'"); + Заголовок = НСтр("ru = 'Сообщения'"); СформироватьСписокВсехНовостей(); Элементы.ОбщаяГруппа.ТекущаяСтраница = Элементы.ГруппаНовостей; -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ОткрытьНовость(Идентификатор) @@ -69,22 +78,22 @@ СсылкаНаДанные = Справочники.ОбщиеДанныеИнформационногоЦентра.НайтиПоРеквизиту("Идентификатор", Идентификатор); Если СсылкаНаДанные.Пустая() Тогда Возврат; - КонецЕсли; + КонецЕсли; - Заголовок = СсылкаНаДанные.Наименование; + Заголовок = СсылкаНаДанные.Наименование; - Вложения = СсылкаНаДанные.Вложения.Получить(); - ТекстHTML = СсылкаНаДанные.ТекстHTML; + Вложения = СсылкаНаДанные.Вложения.Получить(); + ТекстHTML = СсылкаНаДанные.ТекстHTML; Если ТипЗнч(Вложения) = Тип("Структура") Тогда - СтруктруаВложений = Вложения; - Иначе - СтруктруаВложений = Новый Структура; - КонецЕсли; + СтруктураВложений = Вложения; + Иначе + СтруктураВложений = Новый Структура; + КонецЕсли; - Содержание.УстановитьHTML(ТекстHTML, СтруктруаВложений); + Содержание.УстановитьHTML(ТекстHTML, СтруктураВложений); -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура СформироватьСписокВсехНовостей() @@ -97,7 +106,7 @@ Если ВозвращаемаяТаблица.Количество() = 0 Тогда Возврат; - КонецЕсли; + КонецЕсли; ТаблицаВсехНовостей.Загрузить(ВозвращаемаяТаблица); @@ -105,41 +114,41 @@ Для Итерация = 0 По ТаблицаВсехНовостей.Количество() - 1 Цикл - Критичность = ТаблицаВсехНовостей.Получить(Итерация).Критичность; - Наименование = ТаблицаВсехНовостей.Получить(Итерация).Наименование; - Картинка = ?(Критичность > 5, БиблиотекаКартинок.СостояниеОбменаДаннымиОшибка, БиблиотекаКартинок.Информация); + Критичность = ТаблицаВсехНовостей.Получить(Итерация).Критичность; + Наименование = ТаблицаВсехНовостей.Получить(Итерация).Наименование; + Картинка = ?(Критичность > 5, БиблиотекаКартинок.УведомлениеСервиса, БиблиотекаКартинок.СообщениеСервиса); - ГруппаНовости = Элементы.Добавить("ГруппаНовости" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаНовостей); - ГруппаНовости.Вид = ВидГруппыФормы.ОбычнаяГруппа; - ГруппаНовости.ОтображатьЗаголовок = Ложь; - ГруппаНовости.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ГруппаНовости.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаНовости = Элементы.Добавить("ГруппаНовости" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаНовостей); + ГруппаНовости.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаНовости.ОтображатьЗаголовок = Ложь; + ГруппаНовости.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаНовости.Отображение = ОтображениеОбычнойГруппы.Нет; - КартинкаНовости = Элементы.Добавить("КартинкаНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); - КартинкаНовости.Вид = ВидДекорацииФормы.Картинка; - КартинкаНовости.Картинка = Картинка; - КартинкаНовости.Ширина = 2; - КартинкаНовости.Высота = 1; - КартинкаНовости.РазмерКартинки = РазмерКартинки.Растянуть; + КартинкаНовости = Элементы.Добавить("КартинкаНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + КартинкаНовости.Вид = ВидДекорацииФормы.Картинка; + КартинкаНовости.Картинка = Картинка; + КартинкаНовости.Ширина = 2; + КартинкаНовости.Высота = 1; + КартинкаНовости.РазмерКартинки = РазмерКартинки.Растянуть; - ИмяНовости = Элементы.Добавить("ИмяНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); - ИмяНовости.Вид = ВидДекорацииФормы.Надпись; - ИмяНовости.Заголовок = Наименование; - ИмяНовости.РастягиватьПоГоризонтали = Истина; - ИмяНовости.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; - ИмяНовости.ВысотаЗаголовка = 1; + ИмяНовости = Элементы.Добавить("ИмяНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + ИмяНовости.Вид = ВидДекорацииФормы.Надпись; + ИмяНовости.Заголовок = Наименование; + ИмяНовости.РастягиватьПоГоризонтали = Истина; + ИмяНовости.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ИмяНовости.ВысотаЗаголовка = 1; ИмяНовости.Гиперссылка = Истина; ИмяНовости.УстановитьДействие("Нажатие", "НажатиеНаНовость"); Если Критичность = 10 Тогда ИмяНовости.Шрифт = Новый Шрифт(, , Истина, , , ); - КонецЕсли; + КонецЕсли; - ТаблицаВсехНовостей.Получить(Итерация).ИмяНовости = "ИмяНовости" + Строка(Итерация); + ТаблицаВсехНовостей.Получить(Итерация).ИмяЭлементаФормы = "ИмяНовости" + Строка(Итерация); - КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Form.form similarity index 91% rename from SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form rename to SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Form.form index dd75d6bbd..971c96d73 100644 --- a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Form.form @@ -4,6 +4,54 @@ ru Сообщение в техподдержку + + Тема + 35 + + System.DefaultGUIFont + true + false + false + false + + true + true + + true + + + Тема + + + ТемаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ТемаКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ГруппаКонтента 19 @@ -24,7 +72,7 @@ КоманднаяПанельТекстаРасширеннаяПодсказка - 39 + 43 Label true true @@ -54,7 +102,7 @@ Picture СодержаниеРасширеннаяПодсказка - 40 + 44 Label true true @@ -92,7 +140,7 @@ ГруппаТекстаСообщенияРасширеннаяПодсказка - 38 + 42 Label true true @@ -128,7 +176,7 @@ АдресВозвратаРасширеннаяПодсказка - 42 + 46 Label true true @@ -173,7 +221,7 @@ ГруппаПрикрепленныхФайловРасширеннаяПодсказка - 45 + 49 Label true true @@ -208,7 +256,7 @@ ДекорацияПрикрепитьФайлРасширеннаяПодсказка - 47 + 51 Label true true @@ -251,7 +299,7 @@ НадписьРасширеннаяПодсказка - 48 + 52 Label true true @@ -287,7 +335,7 @@ ГруппаСсылкиДляПрикрепленияФайлаРасширеннаяПодсказка - 46 + 50 Label true true @@ -315,7 +363,7 @@ ГруппаВложенийРасширеннаяПодсказка - 44 + 48 Label true true @@ -344,7 +392,7 @@ ГруппаКонтентаРасширеннаяПодсказка - 37 + 41 Label true true @@ -375,7 +423,7 @@ ФормаОтправитьРасширеннаяПодсказка - 35 + 37 Label true true @@ -401,7 +449,7 @@ ФормаЗакрытьРасширеннаяПодсказка - 36 + 38 Label true true @@ -691,11 +739,15 @@ true + + CommonPicture.СообщениеВТехПоддержку + Отправить + TextPicture Auto Auto
            diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Module.bsl similarity index 84% rename from SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl rename to SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Module.bsl index d747af2ca..d5845e7b2 100644 --- a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ОтправкаСообщенияВПоддержку/Module.bsl @@ -28,11 +28,11 @@ КонецЕсли; КонецЕсли; - Если Параметры.Свойство("Тема") Тогда - Тема = Параметры.Тема; + Если Параметры.Свойство("ОтображатьТему") Тогда + Элементы.Тема.Видимость = Параметры.ОтображатьТему; КонецЕсли; - ИмяФайлаТехническихПараметров = ИнформационныйЦентрСервер.ПолучитьИмяФайлаТехническихПараметровДляСообщенияВтехПоддержку(); + ИмяФайлаТехническихПараметров = ИнформационныйЦентрСервер.ПолучитьИмяФайлаТехническихПараметровДляСообщенияВПоддержку(); КонецПроцедуры @@ -100,9 +100,8 @@ Закрыть(); Иначе ОчиститьСообщения(); - ТекстСообщения = НСтр("ru = 'К сожалению сообщение не было отправлено. - |Повторите попытку позже.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(НСтр("ru = 'К сожалению сообщение не было отправлено. + |Повторите попытку позже.'")); КонецЕсли; КонецПроцедуры @@ -144,15 +143,13 @@ Если Не ЗначениеЗаполнено(ОтКого) Тогда ОчиститьСообщения(); - ТекстСообщения = НСтр("ru = 'Адрес ответа не заполнен.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(НСтр("ru = 'Адрес ответа не заполнен.'")); Возврат Ложь; КонецЕсли; Если Найти(ОтКого, "@") = 0 Тогда ОчиститьСообщения(); - ТекстСообщения = НСтр("ru = 'Адрес ответа заполнен некорректно.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(НСтр("ru = 'Адрес ответа заполнен некорректно.'")); Возврат Ложь; КонецЕсли; @@ -185,10 +182,10 @@ // Проверка на корректность общего размера файлов. Если Не ОбщийРазмерФайловОптималенКлиент(МаксимальныйРазмерФайлов, ВыбранныеФайлы) Тогда - ТекстСообщения = НСтр("ru = 'Размер выбранных файлов превышает предел в %1 Мб'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, МаксимальныйРазмерФайлов); + ТекстПредупреждения = НСтр("ru = 'Размер выбранных файлов превышает предел в %1 Мб'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, МаксимальныйРазмерФайлов); ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(ТекстПредупреждения); Возврат; КонецЕсли; @@ -256,19 +253,19 @@ // Проверка на корректность общего размера файлов. Если Не ОбщийРазмерФайловОптималенСервер(МаксимальныйРазмерФайлов, НовыйФайл) Тогда - ТекстСообщения = НСтр("ru = 'Размер выбранных файлов превышает предел в %1 Мб'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, МаксимальныйРазмерФайлов); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ТекстПредупреждения = НСтр("ru = 'Размер выбранных файлов превышает предел в %1 Мб'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, МаксимальныйРазмерФайлов); + ПоказатьСообщениеПользователю(ТекстПредупреждения); УдалитьИзВременногоХранилища(АдресХранилища); Возврат; КонецЕсли; // Удаление файла "TechnicalParameters.xml", если он имеется Если ВРег(ИмяФайла) = ВРег(ИмяФайлаТехническихПараметров) Тогда - ТекстСообщения = НСтр("ru = 'Файл с именем ''%1'' нельзя прикладывать к сообщению. + ТекстПредупреждения = НСтр("ru = 'Файл с именем ''%1'' нельзя прикладывать к сообщению. |Переименуйте добавляемый файл.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, ИмяФайла); + ПоказатьСообщениеПользователю(ТекстПредупреждения); УдалитьИзВременногоХранилища(АдресХранилища); Возврат; КонецЕсли; @@ -344,7 +341,7 @@ ОписаниеВызова.Добавить("ПоместитьФайлы"); ПомещаемыеФайлы = Новый Массив; - Описание = Новый ОписаниеПередаваемогоФайла(ВыбранныеФайлы.Получить(Итерация), ""); + Описание = Новый ОписаниеПередаваемогоФайла(ВыбранныеФайлы.Получить(Итерация)); ПомещаемыеФайлы.Добавить(Описание); ОписаниеВызова.Добавить(ПомещаемыеФайлы); @@ -359,17 +356,17 @@ Возврат; КонецЕсли; #КонецЕсли - + Для Итерация = 0 По ВыбранныеФайлы.Количество() - 1 Цикл ВыбранныйФайл = Новый Файл(ВыбранныеФайлы.Получить(Итерация)); // Удаление файла "TechnicalParameters.xml", если он имеется Если ВРег(ВыбранныйФайл.Имя) = ВРег(ИмяФайлаТехническихПараметров) Тогда - ТекстСообщения = НСтр("ru = 'Файл с именем ''%1'' нельзя прикладывать к сообщению. + ТекстПредупреждения = НСтр("ru = 'Файл с именем ''%1'' нельзя прикладывать к сообщению. |Переименуйте добавляемый файл.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ВыбранныйФайл.Имя); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, ВыбранныйФайл.Имя); ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(ТекстПредупреждения); Продолжить; КонецЕсли; @@ -379,15 +376,21 @@ СтрокаТаблицы.Размер = ВыбранныйФайл.Размер() / 1024; ПомещаемыеФайлы = Новый Массив; - Описание = Новый ОписаниеПередаваемогоФайла(ВыбранныйФайл.ПолноеИмя, ""); + Описание = Новый ОписаниеПередаваемогоФайла(ВыбранныйФайл.ПолноеИмя); ПомещаемыеФайлы.Добавить(Описание); ПомещенныеФайлы = Новый Массив; - Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда + Попытка + Результат = ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор); + Исключение + Результат = Ложь; + КонецПопытки; + + Если Не Результат Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при загрузке файла %1'"), ВыбранныйФайл.Имя); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при загрузке файла %1'"), ВыбранныйФайл.Имя); ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ПоказатьСообщениеПользователю(СообщениеОбОшибке); ВыбираемыеФайлы.Удалить(ВыбираемыеФайлы.Индекс(СтрокаТаблицы)); Продолжить; @@ -426,7 +429,7 @@ ПараметрыСообщения = Новый Структура(); ПараметрыСообщения.Вставить("ОтКого", ОтКого); - ПараметрыСообщения.Вставить("Тема", Тема); + ПараметрыСообщения.Вставить("Тема", ОпределитьТему()); ПараметрыСообщения.Вставить("Текст", Текст); ПараметрыСообщения.Вставить("Вложения", Вложения); ПараметрыСообщения.Вставить("ТипТекста", "HTML"); @@ -438,6 +441,20 @@ КонецФункции +&НаСервере +Функция ОпределитьТему() + + Если Не ПустаяСтрока(Тема) Тогда + Возврат Тема; + КонецЕсли; + + ТекстСообщения = Содержание.ПолучитьТекст(); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "Здравствуйте!", ""); + + Возврат СокрЛП(ТекстСообщения); + +КонецФункции + &НаКлиенте Процедура УстановитьКурсорВШаблонеТекста() @@ -498,3 +515,12 @@ ДобавитьФайлыВСписокОтправляемых(); КонецФункции + +&НаСервере +Функция ПоказатьСообщениеПользователю(Текст) + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = Текст; + Сообщение.Сообщить(); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Form.form index 5c765e28a..0b7c39090 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Form.form @@ -16,7 +16,7 @@ РейтингРасширеннаяПодсказка - 38 + 41 Label true true @@ -50,7 +50,7 @@ ПроголосоватьРасширеннаяПодсказка - 39 + 42 Label true true @@ -93,7 +93,7 @@ СВашимРасширеннаяПодсказка - 40 + 43 Label true true @@ -134,7 +134,7 @@ СделаноРасширеннаяПодсказка - 41 + 44 Label true true @@ -166,7 +166,7 @@ ГруппаРейтингаРасширеннаяПодсказка - 37 + 40 Label true true @@ -200,7 +200,7 @@ ЗаголовокПожеланияРасширеннаяПодсказка - 44 + 47 Label true true @@ -236,7 +236,7 @@ ПредметРасширеннаяПодсказка - 45 + 48 Label true true @@ -269,7 +269,7 @@ ГруппаЗаголовкаПожеланияРасширеннаяПодсказка - 43 + 46 Label true true @@ -300,7 +300,7 @@ None СодержаниеРасширеннаяПодсказка - 46 + 49 Label true true @@ -341,7 +341,7 @@ ГруппаЗаголовкаИСодержанияРасширеннаяПодсказка - 42 + 45 Label true true @@ -370,7 +370,7 @@ ГруппаЗаголовкаРасширеннаяПодсказка - 36 + 39 Label true true @@ -387,6 +387,90 @@ Auto + + ГруппаОтветаСлужбыПоддержки + 36 + + КомментарийРазработчика + 37 + true + true + + true + + + КомментарийРазработчика + + None + + КомментарийРазработчикаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + КомментарийРазработчикаКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + 3 + true + true + true + true + true + + Style.FormBackColor + + + Style.FormBackColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разработчиков</value> + + true + + ГруппаОтветаСлужбыПоддержкиРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + ГруппаКомментариев 6 @@ -404,10 +488,11 @@ НовыйКомментарий + true None НовыйКомментарийРасширеннаяПодсказка - 50 + 56 Label true true @@ -454,7 +539,7 @@ ДобавитьКомментарийРасширеннаяПодсказка - 54 + 60 Label true true @@ -481,7 +566,7 @@ КоманднаяПанельКомментарияРасширеннаяПодсказка - 53 + 59 Label true true @@ -505,7 +590,7 @@ ГруппаПодвалаДобавленияКомментарияРасширеннаяПодсказка - 52 + 58 Label true true @@ -533,7 +618,7 @@ ГруппаНовогоКомментарияРасширеннаяПодсказка - 49 + 55 Label true true @@ -565,7 +650,7 @@ ГруппаВсехКомментариевРасширеннаяПодсказка - 55 + 61 Label true true @@ -590,7 +675,7 @@ ГруппаКомментариевРасширеннаяПодсказка - 48 + 54 Label true true @@ -622,7 +707,7 @@ ПодвалРасширеннаяПодсказка - 56 + 62 Label true true @@ -740,40 +825,6 @@ true - - ЦветНадписиНравится - - <key>ru</key> - <value>Цвет надписи нравится</value> - - 6 - - Color - - - true - - - true - - - - ЦветНадписиНеНравится - - <key>ru</key> - <value>Цвет надписи не нравится</value> - - 7 - - Color - - - true - - - true - - ИдентификаторПожелания @@ -870,6 +921,24 @@ <itemValueType/> </extInfo> </attributes> + <attributes> + <name>КомментарийРазработчика</name> + <title> + <key>ru</key> + <value>Комментарий разработчика</value> + + 6 + + String + + + + true + + + true + + ДобавитьКомментарий diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Module.bsl index ba4ad79f9..dc092267f 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/Пожелание/Module.bsl @@ -14,10 +14,6 @@ Логин = Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяСервиса); УстановитьПривилегированныйРежим(Ложь); - // Определение цвета - ЦветНадписиНравится = Новый Цвет( 51, 153, 102); - ЦветНадписиНеНравится = Новый Цвет(255, 0, 0); - // Определение идентификатора пожелания Если Не Параметры.Свойство("ИдентификаторПожелания") Тогда Возврат; @@ -32,6 +28,8 @@ Возврат; КонецЕсли; + УстановитьПризнакПросмотраПожелания(); + КонецПроцедуры @@ -79,7 +77,7 @@ Возврат; КонецЕсли; - Результат = ДобавитьКомментрийСервер(); + Результат = ДобавитьКомментарийСервер(); Если Результат Тогда НовыйКомментарий = ""; ПоказатьОповещениеПользователя(НСтр("ru = 'Комментарий добавлен.'")); @@ -118,11 +116,42 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура УстановитьПризнакПросмотраПожелания() + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Новый УникальныйИдентификатор(ИдентификаторПожелания)); + Запрос.Текст = + "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК Ссылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.Идентификатор = &Идентификатор"; + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + Запись = РегистрыСведений.ПросмотренныеДанныеИнформационногоЦентра.СоздатьМенеджерЗаписи(); + Запись.Пользователь = ПараметрыСеанса.ТекущийПользователь; + Запись.ДанныеИнформационногоЦентра = Выборка.Ссылка; + Запись.Просмотрены = Истина; + Запись.Записать(); + КонецЦикла; + +КонецПроцедуры + &НаСервере Функция ПроголосоватьЗаПожеланиеСервер(Голос, Идентификатор) Попытка - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); Возврат ПроксиИнформационногоЦентра.AddVote(Идентификатор, Логин, Голос); Исключение Возврат Ложь @@ -231,7 +260,7 @@ Функция СформироватьЭлементыСтраницы(НомерСтраницы) // Получение объектов пожелания - ОбъектыПожелания = ПолучитьОбъкетыПожелания(); + ОбъектыПожелания = ПолучитьОбъектыПожелания(); Если ОбъектыПожелания = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -258,10 +287,10 @@ КонецФункции &НаСервере -Функция ПолучитьОбъкетыПожелания() +Функция ПолучитьОбъектыПожелания() Попытка - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); Результат = ПроксиИнформационногоЦентра.GetContentSuggestion(Логин, ИдентификаторПожелания); Возврат Результат; Исключение @@ -291,15 +320,16 @@ СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ДатаЗакрытия", ПараметрыПожелания.ClosingDate); - СтруктураПараметров.Вставить("Идентификатор", ПараметрыПожелания.Ref); - СтруктураПараметров.Вставить("ДатаСоздания", ПараметрыПожелания.GenerationDate); - СтруктураПараметров.Вставить("ДатаПлановойРеализации", ПараметрыПожелания.PlanMadeDate); - СтруктураПараметров.Вставить("Рейтинг", ПараметрыПожелания.Rating); - СтруктураПараметров.Вставить("ГолосПользователя", ПараметрыПожелания.Vote); - СтруктураПараметров.Вставить("Статус", ПараметрыПожелания.Status); - СтруктураПараметров.Вставить("Предмет", ПараметрыПожелания.Subject); - СтруктураПараметров.Вставить("Заголовок", ПараметрыПожелания.Title); + СтруктураПараметров.Вставить("ДатаЗакрытия", ПараметрыПожелания.ClosingDate); + СтруктураПараметров.Вставить("Идентификатор", ПараметрыПожелания.Ref); + СтруктураПараметров.Вставить("ДатаСоздания", ПараметрыПожелания.GenerationDate); + СтруктураПараметров.Вставить("ДатаПлановойРеализации", ПараметрыПожелания.PlanMadeDate); + СтруктураПараметров.Вставить("Рейтинг", ПараметрыПожелания.Rating); + СтруктураПараметров.Вставить("ГолосПользователя", ПараметрыПожелания.Vote); + СтруктураПараметров.Вставить("Статус", ПараметрыПожелания.Status); + СтруктураПараметров.Вставить("Предмет", ПараметрыПожелания.Subject); + СтруктураПараметров.Вставить("Заголовок", ПараметрыПожелания.Title); + СтруктураПараметров.Вставить("КомментарийРазработчика", ПараметрыПожелания.developerComment); Возврат СтруктураПараметров; @@ -341,6 +371,11 @@ Элементы.Предмет.Заголовок = СтруктураПожелания.Параметры.Предмет; Элементы.ЗаголовокПожелания.Заголовок = СтруктураПожелания.Параметры.Заголовок; + КомментарийРазработчика = СтруктураПожелания.Параметры.КомментарийРазработчика; + Если ПустаяСтрока(КомментарийРазработчика) Тогда + Элементы.ГруппаОтветаСлужбыПоддержки.Видимость = Ложь; + КонецЕсли; + Если СтруктураПожелания.Параметры.ДатаЗакрытия <> '00010101' Тогда Элементы.Сделано.Видимость = Истина; Элементы.Сделано.Заголовок = "сделано @@ -357,9 +392,9 @@ КонецПроцедуры &НаСервере -Функция ДобавитьКомментрийСервер() +Функция ДобавитьКомментарийСервер() - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); ФабрикаXDTOВебСервиса = ПроксиИнформационногоЦентра.ФабрикаXDTO; ОписаниеКомментария = ПривестиКОбъектуXDTOКомментарийПользователя(ФабрикаXDTOВебСервиса); @@ -370,7 +405,7 @@ &НаСервере Функция ПривестиКОбъектуXDTOКомментарийПользователя(ФабрикаXDTOВебСервиса) - ТипКомментария = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "CommentListElement"); + ТипКомментария = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "CommentListElement"); ОписаниеКомментария = ФабрикаXDTOВебСервиса.Создать(ТипКомментария); ОписаниеКомментария.Text = НовыйКомментарий; @@ -388,7 +423,7 @@ &НаСервере Процедура СформироватьЭлементыКомментариев(МаксимальноеЧислоНаСтранице, Комментарии) - // Удаление старых эелементов + // Удаление старых элементов УдалитьЭлементы(); ОсновнаяГруппа = Элементы.ГруппаВсехКомментариев; @@ -468,7 +503,7 @@ Функция ПолучитьКомментарии(НомерСтраницы) Попытка - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); Возврат ПроксиИнформационногоЦентра.GetCommentsSuggestion(ИдентификаторПожелания, НомерСтраницы); Исключение ИмяСобытия = ИнформационныйЦентрСервер.ПолучитьИмяСобытияДляЖурналаРегистрации(); diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Form.form b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Form.form index 3dbd7b890..abc1db4a3 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Form.form +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Form.form @@ -2,17 +2,17 @@ <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> ГруппаЗаголовковГруппПожеланий 36 - Обсуждаемые - 37 + Новые + 52 <key>ru</key> - <value>Обсуждаемые</value> + <value>Новые</value> true true @@ -20,8 +20,8 @@ true - ОбсуждаемыеРасширеннаяПодсказка - 53 + НовыеРасширеннаяПодсказка + 61 Label true true @@ -30,8 +30,8 @@ - ОбсуждаемыеКонтекстноеМеню - 38 + НовыеКонтекстноеМеню + 53 true Label @@ -43,20 +43,24 @@ НажатиеНаГруппуПожелания true - Right + Left - КоличествоОбсуждаемых - 39 + Популярные + 37 + + <key>ru</key> + <value>Популярные</value> + true true true - КоличествоОбсуждаемыхРасширеннаяПодсказка - 54 + ПопулярныеРасширеннаяПодсказка + 62 Label true true @@ -65,20 +69,20 @@ - КоличествоОбсуждаемыхКонтекстноеМеню - 40 + ПопулярныеКонтекстноеМеню + 38 true Label + 10 true true - - Style.FieldSelectionBackColor - - - true - + + Click + НажатиеНаГруппуПожелания + + true Left @@ -96,7 +100,7 @@ ВыполненныеРасширеннаяПодсказка - 55 + 63 Label true true @@ -119,42 +123,6 @@ НажатиеНаГруппуПожелания true - Right - - - - КоличествоВыполненных - 43 - true - true - - true - - - КоличествоВыполненныхРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - КоличествоВыполненныхКонтекстноеМеню - 44 - true - - Label - true - true - - Style.FieldSelectionBackColor - - - true - - Left @@ -163,7 +131,7 @@ 45 <key>ru</key> - <value>Мои предложения</value> + <value>Мои идеи</value> true true @@ -172,7 +140,7 @@ МоиПредложенияРасширеннаяПодсказка - 57 + 64 Label true true @@ -186,51 +154,24 @@ true Label + 7 true true + + System.DefaultGUIFont + false + false + false + false + Click НажатиеНаГруппуПожелания true - Right - - - - КоличествоМоихПредложений - 47 - true - true - - true - - - КоличествоМоихПредложенийРасширеннаяПодсказка - 58 - Label - true - true - - Left - - - - КоличествоМоихПредложенийКонтекстноеМеню - 48 - true - - Label - true - true - - Style.FieldSelectionBackColor - - - true - - Left + Center true @@ -244,7 +185,7 @@ ГруппаЗаголовковГруппПожеланийРасширеннаяПодсказка - 52 + 60 Label true true @@ -282,7 +223,7 @@ ПоискРасширеннаяПодсказка - 60 + 66 Label true true @@ -320,7 +261,7 @@ НайтиРасширеннаяПодсказка - 62 + 68 Label true true @@ -347,7 +288,7 @@ ПустаяНадписьРасширеннаяПодсказка - 63 + 69 Label true true @@ -363,6 +304,7 @@ Label true true + true Left @@ -377,7 +319,7 @@ НаписатьПожеланиеРасширеннаяПодсказка - 64 + 70 Label true true @@ -389,7 +331,7 @@ Form.Command.НаписатьПожелание Normal Auto - 10 + 14 true true UserCmds @@ -406,7 +348,117 @@ ГруппаПоискаПожеланияРасширеннаяПодсказка - 59 + 65 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКоманднойПанели + 54 + + ВыбратьВсе + 56 + true + true + + true + + + ВыбратьВсе + + None + + OnChange + ВыбратьВсеПриИзменении + + + ВыбратьВсеРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ВыбратьВсеКонтекстноеМеню + 57 + true + + CheckBoxField + Enter + true + Left + true + + + + НадписьВыбратьВсе + 58 + + <key>ru</key> + <value>Выбрать все</value> + + true + true + + true + + + НадписьВыбратьВсеРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + НадписьВыбратьВсеКонтекстноеМеню + 59 + true + + Label + true + true + + System.DefaultGUIFont + false + false + true + false + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа командной панели</value> + + + ГруппаКоманднойПанелиРасширеннаяПодсказка + 71 Label true true @@ -437,7 +489,7 @@ ГруппаФильтровРасширеннаяПодсказка - 65 + 75 Label true true @@ -468,7 +520,7 @@ ГруппаПожеланийРасширеннаяПодсказка - 66 + 76 Label true true @@ -499,7 +551,7 @@ ПустаяСтрокаРасширеннаяПодсказка - 68 + 78 Label true true @@ -536,7 +588,7 @@ ПодвалРасширеннаяПодсказка - 69 + 79 Label true true @@ -562,9 +614,10 @@ ru Общий подвал + true ОбщийПодвалРасширеннаяПодсказка - 67 + 77 Label true true @@ -595,7 +648,7 @@ OnCreateAtServer ПриСозданииНаСервере - 60 + 70 DontBlock true true @@ -673,95 +726,6 @@ - - ТаблицаСоответвияПожеланийИНравитсяНеНравится - - <key>ru</key> - <value>Таблица соответвия пожеланий и нравится не нравится</value> - - 6 - - 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 - - String - - - - true - - - true - - - - ГруппаНравитсяНеНравится - - <key>ru</key> - <value>Группа нравится не нравится</value> - - 4 - - String - - - - true - - - true - - - Логин @@ -780,157 +744,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ПопулярныеПожелания</name> - <title> - <key>ru</key> - <value>Популярные пожелания</value> - - 10 - - ValueTable - - - true - - - true - - - Идентификатор - - <key>ru</key> - <value>Идентификатор</value> - - 1 - - String - - - - true - - - true - - - - ДатаСоздания - - <key>ru</key> - <value>Дата создания</value> - - 2 - - Date - - Date - - - - true - - - true - - - - Рейтинг - - <key>ru</key> - <value>Рейтинг</value> - - 3 - - Number - - 10 - - - - 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 - - ValueTree - - - true - - - true - - - - - ПопулярныеПожелания.ДеревоЭлементов - - - ИмяЭлементаФормы - - <key>ru</key> - <value>Имя элемента формы</value> - - 1 - - String - - - - true - - - true - - - - ДеревоЭлементовПожеланий @@ -1224,11 +1037,24 @@ <itemValueType/> </extInfo> </attributes> + <attributes> + <name>ВыбратьВсе</name> + <id>6</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <formCommands> <name>НайтиПожелания</name> <title> <key>ru</key> - <value>Найти предложение</value> + <value>Найти</value> 2 @@ -1250,7 +1076,7 @@ НаписатьПожелание <key>ru</key> - <value>Написать</value> + <value>Добавить идею</value> 1 diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Module.bsl b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Module.bsl index 782f76346..4593a7323 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Module.bsl +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/Forms/ПожеланияПользователей/Module.bsl @@ -14,10 +14,12 @@ Логин = Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяСервиса); УстановитьПривилегированныйРежим(Ложь); + ВыбратьВсе = Истина; + ЦветГиперссылки = Новый Цвет(24, 52, 161); // Формирование элементов страницы - Результат = СформироватьЭлементыСтраницы("Popular", 1); + Результат = СформироватьЭлементыСтраницы("New", 1); Если Не Результат Тогда ВызватьИсключение НСтр("ru = 'Сервис по отображению пожеланий пользователей временно не доступен. |Пожалуйста, повторите попытку позже'"); @@ -94,6 +96,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыбратьВсеПриИзменении(Элемент) + + ПриИзмененииВыбратьВсе(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -120,8 +129,8 @@ &НаКлиенте Процедура НаписатьПожелание(Команда) - Параметрыформы = Новый Структура("Логин", Логин); - ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ДобавлениеПожелания", Параметрыформы); + ПараметрыФормы = Новый Структура("Логин", Логин); + ОткрытьФорму("Обработка.ИнформационныйЦентр.Форма.ДобавлениеПожелания", ПараметрыФормы); КонецПроцедуры @@ -129,6 +138,24 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура ПриИзмененииВыбратьВсе() + + Для Каждого Фильтр из СписокФильтров Цикл + Фильтр.Выбран = ВыбратьВсе; + КонецЦикла; + + // Формирование элементов страницы + Результат = СформироватьЭлементыСтраницы(ТекущаяГруппа, 1, Ложь); + Если Не Результат Тогда + ВызватьИсключение НСтр("ru = 'Сервис по отображению пожеланий пользователей временно не доступен. + |Пожалуйста, повторите попытку позже'"); + Отказ = Истина; + Возврат; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ВыполнитьДействиеПоГолосованию(ИмяКоманды) @@ -143,13 +170,11 @@ ГолосДобавлен = ПроголосоватьЗаПожеланиеСервер(1, ИдентификаторПожелания); Если Не ГолосДобавлен Тогда - // Отход от стандарта "Сообщения пользователю" Предупреждение(НСтр("ru = 'К сожалению Ваш голос не добавлен. |Попробуйте проголосовать позднее.")); Возврат; КонецЕсли; - // Отход от стандарта "Сообщения пользователю" ПоказатьОповещениеПользователя(НСтр("ru = 'Ваш голос принят.'")); ПараметрыФормы = Новый Структура("Логин, ИдентификаторПожелания", Логин, ИдентификаторПожелания); @@ -195,7 +220,7 @@ КонецЕсли; // Определение видимости гиперссылок фильтрации - СформироватьЗаголовкиГруппПожеланий(ГруппаПожеланий.ParametersForForm, ТипГруппы); + СформироватьЗаголовкиГруппПожеланий(ГруппаПожеланий, ТипГруппы); // Формирование фильтров СформироватьФильтры(ГруппаПожеланий.ParametersForForm.ObjectSuggestion.ObjectSuggestion, СбрасыватьФильтры); @@ -227,17 +252,17 @@ СброситьПараметрыДляЭлементовЗаголовковГрупп(); Если ТипГруппы = "Popular" Тогда - Элементы.Обсуждаемые.Гиперссылка = Ложь; - Элементы.Обсуждаемые.Шрифт = Новый Шрифт(,, Истина); - Элементы.КоличествоОбсуждаемых.ЦветТекста = Новый Цвет; + Элементы.Популярные.Гиперссылка = Ложь; + Элементы.Популярные.Шрифт = Новый Шрифт(,, Истина); ИначеЕсли ТипГруппы = "My" Тогда - Элементы.МоиПредложения.Гиперссылка = Ложь; - Элементы.МоиПредложения.Шрифт = Новый Шрифт(,, Истина); - Элементы.КоличествоМоихПредложений.ЦветТекста = Новый Цвет; + Элементы.МоиПредложения.Гиперссылка = Ложь; + Элементы.МоиПредложения.Шрифт = Новый Шрифт(,, Истина); + ИначеЕсли ТипГруппы = "New" Тогда + Элементы.Новые.Гиперссылка = Ложь; + Элементы.Новые.Шрифт = Новый Шрифт(,, Истина); ИначеЕсли ТипГруппы = "Made" Тогда - Элементы.Выполненные.Гиперссылка = Ложь; - Элементы.Выполненные.Шрифт = Новый Шрифт(,, Истина); - Элементы.КоличествоВыполненных.ЦветТекста = Новый Цвет; + Элементы.Выполненные.Гиперссылка = Ложь; + Элементы.Выполненные.Шрифт = Новый Шрифт(,, Истина); КонецЕсли; КонецПроцедуры @@ -245,21 +270,15 @@ &НаСервере Процедура СброситьПараметрыДляЭлементовЗаголовковГрупп() - Элементы.Обсуждаемые.Гиперссылка = Истина; - Элементы.Выполненные.Гиперссылка = Истина; - Элементы.МоиПредложения.Гиперссылка = Истина; + Элементы.Популярные.Гиперссылка = Истина; + Элементы.Выполненные.Гиперссылка = Истина; + Элементы.МоиПредложения.Гиперссылка = Истина; + Элементы.Новые.Гиперссылка = Истина; - Элементы.Обсуждаемые.Шрифт = Новый Шрифт(); - Элементы.Выполненные.Шрифт = Новый Шрифт(); - Элементы.МоиПредложения.Шрифт = Новый Шрифт(); - - Элементы.КоличествоОбсуждаемых.Заголовок = ""; - Элементы.КоличествоВыполненных.Заголовок = ""; - Элементы.КоличествоМоихПредложений.Заголовок = ""; - - Элементы.КоличествоОбсуждаемых.ЦветТекста = ЦветГиперссылки; - Элементы.КоличествоВыполненных.ЦветТекста = ЦветГиперссылки; - Элементы.КоличествоМоихПредложений.ЦветТекста = ЦветГиперссылки; + Элементы.Популярные.Шрифт = Новый Шрифт(); + Элементы.Выполненные.Шрифт = Новый Шрифт(); + Элементы.МоиПредложения.Шрифт = Новый Шрифт(); + Элементы.Новые.Шрифт = Новый Шрифт(); КонецПроцедуры @@ -469,15 +488,14 @@ Процедура СоздатьЭлементыПодвала(МассивИменСсылок) Если МассивИменСсылок.Количество() = 0 Тогда - ИмяОчередногоЭлемента = "пусто"; - Элемент = Элементы.Добавить(ИмяОчередногоЭлемента, Тип("ДекорацияФормы"), Элементы.Подвал); - Элемент.Вид = ВидДекорацииФормы.Надпись; - Элемент.Заголовок = ""; - Элемент.РастягиватьПоВертикали = Истина; - СписокЭлементовПодвала.Добавить(ИмяОчередногоЭлемента); + Элементы.Подвал.Видимость = Ложь; Возврат; КонецЕсли; + Элементы.Подвал.Видимость = Истина; + + Элементы.ОбщийПодвал.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния(); + ИмяОчередногоЭлемента = "Пусто1"; Элемент = Элементы.Добавить(ИмяОчередногоЭлемента, Тип("ДекорацияФормы"), Элементы.Подвал); Элемент.Вид = ВидДекорацииФормы.Надпись; @@ -497,6 +515,7 @@ Элемент = Элементы.Добавить(ИмяОчередногоЭлемента, Тип("ДекорацияФормы"), Элементы.Подвал); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = Строка(ИмяСсылки); + Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; СписокЭлементовПодвала.Добавить(ИмяОчередногоЭлемента); Продолжить; КонецЕсли; @@ -506,7 +525,9 @@ Элемент = Элементы.Добавить(ИмяОчередногоЭлемента, Тип("ДекорацияФормы"), Элементы.Подвал); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = Строка(ИмяСсылки); - Элемент.Гиперссылка = Истина; + Элемент.Гиперссылка = Истина; + Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + Элемент.Шрифт = Новый Шрифт( , , , , Ложь); Элемент.УстановитьДействие("Нажатие", "НажатиеНаНомерСтраницы"); СписокЭлементовПодвала.Добавить(ИмяОчередногоЭлемента); Продолжить; @@ -516,6 +537,9 @@ Элемент = Элементы.Добавить(ИмяОчередногоЭлемента, Тип("ДекорацияФормы"), Элементы.Подвал); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = Строка(ИмяСсылки); + Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; + Элемент.Шрифт = Новый Шрифт( , , , , Ложь); СписокЭлементовПодвала.Добавить(ИмяОчередногоЭлемента); Если Число(ИмяСсылки) = ТекущаяСтраница Тогда @@ -544,19 +568,29 @@ // Текущая страница пожеланий ТекущаяСтраница = ГруппаПожеланий.CurrentPage; + КоличествоПожеланий = ГруппаПожеланий.AmountSuggestion; + МаксимальноеКоличество = ГруппаПожеланий.MaxAmountOnPage; + + КоличествоСтраниц = Цел(КоличествоПожеланий / МаксимальноеКоличество) + ?((КоличествоПожеланий % МаксимальноеКоличество) > 0, 1, 0); + + КоличествоСтраницСбоку = 3; + + НачалоИтерации = ?((ТекущаяСтраница - КоличествоСтраницСбоку) >= 1, ТекущаяСтраница - КоличествоСтраницСбоку, 1); + КонецИтерации = ?((ТекущаяСтраница + КоличествоСтраницСбоку) >= КоличествоСтраниц, КоличествоСтраниц, ТекущаяСтраница + КоличествоСтраницСбоку); + Если ТекущаяСтраница > 1 Тогда МассивИменСсылок.Добавить(НСтр("ru = 'Предыдущие'")); КонецЕсли; - Если ТекущаяСтраница >=1 Тогда - МассивИменСсылок.Добавить(ТекущаяСтраница); - КонецЕсли; + Для Итерация = НачалоИтерации По КонецИтерации Цикл + МассивИменСсылок.Добавить(Строка(Итерация)); + КонецЦикла; - Если ГруппаПожеланий.Suggestions.Количество() > ГруппаПожеланий.MaxAmountOnPage Тогда + Если ТекущаяСтраница < КонецИтерации Тогда МассивИменСсылок.Добавить(НСтр("ru = 'Следующие'")); КонецЕсли; - Если МассивИменСсылок.Количество() = 1 Тогда + Если МассивИменСсылок.Количество() = 1 и ТекущаяСтраница = 1 Тогда МассивИменСсылок.Очистить(); КонецЕсли; @@ -567,10 +601,10 @@ &НаСервере Функция ПолучитьСписокПредметовПожеланий(ФабрикаXDTOВебСервиса) - ТипСпискаГрупп = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "ObjectSuggestionList"); + ТипСпискаГрупп = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "ObjectSuggestionList"); ОписаниеСпискаГрупп = ФабрикаXDTOВебСервиса.Создать(ТипСпискаГрупп); - ТипГруппы = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter", "ObjectSuggestionListElement"); + ТипГруппы = ФабрикаXDTOВебСервиса.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter_1_0_1_2", "ObjectSuggestionListElement"); Для Каждого ЭлементСписка из СписокФильтров Цикл @@ -597,7 +631,7 @@ Функция ПолучитьГруппуПожеланий(ТипГруппы, НомерСтраницы, СбрасыватьФильтры) Попытка - Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + Прокси = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); Предметы = ПолучитьСписокПредметовПожеланий(Прокси.ФабрикаXDTO); Возврат Прокси.GetGroupSuggestion(ТипГруппы, НомерСтраницы, Логин, Предметы, Поиск, СбрасыватьФильтры); Исключение @@ -630,7 +664,7 @@ КонецПроцедуры &НаСервере -Процедура СформироватьЭлементыДляПожеланий(МаксимальноеЧислоНастранице, Пожелания) +Процедура СформироватьЭлементыДляПожеланий(МаксимальноеЧислоНаСтранице, Пожелания) // Удаление старых элементов формы УдалитьЭлементы(); @@ -639,7 +673,6 @@ УдалитьКоманды(); ТаблицаПожеланий.Очистить(); - ТаблицаСоответвияПожеланийИНравитсяНеНравится.Очистить(); ОсновнаяГруппа = Элементы.ГруппаПожеланий; @@ -649,7 +682,7 @@ Итерация = Итерация + 1; - Если Итерация > МаксимальноеЧислоНастранице Тогда + Если Итерация > МаксимальноеЧислоНаСтранице Тогда Прервать; КонецЕсли; @@ -695,7 +728,7 @@ Функция ПроголосоватьЗаПожеланиеСервер(Голос, Идентификатор) Попытка - ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра(); + ПроксиИнформационногоЦентра = ИнформационныйЦентрСервер.ПолучитьПроксиИнформационногоЦентра_1_0_1_2(); Возврат ПроксиИнформационногоЦентра.AddVote(Идентификатор, Логин, Голос); Исключение Возврат Ложь @@ -711,7 +744,7 @@ ГруппаПожелания.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаПожелания.ОтображатьЗаголовок = Ложь; ГруппаПожелания.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ГруппаПожелания.Отображение = ОтображениеОбычнойГруппы.Линия; + ГруппаПожелания.Отображение = ОбщегоНазначенияКлиентСервер.ОтображениеОбычнойГруппыЛиния(); ГруппаПожелания.РастягиватьПоГоризонтали = Истина; СтрокаДерева = ДеревоЭлементов.Строки.Добавить(); @@ -754,16 +787,16 @@ Если Пожелание.ClosingDate <> '00010101' Тогда - ИмяЭлементаВыполненно = "Выполненно" + Строка(Итерация); - ИмяЭлементаВыполненно = Элементы.Добавить(ИмяЭлементаВыполненно, Тип("ДекорацияФормы"), ГруппаРейтинга); - ИмяЭлементаВыполненно.Заголовок = НСтр("ru = 'сделано + ИмяЭлементаВыполнено = "Выполнено" + Строка(Итерация); + ИмяЭлементаВыполнено = Элементы.Добавить(ИмяЭлементаВыполнено, Тип("ДекорацияФормы"), ГруппаРейтинга); + ИмяЭлементаВыполнено.Заголовок = НСтр("ru = 'сделано |'") + Строка(Формат(Пожелание.ClosingDate, "ДЛФ=D")); - ИмяЭлементаВыполненно.Высота = 2; - ИмяЭлементаВыполненно.Ширина = ШиринаЭлементовГруппы; - ИмяЭлементаВыполненно.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; + ИмяЭлементаВыполнено.Высота = 2; + ИмяЭлементаВыполнено.Ширина = ШиринаЭлементовГруппы; + ИмяЭлементаВыполнено.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; СтрокаДерева = СтрокаГруппы.Строки.Добавить(); - СтрокаДерева.ИмяЭлемента = ИмяЭлементаВыполненно; + СтрокаДерева.ИмяЭлемента = ИмяЭлементаВыполнено; Возврат; @@ -892,6 +925,8 @@ Если Элемент.Имя = "МоиПредложения" Тогда ТипГруппы = "My"; + ИначеЕсли Элемент.Имя = "Новые" Тогда + ТипГруппы = "New"; ИначеЕсли Элемент.Имя = "Выполненные" Тогда ТипГруппы = "Made"; Иначе @@ -899,7 +934,7 @@ КонецЕсли; - Результат = СформироватьЭлементыСтраницы(ТипГруппы, 1); + Результат = СформироватьЭлементыСтраницы(ТипГруппы, 1, Ложь); Если Не Результат Тогда Предупреждение(НСтр("ru = 'Сервис по отображению пожеланий пользователей временно не доступен. |Пожалуйста, повторите попытку позже'")); diff --git a/SSL/src/DataProcessors/ИнформационныйЦентр/ИнформационныйЦентр.mdo b/SSL/src/DataProcessors/ИнформационныйЦентр/ИнформационныйЦентр.mdo index e2ea06724..4a667044d 100644 --- a/SSL/src/DataProcessors/ИнформационныйЦентр/ИнформационныйЦентр.mdo +++ b/SSL/src/DataProcessors/ИнформационныйЦентр/ИнформационныйЦентр.mdo @@ -9,7 +9,16 @@ ru Информационный центр - DataProcessor.ИнформационныйЦентр.Form.ДобавлениеКомментария + DataProcessor.ИнформационныйЦентр.Form.ИнформационныйЦентр + + ВзаимодействияПоОбращению + + ru + Взаимодействия по обращению + + PersonalComputer + MobileDevice + ДобавлениеКомментария @@ -46,6 +55,42 @@ PersonalComputer MobileDevice + + ОбращенияПользователя + + ru + Обращения пользователя + + PersonalComputer + MobileDevice + + + ОбсужденияНаФоруме + + ru + Обсуждения на форуме + + PersonalComputer + MobileDevice + + + ОтображениеСообщений + + ru + Отображение сообщений + + PersonalComputer + MobileDevice + + + ОтправкаСообщенияВПоддержку + + ru + Отправка сообщения в поддержку + + PersonalComputer + MobileDevice + Пожелание diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form index adaa0871f..addcd398e 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form @@ -200,6 +200,10 @@ -1 Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -747,6 +751,23 @@ + + ОтсутствуютДанныеДляОтображения + + <key>ru</key> + <value>Отсутствуют данные для отображения</value> + + 8 + + Boolean + + + true + + + true + + Назад diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index 99c219a37..1ec339217 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -28,11 +28,24 @@ ПоказыватьПриНачалеРаботы = Истина; КонецЕсли; + ОтсутствуютДанныеДляОтображения = Ложь; + Если НЕ ЗаполнитьКоманды() ИЛИ НЕ ПодготовитьДанныеФормы() Тогда - Отказ = Истина; - Возврат; + + ОтсутствуютДанныеДляОтображения = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОтсутствуютДанныеДляОтображения Тогда + Отказ = Истина; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -338,12 +351,11 @@ ДвоичныеДанные.Записать(КаталогВременныхФайлов + "tmp.zip"); Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Стандартные подсистемы. Дополнительная информация'"), + НСтр("ru = 'Стандартные подсистемы. Дополнительная информация'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html index 7bd27b355..6b1a09ea9 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html @@ -1,7 +1,7 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этой форме выводится справочная, нормативная и другая информация, поставляемая в составе программы.</p> <p>Для открытия формы откройте <strong>Рабочий стол</strong> и вызовите команду "<strong>Информация при запуске</strong>" из группы "<strong>Информация</strong>" панели действий. При открытии сразу показывается одна из страниц дополнительной информации.</p> <p>В командной панели формы размещены навигационные кнопки "<strong>Назад</strong>" и "<strong>Вперед</strong>", с помощью которых осуществляется переход по уже просмотренным страницам, а также пункты меню, соответствующие названиям разделов дополнительной информации. При выборе в командной панели раздела открывается список страниц дополнительной информации, относящихся к данному разделу. Страница показывается в форме при выборе пункта меню с названием страницы.</p> <p>Текст страницы может содержать ссылки на другие страницы дополнительной информации (внутренние ссылки), а также ссылки на разделы сайтов, размещенных в сети Интернет (внешние ссылки). Для перехода по внешним ссылкам необходимо, чтобы компьютер имел доступ в сеть Интернет.</p> -<p>Для пользователей конфигураций ПРОФ-версий доступна настройка показа дополнительной информации при начале работы программы. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок "<strong>Показывать при начале работы</strong>". Если снять его установку, то дополнительная информация не будет показываться при начале работы.</p> +<p>Для пользователей конфигураций ПРОФ-версий доступна настройка показа дополнительной информации при начале работы программы. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок "<strong>Показывать при начале работы</strong>". Если снять его установку, то дополнительная информация не будет показываться при начале работы. Флажок "<strong>Показывать при начале работы</strong>" автоматически сбрасывается два раза в месяц и после обновления версии программы.</p> <p>Для пользователей базовых версий конфигураций показ дополнительной информации при начале работы программы выполняется всегда.</p></body></html> \ 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..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form"> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <windowOpeningMode>DontBlock</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Объект</name> + <id>1</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> +</form:Form> diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 2845ef7b4..fb9f1d887 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -157,7 +157,7 @@ Перем ПолеВыгружаемыеПоСсылкеОбъектыМетаданных; // (кэш) Соответствие: Ключ - ОбъектМетаданных; Значение - признак выгрузки объекта по ссылке: Истина - надо выгружать объект по ссылке, Ложь - не надо. -Перем ПолеПравилаРегистрацииОбъектов; // (кэш) ТаблицаЗначений - содержит правила регистрации объектов (правила только с видом "ФРО" и для текущего плана обмена). +Перем ПолеПравилаРегистрацииОбъектов; // (кэш) ТаблицаЗначений - содержит правила регистрации объектов (правила только с видом "Фильтр разрешенных объектов" и для текущего плана обмена). Перем ПолеИмяПланаОбмена; @@ -165,8 +165,6 @@ Перем ПолеВерсияФорматаВходящегоСообщенияОбмена; -Перем ПолеИспользуетсяВерсионирование; - //////////////////////////////////////////////////////////////////////////////// // ЭКСПОРТНЫЕ СВОЙСТВА @@ -452,7 +450,6 @@ ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", одОписаниеТипа("Дата")); ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументПроведенУспешно", одОписаниеТипа("Булево")); - ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ЭтоКоллизия", одОписаниеТипа("Число")); КонецЕсли; @@ -466,7 +463,6 @@ // инициализируем таблицу для отложенной записи объектов ПолеОбъектыДляОтложеннойЗаписи = Новый ТаблицаЗначений; ПолеОбъектыДляОтложеннойЗаписи.Колонки.Добавить("ОбъектСсылка"); - ПолеОбъектыДляОтложеннойЗаписи.Колонки.Добавить("ЭтоКоллизия", одОписаниеТипа("Число")); ПолеОбъектыДляОтложеннойЗаписи.Колонки.Добавить("ОбъектЗаписанУспешно", одОписаниеТипа("Булево")); КонецЕсли; @@ -631,23 +627,6 @@ Возврат ПолеВерсияФорматаВходящегоСообщенияОбмена; КонецФункции -// Функция-свойство: флаг использования версионирования -// -// Тип: Булево -// -Функция ИспользуетсяВерсионирование() - - Если ТипЗнч(ПолеИспользуетсяВерсионирование) <> Тип("Булево") Тогда - - ПолеИспользуетсяВерсионирование = Ложь; - ОбменДаннымиСервер.ПриОпределенииИспользованияВерсионирования(ПолеИспользуетсяВерсионирование); - - КонецЕсли; - - Возврат ПолеИспользуетсяВерсионирование; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // ФУНКЦИИ КЕШИРОВАНИЯ @@ -798,6 +777,7 @@ ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; ОбработкаВыгрузки = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -810,180 +790,101 @@ // Процедура ВыполнитьЗагрузкуДанных() Экспорт - РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ПолеСчетчикЗагруженныхОбъектов = Неопределено; - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - ПолеРежимСовместимостиСБСП20 = Неопределено; - - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - НомерПоследнегоПоискаПоСсылке = 0; - - ИнициализироватьМенеджерыИСообщения(); - - УстановитьФлагОшибки(Ложь); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ИнициализироватьВедениеПротоколаОбмена(); - - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; - - СоответствиеДопПараметровПоиска = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; - - Если ПустаяСтрока(ИмяФайлаОбмена) Тогда - ЗаписатьВПротоколВыполнения(15); - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - Если ПродолжитьПриОшибке Тогда - ИспользоватьТранзакции = Ложь; - КонецЕсли; - - Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; - КонецЕсли; - - // выполняем очистку правил обмена - Правила.Очистить(); - ТаблицаПравилКонвертации.Очистить(); - - // открываем файл сообщения обмена - // зачитываем правила обмена - ОткрытьФайлОбмена(); - - Если ФлагОшибки() Тогда - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - ИнициализироватьОбработки(); - - // {Обработчик: ПередЗагрузкойДанных} Начало - Отказ = Ложь; - - Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда - - Попытка - - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(Конвертация.ПередЗагрузкойДанных); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); - Отказ = Истина; - КонецПопытки; - - КонецЕсли; - - Если Отказ Тогда // Отказ от загрузки данных - ЗавершитьВедениеПротоколаОбмена(); - ФайлОбмена.Закрыть(); - Возврат; - КонецЕсли; - // {Обработчик: ПередЗагрузкойДанных} Окончание - - // отрабатываем правила очистки данных - ОбработатьПравилаОчистки(ТаблицаПравилОчистки.Строки); - - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - + ЧтениеСообщения = Неопределено; Попытка - ПроизвестиЧтениеДанных(); - Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОписаниеОшибки()); - ЗаписатьВПротоколВыполнения(СтрокаСообщения,,,,,Истина); - КонецПопытки; - - // отложенная запись того, что не записали - ПровестиЗаписьНеЗаписанныхОбъектов(); - - Если ИспользоватьТранзакции Тогда + РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - Если ФлагОшибки() Тогда - ОтменитьТранзакцию(); - Иначе - ЗафиксироватьТранзакцию(); - Конецесли; + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ПолеСчетчикЗагруженныхОбъектов = Неопределено; + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; - КонецЕсли; - - ФайлОбмена.Закрыть(); - - // Обработчик ПослеЗагрузкиДанных - Если Не ФлагОшибки() Тогда + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + НомерПоследнегоПоискаПоСсылке = 0; - Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда - - Попытка - - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(Конвертация.ПослеЗагрузкиДанных); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); - КонецПопытки; - + ИнициализироватьМенеджерыИСообщения(); + + УстановитьФлагОшибки(Ложь); + + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); + + ИнициализироватьВедениеПротоколаОбмена(); + + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; + + СоответствиеДопПараметровПоиска = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; + + Если ПродолжитьПриОшибке Тогда + ИспользоватьТранзакции = Ложь; КонецЕсли; - КонецЕсли; - - Если Не ФлагОшибки() Тогда + Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; + КонецЕсли; + + // выполняем очистку правил обмена + Правила.Очистить(); + ТаблицаПравилКонвертации.Очистить(); + + НачатьЧтениеСообщения(ЧтениеСообщения); + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + Попытка + + ПроизвестиЧтениеДанных(ЧтениеСообщения); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + // отложенная запись того, что не записали + ПровестиЗаписьНеЗаписанныхОбъектов(); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; // выполняем проведение документов в очереди ВыполнитьОтложенноеПроведениеДокументов(); ВыполнитьОтложеннуюЗаписьОбъектов(); - // запишем информацию о номере входящего сообщения - ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); - ОбъектУзла.НомерПринятого = НомерСообщения(); - - ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - - ОбъектУзла.Записать(); - - Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); - + Исключение + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято + ); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; - - Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); - - КонецЕсли; - - КонецЕсли; + КонецПопытки; ЗавершитьВедениеПротоколаОбмена(); @@ -992,7 +893,9 @@ ПолеОбъектыДляОтложеннойЗаписи = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; ОбработкаЗагрузки = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -1019,6 +922,10 @@ ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; ПолеРежимСовместимостиСБСП20 = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; // дата начала загрузки СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); @@ -1028,7 +935,7 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); - ВыполнитьЗагрузкуФайлаПакета(ТаблицыДляЗагрузки); + ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); // дата окончания загрузки СостояниеОбменаДанными().ДатаОкончания = ТекущаяДатаСеанса(); @@ -1050,6 +957,8 @@ ПолеОбъектыДляОтложеннойЗаписи = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -1074,6 +983,10 @@ ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; ПолеРежимСовместимостиСБСП20 = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; ИспользоватьТранзакции = Ложь; @@ -1088,13 +1001,15 @@ КонецЦикла; - ВыполнитьЗагрузкуФайлаПакета(ТаблицыДляЗагрузки); + ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); // сбрасываем модальные переменные перед помещением обработки в платформенный кэш ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеОбъектыДляОтложеннойЗаписи = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -1110,81 +1025,86 @@ // Процедура ВыполнитьАнализСообщенияОбмена() Экспорт - УстановитьФлагОшибки(Ложь); - - ИспользоватьТранзакции = Ложь; - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - - ИнициализироватьВедениеПротоколаОбмена(); - - Если ПустаяСтрока(ИмяФайлаОбмена) Тогда - ЗаписатьВПротоколВыполнения(15); - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - ИнициализироватьМенеджерыИСообщения(); - - // дата начала анализа - СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); - - // открываем файл сообщения обмена - // зачитываем правила обмена (при необходимости) - ОткрытьФайлОбмена(); - - Если ФлагОшибки() Тогда - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - ИнициализироватьОбработки(); - - // обнуляем значение модальной переменной - ПолеТаблицаДанныхЗаголовкаПакета = Неопределено; - + ЧтениеСообщения = Неопределено; Попытка - // зачитываем данные из сообщения обмена - ПроизвестиЧтениеДанныхВРежимеАнализа(); + УстановитьФлагОшибки(Ложь); - // формируем временную таблицу данных - ТаблицаДанныхЗаголовкаПакетаВременная = ТаблицаДанныхЗаголовкаПакета().Скопировать(, "ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); - ТаблицаДанныхЗаголовкаПакетаВременная.Свернуть("ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); + ИспользоватьТранзакции = Ложь; - // сворачиваем таблицу данных заголовка пакета - ТаблицаДанныхЗаголовкаПакета().Свернуть( - "ТипОбъектаСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, СинхронизироватьПоИдентификатору, ЭтоКлассификатор, ЭтоУдалениеОбъекта, ИспользоватьПредварительныйПросмотр", - "КоличествоОбъектовВИсточнике" - ); - // - ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); - ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; - Для Каждого СтрокаТаблицы Из ТаблицаДанныхЗаголовкаПакета() Цикл + ИнициализироватьВедениеПротоколаОбмена(); + + ИнициализироватьМенеджерыИСообщения(); + + // дата начала анализа + СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); + + // обнуляем значение модальной переменной + ПолеТаблицаДанныхЗаголовкаПакета = Неопределено; + + НачатьЧтениеСообщения(ЧтениеСообщения, Истина); + Попытка - Отбор = Новый Структура; - Отбор.Вставить("ТипИсточникаСтрокой", СтрокаТаблицы.ТипИсточникаСтрокой); - Отбор.Вставить("ТипПриемникаСтрокой", СтрокаТаблицы.ТипПриемникаСтрокой); + // зачитываем данные из сообщения обмена + ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения); - СтрокиВременнойТаблицы = ТаблицаДанныхЗаголовкаПакетаВременная.НайтиСтроки(Отбор); + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); + КонецЕсли; - СтрокаТаблицы.ПоляПоиска = СтрокиВременнойТаблицы[0].ПоляПоиска; - СтрокаТаблицы.ПоляТаблицы = СтрокиВременнойТаблицы[0].ПоляТаблицы; + // формируем временную таблицу данных + ТаблицаДанныхЗаголовкаПакетаВременная = ТаблицаДанныхЗаголовкаПакета().Скопировать(, "ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); + ТаблицаДанныхЗаголовкаПакетаВременная.Свернуть("ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); - КонецЦикла; + // сворачиваем таблицу данных заголовка пакета + ТаблицаДанныхЗаголовкаПакета().Свернуть( + "ТипОбъектаСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, СинхронизироватьПоИдентификатору, ЭтоКлассификатор, ЭтоУдалениеОбъекта, ИспользоватьПредварительныйПросмотр", + "КоличествоОбъектовВИсточнике"); + // + ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); + ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); + + Для Каждого СтрокаТаблицы Из ТаблицаДанныхЗаголовкаПакета() Цикл + + Отбор = Новый Структура; + Отбор.Вставить("ТипИсточникаСтрокой", СтрокаТаблицы.ТипИсточникаСтрокой); + Отбор.Вставить("ТипПриемникаСтрокой", СтрокаТаблицы.ТипПриемникаСтрокой); + + СтрокиВременнойТаблицы = ТаблицаДанныхЗаголовкаПакетаВременная.НайтиСтроки(Отбор); + + СтрокаТаблицы.ПоляПоиска = СтрокиВременнойТаблицы[0].ПоляПоиска; + СтрокаТаблицы.ПоляТаблицы = СтрокиВременнойТаблицы[0].ПоляТаблицы; + + КонецЦикла; + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Исключение + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при анализе данных: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОписаниеОшибки()); - ЗаписатьВПротоколВыполнения(СтрокаСообщения,,,,,Истина); + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято + ); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + КонецПопытки; - ФайлОбмена.Закрыть(); - ЗавершитьВедениеПротоколаОбмена(); // дата окончания анализа @@ -1193,23 +1113,13 @@ // фиксируем завершение анализа данных в РС ЗафиксироватьЗавершениеЗагрузкиДанных(); - Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); - - КонецЕсли; - - Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); - - КонецЕсли; - // сбрасываем модальные переменные перед помещением обработки в платформенный кэш ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеОбъектыДляОтложеннойЗаписи = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -1222,15 +1132,21 @@ ФайлОбмена.УстановитьСтроку(СтрокаXML); - ИнициализироватьОбработки(); - + ЧтениеСообщения = Неопределено; Попытка - ПроизвестиЧтениеДанных(); + + ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения); + Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОписаниеОшибки()); - ЗаписатьВПротоколВыполнения(СтрокаСообщения,,,,,Истина); + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято + ); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; КонецПопытки; @@ -1267,9 +1183,6 @@ КонецЕсли; // {Обработчик: ПередЗагрузкойДанных} Окончание - // отрабатываем правила очистки данных - ОбработатьПравилаОчистки(ТаблицаПравилОчистки.Строки); - КонецПроцедуры // Процедура инициализации перед загрузкой данных через внешнее соединение @@ -1293,7 +1206,6 @@ НомерПоследнегоПоискаПоСсылке = 0; ИнициализироватьМенеджерыИСообщения(); - ИнициализироватьОбработки(); УстановитьФлагОшибки(Ложь); @@ -1318,6 +1230,9 @@ ФайлОбмена = Новый ЧтениеXML; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + КонецПроцедуры // Выполняет обработчик После загрузки данных. @@ -1362,8 +1277,7 @@ // запишем информацию о номере входящего сообщения ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); ОбъектУзла.НомерПринятого = НомерСообщения(); - - ОбъектУзла.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ОбъектУзла.ДополнительныеСвойства.Вставить("Загрузка"); ОбъектУзла.Записать(); @@ -1388,6 +1302,7 @@ ПолеОбъектыДляОтложеннойЗаписи = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + ФайлОбмена = Неопределено; КонецПроцедуры @@ -1515,7 +1430,7 @@ // Объект - Записываемый объект. // Тип - Строка - Тип объекта строкой. // -Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь, УникальныйИдентификаторСтрокой = "") Экспорт +Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь) Экспорт // в режиме загрузки в ТЗ объекты не записываем Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда @@ -1527,7 +1442,7 @@ И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда - СтрокаСообщенияОбОшибке = НСтр("ru = 'Попытка изменение неразделенных данных (%1) в разделенном режиме.'"); + СтрокаСообщенияОбОшибке = НСтр("ru = 'Попытка изменения неразделенных данных (%1) в разделенном сеансе.'"); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Объект.Метаданные().ПолноеИмя()); ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке,, Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); @@ -1542,45 +1457,6 @@ // выполняем проверку на пометку удаления предопределенного элемента СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, Тип); - // Проверка на коллизии дат запрета загрузки. - Отказ = Ложь; - СообщениеОбОшибке = ""; - ОбменДаннымиСервер.ПередЗаписьюДанныхИзСообщенияОбмена( - Объект, УзелОбменаЗагрузкаДанных, Отказ, СообщениеОбОшибке - ); - - Если Отказ Тогда - - // Если загрузка запрещена регистрируется ошибка и загрузка продолжается. - ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СообщениеОбОшибке)); - ЗП.Объект = Объект; - ЗП.ТипОбъекта = Тип; - - ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); - - МетаданныеОбъекта = Объект.Метаданные(); - - Если ИспользуетсяВерсионирование() И (ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Или ОбщегоНазначения.ЭтоСправочник(МетаданныеОбъекта)) Тогда - - Если Объект.Ссылка.Пустая() Тогда - СтрокаСообщенияОбОшибке = Строка(Объект) + НСтр("ru = ' запрещено загружать в запрещенный период.'") + Символы.ПС + Символы.ПС + Строка(СообщениеОбОшибке); - Иначе - ОбъектВБазе = Объект.Ссылка.ПолучитьОбъект(); - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(ОбъектВБазе, , Перечисления["ТипыВерсийОбъекта"].ИзмененоПользователем,,,Истина); - СтрокаСообщенияОбОшибке = Строка(СообщениеОбОшибке); - КонецЕсли; - - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(Объект, УзелОбменаЗагрузкаДанных,Перечисления["ТипыВерсийОбъекта"].НепринятыеДанныеПоДатеЗапретаОбъектСуществует, - СтрокаСообщенияОбОшибке, УникальныйИдентификаторСтрокой, Истина); - - КонецЕсли; - - ЗаписатьОбъект = Ложь; - Возврат; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - НачатьТранзакцию(); Попытка @@ -1617,49 +1493,11 @@ // Объект - Объект для отмены проведения. // Тип - Строка - Тип объекта строкой. // -Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, УникальныйИдентификаторСтрокой = "") Экспорт +Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) Экспорт // устанавливаем режим загрузки данных для объекта УстановитьОбменДаннымиЗагрузка(Объект); - // Проверка на коллизии дат запрета загрузки. - Отказ = Ложь; - СообщениеОбОшибке = ""; - ОбменДаннымиСервер.ПередЗаписьюДанныхИзСообщенияОбмена( - Объект, УзелОбменаЗагрузкаДанных, Отказ, СообщениеОбОшибке); - - Если Отказ Тогда - - // Если загрузка запрещена регистрируется ошибка и загрузка продолжается. - ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СообщениеОбОшибке)); - ЗП.Объект = Объект; - ЗП.ТипОбъекта = Тип; - - ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); - - МетаданныеОбъекта = Объект.Метаданные(); - - Если ИспользуетсяВерсионирование() И (ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Или ОбщегоНазначения.ЭтоСправочник(МетаданныеОбъекта)) Тогда - - Если Объект.Ссылка.Пустая() Тогда - СтрокаСообщенияОбОшибке = Строка(Объект) + НСтр("ru = ' запрещено загружать в запрещенный период.'") + Символы.ПС + Символы.ПС + Строка(СообщениеОбОшибке); - Иначе - ОбъектВБазе = Объект.Ссылка.ПолучитьОбъект(); - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(ОбъектВБазе, , Перечисления["ТипыВерсийОбъекта"].ИзмененоПользователем,,,Истина); - СтрокаСообщенияОбОшибке = Строка(СообщениеОбОшибке); - КонецЕсли; - - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(Объект, УзелОбменаЗагрузкаДанных, Перечисления["ТипыВерсийОбъекта"].НепринятыеДанныеПоДатеЗапретаОбъектСуществует, - СтрокаСообщенияОбОшибке, УникальныйИдентификаторСтрокой, Истина); - - КонецЕсли; - - ЗаписатьОбъект = Ложь; - Возврат; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - НачатьТранзакцию(); Попытка @@ -1676,7 +1514,7 @@ РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); КонецЕсли; - УдалитьДвиженияУДокумента(Объект, Отказ); + УдалитьДвиженияУДокумента(Объект); ЗафиксироватьТранзакцию(); Исключение @@ -1854,8 +1692,7 @@ ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, - Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден - ); + Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден); КонецЕсли; @@ -1887,8 +1724,7 @@ ВыполнитьОбработчик_ПКО_ПередВыгрузкойОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены, ТолькоПолучитьУзелСсылки, - Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден - ); + Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден); КонецЕсли; @@ -1908,8 +1744,8 @@ НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов = Ложь; ЗначениеСсылкиВДругойИБ = ""; - // Возможно такие данные уже выгружались - Если Не ВсеОбъектыВыгружены Тогда + // Возможно такие данные уже выгружались + Если Не ВсеОбъектыВыгружены Тогда Нпп = 0; @@ -2006,8 +1842,8 @@ КонецЕсли; КонецЕсли; - - СоответствиеЗначений = ПКО.Значения; + + СоответствиеЗначений = ПКО.ЗначенияПредопределенныхДанных; КоличествоЭлементовСоответствияЗначений = СоответствиеЗначений.Количество(); // Обработка соответствий предопределенных элементов @@ -2018,7 +1854,7 @@ И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда Попытка - ИмяПредопределенногоИсточник = СтруктураСвойств.Менеджер.ПолучитьИмяПредопределенного(СсылкаНаИсточник) + ИмяПредопределенногоИсточник = ОбщегоНазначения.ИмяПредопределенного(СсылкаНаИсточник) Исключение ИмяПредопределенногоИсточник = ""; КонецПопытки; @@ -2197,7 +2033,7 @@ КонецЕсли; - Если Приемник = Неопределено Тогда + Если Приемник = Неопределено Тогда Приемник = СоздатьУзел("Объект"); @@ -2261,8 +2097,7 @@ ВыполнитьОбработчик_ПКО_ПриВыгрузкеОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, - СтандартнаяОбработка, Приемник, УзелСсылки - ); + СтандартнаяОбработка, Приемник, УзелСсылки); КонецЕсли; @@ -2320,8 +2155,7 @@ , // НеИспользоватьПравилаСГлобальнойВыгрузкойИНеЗапоминатьВыгруженные = Ложь ЗначениеСсылкиВДругойИБ, // ЗначениеСсылкиВДругойИБ СписокВременныхФайлов, // СписокВременныхФайлов = Неопределено - ВыгрузкаСтрокиНабораЗаписейРегистра // ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь - ); + ВыгрузкаСтрокиНабораЗаписейРегистра); // ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь КонецЕсли; @@ -2340,8 +2174,7 @@ Иначе ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, - ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки - ); + ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки); КонецЕсли; @@ -2445,8 +2278,7 @@ Иначе ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъектаВФайлОбмена(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, - ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки - ); + ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки); КонецЕсли; @@ -2598,8 +2430,8 @@ // Процедура УстановитьПометкуУдаленияУОбъекта(Объект, ПометкаУдаления, ИмяТипаОбъекта) Экспорт - Если (ПометкаУдаления = Неопределено) - И (Объект.ПометкаУдаления <> Истина) Тогда + Если (ПометкаУдаления = Неопределено И Объект.ПометкаУдаления <> Истина) + Или Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных") Тогда Возврат; КонецЕсли; @@ -2668,6 +2500,18 @@ КонецПроцедуры +Процедура ПолучитьЗначенияПредопределенныхДанных(Знач ПКО) + + ПКО.ЗначенияПредопределенныхДанных = Новый Соответствие; + + Для Каждого Элемент Из ПКО.ЗначенияПредопределенныхДанныхПрочитанные Цикл + + ПКО.ЗначенияПредопределенныхДанных.Вставить(одПолучитьЗначениеПоСтроке(Элемент.Ключ, ПКО.Источник), Элемент.Значение); + + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ @@ -4240,8 +4084,10 @@ КонецЕсли; КонецЦикла; - - Значения[одПолучитьЗначениеПоСтроке(Источник, ТипИсточника)] = Приемник; + + Если Не ПустаяСтрока(Источник) Тогда + Значения.Вставить(Источник, Приемник); + КонецЕсли; КонецПроцедуры @@ -4431,12 +4277,10 @@ // Значения ИначеЕсли ИмяУзла = "Значения" Тогда - - ЗагрузитьЗначения(ПравилаОбмена, НоваяСтрока.Значения, НоваяСтрока.Источник); - + + ЗагрузитьЗначения(ПравилаОбмена, НоваяСтрока.ЗначенияПредопределенныхДанныхПрочитанные, НоваяСтрока.Источник); // Обработчики событий - ИначеЕсли ИмяУзла = "ПередВыгрузкой" Тогда НоваяСтрока.ПередВыгрузкой = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); @@ -5468,9 +5312,17 @@ КонецЕсли; СтруктураПравил = СохраненныеНастройки.Получить(); - - Конвертация = СтруктураПравил.Конвертация; + // Выполняем проверку на версию формата хранения правил обмена + ВерсияФорматаХраненияПравил = Неопределено; + СтруктураПравил.Свойство("ВерсияФорматаХраненияПравил", ВерсияФорматаХраненияПравил); + Если ВерсияФорматаХраненияПравил <> ВерсияФорматаХраненияПравилОбмена() Тогда + ВызватьИсключение НСтр("ru = 'Версия формата хранения правил обмена не соответствует ожидаемой. + |Требуется выполнить загрузку правил обмена повторно.'" + ); + КонецЕсли; + + Конвертация = СтруктураПравил.Конвертация; ТаблицаПравилВыгрузки = СтруктураПравил.ТаблицаПравилВыгрузки; ТаблицаПравилКонвертации = СтруктураПравил.ТаблицаПравилКонвертации; ТаблицаНастройкиПараметров = СтруктураПравил.ТаблицаНастройкиПараметров; @@ -5494,16 +5346,19 @@ Запрос = Новый Запрос(ЭлементСтруктуры.Значение); Запросы.Вставить(ЭлементСтруктуры.Ключ, Запрос); КонецЦикла; - + ИнициализироватьМенеджерыИСообщения(); Правила.Очистить(); Если РежимОбмена = "Выгрузка" Тогда - + Для Каждого СтрокаТаблицы Из ТаблицаПравилКонвертации Цикл + + ПолучитьЗначенияПредопределенныхДанных(СтрокаТаблицы); + Правила.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы); - + Если СтрокаТаблицы.Источник <> Неопределено Тогда Попытка @@ -5511,17 +5366,17 @@ Менеджеры[Тип(СтрокаТаблицы.Источник)].ПКО = СтрокаТаблицы; Иначе Менеджеры[СтрокаТаблицы.Источник].ПКО = СтрокаТаблицы; - КонецЕсли; + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеВПротокол(11, ОписаниеОшибки(), Строка(СтрокаТаблицы.Источник)); КонецПопытки; КонецЕсли; - + КонецЦикла; - + КонецЕсли; - + КонецПроцедуры // Устанавливает значения параметров в структуре Параметры @@ -5843,6 +5698,285 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ЗАГРУЗКИ ДАННЫХ +Процедура НачатьЧтениеСообщения(ЧтениеСообщения, АнализДанных = Ложь) + + Если ПустаяСтрока(ИмяФайлаОбмена) Тогда + ВызватьИсключение ЗаписатьВПротоколВыполнения(15); + КонецЕсли; + + ФайлОбмена = Новый ЧтениеXML; + + ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); + + ФайлОбмена.Прочитать(); // ФайлОбмена + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если ФайлОбмена.ЛокальноеИмя <> "ФайлОбмена" Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ПолеВерсияФорматаВходящегоСообщенияОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ВерсияФормата"); + + ФайлОбмена.Прочитать(); // ПравилаОбмена + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если ФайлОбмена.ЛокальноеИмя <> "ПравилаОбмена" Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если ТаблицаПравилКонвертации.Количество() = 0 Тогда + ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'При загрузке правил обмена данными возникли ошибки.'"); + КонецЕсли; + Иначе + одПропустить(ФайлОбмена); + КонецЕсли; + + // {Обработчик: ПередЗагрузкойДанных} Начало + Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда + + Отказ = Ложь; + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); + + КонецЕсли; + + Исключение + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + КонецПопытки; + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Отказ от загрузки сообщения обмена в обработчике ПередЗагрузкойДанных (конвертация).'"); + КонецЕсли; + + КонецЕсли; + // {Обработчик: ПередЗагрузкойДанных} Окончание + + ФайлОбмена.Прочитать(); + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + // НастройкаПользовательскогоПоиска (необязательный) + Если ФайлОбмена.ЛокальноеИмя = "НастройкаПользовательскогоПоиска" Тогда + ЗагрузитьИнформациюОПользовательскихПоляхПоиска(); + ФайлОбмена.Прочитать(); + КонецЕсли; + + // ИнформацияОТипахДанных (необязательный) + Если ФайлОбмена.ЛокальноеИмя = "ИнформацияОТипахДанных" Тогда + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда + одПропустить(ФайлОбмена); + Иначе + ЗагрузитьИнформациюОТипахДанных(); + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'При загрузке информации о типах данных возникли ошибки.'"); + КонецЕсли; + КонецЕсли; + ФайлОбмена.Прочитать(); + КонецЕсли; + + // ЗначениеПараметра (необязательный) (несколько) + Если ФайлОбмена.ЛокальноеИмя = "ЗначениеПараметра" Тогда + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ЗагрузитьЗначенияПараметровОбменаДанными(); + + Пока ФайлОбмена.Прочитать() Цикл + + Если ФайлОбмена.ЛокальноеИмя = "ЗначениеПараметра" Тогда + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ЗагрузитьЗначенияПараметровОбменаДанными(); + Иначе + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // АлгоритмПослеЗагрузкиПараметров (необязательный) + Если ФайлОбмена.ЛокальноеИмя = "АлгоритмПослеЗагрузкиПараметров" Тогда + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ВыполнитьАлгоритмПослеЗагрузкиПараметров(одЗначениеЭлемента(ФайлОбмена, ТипСтрока)); + ФайлОбмена.Прочитать(); + КонецЕсли; + + // ДанныеПоОбмену (обязательный) + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если ФайлОбмена.ЛокальноеИмя <> "ДанныеПоОбмену" Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ПрочитатьДанныеПоОбмену(ЧтениеСообщения, АнализДанных); + ФайлОбмена.Прочитать(); + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Блокировка получения данных не может быть установлена в активной транзакции.'"); + КонецЕсли; + + // Устанавливаем блокировку на узел отправителя + Попытка + ЗаблокироватьДанныеДляРедактирования(ЧтениеСообщения.Отправитель); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка установки блокировки на обмен данными. + |Возможно, обмен данными выполняется другим сеансом. + | + |Подробности: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры + +Процедура ЗакончитьЧтениеСообщения(Знач ЧтениеСообщения) + + // {Обработчик: ПослеЗагрузкиДанных} Начало + Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); + + КонецЕсли; + + Исключение + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + КонецПопытки; + + КонецЕсли; + // {Обработчик: ПослеЗагрузкиДанных} Окончание + + Если ФайлОбмена.ТипУзла <> ТипУзлаXML.КонецЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + Если ФайлОбмена.ЛокальноеИмя <> "ФайлОбмена" Тогда + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + КонецЕсли; + + ФайлОбмена.Прочитать(); // ФайлОбмена + ФайлОбмена.Закрыть(); + + НачатьТранзакцию(); + Если Не ЧтениеСообщения.АнализДанных Тогда + ЧтениеСообщения.ОтправительОбъект.НомерПринятого = ЧтениеСообщения.НомерСообщения; + ЧтениеСообщения.ОтправительОбъект.ДополнительныеСвойства.Вставить("Загрузка"); + ЧтениеСообщения.ОтправительОбъект.Записать(); + КонецЕсли; + + Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); + КонецЕсли; + + Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); + КонецЕсли; + ЗафиксироватьТранзакцию(); + + РазблокироватьДанныеДляРедактирования(ЧтениеСообщения.Отправитель); + +КонецПроцедуры + +Процедура ПрерватьЧтениеСообщения(Знач ЧтениеСообщения) + + ФайлОбмена.Закрыть(); + + РазблокироватьДанныеДляРедактирования(ЧтениеСообщения.Отправитель); + +КонецПроцедуры + +Процедура ВыполнитьАлгоритмПослеЗагрузкиПараметров(Знач ТекстАлгоритма) + + Если ПустаяСтрока(ТекстАлгоритма) Тогда + Возврат; + КонецЕсли; + + Отказ = Ложь; + ПричинаОтказа = ""; + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстАлгоритма); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); + + КонецЕсли; + + Если Отказ = Истина Тогда + + Если Не ПустаяСтрока(ПричинаОтказа) Тогда + + СтрокаСообщения = НСтр("ru = 'Отказ от загрузки сообщения обмена в обработчике ПослеЗагрузкиПараметров (конвертация) по причине: %1'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПричинаОтказа); + ВызватьИсключение СтрокаСообщения; + Иначе + ВызватьИсключение НСтр("ru = 'Отказ от загрузки сообщения обмена в обработчике ПослеЗагрузкиПараметров (конвертация).'"); + КонецЕсли; + + КонецЕсли; + + Исключение + + ЗП = ПолучитьСтруктуруЗаписиПротокола(78, ОписаниеОшибки()); + ЗП.Обработчик = "ПослеЗагрузкиПараметров"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + Функция УстановитьСсылкуНового(Объект, Менеджер, СвойстваПоиска) УИ = СвойстваПоиска["{УникальныйИдентификатор}"]; @@ -5992,9 +6126,8 @@ КонецФункции - // Процедура удаления существующих движений документа при перепроведении (отмене проведения) -Процедура УдалитьДвиженияУДокумента(ДокументОбъект, Отказ) +Процедура УдалитьДвиженияУДокумента(ДокументОбъект) МассивОбрабатываемыхСтрокТаблицыДвижений = Новый Массив(); @@ -6275,8 +6408,7 @@ , ИмяПКО, СоответствияОбъектовИнформационныхБаз, - ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - ); + ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли); Если НеСоздаватьОбъектЕслиНеНайден И НЕ ОбъектНайден Тогда @@ -6415,8 +6547,7 @@ ГНпп = 0, ПараметрыОбъекта = Неопределено, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике = Ложь, - ОбъектБылСозданВТекущейИнформационнойБазе = Неопределено - ) + ОбъектБылСозданВТекущейИнформационнойБазе = Неопределено) Объект = одНайтиОбъектПоСвойству(СтруктураСвойств.Менеджер, СвойствоПоиска, ЗначениеСвойстваПоиска, НайденныйИлиСозданныйОбъект, , , РежимПоискаОсновногоОбъекта, СтруктураСвойств.СтрокаПоиска); @@ -6591,8 +6722,7 @@ Знач ТипПриемникаСтрокой, Знач РежимПоискаОсновногоОбъекта, НайденоСоответствиеОбъекта = Ложь, - СоответствияОбъектовИнформационныхБаз = Неопределено - ) + СоответствияОбъектовИнформационныхБаз = Неопределено) // в режиме сопоставления для основных объектов замену не выполняем Если РежимПоискаОсновногоОбъекта И РежимЗагрузкиДанныхВТаблицуЗначений() Тогда @@ -6908,8 +7038,7 @@ СозданныйОбъект, ЗаписыватьНовыйОбъектВИнформационнуюБазу = Истина, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике = Ложь, - ОбъектБылСозданВТекущейИнформационнойБазе = Неопределено - ) + ОбъектБылСозданВТекущейИнформационнойБазе = Неопределено) Если УстанавливатьУОбъектаВсеСвойстваПоиска <> Истина Тогда Возврат; @@ -7027,8 +7156,7 @@ УникальныйИдентификаторСтрокой = "", ИмяПКО = "", СоответствияОбъектовИнформационныхБаз = Неопределено, - ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = Неопределено - ) + ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = Неопределено) // Идентификация объекта выполняется последовательно в пять этапов. // Переход к каждому последующему этапу выполняется в случае, @@ -7139,8 +7267,7 @@ НппСсылки, НППГлобальнойСсылки, ПараметрыОбъекта, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике, - ОбъектБылСозданВТекущейИнформационнойБазе - ); + ОбъектБылСозданВТекущейИнформационнойБазе); Если СсылкаНаОбъект <> Неопределено И СсылкаНаОбъект.Пустая() Тогда @@ -7185,8 +7312,7 @@ НППГлобальнойСсылки, ПараметрыОбъекта, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике, - ОбъектБылСозданВТекущейИнформационнойБазе - ); + ОбъектБылСозданВТекущейИнформационнойБазе); Если Не ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли Тогда Возврат СсылкаНаОбъект; @@ -7213,8 +7339,7 @@ НППГлобальнойСсылки, ПараметрыОбъекта, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике, - ОбъектБылСозданВТекущейИнформационнойБазе - ); + ОбъектБылСозданВТекущейИнформационнойБазе); Иначе @@ -7285,8 +7410,7 @@ ВыполнитьОбработчик_ПКО_ПоследовательностьПолейПоиска(НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, СтрокаИменСвойствПоиска, - ПКО.ИмяОбработчикаПоследовательностьПолейПоиска - ); + ПКО.ИмяОбработчикаПоследовательностьПолейПоиска); КонецЕсли; @@ -7323,8 +7447,7 @@ СозданныйОбъект, НЕ РежимПоискаОсновногоОбъекта, НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике, - ОбъектБылСозданВТекущейИнформационнойБазе - ); + ОбъектБылСозданВТекущейИнформационнойБазе); КонецЕсли; @@ -8395,8 +8518,7 @@ ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, - ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ); + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения); КонецЕсли; @@ -8432,8 +8554,7 @@ ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, - ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ); + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения); КонецЕсли; @@ -8608,195 +8729,41 @@ Иначе ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило - ); + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило); КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); + ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; КонецЕсли; - Если Объект <> Неопределено тогда - ЕстьКоллизия = ПроверитьНаличиеКоллизийДляОбъекта(Объект, "РегистрСведений", ПриоритетОбъектаОбмена, ИмяРегистра); + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ОтправкаНазад = Ложь; - // в случае наличия коллизии новая версия объекта записывается только при условии, что - // приоритет ее записи ВЫШЕ, во всех остальных случаях версия не записывается - Если ЕстьКоллизия Тогда - - Если ПриоритетОбъектаОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда - ЗаписатьОбъектВИБ(Объект, ТипОбъекта); - КонецЕсли; - + Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); + + Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); Иначе - - ЗаписатьОбъектВИБ(Объект, ТипОбъекта); - + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); КонецЕсли; + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Возврат Неопределено; + КонецЕсли; + + ЗаписатьОбъектВИБ(Объект, ТипОбъекта); + КонецЕсли; - Возврат Объект; - -КонецФункции - -Функция ПолучитьДанныеОбъектаСтрокой(Объект) - - СтроковоеПредставлениеОбъекта = ""; - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - - ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное); - - СтроковоеПредставлениеОбъекта = ЗаписьXML.Закрыть(); - - Возврат СтроковоеПредставлениеОбъекта; - -КонецФункции - -//функция проверяет наличие коллизий при загрузке -// и выдает информацию есть ли коллизия при обмене -Функция ПроверитьНаличиеКоллизийДляОбъекта(Объект, ИмяТипаОбъекта, ПриоритетОбъектаОбмена, - ДополнительнаяИнформация = "", УникальныйИдентификаторСтрокой = "") - - Попытка - ЕстьКоллизия = ПланыОбмена.ИзменениеЗарегистрировано(УзелОбменаЗагрузкаДанных, Объект); - Исключение - ЕстьКоллизия = Ложь; - КонецПопытки; - - // выполняем дополнительную проверку на изменение объекта - // если объект до коллизии и после коллизии не изменен, - // то считаем, что коллизии нет - Если ЕстьКоллизия Тогда - - СтрокаОбъектаДоИзменения = ПолучитьДанныеОбъектаСтрокойДоИзменения(Объект, ДополнительнаяИнформация, ИмяТипаОбъекта); - СтрокаОбъектаПослеИзменения = ПолучитьДанныеОбъектаСтрокойПослеИзменения(Объект, ИмяТипаОбъекта); - - // если значения совпадают, то коллизии нет - Если СтрокаОбъектаДоИзменения = СтрокаОбъектаПослеИзменения Тогда - - ЕстьКоллизия = Ложь; - - КонецЕсли; - - КонецЕсли; - - // при наличии коллизии делаем запись в ЖР - Если ЕстьКоллизия Тогда - - КСообщенияОбОшибках = ?(ПриоритетОбъектаОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше, 81, 82); - - ЗП = Новый Структура; - - Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда - - ЗП.Вставить("Данные", ОбщегоНазначения.РасширенноеПредставлениеОбъекта(Объект.Ссылка)); - - КонецЕсли; - - ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП, Ложь); - - МетаданныеОбъекта = Объект.Метаданные(); - - Если ИспользуетсяВерсионирование() И (ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Или ОбщегоНазначения.ЭтоСправочник(МетаданныеОбъекта)) Тогда - - Если ОбщегоНазначения.СсылкаСуществует(Объект.Ссылка) Тогда - - ОбъектВБазе = Объект.Ссылка.ПолучитьОбъект(); - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(ОбъектВБазе, , Перечисления["ТипыВерсийОбъекта"].ИзмененоПользователем,,,Истина); - - КонецЕсли; - - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда - - Комментарий = НСтр("ru = 'Непринятые данные (автоматическое разрешение коллизий).'"); - ОбменДаннымиСервер.ПриСозданииВерсииОбъекта(Объект, УзелОбменаЗагрузкаДанных, - Перечисления["ТипыВерсийОбъекта"].НепринятыеДанныеПоКоллизии, Комментарий, УникальныйИдентификаторСтрокой, Истина); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Возврат ЕстьКоллизия; - -КонецФункции - -Функция ПолучитьДанныеОбъектаСтрокойДоИзменения(Объект, ДополнительнаяИнформация, ИмяТипаОбъекта) - - // возвращаемое значение функции - СтрокаОбъекта = ""; - - Если ИмяТипаОбъекта = "Константы" Тогда - - // получаем значение константы из ИБ - СтрокаОбъекта = XMLСтрока(Константы[ДополнительнаяИнформация].Получить()); - - ИначеЕсли ИмяТипаОбъекта = "РегистрСведений" Тогда - - СтарыйНаборЗаписей = РегистрыСведений[ДополнительнаяИнформация].СоздатьНаборЗаписей(); - - Для Каждого ЗначениеОтбора Из Объект.Отбор Цикл - - Если ЗначениеОтбора.Использование = Ложь Тогда - Продолжить; - КонецЕсли; - - СтрокаОтбора = СтарыйНаборЗаписей.Отбор.Найти(ЗначениеОтбора.Имя); - СтрокаОтбора.Значение = ЗначениеОтбора.Значение; - СтрокаОтбора.Использование = Истина; - - КонецЦикла; - - СтарыйНаборЗаписей.Прочитать(); - - // получаем набор записей регистра из ИБ с отбором как у Объекта - СтрокаОбъекта = ПолучитьДанныеОбъектаСтрокой(СтарыйНаборЗаписей); - - Иначе - - Если ОбщегоНазначения.СсылкаСуществует(Объект.Ссылка) Тогда - - // получаем представление объекта из ИБ по ссылке - СтрокаОбъекта = ПолучитьДанныеОбъектаСтрокой(Объект.Ссылка.ПолучитьОбъект()); - - Иначе - - СтрокаОбъекта = "Объект удален"; - - КонецЕсли; - - КонецЕсли; - - Возврат СтрокаОбъекта; -КонецФункции - -Функция ПолучитьДанныеОбъектаСтрокойПослеИзменения(Объект, ИмяТипаОбъекта) - - // возвращаемое значение функции - СтрокаОбъекта = ""; - - Если ИмяТипаОбъекта = "Константы" Тогда - - СтрокаОбъекта = XMLСтрока(Объект.Значение); - - Иначе - - СтрокаОбъекта = ПолучитьДанныеОбъектаСтрокой(Объект); - - КонецЕсли; - - Возврат СтрокаОбъекта + Возврат Объект; КонецФункции @@ -8970,8 +8937,7 @@ ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, - ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ); + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения); КонецЕсли; @@ -9007,8 +8973,7 @@ ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, - ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ); + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения); КонецЕсли; @@ -9034,6 +8999,7 @@ НППГлобальнойСсылки = 0; НппСсылки = 0; ПараметрыОбъекта = Неопределено; + ЗаписатьОбъект = Истина; // флаг определяет был ли объект найден по полям поиска в режиме сопоставления объектов или нет; // если флаг установлен, то в регистр сопоставления добавляется информация о сопоставлении GUID ссылки источника и приемника @@ -9185,8 +9151,7 @@ РегистрироватьОбъектНаУзлеОтправителе, УникальныйИдентификаторСтрокой, ИмяПравила, - СоответствияОбъектовИнформационныхБаз - ); + СоответствияОбъектовИнформационныхБаз); Если ИмяТипаОбъекта = "Перечисление" Тогда @@ -9271,8 +9236,8 @@ Если Объект = Неопределено Тогда ОбъектНайден = Ложь; - - // Обработчик события ПриЗагрузкеОбъекта + + // Обработчик события ПриЗагрузкеОбъекта Если ЕстьОбработчикПриЗагрузке Тогда @@ -9295,12 +9260,11 @@ ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; - + КонецЕсли; КонецЕсли; - Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); НеЗамещатьСвойство = одАтрибут(ФайлОбмена, ТипБулево, "НеЗамещать"); НеОчищать = одАтрибут(ФайлОбмена, ТипБулево, "НеОчищать"); @@ -9348,8 +9312,7 @@ Иначе ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден - ); + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден); КонецЕсли; @@ -9375,8 +9338,7 @@ Иначе ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило - ); + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило); КонецЕсли; @@ -9392,7 +9354,15 @@ ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; ОтправкаНазад = Ложь; - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад); + Если ИмяТипаОбъекта <> "Перечисление" Тогда + Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); + КонецЕсли; + + Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); + Иначе + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); + КонецЕсли; Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Отказ = Истина; @@ -9433,9 +9403,9 @@ КонецЕсли; - КонецЕсли; + КонецЕсли; - РежимПроведения = ?(РежимПроведения = "Оперативный", РежимПроведенияДокумента.Оперативный, РежимПроведенияДокумента.Неоперативный); + РежимПроведения = ?(РежимПроведения = "Оперативный", РежимПроведенияДокумента.Оперативный, РежимПроведенияДокумента.Неоперативный); // если хотим провести документ, помеченный на удаление, то пометку удаления снимаем ... Если Объект.ПометкаУдаления @@ -9453,60 +9423,34 @@ Попытка // записываем документ, информацию о необходимости его провести или отменить проведение отдельно фиксируем - - // записываем документ - проверяем наличие коллизий - ЕстьКоллизия = ПроверитьНаличиеКоллизийДляОбъекта(Объект, ТипОбъекта, ПриоритетОбъектаОбмена, ИмяКонстанты, УникальныйИдентификаторСтрокой); - - ЗаписатьОбъект = Истина; - КоллизияПринята = Ложь; - - Если ЕстьКоллизия Тогда + // документы которые просто нужно записать - так и записываем + Если РежимЗаписи = РежимЗаписиДокумента.Запись Тогда - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда - - ЗаписатьОбъект = Ложь; - - Иначе - - КоллизияПринята = Истина; - - КонецЕсли; + ЗаписатьОбъектВИБ(Объект, ТипОбъекта,, ОтправкаНазад); - КонецЕсли; - - Если ЗаписатьОбъект Тогда + ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда - // документы которые просто нужно записать - так и записываем - Если РежимЗаписи = РежимЗаписиДокумента.Запись Тогда + ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); + + ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда + + // Отключаем механизм регистрации объектов при отмене проведения документа. + // Механизм регистрации будет выполнен при отложенном проведении документов + // (оптимизация производительности загрузки данных). + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + + ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); + + // Если документ был успешно записан и создана ссылка, + // то помещаем документ в очередь для проведения. + Если ЗаписатьОбъект + И Объект <> Неопределено + И Объект.Ссылка <> Неопределено Тогда - ЗаписатьОбъектВИБ(Объект, ТипОбъекта,, ОтправкаНазад, УникальныйИдентификаторСтрокой); - - ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда - - ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); - - ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда - - // Отключаем механизм регистрации объектов при отмене проведения документа. - // Механизм регистрации будет выполнен при отложенном проведении документов - // (оптимизация производительности загрузки данных). - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - - ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект, УникальныйИдентификаторСтрокой); - - // Если документ был успешно записан и создана ссылка, - // то помещаем документ в очередь для проведения. - Если ЗаписатьОбъект - И Объект <> Неопределено - И Объект.Ссылка <> Неопределено Тогда - - СтрокаТаблицы = ДокументыДляОтложенногоПроведения().Добавить(); - СтрокаТаблицы.ДокументСсылка = Объект.Ссылка; - СтрокаТаблицы.ДатаДокумента = Объект.Дата; - СтрокаТаблицы.ЭтоКоллизия = КоллизияПринята; - - КонецЕсли; + СтрокаТаблицы = ДокументыДляОтложенногоПроведения().Добавить(); + СтрокаТаблицы.ДокументСсылка = Объект.Ссылка; + СтрокаТаблицы.ДатаДокумента = Объект.Дата; КонецЕсли; @@ -9567,46 +9511,21 @@ Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда - // если объект подлежит записи - проверим наличие коллизий - ЕстьКоллизия = ПроверитьНаличиеКоллизийДляОбъекта(Объект, ИмяТипаОбъекта, ПриоритетОбъектаОбмена, ИмяКонстанты, УникальныйИдентификаторСтрокой); + // Отключаем механизм регистрации объектов при отмене проведения документа. + // Механизм регистрации будет выполнен при отложенном проведении документов + // (оптимизация производительности загрузки данных). + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - ЗаписатьОбъект = Истина; - КоллизияПринята = Ложь; + ЗаписатьОбъектВИБ(Объект, ТипОбъекта, ЗаписатьОбъект, ОтправкаНазад); - Если ЕстьКоллизия Тогда + // Если объект был успешно записан и создана ссылка, + // то помещаем объект в очередь для записи. + Если ЗаписатьОбъект + И Объект <> Неопределено + И Объект.Ссылка <> Неопределено Тогда - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше Тогда - - ЗаписатьОбъект = Ложь; - - Иначе - - КоллизияПринята = Истина; - - КонецЕсли; - - КонецЕсли; - - Если ЗаписатьОбъект Тогда - - // Отключаем механизм регистрации объектов при отмене проведения документа. - // Механизм регистрации будет выполнен при отложенном проведении документов - // (оптимизация производительности загрузки данных). - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - - ЗаписатьОбъектВИБ(Объект, ТипОбъекта,, ОтправкаНазад, УникальныйИдентификаторСтрокой); - - // Если объект был успешно записан и создана ссылка, - // то помещаем объект в очередь для записи. - Если ЗаписатьОбъект - И Объект <> Неопределено - И Объект.Ссылка <> Неопределено Тогда - - СтрокаТаблицы = ОбъектыДляОтложеннойЗаписи().Добавить(); - СтрокаТаблицы.ОбъектСсылка = Объект.Ссылка; - СтрокаТаблицы.ЭтоКоллизия = КоллизияПринята; - - КонецЕсли; + СтрокаТаблицы = ОбъектыДляОтложеннойЗаписи().Добавить(); + СтрокаТаблицы.ОбъектСсылка = Объект.Ссылка; КонецЕсли; @@ -9622,7 +9541,7 @@ КонецЕсли; ЭтоСсылочныйТипОбъекта = НЕ(ИмяТипаОбъекта = "РегистрСведений" - ИЛИ ИмяТипаОбъекта = "Константы"); + ИЛИ ИмяТипаОбъекта = "Константы"); Прервать; @@ -9658,7 +9577,7 @@ Возврат Объект; -КонецФункции // ПрочитатьОбъект() +КонецФункции //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ВЫГРУЗКИ ДАННЫХ ПО ПРАВИЛАМ ОБМЕНА @@ -9730,8 +9649,7 @@ Иначе ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, - ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать - ); + ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать); КонецЕсли; @@ -9835,8 +9753,7 @@ Иначе ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов - ); + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов); КонецЕсли; @@ -9982,8 +9899,7 @@ Иначе ВыполнитьОбработчик_ПКГС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, - ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов - ); + ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов); КонецЕсли; @@ -10030,8 +9946,7 @@ ВыполнитьОбработчик_ПКГС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, - УзелКоллекцииСвойств, СтандартнаяОбработка - ); + УзелКоллекцииСвойств, СтандартнаяОбработка); КонецЕсли; @@ -10077,8 +9992,7 @@ ВыполнитьОбработчик_ПКГС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, - УзелКоллекцииСвойств, УзелОбъектаКоллекции - ); + УзелКоллекцииСвойств, УзелОбъектаКоллекции); КонецЕсли; @@ -10138,8 +10052,7 @@ Иначе ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов - ); + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов); КонецЕсли; @@ -10302,8 +10215,7 @@ ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать, - ВыгрузитьОбъект - ); + ВыгрузитьОбъект); КонецЕсли; @@ -10356,8 +10268,7 @@ ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, - ИмяПКОВидСубконто, ВыгрузитьОбъект - ); + ИмяПКОВидСубконто, ВыгрузитьОбъект); КонецЕсли; @@ -10491,8 +10402,7 @@ ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, - УзелСсылки, УзелКоллекцииСвойств, УзелСубконто - ); + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто); КонецЕсли; @@ -10952,8 +10862,7 @@ ВыгрузитьГруппуСвойств( Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКС, УзелКоллекцииСвойств, - ВыгрузитьТолькоСсылку, СписокВременныхФайлов, ВыгрузкаСтрокиНабораЗаписейРегистра - ); + ВыгрузитьТолькоСсылку, СписокВременныхФайлов, ВыгрузкаСтрокиНабораЗаписейРегистра); Продолжить; @@ -10988,8 +10897,7 @@ ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать, - ВыгрузитьОбъект - ); + ВыгрузитьОбъект); КонецЕсли; @@ -11109,8 +11017,7 @@ ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, - ИмяПКОВидСубконто, ВыгрузитьОбъект - ); + ИмяПКОВидСубконто, ВыгрузитьОбъект); КонецЕсли; @@ -11307,8 +11214,7 @@ ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, - УзелСсылки, УзелКоллекцииСвойств, УзелСубконто - ); + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто); КонецЕсли; @@ -12013,7 +11919,7 @@ Выборка = ПолучитьВыборкуДляВыгрузкиПоПроизвольномуАлгоритму(ВыборкаДанных); - Если Выборка <> Неопределено Тогда + Если Выборка <> Неопределено Тогда Пока Выборка.Следующий() Цикл @@ -12162,6 +12068,8 @@ СтруктураПравилОбмена = Новый Структура; + СтруктураПравилОбмена.Вставить("ВерсияФорматаХраненияПравил", ВерсияФорматаХраненияПравилОбмена()); + СтруктураПравилОбмена.Вставить("Конвертация", Конвертация); СтруктураПравилОбмена.Вставить("ТаблицаНастройкиПараметров", ТаблицаНастройкиПараметров); @@ -12256,8 +12164,7 @@ СтруктураРеквизитовРегистрации.Вставить(ПКС.Источник); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Загрузка правил конвертации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЦикла; @@ -13180,7 +13087,7 @@ // Выход ИначеЕсли (ИмяУзла = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - Если РежимОбмена <> "Загрузка" Тогда + Если РежимОбмена <> "Загрузка" Тогда ПравилаОбмена.Закрыть(); КонецЕсли; Прервать; @@ -13339,180 +13246,92 @@ КонецПроцедуры -// Открывает файл сообщения обмена -// Проверяет файл сообщения на соответствие формату -// Зачитывает правила обмена (при необходимости) -// -// Параметры: -// Нет. -// -Процедура ОткрытьФайлОбмена() - - ФайлОбмена = Новый ЧтениеXML; - - Попытка - ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена); - ФайлОбмена.Прочитать(); - Исключение - СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); - ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке); - Возврат; - КонецПопытки; - - Если ФайлОбмена.ЛокальноеИмя <> "ФайлОбмена" Тогда - - ЗаписатьВПротоколВыполнения(9); - Возврат; - - КонецЕсли; - - ПолеВерсияФорматаВходящегоСообщенияОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ВерсияФормата"); - - ФайлОбмена.Прочитать(); - - Если ФайлОбмена.ЛокальноеИмя <> "ПравилаОбмена" Тогда - - ЗаписатьВПротоколВыполнения(9); - Возврат; - - КонецЕсли; - - Если ТаблицаПравилКонвертации.Количество() = 0 Тогда - ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); - Иначе - одПропустить(ФайлОбмена); - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьЗагрузкуФайлаПакета(ТаблицыДляЗагрузки) +Процедура ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки) Если ТаблицыДляЗагрузки.Количество() = 0 Тогда Возврат; КонецЕсли; - УстановитьФлагОшибки(Ложь); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; - СоответствиеДопПараметровПоиска = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - // инициализируем ведение протокола обмена - ИнициализироватьВедениеПротоколаОбмена(); - - Если ПустаяСтрока(ИмяФайлаОбмена) Тогда - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(15); - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; - КонецЕсли; - - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - - ПолеСчетчикЗагруженныхОбъектов = Неопределено; - НомерПоследнегоПоискаПоСсылке = 0; - - ИнициализироватьМенеджерыИСообщения(); - - // открываем файл сообщения обмена - // загружаем правила обмена данными (при необходимости) - ОткрытьФайлОбмена(); - - Если ФлагОшибки() Тогда - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - ИнициализироватьОбработки(); - - // {Обработчик: ПередЗагрузкойДанных} Начало - Отказ = Ложь; - - Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда - - Попытка - - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(Конвертация.ПередЗагрузкойДанных); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); - Отказ = Истина; - КонецПопытки; - - КонецЕсли; - - Если Отказ Тогда // Отказ от загрузки данных - ЗавершитьВедениеПротоколаОбмена(); - ФайлОбмена.Закрыть(); - Возврат; - КонецЕсли; - // {Обработчик: ПередЗагрузкойДанных} Окончание - + ЧтениеСообщения = Неопределено; Попытка - ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки); + УстановитьФлагОшибки(Ложь); - Исключение - СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОписаниеОшибки()); - ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке,,,,,Истина); - КонецПопытки; - - ФайлОбмена.Закрыть(); - - // {Обработчик: ПослеЗагрузкиДанных} Начало - Если Не ФлагОшибки() Тогда + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда - - Попытка - - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(Конвертация.ПослеЗагрузкиДанных); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); - КонецПопытки; - + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; + СоответствиеДопПараметровПоиска = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + // инициализируем ведение протокола обмена + ИнициализироватьВедениеПротоколаОбмена(); + + Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; КонецЕсли; - КонецЕсли; - // {Обработчик: ПослеЗагрузкиДанных} Окончание - - Если Не ФлагОшибки() Тогда + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + + ПолеСчетчикЗагруженныхОбъектов = Неопределено; + НомерПоследнегоПоискаПоСсылке = 0; + + ИнициализироватьМенеджерыИСообщения(); + + НачатьЧтениеСообщения(ЧтениеСообщения, Истина); + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + Попытка + + ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + // отложенная запись того, что не записали + ПровестиЗаписьНеЗаписанныхОбъектов(); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; // выполняем проведение документов в очереди ВыполнитьОтложенноеПроведениеДокументов(); ВыполнитьОтложеннуюЗаписьОбъектов(); - КонецЕсли; + Исключение + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято + ); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + КонецПопытки; ЗавершитьВедениеПротоколаОбмена(); КонецПроцедуры -Процедура ПроизвестиЧтениеДанных(СтрокаСообщенияОбОшибке = "") +Процедура ПроизвестиЧтениеДанных(ЧтениеСообщения) + + СтрокаСообщенияОбОшибке = ""; Пока ФайлОбмена.Прочитать() Цикл @@ -13548,105 +13367,17 @@ ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - ИначеЕсли ИмяУзла = "ПравилаОбмена" Тогда - - Если ТаблицаПравилКонвертации.Количество() = 0 Тогда - ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); - Иначе - одПропустить(ФайлОбмена, ИмяУзла); - КонецЕсли; - - ИначеЕсли ИмяУзла = "НастройкаПользовательскогоПоиска" Тогда - - ЗагрузитьИнформациюОПользовательскихПоляхПоиска(); - - ИначеЕсли ИмяУзла = "ИнформацияОТипахДанных" Тогда - - Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда - - одПропустить(ФайлОбмена, ИмяУзла); - - Иначе - ЗагрузитьИнформациюОТипахДанных(); - КонецЕсли; - - ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда - - ЗагрузитьЗначенияПараметровОбменаДанными(); - - ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда - - Отказ = Ложь; - ПричинаОтказа = ""; - - ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - - Если Не ПустаяСтрока(ТекстАлгоритма) Тогда - - Попытка - - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(ТекстАлгоритма); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); - - КонецЕсли; - - Если Отказ = Истина Тогда - - Если Не ПустаяСтрока(ПричинаОтказа) Тогда - - СтрокаСообщения = НСтр("ru = 'Загрузка данных отменена по причине: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПричинаОтказа); - ВызватьИсключение СтрокаСообщения; - Иначе - ВызватьИсключение НСтр("ru = 'Загрузка данных отменена'"); - КонецЕсли; - - КонецЕсли; - - Исключение - - ЗП = ПолучитьСтруктуруЗаписиПротокола(78, ОписаниеОшибки()); - ЗП.Обработчик = "ПослеЗагрузкиПараметров"; - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - КонецЕсли; - - ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда - - ПрочитатьДанныеПоОбмену(); - - одПропустить(ФайлОбмена, ИмяУзла); - - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - - ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - - ПрочитатьОбщиеДанныеУзлов(); - - одПропустить(ФайлОбмена, ИмяУзла); - - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + ПрочитатьКорректировкуИнформацииСопоставления(); - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); одПропустить(ФайлОбмена, ИмяУзла); @@ -13656,17 +13387,17 @@ Иначе - одПропустить(ФайлОбмена, ИмяУзла); + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); КонецЕсли; // прерываем цикл чтения файла в случае возникновения ошибки загрузки Если ФлагОшибки() Тогда - Прервать; + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); КонецЕсли; КонецЦикла; - + КонецПроцедуры Процедура ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки) @@ -13742,20 +13473,28 @@ КонецЕсли; - ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" И РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда - ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); - - ПКО = Правила[ИмяПравила]; - - ТипИсточникаСтрокой = ПКО.ТипИсточника; - ТипПриемникаСтрокой = ПКО.ТипПриемника; - - КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); - - Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьНаборЗаписейРегистра()); + ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); + + ПКО = Правила[ИмяПравила]; + + ТипИсточникаСтрокой = ПКО.ТипИсточника; + ТипПриемникаСтрокой = ПКО.ТипПриемника; + + КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); + + Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьНаборЗаписейРегистра()); + + Иначе + + одПропустить(ФайлОбмена, ИмяУзла); + + КонецЕсли; Иначе @@ -13828,37 +13567,17 @@ одПропустить(ФайлОбмена, ИмяУзла); - ИначеЕсли ИмяУзла = "ПравилаОбмена" Тогда + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - Если ТаблицаПравилКонвертации.Количество() = 0 Тогда - ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); - Иначе - одПропустить(ФайлОбмена); - КонецЕсли; + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент - ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - ПрочитатьДанныеПоОбмену(); + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент - одПропустить(ФайлОбмена, ИмяУзла); + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - - ИначеЕсли ИмяУзла = "ИнформацияОТипахДанных" Тогда - - Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда - - одПропустить(ФайлОбмена, ИмяУзла); - - Иначе - ЗагрузитьИнформациюОТипахДанных(); - КонецЕсли; - - ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда - - ЗагрузитьЗначенияПараметровОбменаДанными(); + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда @@ -13866,15 +13585,20 @@ Иначе - одПропустить(ФайлОбмена, ИмяУзла); + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); КонецЕсли; - КонецЦикла; + // прерываем цикл чтения файла в случае возникновения ошибки + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + КонецЦикла; + КонецПроцедуры -Процедура ПроизвестиЧтениеДанныхВРежимеАнализа() +Процедура ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения) Пока ФайлОбмена.Прочитать() Цикл @@ -13967,23 +13691,102 @@ ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - ПрочитатьИнформациюОРегистрацииОбъекта(); - ЕстьИнформацияОРегистрацииОбъекта = Истина; + ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + ПрочитатьКорректировкуИнформацииСопоставления(); одПропустить(ФайлОбмена, ИмяУзла); - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда + ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда + + Прервать; // выход + + Иначе + + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + + КонецЕсли; + + // прерываем цикл чтения файла в случае возникновения ошибки + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения) + + СтрокаСообщенияОбОшибке = ""; + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "Объект" Тогда + + ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда + + // набор записей регистра + ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда + + // обработка удаления объекта из информационной базы + ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке); + + одПропустить(ФайлОбмена, "УдалениеОбъекта"); + + ОбработатьОкончаниеЧтенияНовогоЭлемента("Удаление объекта"); + + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда + + ЕстьИнформацияОРегистрацииОбъекта = Истина; + + ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "НастройкаПользовательскогоПоиска" Тогда + + ЗагрузитьИнформациюОПользовательскихПоляхПоиска(); + + ИначеЕсли ИмяУзла = "ИнформацияОТипахДанных" Тогда + + Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда + + одПропустить(ФайлОбмена, ИмяУзла); + + Иначе + ЗагрузитьИнформациюОТипахДанных(); + КонецЕсли; + + ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда ЗагрузитьЗначенияПараметровОбменаДанными(); - ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда + ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда Отказ = Ложь; ПричинаОтказа = ""; @@ -14031,22 +13834,9 @@ КонецЕсли; - ИначеЕсли ИмяУзла = "ПравилаОбмена" Тогда - - Если ТаблицаПравилКонвертации.Количество() = 0 Тогда - - // загружаем правила обмена - ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); - - Иначе - - одПропустить(ФайлОбмена, ИмяУзла); - - КонецЕсли; - ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда - ПрочитатьДанныеПоОбмену(); + ПрочитатьДанныеПоОбмену(ЧтениеСообщения, Ложь); одПропустить(ФайлОбмена, ИмяУзла); @@ -14056,7 +13846,7 @@ ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - ПрочитатьОбщиеДанныеУзлов(); + ПрочитатьОбщиеДанныеУзлов(Неопределено); одПропустить(ФайлОбмена, ИмяУзла); @@ -14064,9 +13854,17 @@ Прервать; КонецЕсли; - ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - Прервать; // выход + ПрочитатьКорректировкуИнформацииСопоставления(); + + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; // выходим Иначе @@ -14074,11 +13872,16 @@ КонецЕсли; + // прерываем цикл чтения файла в случае возникновения ошибки загрузки + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + КонецЦикла; - + КонецПроцедуры -Процедура ПрочитатьДанныеПоОбмену() +Процедура ПрочитатьДанныеПоОбмену(ЧтениеСообщения, АнализДанных) ПолеИмяПланаОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ПланОбмена"); КодОтКого = одАтрибут(ФайлОбмена, ТипСтрока, "ОтКого"); @@ -14096,57 +13899,94 @@ СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Код: %2'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена(), КодОтКого); ВызватьИсключение СтрокаСообщения; - КонецЕсли; - Если РежимЗагрузкиДанныхВИнформационнуюБазу() - И УзелОбменаЗагрузкаДанных.НомерПринятого >= НомерСообщения() Тогда - - // Номер сообщения меньше либо равен ранее принятому - ЗаписатьВПротоколВыполнения(174,,,,,Истина, Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - Возврат; - КонецЕсли; + ЧтениеСообщения = Новый Структура("НомерСообщения, НомерПринятого, Отправитель, ОтправительОбъект, СообщениеБылоПринятоРанее, АнализДанных"); + ЧтениеСообщения.Отправитель = УзелОбменаПолучатель; + ЧтениеСообщения.ОтправительОбъект = УзелОбменаПолучатель.ПолучитьОбъект(); + ЧтениеСообщения.НомерСообщения = ПолеНомерСообщения; + ЧтениеСообщения.НомерПринятого = ПолеНомерПринятогоСообщения; + ЧтениеСообщения.СообщениеБылоПринятоРанее = Ложь; + ЧтениеСообщения.АнализДанных = АнализДанных; + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщения); - // удаляем регистрацию изменений при необходимости - Если РежимЗагрузкиДанныхВИнформационнуюБазу() И УдалитьРегистрациюИзменений Тогда + ВосстановленаРезервнаяКопия = (ЧтениеСообщения.НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерОтправленного")); + + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда - ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); + НачатьТранзакцию(); + НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерПринятого"); + ЗафиксироватьТранзакцию(); - РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); - - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда + Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставления(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина; + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + + ВызватьИсключение НСтр("ru = 'Сообщение обмена было принято ранее'"); + КонецЕсли; + + УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия; + + Если УдалитьРегистрациюИзменений Тогда // удаляем регистрацию изменений + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Удаление регистрации изменений данных не может быть выполнено в активной транзакции.'"); + КонецЕсли; + + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставления(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + КонецЕсли; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); КонецЕсли; - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); + Если ВосстановленаРезервнаяКопия Тогда + + ЧтениеСообщения.ОтправительОбъект.НомерОтправленного = ЧтениеСообщения.НомерПринятого; + ЧтениеСообщения.ОтправительОбъект.ДополнительныеСвойства.Вставить("Загрузка"); + ЧтениеСообщения.ОтправительОбъект.Записать(); + + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + КонецЕсли; КонецЕсли; + // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Начало Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда + + Попытка - Попытка + Если РежимСовместимостиСБСП20() Тогда - Если РежимСовместимостиСБСП20() Тогда - - Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); - - Иначе - - ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(УзелОбменаЗагрузкаДанных); - - КонецЕсли; + Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), "ПослеПолученияИнформацииОбУзлахОбмена (конвертация)"); - КонецПопытки; + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(ЧтениеСообщения.Отправитель); + + КонецЕсли; - КонецЕсли; + Исключение + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), "ПослеПолученияИнформацииОбУзлахОбмена (конвертация)"); + КонецПопытки; + + КонецЕсли; + // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Окончание КонецПроцедуры -Процедура ПрочитатьОбщиеДанныеУзлов() +Процедура ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения) ФайлОбмена.Прочитать(); @@ -14165,22 +14005,39 @@ НачатьТранзакцию(); Попытка - ОбщийУзел.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); - + ОбщийУзел.ДополнительныеСвойства.Вставить("Загрузка"); ОбщийУзел.Записать(); // Обновляем повторноиспользуемые значения механизма ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); - // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений) - РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); - ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; + ОткрытьТранзакцию = Ложь; + Если ТранзакцияАктивна() Тогда + ЗафиксироватьТранзакцию(); + ОткрытьТранзакцию = Истина; + КонецЕсли; + + // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений) + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); + + Если ОткрытьТранзакцию Тогда + НачатьТранзакцию(); + КонецЕсли; + + Если ЧтениеСообщения <> Неопределено + И ОбщийУзел.Ссылка = ЧтениеСообщения.Отправитель Тогда + + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -14192,7 +14049,7 @@ КонецЕсли; // сворачиваем таблицу по уникальным полям - ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента, ДокументПроведенУспешно", "ЭтоКоллизия"); + ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента, ДокументПроведенУспешно"); // сортируем документы по возрастанию даты документов ДокументыДляОтложенногоПроведения().Сортировать("ДатаДокумента"); @@ -14232,15 +14089,10 @@ Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - Если СтрокаТаблицы.ЭтоКоллизия > 0 И ИспользуетсяВерсионирование() Тогда - - // Заполняем данные создаваемой версии - Объект.ДополнительныеСвойства.Вставить("ЭтоВерсияОбмена", Истина); - Объект.ДополнительныеСвойства.Вставить("ТипВерсииОбъекта", Перечисления["ТипыВерсийОбъекта"].ПринятыеДанныеПоКоллизии); - Объект.ДополнительныеСвойства.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); - Объект.ДополнительныеСвойства.Вставить("Комментарий", НСтр("ru = 'Версия получена из другой программы.'")); - - КонецЕсли; + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); // выполняем попытку проведения документа Объект.Записать(РежимЗаписиДокумента.Проведение); @@ -14266,19 +14118,7 @@ // если документ провести не удалось фиксируем ошибку в ЖР Если Не СтрокаТаблицы.ДокументПроведенУспешно Тогда - СтрокаСообщения = НСтр("ru = 'Ошибка при отложенном проведении документа: %1. Описание ошибки: %2'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ОписаниеОшибки); - ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Предупреждение); - - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстОшибки = ""; - Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; - КонецЦикла; - - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(СтрокаТаблицы.ДокументСсылка, УзелОбменаЗагрузкаДанных, - Объект.Метаданные().Синоним, ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + ОбменДаннымиСервер.ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); КонецЕсли; @@ -14293,7 +14133,7 @@ КонецЕсли; // Сворачиваем таблицу по уникальным полям - ОбъектыДляОтложеннойЗаписи().Свернуть("ОбъектСсылка, ОбъектЗаписанУспешно", "ЭтоКоллизия"); + ОбъектыДляОтложеннойЗаписи().Свернуть("ОбъектСсылка, ОбъектЗаписанУспешно"); // Инициализируем колонку результата записи объекта ОбъектыДляОтложеннойЗаписи().ЗаполнитьЗначения(Ложь, "ОбъектЗаписанУспешно"); @@ -14330,15 +14170,10 @@ Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - Если СтрокаТаблицы.ЭтоКоллизия > 0 И ИспользуетсяВерсионирование() Тогда - - // Заполняем данные создаваемой версии - Объект.ДополнительныеСвойства.Вставить("ЭтоВерсияОбмена", Истина); - Объект.ДополнительныеСвойства.Вставить("ТипВерсииОбъекта", Перечисления["ТипыВерсийОбъекта"].ПринятыеДанныеПоКоллизии); - Объект.ДополнительныеСвойства.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); - Объект.ДополнительныеСвойства.Вставить("Комментарий", НСтр("ru = 'Версия получена из другой программы.'")); - - КонецЕсли; + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); // выполняем попытку записи объекта Объект.Записать(); @@ -14364,19 +14199,7 @@ // если документ провести не удалось фиксируем ошибку в ЖР Если Не СтрокаТаблицы.ОбъектЗаписанУспешно Тогда - СтрокаСообщения = НСтр("ru = 'Ошибка при отложенной запись объекта: %1. Описание ошибки: %2'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ОписаниеОшибки); - ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Предупреждение); - - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстОшибки = ""; - Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстОшибки = ТекстОшибки + Сообщение.Текст + Символы.ПС; - КонецЦикла; - - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(СтрокаТаблицы.ОбъектСсылка, УзелОбменаЗагрузкаДанных, - Объект.Метаданные().Синоним, ТекстОшибки, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); + ОбменДаннымиСервер.ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); КонецЕсли; @@ -14840,14 +14663,14 @@ // назначаем номер отправленного сообщения для объектов, выгруженных по ссылке Если ВыгруженныеПоСсылкеОбъекты().Количество() > 0 Тогда - ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, ВыгруженныеПоСсылкеОбъекты()); + ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, ВыгруженныеПоСсылкеОбъекты()); КонецЕсли; // назначаем номер отправленного сообщения для объектов, созданных в текущей сессии выгрузки данных Если СозданныеПриВыгрузкеОбъекты().Количество() > 0 Тогда - ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, СозданныеПриВыгрузкеОбъекты()); + ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, СозданныеПриВыгрузкеОбъекты()); КонецЕсли; @@ -14887,7 +14710,7 @@ Процедура ВыполнитьВыгрузкуРегистраСопоставленияОбъектов(ЗаписьСообщения, СтрокаСообщенияОбОшибке) // выбираем изменения только для регистра сопоставления - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); Пока ВыборкаИзменений.Следующий() Цикл @@ -14978,7 +14801,7 @@ НачальнаяВыгрузкаДанных = ОбменДаннымиСервер.УстановленПризнакНачальнойВыгрузкиДанных(ЗаписьСообщения.Получатель); // ВЫБОРКА ИЗМЕНЕНИЙ - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, МассивВыгружаемыхМетаданных); + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, МассивВыгружаемыхМетаданных); ОбъектМетаданныхПредыдущий = Неопределено; ПравилоВыгрузкиДанныхПредыдущее = Неопределено; @@ -15485,8 +15308,19 @@ Колонки.Добавить("СвойстваПоиска", одОписаниеТипа("ТаблицаЗначений")); Колонки.Добавить("СвойстваОтключенные", одОписаниеТипа("ТаблицаЗначений")); - Колонки.Добавить("Значения", одОписаниеТипа("Соответствие")); - + // Свойство "Значения" не используется + // Колонки.Добавить("Значения", одОписаниеТипа("Соответствие")); + + // Тип: Соответствие + // Ключ – значение предопределенного элемента в этой базе; + // Значение – строковое представление предопределенного значения в приемнике. + Колонки.Добавить("ЗначенияПредопределенныхДанных", одОписаниеТипа("Соответствие")); + + // Тип: Структура. + // Ключ – строковое представление предопределенного значения в этой базе; + // Значение – строковое представление предопределенного значения в приемнике. + Колонки.Добавить("ЗначенияПредопределенныхДанныхПрочитанные", одОписаниеТипа("Структура")); + Колонки.Добавить("Выгруженные", одОписаниеТипа("ТаблицаЗначений")); Колонки.Добавить("ВыгружатьПредставлениеИсточника", одОписаниеТипа("Булево")); @@ -15658,7 +15492,7 @@ ОбработкаВыгрузки.ПодключитьОбработкуДляОтладки(ЭтотОбъект); - ИначеЕсли РежимОбмена = "Загрузка" Или РежимОбмена = "" Тогда + ИначеЕсли РежимОбмена = "Загрузка" Тогда Если ОтладкаОбработчиковЗагрузки Тогда @@ -15778,12 +15612,6 @@ СообщенияОбОшибках.Вставить(80, НСтр("ru = 'Ошибка установки свойства предопределенного элемента. |Нельзя помечать на удаление предопределенный элемент. Пометка на удаление для объекта не установлена.'")); // - СообщенияОбОшибках.Вставить(81, НСтр("ru = 'Возникла коллизия изменений объектов. - |Объект этой информационной базы был заменен версией объекта из второй информационной базы.'")); - // - СообщенияОбОшибках.Вставить(82, НСтр("ru = 'Возникла коллизия изменений объектов. - |Объект из второй информационной базы не принят. Объект этой информационной базы не изменен.'")); - // СообщенияОбОшибках.Вставить(83, НСтр("ru = 'Ошибка обращения к табличной части объекта. Табличная часть объекта не может быть изменена.'")); СообщенияОбОшибках.Вставить(84, НСтр("ru = 'Коллизия дат запрета изменения.'")); @@ -16245,8 +16073,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, - ВходящиеДанные, ИсходящиеДанные, Объект - ) + ВходящиеДанные, ИсходящиеДанные, Объект) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПередВыгрузкойОбъекта; @@ -16257,8 +16084,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, - ИсходящиеДанные, УзелСсылки - ) + ИсходящиеДанные, УзелСсылки) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПослеВыгрузкиОбъекта; @@ -16272,8 +16098,7 @@ ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, - РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден - ) + РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПередКонвертациейОбъекта; @@ -16317,8 +16142,7 @@ Процедура ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, - ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ) + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения) ИмяОбработки = "ОбработкаЗагрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПередЗагрузкойОбъекта; @@ -16330,8 +16154,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден - ) + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден) ИмяОбработки = "ОбработкаЗагрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиОбъекта; @@ -16361,7 +16184,7 @@ КонецПроцедуры -Процедура ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(УзелОбменаЗагрузкаДанных) +Процедура ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(Знач УзелОбменаЗагрузкаДанных) ИмяОбработки = "ОбработкаЗагрузки"; ИмяОбработчика = Конвертация.ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена; @@ -16378,8 +16201,7 @@ ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены, ТолькоПолучитьУзелСсылки, Приемник, - РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден - ) + РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКО.ИмяОбработчикаПередВыгрузкой; @@ -16393,8 +16215,7 @@ Процедура ВыполнитьОбработчик_ПКО_ПриВыгрузкеОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, СтандартнаяОбработка, - Приемник, УзелСсылки - ) + Приемник, УзелСсылки) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКО.ИмяОбработчикаПриВыгрузке; @@ -16406,8 +16227,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, - ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки - ) + ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузки; @@ -16419,8 +16239,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъектаВФайлОбмена(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, - ВыгруженныеОбъекты, Приемник, УзелСсылки - ) + ВыгруженныеОбъекты, Приемник, УзелСсылки) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузкиВФайл; @@ -16433,8 +16252,7 @@ Процедура ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, - ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения - ) + ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения) ИмяОбработки = "ОбработкаЗагрузки"; ИмяОбработчика = Правило.ИмяОбработчикаПередЗагрузкой; @@ -16456,8 +16274,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, - ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило - ) + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило) ИмяОбработки = "ОбработкаЗагрузки"; @@ -16471,8 +16288,7 @@ Процедура ВыполнитьОбработчик_ПКО_ПоследовательностьПолейПоиска(НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, - СтрокаИменСвойствПоиска, ИмяОбработчика - ) + СтрокаИменСвойствПоиска, ИмяОбработчика) ИмяОбработки = "ОбработкаЗагрузки"; ПараметрыОбработчика = "НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, @@ -16488,8 +16304,7 @@ Процедура ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать, - ВыгрузитьОбъект - ) + ВыгрузитьОбъект) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКС.ИмяОбработчикаПередВыгрузкой; @@ -16503,8 +16318,7 @@ Процедура ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, - ИмяПКОВидСубконто, ВыгрузитьОбъект - ) + ИмяПКОВидСубконто, ВыгрузитьОбъект) ИмяОбработки = "ОбработкаВыгрузки"; @@ -16520,8 +16334,7 @@ Процедура ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, - УзелСсылки, УзелКоллекцииСвойств, УзелСубконто - ) + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКС.ИмяОбработчикаПослеВыгрузки; @@ -16537,8 +16350,7 @@ // Обработчики ПКГС Процедура ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, - ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать - ) + ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКГС.ИмяОбработчикаПередОбработкойВыгрузки; @@ -16550,8 +16362,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПКГС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, - ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов - ) + ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКГС.ИмяОбработчикаПередВыгрузкой; @@ -16564,8 +16375,7 @@ Процедура ВыполнитьОбработчик_ПКГС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, - УзелКоллекцииСвойств, СтандартнаяОбработка - ) + УзелКоллекцииСвойств, СтандартнаяОбработка) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКГС.ИмяОбработчикаПриВыгрузке; @@ -16578,8 +16388,7 @@ Процедура ВыполнитьОбработчик_ПКГС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, - УзелКоллекцииСвойств, УзелОбъектаКоллекции - ) + УзелКоллекцииСвойств, УзелОбъектаКоллекции) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКГС.ИмяОбработчикаПослеВыгрузки; @@ -16591,8 +16400,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, - ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов - ) + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = ПКГС.ИмяОбработчикаПослеОбработкиВыгрузки; @@ -16629,8 +16437,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПВД_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, - ВходящиеДанные, ИсходящиеДанные, Объект - ) + ВходящиеДанные, ИсходящиеДанные, Объект) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = Правило.ИмяОбработчикаПередВыгрузкой; @@ -16641,8 +16448,7 @@ КонецПроцедуры Процедура ВыполнитьОбработчик_ПВД_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, - ИсходящиеДанные, УзелСсылки, Правило - ) + ИсходящиеДанные, УзелСсылки, Правило) ИмяОбработки = "ОбработкаВыгрузки"; ИмяОбработчика = Правило.ИмяОбработчикаПослеВыгрузки; @@ -16707,6 +16513,18 @@ КонецФункции +// Версия формата хранения правил обмена (формат зачитанных правил), +// работу с которой поддерживает данная обработка. +// +// Правила обмена зачитываются из файла и сохраняются в информационной базе в формате хранения. +// Формат хранения правил может устаревать. В этом случае потребуется перечитать правила обмена повторно. +// +Функция ВерсияФорматаХраненияПравилОбмена() + + Возврат 1; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ @@ -16716,4 +16534,4 @@ ИнициализацияТаблицыПравилВыгрузки(); ИнициализацияТаблицыПравилОчистки(); ИнициализацияТаблицыНастройкиПараметров(); -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo index 54ea8f90c..40361e489 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Конвертация объектов информационных баз</value> </synonym> + <defaultForm>DataProcessor.КонвертацияОбъектовИнформационныхБаз.Form.Форма</defaultForm> <attributes uuid="0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9"> <name>ВыводВОкноСообщенийИнформационныхСообщений</name> <synonym> @@ -513,4 +514,13 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <forms uuid="bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091"> + <name>Форма</name> + <synonym> + <key>ru</key> + <value>Форма</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form new file mode 100644 index 000000000..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Form.form @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form"> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <windowOpeningMode>DontBlock</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Объект</name> + <id>1</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> +</form:Form> diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 0727bc410..07d26e2fc 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -22,7 +22,7 @@ ЗагрузитьМетаданные = ЗагрузитьТолькоПараметры И ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() - И ОбменДаннымиВызовСервера.ВыполнитьЗагрузкуПараметровРаботыПрограммы() + И ОбменДаннымиВызовСервера.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() ; ОбменДаннымиСервер.УстановитьРежимЗагрузкиПараметровРаботыПрограммы(Ложь); @@ -123,7 +123,7 @@ ОбменДаннымиСервер.УстановитьРежимЗагрузкиПараметровРаботыПрограммы(Ложь); - ОбменДаннымиВызовСервера.ОтменитьЗагрузкуПараметровРаботыПрограммы(); + ОбменДаннымиВызовСервера.ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); Исключение ЧтениеСообщения.ПрерватьЧтение(); @@ -188,6 +188,8 @@ Попытка + ОбменДаннымиВызовСервера.ОчиститьПриоритетныеДанныеОбмена(); + // Записываем изменения конфигурации и изменения данных в сообщение обмена ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, КоличествоЭлементовВТранзакции); @@ -210,26 +212,57 @@ Если ЗаписьСообщения.Получатель <> ПланыОбмена.ГлавныйУзел() Тогда - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения( - ЗаписьСообщения.Получатель, - ЗаписьСообщения.НомерСообщения, - Метаданные.Справочники.ИдентификаторыОбъектовМетаданных - ); + // Выгружаем приоритетные данные обмена (предопределенные элементы) + ПриоритетныеДанныеОбмена = ОбменДаннымиВызовСервера.ПриоритетныеДанныеОбмена(); - НачатьТранзакцию(); - Попытка + Если ПриоритетныеДанныеОбмена.Количество() > 0 Тогда - Пока ВыборкаИзменений.Следующий() Цикл - - ЗаписатьXML(ЗаписьСообщения.ЗаписьXML, ВыборкаИзменений.Получить()); - - КонецЦикла; + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения( + ЗаписьСообщения.Получатель, + ЗаписьСообщения.НомерСообщения, + ПриоритетныеДанныеОбмена); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + НачатьТранзакцию(); + Попытка + + Пока ВыборкаИзменений.Следующий() Цикл + + ЗаписатьXML(ЗаписьСообщения.ЗаписьXML, ВыборкаИзменений.Получить()); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + Если Не СтандартныеПодсистемыПовтИсп.ОтключитьСправочникИдентификаторыОбъектовМетаданных() Тогда + + // Выгружаем справочник идентификаторов объектов метаданных + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения( + ЗаписьСообщения.Получатель, + ЗаписьСообщения.НомерСообщения, + Метаданные.Справочники["ИдентификаторыОбъектовМетаданных"]); + + НачатьТранзакцию(); + Попытка + + Пока ВыборкаИзменений.Следующий() Цикл + + ЗаписатьXML(ЗаписьСообщения.ЗаписьXML, ВыборкаИзменений.Получить()); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; КонецЕсли; @@ -251,7 +284,13 @@ Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML); Данные.ОбменДанными.Загрузка = Истина; Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; - Данные.ДополнительныеСвойства.Вставить("ЗагрузкаПараметровРаботыПрограммы"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + + Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда + Данные.ДополнительныеСвойства.Вставить("ЗагрузкаПараметровРаботыПрограммы"); + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + Данные.Записать(); КонецЦикла; diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/КонвертацияОбъектовРаспределенныхИнформационныхБаз.mdo b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/КонвертацияОбъектовРаспределенныхИнформационныхБаз.mdo index 0e24db737..46a7a7312 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/КонвертацияОбъектовРаспределенныхИнформационныхБаз.mdo +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/КонвертацияОбъектовРаспределенныхИнформационныхБаз.mdo @@ -10,6 +10,7 @@ <value>Конвертация объектов распределенных информационных баз</value> </synonym> <useStandardCommands>true</useStandardCommands> + <defaultForm>DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Form.Форма</defaultForm> <attributes uuid="83ae9b22-20ff-4e94-9282-19daf2274328"> <name>УзелИнформационнойБазы</name> <synonym> @@ -64,4 +65,13 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <forms uuid="d57a3300-0f9f-4fe5-b627-01c96b723053"> + <name>Форма</name> + <synonym> + <key>ru</key> + <value>Форма</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form index be5a7da47..6fd609acf 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form @@ -168,8 +168,12 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>OnClose</event> + <name>ПриЗакрытии</name> + </handlers> <width>75</width> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> @@ -233,6 +237,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>Результат</name> + <title> + <key>ru</key> + <value>Результат</value> + + 4 + + Boolean + + + true + + + true + + Продолжить @@ -260,6 +281,7 @@ <valueType> <types>Boolean</types> </valueType> + <keyParameter>true</keyParameter> </parameters> <parameters> <name>ПринудительныйЗапуск</name> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 630bd9144..e63aa32cf 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -17,6 +17,10 @@ ПодтверждениеВыбора = 0; // пользователю требуется явно выбрать один из вариантов Элементы.Примечание.Видимость = Параметры.ПоказыватьПредупреждениеОПерезапуске; + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Выполнить("РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс"); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -25,7 +29,49 @@ &НаКлиенте Процедура ОсновныеДействияФормыПродолжить(Команда) - Закрыть(ПодтверждениеВыбора = 1); + Результат = ПодтверждениеВыбора = 1; + Если Результат <> Истина Тогда + Если Параметры.ПоказыватьПредупреждениеОПерезапуске Тогда + ПрекратитьРаботуСистемы(); + КонецЕсли; + Иначе + ЛегальностьПолученияОбновленийПодтверждена(); + КонецЕсли; + Закрыть(Результат); КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + Если Результат <> Истина Тогда + Если Параметры.ПоказыватьПредупреждениеОПерезапуске Тогда + ПрекратитьРаботуСистемы(); + КонецЕсли; + Иначе + ЛегальностьПолученияОбновленийПодтверждена(); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + ОбновлениеИнформационнойБазыКлиент.ПодключитьОбработчикПроверкиСтатусаОтложенногоОбновления(); + КонецЕсли; + + Оповестить("ЛегальностьПолученияОбновлений", Результат); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЛегальностьПолученияОбновленийПодтверждена() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.ЛегальностьПолученияОбновленияПодтверждена = Истина; + ОбновлениеИнформационнойБазы.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html index 8faba2257..013df553f 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body scroll="auto"><font size="2" face="Verdana"> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body scroll="auto"><font size="2" face="Verdana"> <p align="center"><strong>УСЛОВИЯ РАСПРОСТРАНЕНИЯ ОБНОВЛЕНИЙ ПРОГРАММ "1С:ПРЕДПРИЯТИЕ"</strong></p> <p></p> <p>Обновления к программам производства фирмы "1С", также как и сами программы, являются объектами исключительного права фирмы "1С" и распространяются по правилам, установленным фирмой "1С" как правообладателем в соответствии со ст. 1225 Гражданского кодекса.</p> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/ЛегальностьПолученияОбновлений.mdo b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/ЛегальностьПолученияОбновлений.mdo index a4ed6d020..e3345489b 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/ЛегальностьПолученияОбновлений.mdo +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/ЛегальностьПолученияОбновлений.mdo @@ -9,7 +9,6 @@ <key>ru</key> <value>Легальность получения обновлений</value> </synonym> - <useStandardCommands>true</useStandardCommands> <defaultForm>DataProcessor.ЛегальностьПолученияОбновлений.Form.ПроверкаЛегальностиПолученияОбновления</defaultForm> <forms uuid="d375fac5-098c-42b5-a0bd-9a4ae7516ada"> <name>ПроверкаЛегальностиПолученияОбновления</name> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form index c3ae68a36..ed7547246 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form @@ -27,7 +27,7 @@ </userVisible> <extendedTooltip> <name>КартинкаВниманиеРасширеннаяПодсказка</name> - <id>266</id> + <id>271</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -60,7 +60,7 @@ </userVisible> <extendedTooltip> <name>НадписьВниманиеРасширеннаяПодсказка</name> - <id>267</id> + <id>272</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -100,7 +100,7 @@ </userVisible> <extendedTooltip> <name>Группа1РасширеннаяПодсказка</name> - <id>268</id> + <id>273</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -135,7 +135,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОповещенияОбОпасностиРасширеннаяПодсказка</name> - <id>265</id> + <id>270</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -181,7 +181,7 @@ </handlers> <extendedTooltip> <name>ПереключательКодТипаРезервногоКопированияРасширеннаяПодсказка</name> - <id>269</id> + <id>274</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -213,7 +213,7 @@ <choiceList> <presentation> <key>ru</key> - <value>Резервное копирование выполняется сторонними средствами</value> + <value>Не требуется резервное копирование, так как оно выполняется средствами СУБД или другими сторонними программами</value> </presentation> <value xsi:type="core:NumberValue"> <value>2</value> @@ -247,7 +247,7 @@ </userVisible> <extendedTooltip> <name>ПустаяНадписьРасширеннаяПодсказка</name> - <id>273</id> + <id>278</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -282,7 +282,7 @@ </toolTip> <extendedTooltip> <name>ПустаяСтраницаРасширеннаяПодсказка</name> - <id>272</id> + <id>277</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -320,7 +320,7 @@ <titleLocation>Left</titleLocation> <extendedTooltip> <name>ПериодОповещения1РасширеннаяПодсказка</name> - <id>276</id> + <id>281</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -368,7 +368,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ЕдиницаИзмеренияПериодаОповещения2РасширеннаяПодсказка</name> - <id>278</id> + <id>283</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -451,7 +451,7 @@ </toolTip> <extendedTooltip> <name>ГруппаПараметровНапоминания1РасширеннаяПодсказка</name> - <id>275</id> + <id>280</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -483,7 +483,7 @@ </toolTip> <extendedTooltip> <name>СтраницаПараметровОтложенногоОповещенияРасширеннаяПодсказка</name> - <id>274</id> + <id>279</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -513,7 +513,7 @@ <verticalStretch>true</verticalStretch> <extendedTooltip> <name>СтраницыПараметровОтложенногоОповещенияРасширеннаяПодсказка</name> - <id>271</id> + <id>276</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -540,7 +540,7 @@ </userVisible> <extendedTooltip> <name>ИнформационнаяНадписьРасширеннаяПодсказка</name> - <id>280</id> + <id>285</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -577,7 +577,7 @@ </toolTip> <extendedTooltip> <name>СтраницаНачальногоОповещенияРасширеннаяПодсказка</name> - <id>264</id> + <id>269</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -618,7 +618,7 @@ </handlers> <extendedTooltip> <name>ВариантПроведенияРезервногоКопированияРасширеннаяПодсказка</name> - <id>283</id> + <id>288</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -674,7 +674,7 @@ </toolTip> <extendedTooltip> <name>ГруппаПриветствияПриНастройкеРасписанияРКРасширеннаяПодсказка</name> - <id>282</id> + <id>287</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -704,7 +704,7 @@ </userVisible> <extendedTooltip> <name>Декорация2РасширеннаяПодсказка</name> - <id>286</id> + <id>291</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -748,7 +748,7 @@ </handlers> <extendedTooltip> <name>ВариантРасписанияРезервногоКопированияРасширеннаяПодсказка</name> - <id>287</id> + <id>292</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -816,7 +816,7 @@ </userVisible> <extendedTooltip> <name>ИзменитьРасписаниеРасширеннаяПодсказка</name> - <id>289</id> + <id>294</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -849,7 +849,7 @@ <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>ГруппаНастройкиРасписанияКопированияРасширеннаяПодсказка</name> - <id>285</id> + <id>290</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -883,7 +883,7 @@ </userVisible> <extendedTooltip> <name>НадписьПутьКопирования1РасширеннаяПодсказка</name> - <id>291</id> + <id>296</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -922,7 +922,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПутьККаталогуАрхивов2РасширеннаяПодсказка</name> - <id>292</id> + <id>297</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -971,7 +971,7 @@ </userVisible> <extendedTooltip> <name>НадписьРекомендацииПоВыборуПути2РасширеннаяПодсказка</name> - <id>294</id> + <id>299</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1012,7 +1012,7 @@ <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>ГруппаЗаведенияПутиКопирования1РасширеннаяПодсказка</name> - <id>290</id> + <id>295</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1047,7 +1047,7 @@ </dataPath> <extendedTooltip> <name>АдминистраторИБ1РасширеннаяПодсказка</name> - <id>296</id> + <id>301</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1089,7 +1089,7 @@ </dataPath> <extendedTooltip> <name>ПарольАдминистратораИБ1РасширеннаяПодсказка</name> - <id>298</id> + <id>303</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1134,7 +1134,7 @@ </toolTip> <extendedTooltip> <name>ГруппаАвторизацииРасширеннаяПодсказка</name> - <id>295</id> + <id>300</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1179,7 +1179,7 @@ </handlers> <extendedTooltip> <name>ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении1РасширеннаяПодсказка</name> - <id>301</id> + <id>306</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1216,7 +1216,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ТипОграниченияКаталогаСРезервнымиКопиямиРасширеннаяПодсказка</name> - <id>304</id> + <id>309</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1282,7 +1282,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ДатаПоследнегоАктуальногоАрхива1РасширеннаяПодсказка</name> - <id>308</id> + <id>313</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1328,7 +1328,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ЕдиницаИзмеренияПериодаХраненияРезервныхКопийРасширеннаяПодсказка</name> - <id>310</id> + <id>315</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1400,7 +1400,7 @@ </userVisible> <extendedTooltip> <name>Группа4РасширеннаяПодсказка</name> - <id>307</id> + <id>312</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1435,7 +1435,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>КоличествоКопийВКаталоге1РасширеннаяПодсказка</name> - <id>312</id> + <id>317</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1473,7 +1473,7 @@ </userVisible> <extendedTooltip> <name>Группа5РасширеннаяПодсказка</name> - <id>306</id> + <id>311</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1506,7 +1506,7 @@ </toolTip> <extendedTooltip> <name>ГруппаВыбораТипаОчисткиРасширеннаяПодсказка</name> - <id>303</id> + <id>308</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1540,7 +1540,7 @@ <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>ГруппаВыбораОчисткиКаталогаОтСтарыхФайлов1РасширеннаяПодсказка</name> - <id>300</id> + <id>305</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1580,7 +1580,7 @@ <titleLocation>Right</titleLocation> <extendedTooltip> <name>ВыполнитьРезервноеКопированиеСейчасРасширеннаяПодсказка</name> - <id>315</id> + <id>320</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1616,7 +1616,7 @@ </toolTip> <extendedTooltip> <name>ГруппаФлажкаРасширеннаяПодсказка</name> - <id>314</id> + <id>319</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1649,7 +1649,7 @@ </toolTip> <extendedTooltip> <name>СтраницаНастройкиПараметровРезервногоКопированияРасширеннаяПодсказка</name> - <id>281</id> + <id>286</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1683,7 +1683,7 @@ </userVisible> <extendedTooltip> <name>КартинкаВнимание1РасширеннаяПодсказка</name> - <id>319</id> + <id>324</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1711,7 +1711,8 @@ <id>155</id> <title> <key>ru</key> - <value>Внимание! Данные информационной базы подвергаются риску, так как не выполняется их резервное копирование</value> + <value>Внимание! Данные информационной базы подвергаются риску, +так как не выполняется их резервное копирование.</value> true true @@ -1720,7 +1721,7 @@ НадписьВнимание1РасширеннаяПодсказка - 320 + 325 Label true true @@ -1764,7 +1765,7 @@ ГруппаОповещенияОбОпасности1РасширеннаяПодсказка - 318 + 323 Label true true @@ -1789,7 +1790,7 @@ 158 <key>ru</key> - <value>Недостаточно прав для выполнения операции резервного копирования данных. Пожалуйста, обратитесь к администратору.</value> + <value>Недостаточно прав для выполнения операции резервного копирования данных. Обратитесь к администратору.</value> true true @@ -1798,7 +1799,7 @@ НадписьНедостаточноПравРасширеннаяПодсказка - 322 + 327 Label true true @@ -1830,7 +1831,7 @@ ГруппаПоясненияДальнейшихДействийРасширеннаяПодсказка - 321 + 326 Label true true @@ -1859,7 +1860,7 @@ Декорация4РасширеннаяПодсказка - 323 + 328 Label true true @@ -1894,7 +1895,7 @@ НадписьГотовоРасширеннаяПодсказка - 324 + 329 Label true true @@ -1930,7 +1931,7 @@ СтраницаДляПользователяБезПравРасширеннаяПодсказка - 317 + 322 Label true true @@ -1964,7 +1965,7 @@ КартинкаВнимание2РасширеннаяПодсказка - 327 + 332 Label true true @@ -1992,7 +1993,8 @@ 164 <key>ru</key> - <value>Внимание! Данные информационной базы подвергаются риску, так как не выполняется их резервное копирование.</value> + <value>Внимание! Данные информационной базы подвергаются риску, +так как не выполняется их резервное копирование.</value> true true @@ -2001,7 +2003,7 @@ НадписьВнимание2РасширеннаяПодсказка - 328 + 333 Label true true @@ -2045,7 +2047,7 @@ ГруппаОповещенияОбОпасности2РасширеннаяПодсказка - 326 + 331 Label true true @@ -2091,7 +2093,7 @@ ПереключательКодТипаРезервногоКопированияКСРасширеннаяПодсказка - 329 + 334 Label true true @@ -2148,7 +2150,7 @@ ПустаяНадпись1РасширеннаяПодсказка - 333 + 338 Label true true @@ -2183,7 +2185,7 @@ ПустаяСтраница1РасширеннаяПодсказка - 332 + 337 Label true true @@ -2221,7 +2223,7 @@ Left ПериодОповещения2РасширеннаяПодсказка - 336 + 341 Label true true @@ -2266,7 +2268,7 @@ None ЕдиницаИзмеренияПериодаОповещения3РасширеннаяПодсказка - 338 + 343 Label true true @@ -2349,7 +2351,7 @@ ГруппаПараметровНапоминания2РасширеннаяПодсказка - 335 + 340 Label true true @@ -2381,7 +2383,7 @@ СтраницаПараметровОтложенногоОповещения1РасширеннаяПодсказка - 334 + 339 Label true true @@ -2410,7 +2412,7 @@ СтраницыПараметровОтложенногоОповещения1РасширеннаяПодсказка - 331 + 336 Label true true @@ -2433,7 +2435,7 @@ Декорация5РасширеннаяПодсказка - 340 + 345 Label true true @@ -2468,7 +2470,7 @@ ИнформационнаяНадпись1РасширеннаяПодсказка - 341 + 346 Label true true @@ -2505,7 +2507,7 @@ СтраницаНачальногоОповещенияКлиентСерверРасширеннаяПодсказка - 325 + 330 Label true true @@ -2536,7 +2538,7 @@ НадписьШапкаДополнительныеНастройкиРасширеннаяПодсказка - 343 + 348 Label true true @@ -2580,7 +2582,7 @@ Картинка12РасширеннаяПодсказка - 345 + 350 Label true true @@ -2625,7 +2627,7 @@ None ОбнаруженнаяОшибкаПодключения1РасширеннаяПодсказка - 347 + 352 Label true true @@ -2674,7 +2676,7 @@ НадписьПерейтиВЖурналРегистрации1РасширеннаяПодсказка - 349 + 354 Label true true @@ -2717,7 +2719,7 @@ ГруппаОшибкиРасширеннаяПодсказка - 346 + 351 Label true true @@ -2743,7 +2745,7 @@ false ГоризонтальнаяГруппаОшибкаПодключенияРасширеннаяПодсказка - 344 + 349 Label true true @@ -2780,7 +2782,7 @@ АдминистраторИБРасширеннаяПодсказка - 351 + 356 Label true true @@ -2825,7 +2827,7 @@ ПарольАдминистратораИБРасширеннаяПодсказка - 353 + 358 Label true true @@ -2870,7 +2872,7 @@ false АвторизацияАдминистратораИнформационнойБазыРасширеннаяПодсказка - 350 + 355 Label true true @@ -2911,7 +2913,7 @@ НадписьОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 356 + 361 Label true true @@ -2948,7 +2950,7 @@ false КнопкаОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 357 + 362 Label true true @@ -2972,7 +2974,7 @@ ГруппаComcntrФайловыйРежимРасширеннаяПодсказка - 355 + 360 Label true true @@ -3004,7 +3006,7 @@ false ВертикальнаяГруппаНадписиЖР3РасширеннаяПодсказка - 359 + 364 Label true true @@ -3030,7 +3032,7 @@ false ПанельЖурналРегистрации4РасширеннаяПодсказка - 358 + 363 Label true true @@ -3063,7 +3065,7 @@ ДополнительныеНастройкиРасширеннаяПодсказка - 342 + 347 Label true true @@ -3092,7 +3094,7 @@ СтраницыПомощникаРасширеннаяПодсказка - 263 + 268 Label true true @@ -3105,6 +3107,120 @@ Auto + + ГруппаПояснениеДляLinuxКлиента + 260 + + КартинкаИнформация + 261 + + <key>ru</key> + <value> </value> + + true + true + + true + + + КартинкаИнформацияРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + + КартинкаИнформацияКонтекстноеМеню + 262 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПояснениеДляLinuxКлиента + 263 + + <key>ru</key> + <value>Резервное копирование программы может запускаться +только на компьютере под управлением ОС Windows</value> + + true + true + + true + + + ПояснениеДляLinuxКлиентаРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + + ПояснениеДляLinuxКлиентаКонтекстноеМеню + 264 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + + + true + 86 + false + + ГруппаПояснениеДляLinuxКлиентаРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + Bottom true @@ -3123,7 +3239,7 @@ НазадРасширеннаяПодсказка - 260 + 265 Label true true @@ -3153,7 +3269,7 @@ ДалееРасширеннаяПодсказка - 261 + 266 Label true true @@ -3183,7 +3299,7 @@ ОтменаРасширеннаяПодсказка - 262 + 267 Label true true @@ -3210,6 +3326,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 75 LockOwner Use diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl index 5f245e288..9a2e389fd 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -1,21 +1,24 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Элементы.ГруппаПояснениеДляLinuxКлиента.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); + Элементы.ВыполнитьРезервноеКопированиеСейчас.Видимость = ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент(); + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); Объект.КодТипаРезервногоКопирования = НастройкиРезервногоКопирования.ВыборПунктаНастройки; Если НастройкиРезервногоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы Тогда - Объект.ВариантПроведенияРезервногоКопирования = 2; + Объект.ВариантПроведенияРезервногоКопирования = 2; Иначе Объект.ВариантПроведенияРезервногоКопирования = 1; КонецЕсли; - Объект.КодТипаИнтерактивногоРезервногоКопирования = 1; + Объект.КодТипаИнтерактивногоРезервногоКопирования = 1; Объект.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении = НастройкиРезервногоКопирования.ПроизводитьУдаление; Объект.ПериодХраненияРезервныхКопий = 1; Объект.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий = "Месяц"; @@ -59,7 +62,7 @@ Если НастройкиРезервногоКопирования.ПроизводитьУдаление Тогда Если НастройкиРезервногоКопирования.УдалятьПоПериоду Тогда НастройкиЗначенияПериода = РезервноеКопированиеИБСервер.ПолучитьПоИнтервалуВремениЗначениеПериода(НастройкиРезервногоКопирования.ЗначениеПараметра); - Объект.ТипОграниченияКаталогаСРезервнымиКопиями = Элементы.ТипОграниченияКаталогаСРезервнымиКопиями.СписокВыбора.НайтиПоЗначению("ПоПериоду").Значение; + Объект.ТипОграниченияКаталогаСРезервнымиКопиями = Элементы.ТипОграниченияКаталогаСРезервнымиКопиями.СписокВыбора.НайтиПоЗначению("ПоПериоду").Значение; Объект.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий = НастройкиЗначенияПериода.ТипПериода; Объект.ПериодХраненияРезервныхКопий = НастройкиЗначенияПериода.ЗначениеПериода; Иначе @@ -69,7 +72,10 @@ КонецЕсли; // Определение надписи заголовка формы. - ОпределениеНадписиВнимание(НастройкиРезервногоКопирования); + Элементы.НадписьВнимание.Заголовок = РезервноеКопированиеИБСервер.ТекущаяНастройкаРезервногоКопирования( + Объект.КодТипаРезервногоКопирования, + НастройкиРезервногоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы, + НастройкиРезервногоКопирования.РасписаниеКопирования); КонецПроцедуры @@ -92,24 +98,24 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + Оповестить("ЗакрытаФормаНастройкиРезервногоКопирования"); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -&НаСервере -Процедура ЗапомнитьПараметрыАдминистратора(АдминистраторИБ, ПарольАдминистратораИБ, ПараметрыРезервногоКопированияИБНаКлиенте) +&НаСервереБезКонтекста +Процедура ЗапомнитьПараметрыАдминистратора(АдминистраторИБ, ПарольАдминистратораИБ) - ПараметрыРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьПараметрыРезервногоКопирования(); + ПараметрыРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьПараметрыРезервногоКопирования(); - Если ПараметрыРезервногоКопирования.Свойство("АдминистраторИБ") Тогда - ПараметрыРезервногоКопирования.АдминистраторИБ = АдминистраторИБ; - ПараметрыРезервногоКопирования.ПарольАдминистратораИБ = ПарольАдминистратораИБ; - Иначе - ПараметрыРезервногоКопирования.Вставить("АдминистраторИБ", АдминистраторИБ); - ПараметрыРезервногоКопирования.Вставить("ПарольАдминистратораИБ", ПарольАдминистратораИБ); - КонецЕсли; + ПараметрыРезервногоКопирования.Вставить("АдминистраторИБ", АдминистраторИБ); + ПараметрыРезервногоКопирования.Вставить("ПарольАдминистратораИБ", ПарольАдминистратораИБ); - ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыРезервногоКопирования; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); КонецПроцедуры @@ -127,7 +133,7 @@ // Обработчик перехода к журналу регистрации. &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрации1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -186,7 +192,11 @@ КонецЕсли; Объект.СтрокаРасписания = Строка(РасписаниеРезервногоКопирования); РасписаниеСтруктура = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(РасписаниеРезервногоКопирования); - ПоместитьРасписаниеВНастройку(РасписаниеСтруктура, ПараметрыРезервногоКопированияИБ); + + ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = РасписаниеРезервногоКопирования; + + ПоместитьРасписаниеВНастройку(РасписаниеСтруктура); + КонецПроцедуры &НаКлиенте @@ -206,43 +216,66 @@ &НаКлиенте Процедура Далее(Команда) - ОчиститьСообщения(); + ОчиститьСообщения(); ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ТекущаяСтраница; - Если ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещения - ИЛИ ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещенияКлиентСервер Тогда - ОбработатьНачальнуюНастройкуПомощника(); - ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования - ИЛИ ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки Тогда - + Если ТекущаяСтраницаПомощника = Элементы.СтраницаНачальногоОповещения + ИЛИ ТекущаяСтраницаПомощника = Элементы.СтраницаНачальногоОповещенияКлиентСервер Тогда + + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + ОстановитьАвтоматическоеРезервноеКопирование(Ложь); + КодПереключателя = Объект.КодТипаРезервногоКопирования; + УстановитьКодВыбора(КодПереключателя); + НоваяСтраницаПомощника = Неопределено; + + Если КодПереключателя = 1 Тогда // Настройка автоматического резервного копирования. + НоваяСтраницаПомощника = Элементы.СтраницаНастройкиПараметровРезервногоКопирования; + ИначеЕсли КодПереключателя = 2 Тогда // Копирование сторонними средствами. + ОповещениеПользователю(НСтр("ru ='Работа помощника завершена. С этого момента оповещения о резервном копировании поступать не будут.'")); + ОстановитьСервисОповещения(); + ИначеЕсли КодПереключателя = 3 Тогда // Отложенное копирование. + ПриИзмененииВремениОповещения(Объект.ПериодОповещения, Объект.ЕдиницаИзмеренияПериодаОповещения); + ОповещениеПользователю(НСтр("ru ='Был изменен период оповещений о резервном копировании.'")); + КонецЕсли; + ПриОткрытииНовойСтраницы(НоваяСтраницаПомощника); + + ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницаНастройкиПараметровРезервногоКопирования + ИЛИ ТекущаяСтраницаПомощника = Элементы.ДополнительныеНастройки Тогда + ИнформацияОбОшибке = ""; Если Не ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) и Не ПустаяСтрока(ИнформацияОбОшибке) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ИнформацияОбОшибке); Возврат; - КонецЕсли; + КонецЕсли; Если НЕ ПроверитьДоступКИБ() Тогда - НоваяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки; + НоваяСтраницаПомощника = Элементы.ДополнительныеНастройки; ПриОткрытииНовойСтраницы(НоваяСтраницаПомощника); Возврат; КонецЕсли; - ЗапомнитьПараметрыАдминистратора(АдминистраторИБ, ПарольАдминистратораИБ, ПараметрыРезервногоКопированияИБ); + ЗапомнитьПараметрыАдминистратора(АдминистраторИБ, ПарольАдминистратораИБ); ПриПереходеНаАвтоматическийРежимКопирования(); - ПриИзмененииВремениОповещения(-1, "", ПараметрыРезервногоКопированияИБ); - УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями, ПараметрыРезервногоКопированияИБ); + ПриИзмененииВремениОповещения(-1, ""); + УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями); + + Если Объект.ВыполнитьРезервноеКопированиеСейчас И Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда - Если Объект.ВыполнитьРезервноеКопированиеСейчас Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТипВызова", 1); + ПараметрыФормы.Вставить("ТекущаяСтраница", "СтраницаИнформацииИВыполненияРезервногоКопирования"); + ПараметрыФормы.Вставить("ЗаголовокНадписи", ""); - ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница, ЗаголовокНадписи", - 1, "СтраницаИнформацииИВыполненияРезервногоКопирования", ""); - - ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); + + КонецЕсли; - КонецЕсли; Иначе + Закрыть(); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -258,7 +291,7 @@ &НаКлиенте Процедура ИзменитьРасписание(Команда) - Расписание = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыРезервногоКопированияИБ.РасписаниеКопирования; + Расписание = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РезервноеКопированиеИБ.РасписаниеКопирования; Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); Если НЕ ДиалогРасписания.ОткрытьМодально() Тогда @@ -273,7 +306,10 @@ Объект.ВариантРасписанияРезервногоКопирования = "0"; Объект.СтрокаРасписания = Строка(Расписание); РасписаниеСтруктура = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание); - ПоместитьРасписаниеВНастройку(РасписаниеСтруктура, ПараметрыРезервногоКопированияИБ); + + ПоместитьРасписаниеВНастройку(РасписаниеСтруктура); + + ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = Расписание; КонецПроцедуры @@ -281,12 +317,12 @@ Процедура Назад(Команда) ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ТекущаяСтраница; - Если ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования Тогда - ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещения); - ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещения Тогда - ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаВыполненияРезервногоКопирования); - ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки Тогда - ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования); + Если ТекущаяСтраницаПомощника = Элементы.СтраницаНастройкиПараметровРезервногоКопирования Тогда + ПриОткрытииНовойСтраницы(Элементы.СтраницаНачальногоОповещения); + ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницаНачальногоОповещения Тогда + ПриОткрытииНовойСтраницы(Элементы.СтраницаВыполненияРезервногоКопирования); + ИначеЕсли ТекущаяСтраницаПомощника = Элементы.ДополнительныеНастройки Тогда + ПриОткрытииНовойСтраницы(Элементы.СтраницаНастройкиПараметровРезервногоКопирования); КонецЕсли; КонецПроцедуры @@ -303,30 +339,6 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ОпределениеНадписиВнимание(НастройкиРезервногоКопирования) - - НадписьПоУмолчанию = НСтр("ru = 'Внимание! Данные информационной базы подвергаются риску, так как не выполняется их резервное копирование.'");; - - Если Объект.КодТипаРезервногоКопирования = 3 Тогда - Элементы.НадписьВнимание.Заголовок = НадписьПоУмолчанию; - ИначеЕсли Объект.КодТипаРезервногоКопирования = 2 Тогда - Элементы.НадписьВнимание.Заголовок = НСтр("ru = 'Резервное копирование настроено сторонними средствами.'"); - Иначе - Если НастройкиРезервногоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы Тогда - Элементы.НадписьВнимание.Заголовок = НСтр("ru = 'Резервное копирование настроено по завершению работы'"); - Иначе - Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования); - Если Не ПустаяСтрока(Расписание) Тогда - Элементы.НадписьВнимание.Заголовок = НСтр("ru = 'Резервное копирование настроено:'") + " " + Строка(Расписание); - Иначе - Элементы.НадписьВнимание.Заголовок = НадписьПоУмолчанию; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) @@ -361,7 +373,7 @@ // Возвращает страницу, которая должна быть показана пользователю при открытии окна помощника. // Если ПолныеПрава - тогда попадаем на функциональную страницу. -// Если нет - тогда на информационную страницу с просьбой обратиться к сис. администратору. +// Если нет - тогда на информационную страницу с просьбой обратиться к системному администратору. // Состав элементов функциональной страницы зависит от архитектуры информационной базы. &НаСервере Функция ОпределитьСтраницуПоПравамИАрхитектуре() @@ -375,7 +387,7 @@ ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияСБД); Если ЭтоФайловаяБаза Тогда - СтартоваяСтраница = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещения; + СтартоваяСтраница = Элементы.СтраницаНачальногоОповещения; Иначе СтартоваяСтраница = СтраницыПомощника.СтраницаНачальногоОповещенияКлиентСервер; @@ -456,74 +468,74 @@ // Устанавливает новые параметры резервного копирования при изменении времени оповещения. &НаСервереБезКонтекста -Процедура ПриИзмененииВремениОповещения(ПараметрКоличества, ПараметрТипа, ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура ПриИзмененииВремениОповещения(ПериодОповещения, ЕдиницаИзмеренияПериодаОповещения) - ПараметрыОповещенияОРезервномКопировании = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); - Если ПараметрКоличества = -1 Тогда // если пользователь отказался от оповещений + Если ПериодОповещения = -1 Тогда // Пользователь отказался от оповещений. + + НастройкиРезервногоКопирования.ПериодОповещения = 0; + НастройкиРезервногоКопирования.НастроеноПользователем = Истина; + + ИначеЕсли ПериодОповещения = 0 Тогда // Пользователь хочет получать оповещения, но отказался от копирования. + + НастройкиРезервногоКопирования.ДатаПоследнегоОповещения = ТекущаяДата; + + Иначе + + Если ЕдиницаИзмеренияПериодаОповещения = "Месяц" Тогда + РазностьДат = ДобавитьМесяц(ТекущаяДата, ПериодОповещения) - ТекущаяДата; + Иначе + РазностьДат = РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(ЕдиницаИзмеренияПериодаОповещения); + КонецЕсли; + + НастройкиРезервногоКопирования.ДатаПоследнегоОповещения = ТекущаяДата; + НастройкиРезервногоКопирования.ПериодОповещения = ПериодОповещения * РазностьДат; - ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБНаКлиенте); - ПараметрыОповещенияОРезервномКопировании.НастроеноПользователем = Истина; - - ИначеЕсли ПараметрКоличества = 0 Тогда // если пользователь отказался от копирования, но хочет получать оповещения - ПараметрыОповещенияОРезервномКопировании.ДатаПоследнегоОповещения = ТекущаяДата; - Иначе - ПараметрыОповещенияОРезервномКопировании.ДатаПоследнегоОповещения = ТекущаяДата; - ПараметрыОповещенияОРезервномКопировании.ПериодОповещения = ПараметрКоличества * - ?(ПараметрТипа = "Месяц", - (ДобавитьМесяц(ТекущаяДата, ПараметрКоличества) - ТекущаяДата), - РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(ПараметрТипа)); КонецЕсли; - ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); КонецПроцедуры // Останавливает работу сервиса резервного копирования. &НаСервереБезКонтекста -Процедура ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура ОстановитьСервисОповещенияОРезервномКопировании() - ПараметрыОповещенияОРезервномКопировании= РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); - ПараметрыОповещенияОРезервномКопировании.ДатаПоследнегоОповещения = Дата('00010101'); - ПараметрыОповещенияОРезервномКопировании.ПериодОповещения = 0; - ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); + НастройкиРезервногоКопирования.ДатаПоследнегоОповещения = Дата('00010101'); + НастройкиРезервногоКопирования.ПериодОповещения = 0; + + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); КонецПроцедуры // Записывает параметры настройки удаления резервных копий из каталога. &НаСервереБезКонтекста -Процедура УстановитьНастройкиУдаленияУстаревшихКопий(ТипУдаления, ПараметрЗначения, ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура УстановитьНастройкиУдаленияУстаревшихКопий(ТипУдаления, ПараметрЗначения) СтруктураНастроек = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); СтруктураНастроек.ПроизводитьУдаление = Истина; СтруктураНастроек.УдалятьПоПериоду = ТипУдаления; СтруктураНастроек.ЗначениеПараметра = ПараметрЗначения; - ПараметрыРезервногоКопированияИБНаКлиенте = СтруктураНастроек; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(СтруктураНастроек); КонецПроцедуры // Записывает настройку - путь к каталогу с резервными копиями. &НаСервереБезКонтекста -Процедура УстановитьПутьАрхиваСКопиями(Путь, ПараметрыРезервногоКопированияИБНаКлиенте) - - НастройкиПути = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); - НастройкиПути.КаталогХраненияРезервныхКопий = Путь; - ПараметрыРезервногоКопированияИБНаКлиенте = НастройкиПути; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиПути); - +Процедура УстановитьПутьАрхиваСКопиями(КаталогХраненияРезервныхКопий) + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("КаталогХраненияРезервныхКопий", КаталогХраненияРезервныхКопий); КонецПроцедуры // Записывает настройку - расписание проведения резервного копирования. &НаСервереБезКонтекста -Процедура ПоместитьРасписаниеВНастройку(НовоеРасписаниеКопирования, ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура ПоместитьРасписаниеВНастройку(НовоеРасписаниеКопирования) Параметры = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); Параметры.РасписаниеКопирования = НовоеРасписаниеКопирования; - ПараметрыРезервногоКопированияИБНаКлиенте = Параметры; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(Параметры); - ОбновитьПовторноИспользуемыеЗначения(); // сбрысываем кеш для применения настроек + ОбновитьПовторноИспользуемыеЗначения(); // сбрасываем кеш для применения настроек КонецПроцедуры @@ -544,28 +556,6 @@ КонецПроцедуры -// Обработчик значения переключателя "Код типа резервного копирования" при нажатии на кнопку "Далее". -&НаКлиенте -Процедура ОбработатьНачальнуюНастройкуПомощника() - - РезервноеКопированиеИБВызовСервера.ОстановитьАвтоматическоеРезервноеКопирование(ПараметрыРезервногоКопированияИБ); - КодПереключателя = Объект.КодТипаРезервногоКопирования; - РезервноеКопированиеИБВызовСервера.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБ); - НоваяСтраницаПомощника = Неопределено; - - Если КодПереключателя = 1 Тогда // Настройка автоматического резервного копирования. - НоваяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования; - ИначеЕсли КодПереключателя = 2 Тогда // Копирование сторонними средствами. - ОповещениеПользователю(НСтр("ru ='Работа помощника завершена. С этого момента оповещения о резервном копировании поступать не будут.'")); - РезервноеКопированиеИБВызовСервера.ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБ); - ИначеЕсли КодПереключателя = 3 Тогда // Отложенное копирование. - ПриИзмененииВремениОповещения(Объект.ПериодОповещения, Объект.ЕдиницаИзмеренияПериодаОповещения, ПараметрыРезервногоКопированияИБ); - ОповещениеПользователю(НСтр("ru ='Был изменен период оповещений о резервном копировании.'")); - КонецЕсли; - ПриОткрытииНовойСтраницы(НоваяСтраницаПомощника); - -КонецПроцедуры - // Обработчик изменения страницы помощника. Открывает новую страницу и выполняет необходимые действия. // Параметры : // НоваяСтраницаПомощника - страница , которую необходимо открыть в данный момент. @@ -637,25 +627,27 @@ Если ПроверитьЗаполнение() Тогда - СохранитьНастройкиПоОчисткеКаталогаСРезервнымиКопиями(ПараметрыРезервногоКопированияИБ); + СохранитьНастройкиПоОчисткеКаталогаСРезервнымиКопиями(); - Если Объект.ВариантПроведенияРезервногоКопирования = 1 Тогда + Если Объект.ВариантПроведенияРезервногоКопирования = 1 Тогда ОповещатьОРезервномКопированииПриЗавершенииСеанса = Ложь; - РезервноеКопированиеИБВызовСервера.УстановитьДатуСледующегоАвтоматическогоКопирования(ПараметрыРезервногоКопированияИБ, Истина); + ДатыСледующегоАвтоматическогоКопирования = РезервноеКопированиеИБВызовСервера.СформироватьДатыСледующегоАвтоматическогоКопирования(Истина); + ЗаполнитьЗначенияСвойств(ПараметрыРезервногоКопированияИБ, ДатыСледующегоАвтоматическогоКопирования); Иначе ОповещатьОРезервномКопированииПриЗавершенииСеанса = Истина; - РезервноеКопированиеИБВызовСервера.ОстановитьАвтоматическоеРезервноеКопирование(ПараметрыРезервногоКопированияИБ, Истина); - КонецЕсли; + ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + ОстановитьАвтоматическоеРезервноеКопирование(Истина); + КонецЕсли; ПриЗавершенииРаботыПомощника(НСтр("ru = 'Настройка расписания резервного копирования прошла успешно.'")); - ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБ); + ОстановитьСервисОповещенияОРезервномКопировании(); КонецЕсли; КонецПроцедуры - &НаСервере -Процедура СохранитьНастройкиПоОчисткеКаталогаСРезервнымиКопиями(ПараметрыРезервногоКопированияИБНаКлиенте) +&НаСервере +Процедура СохранитьНастройкиПоОчисткеКаталогаСРезервнымиКопиями() - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ПроизводитьУдаление", Объект.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении, ПараметрыРезервногоКопированияИБНаКлиенте); + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ПроизводитьУдаление", Объект.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении); Если Объект.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении Тогда Если Объект.ТипОграниченияКаталогаСРезервнымиКопиями = "ПоПериоду" Тогда ЗаданныйПериод = Объект.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий; @@ -669,15 +661,49 @@ ПараметрЗначенияОграничения = Объект.ПериодХраненияРезервныхКопий * ПериодВСекундах; Иначе ПараметрЗначенияОграничения = Объект.КоличествоКопийВКаталоге; - КонецЕсли; - УстановитьНастройкиУдаленияУстаревшихКопий(?(Объект.ТипОграниченияКаталогаСРезервнымиКопиями = "ПоПериоду", Истина, Ложь), ПараметрЗначенияОграничения, ПараметрыРезервногоКопированияИБНаКлиенте); - УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями, ПараметрыРезервногоКопированияИБНаКлиенте); + КонецЕсли; + УстановитьНастройкиУдаленияУстаревшихКопий(?(Объект.ТипОграниченияКаталогаСРезервнымиКопиями = "ПоПериоду", Истина, Ложь), ПараметрЗначенияОграничения); + УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями); Иначе ПараметрЗначенияОграничения = 0; - УстановитьНастройкиУдаленияУстаревшихКопий(Ложь, 0, ПараметрыРезервногоКопированияИБНаКлиенте); + УстановитьНастройкиУдаленияУстаревшихКопий(Ложь, 0); КонецЕсли; -КонецПроцедуры +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОстановитьАвтоматическоеРезервноеКопирование(ПроводитьРезервноеКопированиеПриЗавершенииРаботы) + // Останавливает механизм автоматического резервного копирования. + // Устанавливает пустое расписание и минимальную дату копирования в будущее время. + + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); + НастройкиРезервногоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + НастройкиРезервногоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы = ПроводитьРезервноеКопированиеПриЗавершенииРаботы; + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьКодВыбора(КодПереключателя) + // Устанавливает элемент "Код выбора" настроек резервного копирования. + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); + НастройкиРезервногоКопирования.ВыборПунктаНастройки = КодПереключателя; + Если КодПереключателя = 3 Тогда + НастройкиРезервногоКопирования.НастроеноПользователем = Ложь; + КонецЕсли; + + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОстановитьСервисОповещения() + // Останавливает оповещения о резервном копировании. + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); + НастройкиРезервногоКопирования.ПериодОповещения = 0; + НастройкиРезервногоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101'; + НастройкиРезервногоКопирования.НастроеноПользователем = Истина; + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции проведения резервного копирования diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index d0f9a0e38..0a7898d39 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -1,4 +1,4 @@ - +

            Форма настройки системы резервного копирования информационной базы.

            Предлагает следующие возможности:

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

            diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form similarity index 99% rename from SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form rename to SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form index 75d7e3931..7d367c3b5 100644 --- a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Настройка резервного копирования приложения</value> + ФормаУстановитьНастройкиПоУмолчанию 25 @@ -1076,7 +1080,6 @@ LockOwner true - true true Vertical true diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl similarity index 91% rename from SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl rename to SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl index d5f983994..0b9f8960e 100644 --- a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl @@ -9,10 +9,6 @@ Возврат; КонецЕсли; - Если Не РезервноеКопированиеОбластейДанныхПовтИсп.МенеджерСервисаПоддерживаетРезервноеКопирование() Тогда - ВызватьИсключение(НСтр("ru = 'Менеджер сервиса не поддерживает резервное копирование приложений'")); - КонецЕсли; - НастройкиРезервногоКопирования = РезервноеКопированиеОбластейДанных.ПолучитьНастройкиРезервногоКопированияОбласти( РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкиРезервногоКопирования); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form new file mode 100644 index 000000000..4ad1d5cd4 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form @@ -0,0 +1,1663 @@ + + + + <key>ru</key> + <value>Настройка резервного копирования приложения</value> + + + ПредставлениеПриложения + 1 + true + true + + true + + + ПредставлениеПриложения + + + ПредставлениеПриложенияРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ПредставлениеПриложенияКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаПараметрыФормирования + 7 + + ИнтервалФормированияКопий + 17 + + ИнтервалФормированияКопийСтраница + 18 + + НачалоИнтервалаФормированияКопий + 9 + + <key>ru</key> + <value>Формировать копии с</value> + + true + true + + true + + + НачалоИнтервалаФормированияКопий + + + НачалоИнтервалаФормированияКопийРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + НачалоИнтервалаФормированияКопийКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОкончаниеИнтервалаФормированияКопий + 11 + + <key>ru</key> + <value>по</value> + + true + true + + true + + + ОкончаниеИнтервалаФормированияКопий + + + ОкончаниеИнтервалаФормированияКопийРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ОкончаниеИнтервалаФормированияКопийКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЧасовойПояс + 13 + true + true + + true + + + ЧасовойПояс + + None + + ЧасовойПоясРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ЧасовойПоясКонтекстноеМеню + 14 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Интервал формирования копий страница</value> + + + ИнтервалФормированияКопийСтраницаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Интервал формирования копий</value> + + + ИнтервалФормированияКопийРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаПараметрыФормированияКолонки + 19 + + ГруппаПериодичность + 20 + + ФормироватьЕжедневныеКопии + 24 + true + true + + true + + + ФормироватьЕжедневныеКопии + + + ФормироватьЕжедневныеКопииРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ФормироватьЕжедневныеКопииКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаЕжемесячныеКопии + 23 + + ФормироватьЕжемесячныеКопии + 26 + true + true + + true + + + ФормироватьЕжемесячныеКопии + + + ФормироватьЕжемесячныеКопииРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ФормироватьЕжемесячныеКопииКонтекстноеМеню + 27 + true + + CheckBoxField + Enter + true + Left + true + + + + ЧислоМесяцаФормированияЕжемесячныхКопий + 31 + + <key>ru</key> + <value> числа месяца</value> + + true + true + + true + + + ЧислоМесяцаФормированияЕжемесячныхКопий + + Right + + ЧислоМесяцаФормированияЕжемесячныхКопийРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ЧислоМесяцаФормированияЕжемесячныхКопийКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + + 28 + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа ежемесячные копии</value> + + + ru + Группа ежемесячные копии + + + ГруппаЕжемесячныеКопииРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕжегодныеКопии + 28 + + ФормироватьЕжегодныеКопии + 29 + true + true + + true + + + ФормироватьЕжегодныеКопии + + + ФормироватьЕжегодныеКопииРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ФормироватьЕжегодныеКопииКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + + + ЧислоМесяцаФормированияЕжегодныхКопий + 33 + true + true + + true + + + ЧислоМесяцаФормированияЕжегодныхКопий + + None + + ЧислоМесяцаФормированияЕжегодныхКопийРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ЧислоМесяцаФормированияЕжегодныхКопийКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + + 28 + + Normal + + + + МесяцФормированияЕжегодныхКопий + 35 + true + true + + true + + + МесяцФормированияЕжегодныхКопий + + None + + МесяцФормированияЕжегодныхКопийРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + МесяцФормированияЕжегодныхКопийКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + 10 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа ежегодные копии</value> + + + ГруппаЕжегодныеКопииРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа периодичность</value> + + + ГруппаПериодичностьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаКоличество + 37 + + ГруппаКоличествоЕжедневных + 44 + + КоличествоЕжедневныхКопий + 38 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжедневныхКопий + + + OnChange + КоличествоЕжедневныхКопийПриИзменении + + + КоличествоЕжедневныхКопийРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + КоличествоЕжедневныхКопийКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПодписьКоличестваЕжедневных + 51 + true + true + + true + + + ПодписьКоличестваЕжедневных + + None + + ПодписьКоличестваЕжедневныхРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ПодписьКоличестваЕжедневныхКонтекстноеМеню + 52 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа количество ежедневных</value> + + + ГруппаКоличествоЕжедневныхРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКоличествоЕжемесячных + 45 + + КоличествоЕжемесячныхКопий + 40 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжемесячныхКопий + + + OnChange + КоличествоЕжемесячныхКопийПриИзменении + + + КоличествоЕжемесячныхКопийРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + КоличествоЕжемесячныхКопийКонтекстноеМеню + 41 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПодписьКоличестваЕжемесячных + 49 + true + true + + true + + + ПодписьКоличестваЕжемесячных + + None + + ПодписьКоличестваЕжемесячныхРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ПодписьКоличестваЕжемесячныхКонтекстноеМеню + 50 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа количество ежемесячных</value> + + + ГруппаКоличествоЕжемесячныхРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКоличествоЕжегодных + 46 + + КоличествоЕжегодныхКопий + 42 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжегодныхКопий + + + OnChange + КоличествоЕжегодныхКопийПриИзменении + + + КоличествоЕжегодныхКопийРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + КоличествоЕжегодныхКопийКонтекстноеМеню + 43 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПодписьКоличестваЕжегодных + 47 + true + true + + true + + + ПодписьКоличестваЕжегодных + + None + + ПодписьКоличестваЕжегодныхРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ПодписьКоличестваЕжегодныхКонтекстноеМеню + 48 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа количество ежегодных</value> + + + ru + Группа количество ежегодных + + + ГруппаКоличествоЕжегодныхРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа количество</value> + + + ГруппаКоличествоРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры формирования колонки</value> + + + ГруппаПараметрыФормированияКолонкиРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормироватьКопииТолькоПриАктивностиПользователей + 15 + + <key>ru</key> + <value>Формировать копии только в дни работы пользователей</value> + + true + true + + true + + + ФормироватьКопииТолькоПриАктивностиПользователей + + + ФормироватьКопииТолькоПриАктивностиПользователейРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + ФормироватьКопииТолькоПриАктивностиПользователейКонтекстноеМеню + 16 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры формирования</value> + + + ГруппаПараметрыФормированияРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ЗаписатьИЗакрыть + 4 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 6 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.Записать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 5 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.Перечитать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПоУмолчанию + 3 + true + true + + true + + + ФормаУстановитьПоУмолчаниюРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.УстановитьСтандартныеНастройки + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + UseIfNecessary + auto + true + + ПредставлениеПриложения + + <key>ru</key> + <value>Приложение</value> + + 1 + + String + + + + true + + + true + + + + НачалоИнтервалаФормированияКопий + + <key>ru</key> + <value>Начало интервала формирования копий</value> + + 3 + + Date + + Time + + + + true + + + true + + true + + + ОкончаниеИнтервалаФормированияКопий + + <key>ru</key> + <value>Окончание интервала формирования копий</value> + + 4 + + Date + + Time + + + + true + + + true + + true + + + ЧасовойПояс + + <key>ru</key> + <value>Часовой пояс</value> + + 5 + + String + + + + true + + + true + + + + ФормироватьКопииТолькоПриАктивностиПользователей + + <key>ru</key> + <value>Формировать копии только при активности пользователей</value> + + 6 + + Boolean + + + true + + + true + + true + + + ФормироватьЕжедневныеКопии + + <key>ru</key> + <value>Формировать ежедневные копии</value> + + 7 + + Boolean + + + true + + + true + + true + + + ФормироватьЕжемесячныеКопии + + <key>ru</key> + <value>Формировать ежемесячные копии</value> + + 8 + + Boolean + + + true + + + true + + true + + + ФормироватьЕжегодныеКопии + + <key>ru</key> + <value>Формировать ежегодные копии</value> + + 9 + + Boolean + + + true + + + true + + true + + + ЧислоМесяцаФормированияЕжемесячныхКопий + + <key>ru</key> + <value>Число месяца формирования ежемесячных копий</value> + + 10 + + Number + + 2 + true + + + + true + + + true + + true + + + ЧислоМесяцаФормированияЕжегодныхКопий + + <key>ru</key> + <value>Число месяца формирования ежегодных копий</value> + + 11 + + Number + + 2 + true + + + + true + + + true + + true + + + МесяцФормированияЕжегодныхКопий + + <key>ru</key> + <value>Месяц формирования ежегодных копий</value> + + 12 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжедневныхКопий + + <key>ru</key> + <value>Количество ежедневных копий</value> + + 13 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжемесячныхКопий + + <key>ru</key> + <value>Количество ежемесячных копий</value> + + 14 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжегодныхКопий + + <key>ru</key> + <value>Количество ежегодных копий</value> + + 15 + + Number + + 2 + true + + + + true + + + true + + true + + + ПодписьКоличестваЕжедневных + + <key>ru</key> + <value>Подпись количества ежедневных</value> + + 16 + + String + + + + true + + + true + + + + ПодписьКоличестваЕжемесячных + + <key>ru</key> + <value>Подпись количества ежемесячных</value> + + 17 + + String + + + + true + + + true + + + + ПодписьКоличестваЕжегодных + + <key>ru</key> + <value>Подпись количества ежегодных</value> + + 18 + + String + + + + true + + + true + + + + ИсходныеНастройки + + <key>ru</key> + <value>Исходные настройки</value> + + 2 + + + true + + + true + + + + УстановитьСтандартныеНастройки + + <key>ru</key> + <value>Установить стандартные настройки</value> + + 1 + + ru + Установить стандартные настройки + + + true + + + + УстановитьСтандартныеНастройки + + + true + Auto + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 2 + + ru + Записать и закрыть + + + true + + + StdPicture.WriteAndClose + + + + ЗаписатьИЗакрыть + + + Text + true + Auto + Auto + + + Перечитать + + <key>ru</key> + <value>Перечитать</value> + + 3 + + ru + Перечитать + + + true + + + StdPicture.Reread + + + + Перечитать + + + Auto + Auto + + + Записать + + <key>ru</key> + <value>Записать</value> + + 4 + + ru + Записать + + + true + + + StdPicture.Write + + + + Записать + + + Auto + Auto + + + ДанныеНастроек + + + + ОбластьДанных + + Number + + 7 + true + + + true + + + ОграниченияНастроек + + + + + + + diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl new file mode 100644 index 000000000..37728c2e8 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -0,0 +1,238 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Инициализация формы + Для НомерМесяца = 1 По 12 Цикл + Элементы.МесяцФормированияЕжегодныхКопий.СписокВыбора.Добавить(НомерМесяца, + Формат(Дата(2, НомерМесяца, 1), "ДФ=MMMM")); + КонецЦикла; + + УстановитьШиринуПодписей(); + + ПрименитьОграниченияНастроек(); + + ЗаполнитьФормуПоНастройкам(Параметры.ДанныеНастроек); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоЕжедневныхКопийПриИзменении(Элемент) + + ПодписьКоличестваЕжедневных = ПодписьКоличестваКопий(КоличествоЕжедневныхКопий); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоЕжемесячныхКопийПриИзменении(Элемент) + + ПодписьКоличестваЕжемесячных = ПодписьКоличестваКопий(КоличествоЕжемесячныхКопий); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоЕжегодныхКопийПриИзменении(Элемент) + + ПодписьКоличестваЕжегодных = ПодписьКоличестваКопий(КоличествоЕжегодныхКопий); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Модифицированность Тогда + Ответ = Вопрос(НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), + РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьНовыеНастройки(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Перечитать(Команда) + + ПеречитатьНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура Записать(Команда) + + ЗаписатьНовыеНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ЗаписатьНовыеНастройки(); + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСтандартныеНастройки(Команда) + + УстановитьСтандартныеНастройкиНаСервере(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПеречитатьНаСервере() + + ЗаполнитьФормуПоНастройкам( + РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.ПолучитьНастройкиОбласти(Параметры.ОбластьДанных)); + + Модифицированность = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьФормуПоНастройкам(Знач ДанныеНастроек, Знач ОбновлятьИсходныеНастройки = Истина) + + ЗаполнитьЗначенияСвойств(ЭтаФорма, ДанныеНастроек); + + Если ОбновлятьИсходныеНастройки Тогда + ИсходныеНастройки = ДанныеНастроек; + КонецЕсли; + + УстановитьПодписиВсехКоличеств(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьШиринуПодписей() + + МаксимальнаяШирина = 0; + + ЧислаДляПроверки = Новый Массив; + ЧислаДляПроверки.Добавить(1); + ЧислаДляПроверки.Добавить(2); + ЧислаДляПроверки.Добавить(5); + + Для Каждого Число Из ЧислаДляПроверки Цикл + ШиринаНадписи = СтрДлина(ПодписьКоличестваКопий(Число)); + Если ШиринаНадписи > МаксимальнаяШирина Тогда + МаксимальнаяШирина = ШиринаНадписи; + КонецЕсли; + КонецЦикла; + + ЭлементыПодписей = Новый Массив; + ЭлементыПодписей.Добавить(Элементы.ПодписьКоличестваЕжедневных); + ЭлементыПодписей.Добавить(Элементы.ПодписьКоличестваЕжемесячных); + ЭлементыПодписей.Добавить(Элементы.ПодписьКоличестваЕжегодных); + + Для каждого ЭлементПодписи Из ЭлементыПодписей Цикл + ЭлементПодписи.Ширина = МаксимальнаяШирина; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПрименитьОграниченияНастроек() + + ОграниченияНастроек = Параметры.ОграниченияНастроек; + + ШаблонПодсказки = НСтр("ru = 'Максимум %1'"); + + ЭлементыОграничений = Новый Структура; + ЭлементыОграничений.Вставить("КоличествоЕжедневныхКопий", "МаксимумЕжедневныхКопий"); + ЭлементыОграничений.Вставить("КоличествоЕжемесячныхКопий", "МаксимумЕжемесячныхКопий"); + ЭлементыОграничений.Вставить("КоличествоЕжегодныхКопий", "МаксимумЕжегодныхКопий"); + + Для каждого КлючИзначение Из ЭлементыОграничений Цикл + Элемент = Элементы[КлючИзначение.Ключ]; + Элемент.МаксимальноеЗначение = ОграниченияНастроек[КлючИзначение.Значение]; + Элемент.Подсказка = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПодсказки, + ОграниченияНастроек[КлючИзначение.Значение]); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПодписиВсехКоличеств() + + ПодписьКоличестваЕжедневных = ПодписьКоличестваКопий(КоличествоЕжедневныхКопий); + ПодписьКоличестваЕжемесячных = ПодписьКоличестваКопий(КоличествоЕжемесячныхКопий); + ПодписьКоличестваЕжегодных = ПодписьКоличестваКопий(КоличествоЕжегодныхКопий); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПодписьКоличестваКопий(Знач Количество) + + МассивПредставлений = Новый Массив; + МассивПредставлений.Добавить(НСтр("ru = 'последнюю копию'")); + МассивПредставлений.Добавить(НСтр("ru = 'последние копии'")); + МассивПредставлений.Добавить(НСтр("ru = 'последних копий'")); + + Если Количество >= 100 Тогда + Количество = Количество - Цел(Количество / 100)*100; + КонецЕсли; + + Если Количество > 20 Тогда + Количество = Количество - Цел(Количество/10)*10; + КонецЕсли; + + Если Количество = 1 Тогда + Результат = МассивПредставлений[0]; + ИначеЕсли Количество > 1 и Количество < 5 Тогда + Результат = МассивПредставлений[1]; + Иначе + Результат = МассивПредставлений[2]; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ЗаписатьНовыеНастройки() + + НовыеНастройки = Новый Структура; + Для каждого КлючИЗначение Из ИсходныеНастройки Цикл + НовыеНастройки.Вставить(КлючИЗначение.Ключ, ЭтаФорма[КлючИЗначение.Ключ]); + КонецЦикла; + + НовыеНастройки = Новый ФиксированнаяСтруктура(НовыеНастройки); + + РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.УстановитьНастройкиОбласти( + Параметры.ОбластьДанных, + НовыеНастройки, + ИсходныеНастройки); + + Модифицированность = Ложь; + ИсходныеНастройки = НовыеНастройки; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСтандартныеНастройкиНаСервере() + + ЗаполнитьФормуПоНастройкам( + РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс.ПолучитьСтандартныеНастройки(), + Ложь); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl new file mode 100644 index 000000000..618432c63 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ManagerModule.bsl @@ -0,0 +1,45 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + УстановитьПривилегированныйРежим(Истина); + + Версии = ПолучитьВерсииWebСервиса(); + + Если Версии.Найти("1.0.2.1") <> Неопределено Тогда + + ВыбраннаяФорма = "НастройкаСИнтервалами"; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ДополнительныеПараметры = РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс. + ПолучитьПараметрыФормыНастроек(ОбластьДанных); + Для каждого КлючИЗначение Из ДополнительныеПараметры Цикл + Параметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + ИначеЕсли РезервноеКопированиеОбластейДанныхПовтИсп.МенеджерСервисаПоддерживаетРезервноеКопирование() Тогда + + ВыбраннаяФорма = "НастройкаБезИнтервалов"; + + Иначе + + ВызватьИсключение(НСтр("ru = 'Менеджер сервиса не поддерживает резервное копирование приложений'")); + + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьВерсииWebСервиса() + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса( + Константы.ВнутреннийАдресМенеджераСервиса.Получить(), + Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(), + Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(), + "ZoneBackupControl"); + +КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ObjectModule.bsl similarity index 100% rename from SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl rename to SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/ObjectModule.bsl diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/НастройкаРезервногоКопированияПриложения.mdo b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/НастройкаРезервногоКопированияПриложения.mdo new file mode 100644 index 000000000..bfebede27 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/НастройкаРезервногоКопированияПриложения.mdo @@ -0,0 +1,31 @@ + + + + + + + НастройкаРезервногоКопированияПриложения + + ru + Настройка резервного копирования приложения + + true + + НастройкаБезИнтервалов + + ru + Настройка без интервалов + + PersonalComputer + MobileDevice + + + НастройкаСИнтервалами + + ru + Настройка с интервалами + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html index 43353eb34..b1131860b 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            1. Список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов.
            2. В списке Внешний вид выводятся настройки внешнего вида форм, рабочего стола и командного интерфейса программы. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form index 9bc736191..11b5872e1 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -952,72 +952,6 @@ ГруппаПоказыватьПользователейДочернихГрупп 34 - - ГруппаНельзяУстановитьСвойство - 35 - - ВсеПользователи - 32 - - <key>ru</key> - <value>Все пользователи</value> - - true - true - - true - - - ВсеПользователиРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - - ВсеПользователиКонтекстноеМеню - 33 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа нельзя установить свойство</value> - - - ru - Группа нельзя установить свойство - - - ГруппаНельзяУстановитьСвойствоРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - Page - - Vertical - auto - - ГруппаУстановитьСвойство 36 @@ -1047,7 +981,7 @@ ПоказыватьПользователейДочернихГруппРасширеннаяПодсказка - 116 + 114 Label true true @@ -1082,7 +1016,7 @@ ГруппаУстановитьСвойствоРасширеннаяПодсказка - 115 + 113 Label true true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html index 152795ede..b9b4f3fe8 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl index 6fea41cf3..01289af7d 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -84,13 +84,7 @@ ПрименитьФильтрГрупп(ВыбраннаяГруппа); Если ИспользоватьГруппы Тогда - - Если ВыбраннаяГруппа.Группа = ГруппаВсеПользователи Тогда - Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; - Иначе - Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; - КонецЕсли; - + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; Иначе Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html index 1a97fc5c2..e4ce16ed7 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

              Копирование настроек пользователей:

              1. "Скопировать настройки от пользователя" - пользователь (или внешний пользователь), чьи настройки будут использоваться для копирования другим пользователям.
              2. "Кому копировать" - выбираются пользователи, которым необходимо скопировать настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form index 7a140bfe9..a816e04c5 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -274,7 +274,7 @@ InAdditionalSubmenu - СкопироватьНастройкиотчетовИВнешнегоВида + СкопироватьНастройкиОтчетовИВнешнегоВида 97 true true @@ -282,7 +282,7 @@ true - СкопироватьНастройкиотчетовИВнешнегоВидаРасширеннаяПодсказка + СкопироватьНастройкиОтчетовИВнешнегоВидаРасширеннаяПодсказка 131 Label true @@ -291,7 +291,7 @@ Left - Form.Command.СкопироватьНастройкиотчетовИВнешнегоВида + Form.Command.СкопироватьНастройкиОтчетовИВнешнегоВида Normal Auto true @@ -3222,7 +3222,7 @@ Auto - СкопироватьНастройкиотчетовИВнешнегоВида + СкопироватьНастройкиОтчетовИВнешнегоВида <key>ru</key> <value>Настройки отчетов и внешнего вида...</value> @@ -3230,14 +3230,14 @@ <id>13</id> <toolTip> <key>ru</key> - <value>Скопировать настройкиотчетов и внешнего вида</value> + <value>Скопировать настройки отчетов и внешнего вида</value> </toolTip> <use> <common>true</common> </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>СкопироватьНастройкиотчетовИВнешнегоВида</name> + <name>СкопироватьНастройкиОтчетовИВнешнегоВида</name> </handler> </action> <representation>Text</representation> diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html index 206561252..6334780bd 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Просмотр, очистка и копирование пользовательских настроек отчетов, настроек внешнего вида программы и прочих настроек:</p> <ol><ol><li>Список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов. </li><li>В списке <strong>Внешний вид</strong> выводятся настройки внешнего вида форм, рабочего стола и командного интерфейса программы. diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index e6907d929..71d2d5f78 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -381,7 +381,7 @@ КонецПроцедуры &НаКлиенте -Процедура СкопироватьНастройкиотчетовИВнешнегоВида(Команда) +Процедура СкопироватьНастройкиОтчетовИВнешнегоВида(Команда) ТипПользователя = ТипЗнч(ПользовательСсылка); КопируемыеНастройки.Очистить(); @@ -641,7 +641,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за копирование, удаление и очиству настроек +// Процедуры и функции, отвечающие за копирование, удаление и очистку настроек &НаСервере Процедура СкопироватьНаСервере(ПользователиПриемник, ЛичныхНастроекОтчетов, Отчет) diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html index e1ab8ca7e..b5bd15f9c 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Очистка настроек пользователей:</p> <ol><li><strong>"Очистить настройки"</strong> - выбираются пользователи, которым необходимо очистить настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. </li><li><strong>"Что очистить"</strong> - выбирается, какие настройки очищать. Если в поле "Кому очистить" выбран один пользователь, то есть возможность выбора отдельных настроек. При выборе нескольких пользователей или всех пользователей возможна очистка только всех настроек каждого пользователя.</li></ol></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form index 49ac8df51..ff2d287a3 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Form.form @@ -190,7 +190,7 @@ </contextMenu> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> - <height>4</height> + <height>5</height> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> @@ -390,12 +390,16 @@ </items> <horizontalAlign>Right</horizontalAlign> </autoCommandBar> + <handlers> + <event>BeforeClose</event> + <name>ПередЗакрытием</name> + </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> <width>75</width> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> @@ -441,6 +445,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ДействиеОпределено</name> + <title> + <key>ru</key> + <value>Действие определено</value> + + 1 + + Boolean + + + true + + + true + + Продолжить diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl index e5dca7bfe..9219f2e09 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -8,6 +8,22 @@ Возврат; КонецЕсли; + Если НЕ Параметры.Свойство("ОткрытаПоСценарию") Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + + ДатаПоследнегоПоказа = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НерекомендуемаяВерсияПлатформы", "ДатаПоследнегоОтображения",,, ИмяПользователя()); + + ПоказатьСообщение = Истина; + Если ДатаПоследнегоПоказа <> Неопределено Тогда + ПоказатьСообщение = Формат(ДатаПоследнегоПоказа, "ДЛФ=D") <> Формат(ТекущаяДатаСеанса(), "ДЛФ=D"); + КонецЕсли; + + Если Не ПоказатьСообщение И Не ПараметрыСеанса.ВыполняетсяОбновлениеИБ Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Параметры.РекомендуемаяВерсияПлатформы; СистемнаяИнформация = Новый СистемнаяИнформация; @@ -18,15 +34,23 @@ Элементы.ФормаНет.Видимость = Ложь; КонецЕсли; - БазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - Если БазаФайловая Тогда - МакетПорядокОбновления = Обработки.НерекомендуемаяВерсияПлатформы.ПолучитьМакет("ПорядокОбновленияДляФайловойБазы"); - Иначе - МакетПорядокОбновления = Обработки.НерекомендуемаяВерсияПлатформы.ПолучитьМакет("ПорядокОбновленияДляКлиентСервернойБазы"); + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Выполнить("РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс"); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Не ДействиеОпределено Тогда + СтандартнаяОбработка = Ложь; + ДействиеОпределено = Истина; + ПрекратитьРаботуСистемы(); + Закрыть(КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -43,14 +67,34 @@ &НаКлиенте Процедура ПродолжитьРаботу(Команда) + ДействиеОпределено = Истина; + СохранитьДатуПоследнегоПоказа(); Закрыть(КодВозвратаДиалога.Отмена); + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыКлиент.ОбновитьИнформационнуюБазу(); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + КонецПроцедуры &НаКлиенте Процедура ЗавершитьРаботу(Команда) + ДействиеОпределено = Истина; + ПрекратитьРаботуСистемы(); Закрыть(КодВозвратаДиалога.ОК); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СохранитьДатуПоследнегоПоказа() + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НерекомендуемаяВерсияПлатформы", "ДатаПоследнегоОтображения", ТекущаяДатаСеанса(),, ИмяПользователя()); + +КонецПроцедуры + + diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html index 1af87dd24..5865a71f0 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляКлиентСервернойБазы/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="__STYLE__"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta><style>H1 { +<!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="__STYLE__"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta><style>H1 { TEXT-ALIGN: left; FONT-FAMILY: Arial, Tahoma; COLOR: #003366; FONT-SIZE: 18pt; FONT-WEIGHT: bold } .Programtext { diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html index 3fe02d79d..e81eebf9b 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="__STYLE__"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta><style>H1 { +<!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="__STYLE__"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta><style>H1 { TEXT-ALIGN: left; FONT-FAMILY: Arial, Tahoma; COLOR: #003366; FONT-SIZE: 18pt; FONT-WEIGHT: bold } .Programtext { diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo index bbee3947a..bc60f1544 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/НерекомендуемаяВерсияПлатформы.mdo @@ -9,7 +9,6 @@ <key>ru</key> <value>Нерекомендуемая версия платформы</value> </synonym> - <useStandardCommands>true</useStandardCommands> <defaultForm>DataProcessor.НерекомендуемаяВерсияПлатформы.Form.ПорядокОбновленияПлатформы</defaultForm> <forms uuid="3e5f5167-8978-4191-b0f6-6a262b848b95"> <name>НерекомендуемаяВерсияПлатформы</name> diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Form.form b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Form.form new file mode 100644 index 000000000..fbc1cf173 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Form.form @@ -0,0 +1,338 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Обновление версии программы</value> + + + РежимЗапуска + 5 + + ОбновлениеПрограммы + 6 + + ТекстСообщенияОбновляемаяКонфигурация + 1 + + <key>ru</key> + <value>Выполняется обновление %1 на версию %2.</value> + + true + true + + true + + + ТекстСообщенияОбновляемаяКонфигурацияРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ТекстСообщенияОбновляемаяКонфигурацияКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + + ТекстПояснения + 3 + + <key>ru</key> + <value>Это может занять длительное время (от пары минут до нескольких часов в зависимости от объема данных). +Пожалуйста, подождите...</value> + + true + true + + true + + + ТекстПоясненияРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ТекстПоясненияКонтекстноеМеню + 4 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Обновление программы</value> + + + ОбновлениеПрограммыРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Page + + Vertical + + + + НачальноеЗаполнение + 7 + + ТекстПодготовкаКЗапуску + 8 + + <key>ru</key> + <value>Выполняется подготовка к запуску программы.</value> + + true + true + + true + + + ТекстПодготовкаКЗапускуРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ТекстПодготовкаКЗапускуКонтекстноеМеню + 9 + true + + Label + true + true + + Left + + + + ТекстПоясненияПодготовкаКЗапуску + 10 + + <key>ru</key> + <value>Пожалуйста, подождите...</value> + + true + true + + true + + + ТекстПоясненияПодготовкаКЗапускуРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ТекстПоясненияПодготовкаКЗапускуКонтекстноеМеню + 11 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Начальное заполнение</value> + + + НачальноеЗаполнениеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Режим запуска</value> + + + РежимЗапускаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.ОбновлениеИнформационнойБазы + + + true + + + true + +
                true
                +
                + + ПриЗапускеКлиентскогоПриложения + + <key>ru</key> + <value>При запуске клиентского приложения</value> + + 2 + + Boolean + + + true + + + true + + + + НовыйПараметрЗапуска + + <key>ru</key> + <value>Новый параметр запуска</value> + + 3 + + String + + + + true + + + true + + + + НачальноеЗаполнениеДанных + + <key>ru</key> + <value>Начальное заполнение данных</value> + + 4 + + Boolean + + + true + + + true + + + + ПриЗапускеКлиентскогоПриложения + + Boolean + + + + + + + + diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl new file mode 100644 index 000000000..5f31f3380 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -0,0 +1,166 @@ +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Выполнить("РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс"); + КонецЕсли; + + ПриЗапускеКлиентскогоПриложения = Параметры.ПриЗапускеКлиентскогоПриложения; + + НачальноеЗаполнениеДанных = ОбновлениеИнформационнойБазы.НачальноеЗаполнениеДанных(); + Если НачальноеЗаполнениеДанных Тогда + Заголовок = НСтр("ru = 'Начальное заполнение данных'"); + Элементы.РежимЗапуска.ТекущаяСтраница = Элементы.НачальноеЗаполнение; + Иначе + Элементы.ТекстСообщенияОбновляемаяКонфигурация.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ТекстСообщенияОбновляемаяКонфигурация.Заголовок, Метаданные.Синоним, Метаданные.Версия); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПодключитьОбработчикОжидания("ОбновитьИнформационнуюБазуПриЗапуске", 0.1, Истина); +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьИнформационнуюБазуПриЗапуске() + + Отказ = Ложь; + + НовыйПараметрЗапуска = СтрЗаменить(ПараметрЗапуска, "ЗапуститьОбновлениеИнформационнойБазы", ""); + НовыйПараметрЗапуска = СтрЗаменить(НовыйПараметрЗапуска, """", """"""); + НовыйПараметрЗапуска = "/C """ + НовыйПараметрЗапуска + """"; + + ОбновитьИнформационнуюБазу(Отказ, ПриЗапускеКлиентскогоПриложения); + Если Отказ Тогда + ПрекратитьРаботуСистемы(); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СтандартныеПодсистемыКлиент.ЗавершающиеДействияПриНачалеРаботыСистемы(); + Закрыть(); + Возврат; + КонецЕсли; + + ПрекратитьРаботуСистемы(Истина, НовыйПараметрЗапуска); + Возврат; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформационнуюБазу(Отказ, ПриЗапускеКлиентскогоПриложения = Ложь) + + Если Не НачальноеЗаполнениеДанных Тогда + ТекстСостояния = НСтр("ru = 'Пожалуйста, подождите, выполняется обновление информационной базы...'"); + КонецЕсли; + + Состояние(ТекстСостояния); + ДокументОписаниеОбновлений = Неопределено; + ИнформацияОбОшибке = Неопределено; + + ВремяНачалаОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); + + Попытка + ПризнакВыполненияОбработчиков = ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы( + Ложь, ПриЗапускеКлиентскогоПриложения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + + Если ИнформацияОбОшибке = Неопределено Тогда + ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); + + Пока ПризнакВыполненияОбработчиков = "ОшибкаУстановкиМонопольногоРежима" Цикл + // Открытие формы для отключения активных сеансов + ПриОткрытииФормыОшибкиУстановкиМонопольногоРежима(Отказ); + Если Не Отказ Тогда + Состояние(ТекстСостояния); + + Попытка + ПризнакВыполненияОбработчиков = ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы( + Ложь, ПриЗапускеКлиентскогоПриложения); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Прервать; + КонецПопытки; + + ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ПризнакВыполненияОбработчиков <> "ОшибкаУстановкиМонопольногоРежима" Тогда + ОбновлениеИнформационнойБазыВызовСервера.СнятьБлокировкуФайловойБазы(); + КонецЕсли; + + Иначе + Возврат; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если ИнформацияОбОшибке <> Неопределено Тогда + ВремяОкончанияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КраткоеСообщениеОбОшибке", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ПараметрыФормы.Вставить("ПодробноеСообщениеОбОшибке", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ПараметрыФормы.Вставить("ВремяНачалаОбновления", ВремяНачалаОбновления); + ПараметрыФормы.Вставить("ВремяОкончанияОбновления", ВремяОкончанияОбновления); + + ЗавершитьРаботу = ОткрытьФормуМодально("Обработка.ОбновлениеИнформационнойБазы.Форма.СообщениеОНеудачномОбновлении", ПараметрыФормы); + Если ЗавершитьРаботу = Неопределено + Или ЗавершитьРаботу Тогда + Отказ = Истина; + Возврат; + Иначе + ПрекратитьРаботуСистемы(Истина, НовыйПараметрЗапуска); + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + + Если Не НачальноеЗаполнениеДанных Тогда + Состояние(НСтр("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..e67abde30 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -0,0 +1,1729 @@ + + + + <key>ru</key> + <value>Обработка данных для новой версии программы</value> + + + ГруппаОбновлениеЗавершено + 82 + + КартинкаИнформация + 83 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформацияРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + КартинкаИнформацияКонтекстноеМеню + 84 + true + + 7 + true + 1 + true + + + CommonPicture.Успешно + + + + + ГруппаИнформацияОбОбновлении + 85 + + ИнформацияОбновлениеЗавершено + 86 + + <key>ru</key> + <value>Версия программы успешно обновлена на версию %1 +(завершено %2 в %3, продолжительность %4)</value> + + true + true + + true + + + ИнформацияОбновлениеЗавершеноРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + ИнформацияОбновлениеЗавершеноКонтекстноеМеню + 87 + true + + Label + true + true + false + + Left + + + + ГиперссылкаОсновноеОбновление + 88 + + <key>ru</key> + <value>Техническая информация о результатах обновления</value> + + true + true + + true + + + ГиперссылкаОсновноеОбновлениеРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + ГиперссылкаОсновноеОбновлениеКонтекстноеМеню + 89 + true + + Label + true + true + + + Click + ГиперссылкаОсновноеОбновлениеНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа информация об обновлении</value> + + + ru + Группа информация об обновлении + + + ГруппаИнформацияОбОбновленииРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа обновление завершено</value> + + + ru + Группа обновление завершено + + false + + ГруппаОбновлениеЗавершеноРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + СтатусОбновления + 1 + + ОбновлениеВФайловойБазе + 30 + + ГруппаНеобходимыеДействия + 31 + + КартинкаИнформацияФайловаяБаза + 32 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаИнформацияФайловаяБазаРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + КартинкаИнформацияФайловаяБазаКонтекстноеМеню + 33 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаИнформацияФайловаяБаза + 34 + + Группа2 + 71 + + ЗаголовокИнформацииФайловаяБаза + 35 + + <key>ru</key> + <value>Необходимо выполнить дополнительные процедуры обработки данных. +Работа с этими данными в программе временно ограничена.</value> + + true + true + + true + + + ЗаголовокИнформацииФайловаяБазаРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + ЗаголовокИнформацииФайловаяБазаКонтекстноеМеню + 36 + true + + Label + true + true + + Left + Center + + + + ОткрытьСписокОтложенныхОбработчиков1 + 81 + + <key>ru</key> + <value>Список процедур обработки данных</value> + + true + true + + true + + + ОткрытьСписокОтложенныхОбработчиков1РасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСписокОтложенныхОбработчиков + Normal + Auto + true + true + UserCmds + Auto + + + Выполнить + 70 + true + true + + true + + + ВыполнитьРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьОбновление + Normal + PictureAndText + true + true + UserCmds + Auto + + + ИнформацияПодсказкаФайловаяБаза + 39 + + <key>ru</key> + <value>Обработка данных может занять длительное время +(от нескольких минут до нескольких часов в зависимости от объема введенных данных). +Во время обработки может наблюдаться существенное замедление работы пользователей. +Рекомендуется выполнять обработку в период наименьшей активности пользователей.</value> + + true + true + + true + + + ИнформацияПодсказкаФайловаяБазаРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ИнформацияПодсказкаФайловаяБазаКонтекстноеМеню + 40 + true + + Label + true + true + + Left + 3 + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 138 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа3 + 72 + + ИнформацияПодсказка + 11 + + <key>ru</key> + <value>Сведения о ходе обновления версии программы можно также открыть из раздела "Администрирование" - "Поддержка и обслуживание".</value> + + true + true + + true + + + ИнформацияПодсказкаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ИнформацияПодсказкаКонтекстноеМеню + 12 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 2 + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа информация о прогрессе</value> + + + ru + Группа информация файловая база + + + ГруппаИнформацияФайловаяБазаРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ГруппаНеобходимыеДействияРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + ОбновлениеВФайловойБазеРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтатусОбновленияДляПользователя + 120 + + КартинкаИнформацияПользователю + 121 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаИнформацияПользователюРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + КартинкаИнформацияПользователюКонтекстноеМеню + 122 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ГруппаСодержаниеСтраницы + 123 + + ЗаголовокИнформацииДляПользователя + 124 + + <key>ru</key> + <value>Не выполнены дополнительные процедуры обработки данных. +Работа с этими данными в программе временно ограничена, обратитесь к администратору.</value> + + true + true + + true + + + ЗаголовокИнформацииДляПользователяРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + ЗаголовокИнформацииДляПользователяКонтекстноеМеню + 125 + true + + Label + true + true + + Left + Center + + + + ОткрытьСписокОтложенныхОбработчиков2 + 126 + + <key>ru</key> + <value>Список процедур обработки данных</value> + + true + true + + true + + + ОткрытьСписокОтложенныхОбработчиков2РасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСписокОтложенныхОбработчиков + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаСодержаниеСтраницыРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + СтатусОбновленияДляПользователяРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Page + + + + ОбновлениеВыполняется + 2 + + ГруппаХодОбновления + 5 + + КартинкаДействиеВыполняется + 3 + + <key>ru</key> + <value>Картинка действие выполняется</value> + + true + true + + true + + + КартинкаДействиеВыполняетсяРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + КартинкаДействиеВыполняетсяКонтекстноеМеню + 4 + true + + 7 + true + 3 + true + false + + + CommonPicture.ДлительнаяОперация48 + + + + + ГруппаИнформацияОПрогрессе + 6 + + ЗаголовокИнформации + 7 + + <key>ru</key> + <value>Выполняются дополнительные процедуры обработки данных на версию xx.yy.zz +Работа с этими данными временно ограничена.</value> + + true + true + + true + + + ЗаголовокИнформацииРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ЗаголовокИнформацииКонтекстноеМеню + 8 + true + + Label + true + true + + Left + + + + ИнформацияСтатусОбновления + 9 + + <key>ru</key> + <value>Выполнено: %1 из %2</value> + + true + true + + true + + + ИнформацияСтатусОбновленияРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + ИнформацияСтатусОбновленияКонтекстноеМеню + 10 + true + + Label + true + true + + + Click + ИнформацияСтатусОбновленияНажатие + + true + Left + + + + ИнформацияПодсказкаФайловаяБаза2 + 114 + + <key>ru</key> + <value>Обработка данных может занять длительное время +(от нескольких минут до нескольких часов в зависимости от объема введенных данных). +Во время обработки может наблюдаться существенное замедление работы пользователей.</value> + + true + true + + true + + + ИнформацияПодсказкаФайловаяБаза2РасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + ИнформацияПодсказкаФайловаяБаза2КонтекстноеМеню + 115 + true + + Label + true + true + + Left + 3 + + + + ГруппаПодсказкаПроПериодНаименьшейАктивностиПользователей + 117 + + ПодсказкаПроПериодНаименьшейАктивностиПользователей + 100 + + <key>ru</key> + <value>Поэтому рекомендуется выполнять обработку в период наименьшей активности пользователей.</value> + + true + true + + true + + + ПодсказкаПроПериодНаименьшейАктивностиПользователейРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + ПодсказкаПроПериодНаименьшейАктивностиПользователейКонтекстноеМеню + 101 + true + + Label + true + true + false + + Left + 2 + + + + ИзменитьРасписание + 116 + + <key>ru</key> + <value>Настроить расписание</value> + + true + true + + true + + + ИзменитьРасписаниеРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьРасписание + Normal + Auto + true + 2 + true + UserCmds + Auto + + true + true + + true + + + ГруппаПодсказкаПроПериодНаименьшейАктивностиПользователейРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПодсказка + 76 + + Отступ + 110 + true + true + + true + + + ОтступРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 111 + true + + Label + true + true + true + + Left + + + + ПодсказкаГдеНайтиЭтуФорму + 77 + + <key>ru</key> + <value>Ход обработки данных версии программы можно также проконтролировать из раздела "Администрирование" - "Поддержка и обслуживание".</value> + + true + true + + true + + + ПодсказкаГдеНайтиЭтуФормуРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + ПодсказкаГдеНайтиЭтуФормуКонтекстноеМеню + 78 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 2 + + + true + true + + true + + + ГруппаПодсказкаРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа информация о прогрессе</value> + + + ГруппаИнформацияОПрогрессеРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа ход обновления</value> + + + ГруппаХодОбновленияРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обновление выполняется</value> + + + ОбновлениеВыполняетсяРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Page + + Vertical + + + + ОбновлениеЗавершено + 13 + + ГруппаОтложенноеОбновлениеЗавершено + 42 + + КартинкаИнформация1 + 43 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация1РасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + КартинкаИнформация1КонтекстноеМеню + 44 + true + + 7 + true + 1 + true + + + StdPicture.Stop + + + + + ГруппаИнформацияОбОбновлении1 + 45 + + ИнформацияОтложенныеОбработчикиОтсутствуют + 118 + + <key>ru</key> + <value>Отложенные обработчики на данную версию отсутствуют.</value> + + true + + true + + + ИнформацияОтложенныеОбработчикиОтсутствуютРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + ИнформацияОтложенныеОбработчикиОтсутствуютКонтекстноеМеню + 119 + true + + Label + true + true + + Left + + + + ГруппаПереходКСпискуОтложенныхОбработчиков + 56 + + ИнформацияОтложенноеОбновлениеЗавершено1 + 50 + + <key>ru</key> + <value>Дополнительные процедуры обработки данных не выполнялись</value> + + true + true + + true + + + ИнформацияОтложенноеОбновлениеЗавершено1РасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + ИнформацияОтложенноеОбновлениеЗавершено1КонтекстноеМеню + 51 + true + + Label + true + true + + Left + + + + ОткрытьСписокОтложенныхОбработчиков + 57 + + <key>ru</key> + <value>Необходимо выполнить процедуры обработки данных</value> + + true + true + + true + + + ОткрытьСписокОтложенныхОбработчиковРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьСписокОтложенныхОбработчиков + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа переход к списку отложенных обработчиков</value> + + + ГруппаПереходКСпискуОтложенныхОбработчиковРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Отступ1 + 112 + true + true + + true + + + Отступ1РасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + Отступ1КонтекстноеМеню + 113 + true + + Label + true + true + true + + Left + + + + ИнформацияПодсказка1 + 74 + + <key>ru</key> + <value>Сведения о результатах обновления версии программы можно также открыть из раздела "Администрирование" - "Поддержка и обслуживание".</value> + + true + true + + true + + + ИнформацияПодсказка1РасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ИнформацияПодсказка1КонтекстноеМеню + 75 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 2 + + + true + true + + true + + + <key>ru</key> + <value>Группа информация об обновлении</value> + + + ГруппаИнформацияОбОбновлении1РасширеннаяПодсказка + 166 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ГруппаОтложенноеОбновлениеЗавершеноРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обновление завершено</value> + + + ОбновлениеЗавершеноРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Статус обновления</value> + + + СтатусОбновленияРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗакрыть + 14 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Auto + true + true + true + UserCmds + Auto + + Right + true + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.ОбновлениеИнформационнойБазы + + + true + + + true + +
                true
                +
                + + ИБФайловая + + <key>ru</key> + <value>ИБФайловая</value> + + 2 + + Boolean + + + true + + + true + + + + ВремяНачалаОбновления + + <key>ru</key> + <value>Время начала обновления</value> + + 3 + + Date + + + + true + + + true + + + + ВремяОкончанияОбновления + + <key>ru</key> + <value>Время окончания обновления</value> + + 4 + + Date + + + + true + + + true + + + + Расписание + + <key>ru</key> + <value>Расписание</value> + + 5 + + + true + + + true + + + + ЗакрытьФорму + + <key>ru</key> + <value>Закрыть</value> + + 1 + + true + + + + ЗакрытьФорму + + + Auto + Auto + + + ВыполнитьОбновление + + <key>ru</key> + <value>Выполнить</value> + + 3 + + ru + Выполнить дополнительные процеудры обновления + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьОбновление + + + Auto + Auto + + + ОткрытьСписокОтложенныхОбработчиков + + <key>ru</key> + <value>Открыть список отложенных обработчиков</value> + + 4 + + ru + Открыть список отложенных обработчиков + + + true + + + + ОткрытьСписокОтложенныхОбработчиков + + + Auto + Auto + + + ИзменитьРасписание + + <key>ru</key> + <value>Изменить расписание</value> + + 2 + + true + + + StdPicture.ScheduledJob + + + + ИзменитьРасписание + + + Auto + Auto + + + ОткрытиеИзПанелиАдминистрирования + + Boolean + + + + + + + +
                diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl new file mode 100644 index 000000000..65f83dbd5 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -0,0 +1,380 @@ +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + Элементы.ГруппаПодсказкаПроПериодНаименьшейАктивностиПользователей.Видимость = Ложь; + Элементы.ПодсказкаГдеНайтиЭтуФорму.Заголовок = + НСтр("ru = 'Ход обработки данных версии программы можно также проконтролировать из раздела + |""Информация"" на рабочем столе, команда ""Описание изменений программы"".'"); + + КонецЕсли; + + // Зачитываем значение константы + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + ВремяНачалаОбновления = СведенияОбОбновлении.ВремяНачалаОбновления; + ВремяОкончанияОбновления = СведенияОбОбновлении.ВремяОкончанияОбновления; + + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Если ЗначениеЗаполнено(ВремяОкончанияОбновления) Тогда + Элементы.ИнформацияОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ИнформацияОбновлениеЗавершено.Заголовок, + Метаданные.Версия, + Формат(ВремяОкончанияОбновления, "ДЛФ=D"), + Формат(ВремяОкончанияОбновления, "ДЛФ=T"), + СведенияОбОбновлении.ПродолжительностьОбновления); + Иначе + ЗаголовокОбновлениеЗавершено = НСтр("ru = 'Версия программы успешно обновлена на версию %1'"); + Элементы.ИнформацияОбновлениеЗавершено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ЗаголовокОбновлениеЗавершено, + Метаданные.Версия); + КонецЕсли; + + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = Неопределено Тогда + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.СтатусОбновленияДляПользователя; + Иначе + + Если Не ИБФайловая И СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено Тогда + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеВыполняется; + Иначе + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеВФайловойБазе; + КонецЕсли; + + КонецЕсли; + + Иначе + ТекстСообщения = СообщениеОРезультатахОбновления(СведенияОбОбновлении); + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + ШаблонЗаголовка = НСтр("ru = 'Дополнительные процедуры обработки данных завершены %1 в %2'"); + Элементы.ИнформацияОтложенноеОбновлениеЗавершено1.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + Формат(СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления, "ДЛФ=D"), + Формат(СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления, "ДЛФ=T")); + + КонецЕсли; + + Если Не ИБФайловая Тогда + ОбновлениеЗавершено = Ложь; + ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено); + + Если ОбновлениеЗавершено Тогда + ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении); + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + Возврат; + КонецЕсли; + + Иначе + Элементы.ИнформацияСтатусОбновления.Видимость = Ложь; + Элементы.ИзменитьРасписание.Видимость = Ложь; + КонецЕсли; + + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Элементы.ИзменитьРасписание.Видимость = Ложь; + Иначе + Расписание = РегламентныеЗадания.НайтиПредопределенное( + Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ).Расписание; + КонецЕсли; + + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Элементы.ГиперссылкаОсновноеОбновление.Видимость = Ложь; + КонецЕсли; + + СкрытьЛишниеГруппыНаФорме(Параметры.ОткрытиеИзПанелиАдминистрирования); + + Элементы.ОткрытьСписокОтложенныхОбработчиков.Заголовок = ТекстСообщения; + Элементы.ЗаголовокИнформации.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняются дополнительные процедуры обработки данных на версию %1 + |Работа с этими данными временно ограничена'"), Метаданные.Версия); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Не ИБФайловая Тогда + ПодключитьОбработчикОжидания("ПроверитьСтатусВыполненияОбработчиков", 15); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ОтложенноеОбновление" Тогда + + Если Не ИБФайловая Тогда + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеВыполняется; + КонецЕсли; + + ПодключитьОбработчикОжидания("ЗапуститьОтложенноеОбновление", 0.5, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияСтатусОбновленияНажатие(Элемент) + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ОтложенныеОбработчики"); +КонецПроцедуры + +&НаКлиенте +Процедура ГиперссылкаОсновноеОбновлениеНажатие(Элемент) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОбновления); + ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОбновления); + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбновление(Команда) + + Если Не ИБФайловая Тогда + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеВыполняется; + КонецЕсли; + + ПодключитьОбработчикОжидания("ЗапуститьОтложенноеОбновление", 0.5, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьСписокОтложенныхОбработчиков(Команда) + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ОтложенныеОбработчики"); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРасписание(Команда) + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + + Если Диалог.ОткрытьМодально() Тогда + Расписание = Диалог.Расписание; + УстановитьРасписаниеОтложенногоОбновления(Расписание); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СкрытьЛишниеГруппыНаФорме(ОткрытиеИзПанелиАдминистрирования) + + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(, Истина); + + Если Не ЭтоПолноправныйПользователь Или ОткрытиеИзПанелиАдминистрирования Тогда + ЭтаФорма.КлючСохраненияПоложенияОкна = "ФормаДляОбычногоПользователя"; + + Элементы.Группа3.Видимость = Ложь; + Элементы.ГруппаПодсказка.Видимость = Ложь; + Элементы.ИнформацияПодсказка1.Видимость = Ложь; + Элементы.Отступ1.Видимость = Ложь; + + Если Не ЭтоПолноправныйПользователь И Не РольДоступна("ПросмотрЖурналаРегистрации")Тогда + Элементы.ГиперссылкаОсновноеОбновление.Видимость = Ложь; + КонецЕсли; + + Иначе + ЭтаФорма.КлючСохраненияПоложенияОкна = "ФормаДляАдминистратора"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьОтложенноеОбновление() + + ВыполнитьОбновлениеНаСервере(); + Если Не ИБФайловая Тогда + ПодключитьОбработчикОжидания("ПроверитьСтатусВыполненияОбработчиков", 15); + Возврат; + КонецЕсли; + + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьСтатусВыполненияОбработчиков() + + ОбновлениеЗавершено = Ложь; + ПроверитьСтатусВыполненияОбработчиковНаСервере(ОбновлениеЗавершено); + Если ОбновлениеЗавершено Тогда + Элементы.СтатусОбновления.ТекущаяСтраница = Элементы.ОбновлениеЗавершено; + ОтключитьОбработчикОжидания("ПроверитьСтатусВыполненияОбработчиков") + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьСтатусВыполненияОбработчиковНаСервере(ОбновлениеЗавершено) + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда + ОбновлениеЗавершено = Истина; + Иначе + ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено); + КонецЕсли; + + Если ОбновлениеЗавершено = Истина Тогда + ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьОбновлениеНаСервере() + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено; + СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = Неопределено; + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + Обработчик.ЧислоПопыток = 0; + КонецЦикла; + КонецЦикла; + КонецЦикла; + ОбновлениеИнформационнойБазы.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + Если Не ИБФайловая Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбновлениеИнформационнойБазы.ПриВключенииОтложенногоОбновления(Истина); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Использование = Истина; + РегламентноеЗадание.Записать(); + КонецЕсли; + Возврат; + + КонецЕсли; + + ОбновлениеИнформационнойБазы.ВыполнитьОтложенноеОбновлениеСейчас(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении) + + ШаблонЗаголовка = НСтр("ru = 'Дополнительные процедуры обработки данных завершены %1 в %2'"); + ТекстСообщения = СообщениеОРезультатахОбновления(СведенияОбОбновлении); + + Элементы.ИнформацияОтложенноеОбновлениеЗавершено1.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + Формат(СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления, "ДЛФ=D"), + Формат(СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления, "ДЛФ=T")); + + Элементы.ОткрытьСписокОтложенныхОбработчиков.Заголовок = ТекстСообщения; + +КонецПроцедуры + +&НаСервере +Функция СообщениеОРезультатахОбновления(СведенияОбОбновлении) + + СписокОбработчиков = СведенияОбОбновлении.ДеревоОбработчиков; + УспешноВыполненоОбработчиков = 0; + ВсегоОбработчиков = 0; + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + ВсегоОбработчиков = ВсегоОбработчиков + СтрокаДереваВерсия.Строки.Количество(); + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + + Если Обработчик.Статус = "Выполнено" Тогда + УспешноВыполненоОбработчиков = УспешноВыполненоОбработчиков + 1; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если ВсегоОбработчиков = УспешноВыполненоОбработчиков Тогда + + Если ВсегоОбработчиков = 0 Тогда + Элементы.ИнформацияОтложенныеОбработчикиОтсутствуют.Видимость = Истина; + Элементы.ГруппаПереходКСпискуОтложенныхОбработчиков.Видимость = Ложь; + Иначе + ТекстСообщения = НСтр("ru = 'Все процедуры обновления выполнены успешно (%1)'"); + КонецЕсли; + Элементы.КартинкаИнформация1.Картинка = БиблиотекаКартинок.Успешно; + Иначе + ТекстСообщения = НСтр("ru = 'Не все процедуры удалось выполнить (выполнено %1 из %2)'"); + Элементы.КартинкаИнформация1.Картинка = БиблиотекаКартинок.Остановить; + КонецЕсли; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения, УспешноВыполненоОбработчиков, ВсегоОбработчиков); + +КонецФункции + +&НаСервере +Процедура ОбновитьИнформациюОХодеОбновления(СведенияОбОбновлении, ОбновлениеЗавершено = Ложь) + + ВыполненоОбработчиков = 0; + ВсегоОбработчиков = 0; + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + ВсегоОбработчиков = ВсегоОбработчиков + СтрокаДереваВерсия.Строки.Количество(); + Для Каждого Обработчик Из СтрокаДереваВерсия.Строки Цикл + + Если Обработчик.Статус = "Выполнено" Тогда + ВыполненоОбработчиков = ВыполненоОбработчиков + 1; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если ВсегоОбработчиков = 0 Тогда + ОбновлениеЗавершено = Истина; + КонецЕсли; + + Элементы.ИнформацияСтатусОбновления.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнено: %1 из %2'"), + ВыполненоОбработчиков, + ВсегоОбработчиков); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьРасписаниеОтложенногоОбновления(Расписание) + + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); + РегламентноеЗадание.Расписание = Расписание; + РегламентноеЗадание.Записать(); + +КонецПроцедуры \ 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..af0f3d664 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Form.form @@ -0,0 +1,837 @@ + + + + <key>ru</key> + <value>Дополнительные процедуры обработки данных</value> + + + ОтложенныеОбработчики + 1 + true + true + + true + + + ОтложенныеОбработчики + + None + + ОтложенныеОбработчикиОбработчик + 4 + true + true + + true + + + ОтложенныеОбработчики.Обработчик + + + ОтложенныеОбработчикиОбработчикРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ОтложенныеОбработчикиОбработчикКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + 40 + true + true + true + true + true + true + Normal + + + + ГруппаСтатусКартинка + 19 + + ОтложенныеОбработчикиСтатусКартинка + 17 + true + true + + true + + + ОтложенныеОбработчики.СтатусКартинка + + None + + ОтложенныеОбработчикиСтатусКартинкаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСтатусКартинкаКонтекстноеМеню + 18 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + ОтложенныеОбработчикиСтатусОбработчика + 6 + true + true + + true + + + ОтложенныеОбработчики.СтатусОбработчика + + + ОтложенныеОбработчикиСтатусОбработчикаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСтатусОбработчикаКонтекстноеМеню + 7 + true + + InputField + Auto + true + Left + true + + 15 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа статус картинка</value> + + + ГруппаСтатусКартинкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтложенныеОбработчикиКоманднаяПанель + 3 + Left + + + ОтложенныеОбработчикиСтрокаПоиска + 24 + + ОтложенныеОбработчикиСтрокаПоискаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСтрокаПоискаКонтекстноеМеню + 25 + true + + ОтложенныеОбработчики + + true + + + + ОтложенныеОбработчикиСостояниеПросмотра + 27 + + ОтложенныеОбработчикиСостояниеПросмотраРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ОтложенныеОбработчикиСостояниеПросмотраКонтекстноеМеню + 28 + true + + ViewStatusAddition + ОтложенныеОбработчики + + true + + + + ОтложенныеОбработчикиУправлениеПоиском + 30 + + ОтложенныеОбработчикиУправлениеПоискомРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ОтложенныеОбработчикиУправлениеПоискомКонтекстноеМеню + 31 + true + + SearchControlAddition + ОтложенныеОбработчики + + true + + + + ОтложенныеОбработчикиРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ОтложенныеОбработчикиКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
                + + ОтложенныеОбработчикиИнформацияОПроцедуреОбновления + 15 + true + true + + true + + + Items.ОтложенныеОбработчики.CurrentData.ИнформацияОПроцедуреОбновления + + None + + ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ОтложенныеОбработчикиИнформацияОПроцедуреОбновленияКонтекстноеМеню + 16 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + false + true + true + true + true + true + Normal + + + + ГиперссылкаОтложенноеОбновление + 13 + + <key>ru</key> + <value>Техническая информация о результатах обработки данных</value> + + true + true + + true + + + ГиперссылкаОтложенноеОбновлениеРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ГиперссылкаОтложенноеОбновлениеКонтекстноеМеню + 14 + true + + Label + true + true + true + + + Click + ГиперссылкаОтложенноеОбновлениеНажатие + + true + Left + + + + ОбновлениеВыполняется + 20 + + <key>ru</key> + <value>В данный момент выполняются дополнительные процедуры обновления</value> + + true + + true + + + ОбновлениеВыполняетсяРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ОбновлениеВыполняетсяКонтекстноеМеню + 21 + true + + Label + true + 2 + true + true + + Style.ПоясняющийТекст + + + Left + Bottom + + + + ГруппаПовторныйЗапуск + 10 + + ТекстПояснения + 11 + + <key>ru</key> + <value>Невыполненные процедуры рекомендуется запустить повторно.</value> + + true + true + + true + + + ТекстПоясненияРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ТекстПоясненияКонтекстноеМеню + 12 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ЗапуститьПовторно + 9 + true + true + + true + + + ЗапуститьПовторноРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗапуститьПовторно + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа повторный запуск</value> + + + ГруппаПовторныйЗапускРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗакрытьФорму + 8 + true + true + + true + + + ФормаЗакрытьФормуРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Auto + true + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 85 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.ОбновлениеИнформационнойБазы + + + 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 + + String + + + + true + + + true + + + + СтатусКартинка + 4 + + Picture + + + true + + + true + + + + Вес + + <key>ru</key> + <value>Вес</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + + ВремяНачалаОтложенногоОбновления + + <key>ru</key> + <value>Время начала отложенного обновления</value> + + 3 + + Date + + + + true + + + true + + + + ВремяОкончанияОтложенногоОбновления + + <key>ru</key> + <value>Время окончания отложенного обновления</value> + + 4 + + Date + + + + true + + + true + + + + НомерТекущегоСеанса + + <key>ru</key> + <value>Номер текущего сеанса</value> + + 5 + + ValueList + + + 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> + + 1 + + true + + + + ЗакрытьФорму + + + Auto + Auto + + + ЗапуститьПовторно + + <key>ru</key> + <value>Запустить</value> + + 2 + + ru + Запустить повторно + + + true + + + StdPicture.GenerateReport + + + + ЗапуститьПовторно + + + Auto + Auto + + + + + + +
                diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl new file mode 100644 index 000000000..35a52f0e2 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/ОтложенныеОбработчики/Module.bsl @@ -0,0 +1,137 @@ +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; + ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; + НомерТекущегоСеанса = СведенияОбОбновлении.НомерСеанса; + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; + КонецЕсли; + + Если Не ИБФайловая Тогда + ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); + КонецЕсли; + + Если Не РольДоступна("ПросмотрЖурналаРегистрации") Тогда + Элементы.ГиперссылкаОтложенноеОбновление.Видимость = Ложь; + КонецЕсли; + + ОбновитьТаблицуОтложенныхОбработчиков(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбновлениеВыполняется Тогда + ПодключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков", 15); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьПовторно(Команда) + Оповестить("ОтложенноеОбновление"); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ГиперссылкаОтложенноеОбновлениеНажатие(Элемент) + + Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) И ЗначениеЗаполнено(ВремяОкончанияОтложенногоОбновления) Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); + ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + ПараметрыФормы.Вставить("Сеанс", НомерТекущегоСеанса); + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + Иначе + + Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) Тогда + ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не завершилась.'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не выполнялась.'"); + КонецЕсли; + + Предупреждение(ТекстПредупреждения); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьТаблицуОбработчиков() + + ВыполненыВсеОбработчики = Истина; + ОбновитьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики); + Если ВыполненыВсеОбработчики Тогда + ОтключитьОбработчикОжидания("ОбновитьТаблицуОбработчиков"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики = Истина) + + ОтложенныеОбработчики.Очистить(); + СведенияОбОбновлении = ОбновлениеИнформационнойБазы.СведенияОбОбновленииИнформационнойБазы(); + + Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Для Каждого СтрокаОбработчика Из СтрокаДереваВерсия.Строки Цикл + + СтрокаСписка = ОтложенныеОбработчики.Добавить(); + СтрокаСписка.Обработчик = СтрокаОбработчика.ИмяОбработчика; + Если СтрокаОбработчика.Статус = "Выполнено" Тогда + СтрокаСписка.ИнформацияОПроцедуреОбновления = + НСтр("ru = 'Процедура обработки данных завершилась успешно.'") + Символы.ПС + Символы.ПС + СтрокаОбработчика.Комментарий; + СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Выполнена'"); + СтрокаСписка.Вес = 1; + СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Успешно; + ИначеЕсли СтрокаОбработчика.Статус = "Ошибка" Тогда + ВыполненыВсеОбработчики = Ложь; + СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.ИнформацияОбОшибке + Символы.ПС + Символы.ПС + СтрокаОбработчика.Комментарий; + СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Ошибка'"); + СтрокаСписка.Вес = 3; + СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Остановить; + Иначе + ВыполненыВсеОбработчики = Ложь; + СтрокаСписка.СтатусОбработчика = НСтр("ru = 'Не выполнялась'"); + СтрокаСписка.Вес = 2; + СтрокаСписка.ИнформацияОПроцедуреОбновления = НСтр("ru = 'Процедура обработки данных еще не выполнялась.'") + + Символы.ПС + Символы.ПС + СтрокаОбработчика.Комментарий; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Если ВыполненыВсеОбработчики Или ОбновлениеВыполняется Тогда + Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; + КонецЕсли; + + ОтложенныеОбработчики.Сортировать("Вес Убыв"); + + Элементы.ОбновлениеВыполняется.Видимость = ОбновлениеВыполняется; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Form.form similarity index 98% rename from SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Form.form rename to SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Form.form index 5f0886dbb..5518b2c74 100644 --- a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -366,7 +366,7 @@ Auto
                - ТекстСообщенияОбОшибке + КраткоеСообщениеОбОшибке String @@ -386,6 +386,13 @@ + + ПодробноеСообщениеОбОшибке + + String + + + diff --git a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Module.bsl similarity index 71% rename from SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Module.bsl rename to SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Module.bsl index 8a3f75931..fa084cb52 100644 --- a/SSL/src/CommonForms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -8,14 +8,22 @@ Возврат; КонецЕсли; - Элементы.ТекстСообщенияОбОшибке.Заголовок = Параметры.ТекстСообщенияОбОшибке; + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, + , , Параметры.ПодробноеСообщениеОбОшибке); + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При обновлении версии программы возникла ошибка: + | + |%1'"), + Параметры.КраткоеСообщениеОбОшибке); + + Элементы.ТекстСообщенияОбОшибке.Заголовок = ТекстСообщенияОбОшибке; ВремяНачалаОбновления = Параметры.ВремяНачалаОбновления; ВремяОкончанияОбновления = Параметры.ВремяОкончанияОбновления; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -41,5 +49,4 @@ &НаКлиенте Процедура ПерезагрузитьПрограмму(Команда) Закрыть(Ложь); -КонецПроцедуры - +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo new file mode 100644 index 000000000..162356908 --- /dev/null +++ b/SSL/src/DataProcessors/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -0,0 +1,49 @@ + + + + + + + ОбновлениеИнформационнойБазы + + ru + Обновление информационной базы + + DataProcessor.ОбновлениеИнформационнойБазы.Form.ИндикацияХодаОтложенногоОбновленияИБ + + ИндикацияХодаОтложенногоОбновленияИБ + + ru + Индикация хода отложенного обновления ИБ + + PersonalComputer + MobileDevice + + + ОтложенныеОбработчики + + ru + Отложенные обработчики + + PersonalComputer + MobileDevice + + + ИндикацияХодаОбновленияИБ + + ru + Индикация хода обновления ИБ + + PersonalComputer + MobileDevice + + + СообщениеОНеудачномОбновлении + + ru + Сообщение о неудачном обновлении + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form index 06eef3c48..d18c5624d 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form @@ -222,7 +222,7 @@ SaveValues Yes 60 - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl index 01804f7c1..c7f17d677 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl @@ -61,9 +61,13 @@ ОбновлениеКонфигурацииКлиент.ПодключитьОтключитьПроверкуПоРасписанию(Объект.ПроверятьНаличиеОбновленияПриЗапуске = 1 И Объект.РасписаниеПроверкиНаличияОбновления <> Неопределено); КонецЕсли; - Закрыть(Новый Структура("ПроверятьНаличиеОбновленияПриЗапуске, РасписаниеПроверкиНаличияОбновления", - Объект.ПроверятьНаличиеОбновленияПриЗапуске, Объект.РасписаниеПроверкиНаличияОбновления)); - + + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ПроверятьНаличиеОбновленияПриЗапуске", Объект.ПроверятьНаличиеОбновленияПриЗапуске); + РезультатВыбора.Вставить("РасписаниеПроверкиНаличияОбновления", Объект.РасписаниеПроверкиНаличияОбновления); + + ОповеститьОВыборе(РезультатВыбора); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -95,7 +99,7 @@ Функция ЗаписатьНастройки(НастройкиОбновленияКонфигурации) ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); - ОбновитьПовторноИспользуемыеЗначения(); // сбрысываем кеш для применения настроек + ОбновитьПовторноИспользуемыеЗначения(); // сбрасываем кеш для применения настроек КонецФункции diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form index 44d206da5..8874d570c 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form @@ -702,7 +702,7 @@ Retry SaveValues Yes - DontBlock + LockOwner Use true true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl index 49313550e..4a4c750dd 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl @@ -55,8 +55,11 @@ КонецЕсли; КонецЕсли; Если Не Отказ Тогда - Закрыть(Новый Структура("СоздаватьРезервнуюКопию, ИмяКаталогаРезервнойКопииИБ, ВосстанавливатьИнформационнуюБазу", - Объект.СоздаватьРезервнуюКопию, Объект.ИмяКаталогаРезервнойКопииИБ, Объект.ВосстанавливатьИнформационнуюБазу)); + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("СоздаватьРезервнуюКопию", Объект.СоздаватьРезервнуюКопию); + РезультатВыбора.Вставить("ИмяКаталогаРезервнойКопииИБ", Объект.ИмяКаталогаРезервнойКопииИБ); + РезультатВыбора.Вставить("ВосстанавливатьИнформационнуюБазу", Объект.ВосстанавливатьИнформационнуюБазу); + ОповеститьОВыборе(РезультатВыбора); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form index 21909c39b..bfa63f082 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form @@ -249,7 +249,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form index b29101b42..d19b8bb8c 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form @@ -24,7 +24,7 @@ НадписьШапкаДоброПожаловатьРасширеннаяПодсказка - 646 + 648 Label true true @@ -69,7 +69,7 @@ Декорация3РасширеннаяПодсказка - 647 + 649 Label true true @@ -113,7 +113,7 @@ ДекорацияЧерезИнтернетРасширеннаяПодсказка - 651 + 653 Label true true @@ -153,7 +153,7 @@ ЕстьКартинкаРасширеннаяПодсказка - 650 + 652 Label true true @@ -179,7 +179,7 @@ ДекорацияПустаяКартинкаРасширеннаяПодсказка - 653 + 655 Label true true @@ -216,7 +216,7 @@ НетКартинкиРасширеннаяПодсказка - 652 + 654 Label true true @@ -236,7 +236,7 @@ СтраницыКартинкиИнтернетРасширеннаяПодсказка - 649 + 651 Label true true @@ -266,7 +266,7 @@ НадписьПользовательскийСайтРасширеннаяПодсказка - 655 + 657 Label true true @@ -306,7 +306,7 @@ Right ПропускатьПриветствиеРасширеннаяПодсказка - 656 + 658 Label true true @@ -336,7 +336,7 @@ false Группа8РасширеннаяПодсказка - 654 + 656 Label true true @@ -361,7 +361,7 @@ ГруппаИнтеренетРасширеннаяПодсказка - 648 + 650 Label true true @@ -398,7 +398,7 @@ ДекорацияЧерезИТСРасширеннаяПодсказка - 661 + 663 Label true true @@ -438,7 +438,7 @@ ЕстьКартинка1РасширеннаяПодсказка - 660 + 662 Label true true @@ -464,7 +464,7 @@ ДекорацияПустаяКартинка1РасширеннаяПодсказка - 663 + 665 Label true true @@ -501,7 +501,7 @@ НетКартинки1РасширеннаяПодсказка - 662 + 664 Label true true @@ -521,7 +521,7 @@ СтраницыКартинкиИТСРасширеннаяПодсказка - 659 + 661 Label true true @@ -551,7 +551,7 @@ НадписьИТСРасширеннаяПодсказка - 665 + 667 Label true true @@ -587,7 +587,7 @@ Декорация2РасширеннаяПодсказка - 666 + 668 Label true true @@ -619,7 +619,7 @@ false Группа19РасширеннаяПодсказка - 664 + 666 Label true true @@ -644,7 +644,7 @@ ГруппаИТСРасширеннаяПодсказка - 658 + 660 Label true true @@ -682,7 +682,7 @@ ДекорацияИзФайлаРасширеннаяПодсказка - 670 + 672 Label true true @@ -722,7 +722,7 @@ ЕстьКартинка2РасширеннаяПодсказка - 669 + 671 Label true true @@ -748,7 +748,7 @@ ДекорацияПустаяКартинка2РасширеннаяПодсказка - 672 + 674 Label true true @@ -785,7 +785,7 @@ НетКартинки2РасширеннаяПодсказка - 671 + 673 Label true true @@ -805,7 +805,7 @@ СтраницыКартинкиФайлРасширеннаяПодсказка - 668 + 670 Label true true @@ -835,7 +835,7 @@ НадписьЛокальныйКаталогРасширеннаяПодсказка - 674 + 676 Label true true @@ -871,7 +871,7 @@ Декорация18РасширеннаяПодсказка - 675 + 677 Label true true @@ -903,7 +903,7 @@ false Группа22РасширеннаяПодсказка - 673 + 675 Label true true @@ -928,7 +928,7 @@ ГруппаФайлРасширеннаяПодсказка - 667 + 669 Label true true @@ -957,7 +957,7 @@ ОтступТриРасширеннаяПодсказка - 676 + 678 Label true true @@ -996,7 +996,7 @@ НадписьПроверкиНаличияОбновленияРасширеннаяПодсказка - 678 + 680 Label true true @@ -1031,7 +1031,7 @@ ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеРасширеннаяПодсказка - 679 + 681 Label true true @@ -1065,7 +1065,7 @@ ГруппаПроверкиНаличияОбновленияРасширеннаяПодсказка - 677 + 679 Label true true @@ -1097,7 +1097,7 @@ НадписьСообщениеДалееРасширеннаяПодсказка - 680 + 682 Label true true @@ -1129,7 +1129,7 @@ ДоброПожаловатьРасширеннаяПодсказка - 645 + 647 Label true true @@ -1160,7 +1160,7 @@ НадписьШапкаПодключениеКИнтернетРасширеннаяПодсказка - 682 + 684 Label true true @@ -1204,7 +1204,7 @@ ДекорацияКартинкаРасширеннаяПодсказка - 684 + 686 Label true true @@ -1251,7 +1251,7 @@ Декорация6РасширеннаяПодсказка - 686 + 688 Label true true @@ -1290,7 +1290,7 @@ Декорация7РасширеннаяПодсказка - 688 + 690 Label true true @@ -1326,7 +1326,7 @@ НадписьПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 689 + 691 Label true true @@ -1360,7 +1360,7 @@ Группа4РасширеннаяПодсказка - 687 + 689 Label true true @@ -1385,7 +1385,7 @@ false ВертикальнаяГруппаНадписиЖР2РасширеннаяПодсказка - 685 + 687 Label true true @@ -1410,7 +1410,7 @@ Группа3РасширеннаяПодсказка - 683 + 685 Label true true @@ -1440,7 +1440,7 @@ НастроитьПараметрыПроксиСервераРасширеннаяПодсказка - 691 + 693 Label true true @@ -1464,7 +1464,7 @@ ГруппаНастроитьПараметрыПроксиСервераРасширеннаяПодсказка - 690 + 692 Label true true @@ -1493,7 +1493,7 @@ ОтступДевятьРасширеннаяПодсказка - 692 + 694 Label true true @@ -1529,7 +1529,7 @@ НадписьДалееРасширеннаяПодсказка - 693 + 695 Label true true @@ -1561,7 +1561,7 @@ ПодключениеКИнтернетРасширеннаяПодсказка - 681 + 683 Label true true @@ -1592,7 +1592,7 @@ Декорация9РасширеннаяПодсказка - 695 + 697 Label true true @@ -1638,7 +1638,7 @@ Декорация10РасширеннаяПодсказка - 696 + 698 Label true true @@ -1682,7 +1682,7 @@ КодПользователяСервераОбновленийРасширеннаяПодсказка - 699 + 701 Label true true @@ -1728,7 +1728,7 @@ ПарольСервераОбновленийРасширеннаяПодсказка - 701 + 703 Label true true @@ -1765,7 +1765,7 @@ Группа2РасширеннаяПодсказка - 698 + 700 Label true true @@ -1800,7 +1800,7 @@ НадписьИнформацияОПолученииДоступаРасширеннаяПодсказка - 704 + 706 Label true true @@ -1845,7 +1845,7 @@ Right ЗапомнитьПарольСервераОбновленийРасширеннаяПодсказка - 705 + 707 Label true true @@ -1872,7 +1872,7 @@ Группа5РасширеннаяПодсказка - 703 + 705 Label true true @@ -1901,7 +1901,7 @@ ГруппаДоступНаПользовательскийСайтРасширеннаяПодсказка - 697 + 699 Label true true @@ -1930,7 +1930,7 @@ НадписьТехническаяИнформацияОбОшибкеРасширеннаяПодсказка - 707 + 709 Label true true @@ -1964,7 +1964,7 @@ ДекорацияКартинка1РасширеннаяПодсказка - 709 + 711 Label true true @@ -2011,7 +2011,7 @@ Декорация11РасширеннаяПодсказка - 712 + 714 Label true true @@ -2046,7 +2046,7 @@ НадписьКакОформитьПодпискуИТСРасширеннаяПодсказка - 713 + 715 Label true true @@ -2083,7 +2083,7 @@ ПРОФРасширеннаяПодсказка - 711 + 713 Label true true @@ -2115,7 +2115,7 @@ Декорация15РасширеннаяПодсказка - 715 + 717 Label true true @@ -2152,7 +2152,7 @@ Декорация16РасширеннаяПодсказка - 716 + 718 Label true true @@ -2188,7 +2188,7 @@ НадписьПодробнееОбИТСРасширеннаяПодсказка - 717 + 719 Label true true @@ -2227,7 +2227,7 @@ БазоваяРасширеннаяПодсказка - 714 + 716 Label true true @@ -2252,7 +2252,7 @@ ГруппаДоступаНаСайтРасширеннаяПодсказка - 710 + 712 Label true true @@ -2276,7 +2276,7 @@ ПанельОшибкаПодключенияРасширеннаяПодсказка - 708 + 710 Label true true @@ -2310,7 +2310,7 @@ None ТехническаяИнформацияОбОшибкеРасширеннаяПодсказка - 719 + 721 Label true true @@ -2350,7 +2350,7 @@ НадписьИнфоЖРРасширеннаяПодсказка - 722 + 724 Label true true @@ -2386,7 +2386,7 @@ НадписьОткрытьЖурналРегистрации1РасширеннаяПодсказка - 723 + 725 Label true true @@ -2422,7 +2422,7 @@ Группа6РасширеннаяПодсказка - 721 + 723 Label true true @@ -2447,7 +2447,7 @@ false ПанельЖурналРегистрацииРасширеннаяПодсказка - 718 + 720 Label true true @@ -2475,7 +2475,7 @@ Декорация66РасширеннаяПодсказка - 724 + 726 Label true true @@ -2512,7 +2512,7 @@ НадписьДалее2РасширеннаяПодсказка - 725 + 727 Label true true @@ -2544,7 +2544,7 @@ ПодключениеКСайтуРасширеннаяПодсказка - 694 + 696 Label true true @@ -2575,7 +2575,7 @@ НадписьШапкаМестоположениеДискаИТСРасширеннаяПодсказка - 727 + 729 Label true true @@ -2627,7 +2627,7 @@ ИсточникДискаИТСРасширеннаяПодсказка - 728 + 730 Label true true @@ -2694,7 +2694,7 @@ ДискИТСРасширеннаяПодсказка - 733 + 735 Label true true @@ -2740,7 +2740,7 @@ УказаниеКаталогаРасширеннаяПодсказка - 732 + 734 Label true true @@ -2771,7 +2771,7 @@ Декорация21РасширеннаяПодсказка - 736 + 738 Label true true @@ -2801,7 +2801,7 @@ ИнфНадписьИТСРасширеннаяПодсказка - 735 + 737 Label true true @@ -2826,7 +2826,7 @@ СтраницыНаличияДискаИТСРасширеннаяПодсказка - 731 + 733 Label true true @@ -2846,7 +2846,7 @@ ОтступПятьРасширеннаяПодсказка - 730 + 732 Label true true @@ -2875,7 +2875,7 @@ ОтступШестьРасширеннаяПодсказка - 737 + 739 Label true true @@ -2911,7 +2911,7 @@ НадписьСообщениеДалее4РасширеннаяПодсказка - 738 + 740 Label true true @@ -2943,7 +2943,7 @@ МестоположениеДискаИТСРасширеннаяПодсказка - 726 + 728 Label true true @@ -2974,7 +2974,7 @@ НадписьШапкаФайлОбновленияРасширеннаяПодсказка - 740 + 742 Label true true @@ -3023,7 +3023,7 @@ ПереключательНуженФайлОбновленияРасширеннаяПодсказка - 741 + 743 Label true true @@ -3081,7 +3081,7 @@ None ПолеФайлОбновленияРасширеннаяПодсказка - 744 + 746 Label true true @@ -3127,7 +3127,7 @@ ОтступРасширеннаяПодсказка - 743 + 745 Label true true @@ -3159,7 +3159,7 @@ Картинка5РасширеннаяПодсказка - 747 + 749 Label true true @@ -3204,7 +3204,7 @@ НадписьКонфигурацияИзмененаРасширеннаяПодсказка - 750 + 752 Label true true @@ -3239,7 +3239,7 @@ true ЕстьИзмененияРасширеннаяПодсказка - 749 + 751 Label true true @@ -3270,7 +3270,7 @@ НадписьНетИзмененийРасширеннаяПодсказка - 752 + 754 Label true true @@ -3305,7 +3305,7 @@ true НетИзмененийРасширеннаяПодсказка - 751 + 753 Label true true @@ -3331,7 +3331,7 @@ true СтраницыНадписиИзмененнойКонфигурацииРасширеннаяПодсказка - 748 + 750 Label true true @@ -3356,7 +3356,7 @@ false ПанельОбновлениеИзОсновнойКонфигурацииРасширеннаяПодсказка - 746 + 748 Label true true @@ -3384,7 +3384,7 @@ НадписьОтступРасширеннаяПодсказка - 753 + 755 Label true true @@ -3420,7 +3420,7 @@ Декорация51РасширеннаяПодсказка - 754 + 756 Label true true @@ -3452,7 +3452,7 @@ ФайлОбновленияРасширеннаяПодсказка - 739 + 741 Label true true @@ -3483,7 +3483,7 @@ НадписьШапкаДоступноеОбновлениеРасширеннаяПодсказка - 756 + 758 Label true true @@ -3530,7 +3530,7 @@ ДекорацияКартинка2РасширеннаяПодсказка - 759 + 761 Label true true @@ -3571,7 +3571,7 @@ НадписьДоступноеОбновлениеРасширеннаяПодсказка - 761 + 763 Label true true @@ -3616,7 +3616,7 @@ НадписьИнформацияОбОбновленииРасширеннаяПодсказка - 762 + 764 Label true true @@ -3660,7 +3660,7 @@ Декорация19РасширеннаяПодсказка - 764 + 766 Label true true @@ -3695,7 +3695,7 @@ НадписьРазмерОбновленияРасширеннаяПодсказка - 765 + 767 Label true true @@ -3731,7 +3731,7 @@ Группа11РасширеннаяПодсказка - 763 + 765 Label true true @@ -3756,7 +3756,7 @@ false Группа10РасширеннаяПодсказка - 760 + 762 Label true true @@ -3786,7 +3786,7 @@ true ГруппаНомерВерсииРасширеннаяПодсказка - 758 + 760 Label true true @@ -3814,7 +3814,7 @@ ИнформацияОДоступномОбновленииРасширеннаяПодсказка - 757 + 759 Label true true @@ -3854,7 +3854,7 @@ Декорация20РасширеннаяПодсказка - 768 + 770 Label true true @@ -3889,7 +3889,7 @@ НадписьТекущаяКонфигурацияРасширеннаяПодсказка - 769 + 771 Label true true @@ -3917,7 +3917,7 @@ Группа12РасширеннаяПодсказка - 767 + 769 Label true true @@ -3948,7 +3948,7 @@ НадписьОписаниеКонфигурацииРасширеннаяПодсказка - 770 + 772 Label true true @@ -3976,7 +3976,7 @@ Группа1РасширеннаяПодсказка - 766 + 768 Label true true @@ -4008,7 +4008,7 @@ ДекорацияКартинка21РасширеннаяПодсказка - 772 + 774 Label true true @@ -4049,7 +4049,7 @@ Декорация22РасширеннаяПодсказка - 774 + 776 Label true true @@ -4084,7 +4084,7 @@ НадписьПорядокОбновленияРасширеннаяПодсказка - 775 + 777 Label true true @@ -4117,7 +4117,7 @@ Группа14РасширеннаяПодсказка - 773 + 775 Label true true @@ -4146,7 +4146,7 @@ ПанельПорядокОбновленияРасширеннаяПодсказка - 771 + 773 Label true true @@ -4174,7 +4174,7 @@ ОтступДесятьРасширеннаяПодсказка - 776 + 778 Label true true @@ -4213,7 +4213,7 @@ НадписьПроверкиНаличияОбновления1РасширеннаяПодсказка - 778 + 780 Label true true @@ -4248,7 +4248,7 @@ ГиперссылкаПроверятьНаличиеОбновленияПриЗапуске1РасширеннаяПодсказка - 779 + 781 Label true true @@ -4282,7 +4282,7 @@ ГруппаПроверкиНаличияОбновления1РасширеннаяПодсказка - 777 + 779 Label true true @@ -4320,7 +4320,7 @@ Декорация23РасширеннаяПодсказка - 782 + 784 Label true true @@ -4348,7 +4348,7 @@ Интернет1РасширеннаяПодсказка - 781 + 783 Label true true @@ -4379,7 +4379,7 @@ Декорация63РасширеннаяПодсказка - 784 + 786 Label true true @@ -4407,7 +4407,7 @@ ИТС1РасширеннаяПодсказка - 783 + 785 Label true true @@ -4432,7 +4432,7 @@ ПанельПереходаНаСледующийШагРасширеннаяПодсказка - 780 + 782 Label true true @@ -4456,7 +4456,7 @@ ДоступноеОбновлениеРасширеннаяПодсказка - 755 + 757 Label true true @@ -4487,7 +4487,7 @@ ЗаголовокОбновленияРасширеннаяПодсказка - 786 + 788 Label true true @@ -4540,7 +4540,7 @@ Картинка26РасширеннаяПодсказка - 791 + 793 Label true true @@ -4579,7 +4579,7 @@ НадписьУВасПоследняяВерсияРасширеннаяПодсказка - 792 + 794 Label true true @@ -4610,7 +4610,7 @@ false ГоризонтальнаяГруппа12РасширеннаяПодсказка - 790 + 792 Label true true @@ -4639,7 +4639,7 @@ false ОбновлениеНеТребуетсяРасширеннаяПодсказка - 789 + 791 Label true true @@ -4668,7 +4668,7 @@ Картинка24РасширеннаяПодсказка - 795 + 797 Label true true @@ -4709,7 +4709,7 @@ НадписьОбновлениеНеОбнаруженоРасширеннаяПодсказка - 797 + 799 Label true true @@ -4749,7 +4749,7 @@ НадписьНеобходимыеДискиИТСРасширеннаяПодсказка - 798 + 800 Label true true @@ -4796,7 +4796,7 @@ НадписьПереченьРелизовНаДискахИТСРасширеннаяПодсказка - 800 + 802 Label true true @@ -4835,7 +4835,7 @@ false ГруппаПодходящихОбновленийИТСРасширеннаяПодсказка - 796 + 798 Label true true @@ -4861,7 +4861,7 @@ false ГоризонтальнаяГруппа16РасширеннаяПодсказка - 794 + 796 Label true true @@ -4890,7 +4890,7 @@ false ОбновлениеНеОбнаруженоРасширеннаяПодсказка - 793 + 795 Label true true @@ -4920,7 +4920,7 @@ Картинка14РасширеннаяПодсказка - 803 + 805 Label true true @@ -4959,7 +4959,7 @@ НадписьВключенаВозможностьИзмененийРасширеннаяПодсказка - 804 + 806 Label true true @@ -4991,7 +4991,7 @@ false ГоризонтальнаяГруппа3РасширеннаяПодсказка - 802 + 804 Label true true @@ -5020,7 +5020,7 @@ false ВключенаВозможностьИзмененийРасширеннаяПодсказка - 801 + 803 Label true true @@ -5050,7 +5050,7 @@ Картинка27РасширеннаяПодсказка - 807 + 809 Label true true @@ -5089,7 +5089,7 @@ НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзломРасширеннаяПодсказка - 808 + 810 Label true true @@ -5120,7 +5120,7 @@ false ГоризонтальнаяГруппа13РасширеннаяПодсказка - 806 + 808 Label true true @@ -5145,7 +5145,7 @@ false ОбновлениеПроизводитсяВГлавномУзлеРасширеннаяПодсказка - 805 + 807 Label true true @@ -5171,7 +5171,7 @@ false ПанельИнформацияОбОбновленииРасширеннаяПодсказка - 788 + 790 Label true true @@ -5201,7 +5201,7 @@ Декорация30РасширеннаяПодсказка - 810 + 812 Label true true @@ -5236,7 +5236,7 @@ НадписьВерсияТекущейКонфигурацииРасширеннаяПодсказка - 811 + 813 Label true true @@ -5271,7 +5271,7 @@ НадписьВерсияДляОбновленияРасширеннаяПодсказка - 812 + 814 Label true true @@ -5304,7 +5304,7 @@ false ГруппаТекущаяВерсияРасширеннаяПодсказка - 809 + 811 Label true true @@ -5335,7 +5335,7 @@ НадписьОписаниеТекущейКонфигурацииРасширеннаяПодсказка - 813 + 815 Label true true @@ -5369,7 +5369,7 @@ false ГруппаРезультатПоискаОбновленияРасширеннаяПодсказка - 787 + 789 Label true true @@ -5406,7 +5406,7 @@ Декорация4РасширеннаяПодсказка - 815 + 817 Label true true @@ -5442,7 +5442,7 @@ false КнопкаПроверитьДискИТСРасширеннаяПодсказка - 816 + 818 Label true true @@ -5466,7 +5466,7 @@ ГруппаПроверкиДискаИТСРасширеннаяПодсказка - 814 + 816 Label true true @@ -5494,7 +5494,7 @@ ОтступСемьРасширеннаяПодсказка - 817 + 819 Label true true @@ -5531,7 +5531,7 @@ НадписьСообщениеДалее1РасширеннаяПодсказка - 818 + 820 Label true true @@ -5563,7 +5563,7 @@ ОбновленияНеОбнаруженоРасширеннаяПодсказка - 785 + 787 Label true true @@ -5594,7 +5594,7 @@ НадписьШапкаДлительнаяОперацияРасширеннаяПодсказка - 820 + 822 Label true true @@ -5644,7 +5644,7 @@ ДекорацияКартинка33РасширеннаяПодсказка - 824 + 826 Label true true @@ -5682,7 +5682,7 @@ Декорация34РасширеннаяПодсказка - 825 + 827 Label true true @@ -5715,7 +5715,7 @@ false Группа18РасширеннаяПодсказка - 823 + 825 Label true true @@ -5743,7 +5743,7 @@ ИнтернетРасширеннаяПодсказка - 822 + 824 Label true true @@ -5770,7 +5770,7 @@ ДекорацияКартинка35РасширеннаяПодсказка - 827 + 829 Label true true @@ -5808,7 +5808,7 @@ Декорация36РасширеннаяПодсказка - 828 + 830 Label true true @@ -5844,7 +5844,7 @@ false ИТСРасширеннаяПодсказка - 826 + 828 Label true true @@ -5870,7 +5870,7 @@ false ПанельОжиданиеДлительнойОперацииРасширеннаяПодсказка - 821 + 823 Label true true @@ -5900,7 +5900,7 @@ НадписьПрогрессРасширеннаяПодсказка - 830 + 832 Label true true @@ -5933,7 +5933,7 @@ ГруппаПрогрессРасширеннаяПодсказка - 829 + 831 Label true true @@ -5963,7 +5963,7 @@ ДлительнаяОперацияРасширеннаяПодсказка - 819 + 821 Label true true @@ -5994,7 +5994,7 @@ НадписьШапкаВыборРежимаОбнФайлРасширеннаяПодсказка - 832 + 834 Label true true @@ -6045,7 +6045,7 @@ НадписьДляОбновленияПотребуетсяПерезагрузкаРасширеннаяПодсказка - 835 + 837 Label true true @@ -6078,7 +6078,7 @@ ВсеГотовоРасширеннаяПодсказка - 834 + 836 Label true true @@ -6105,7 +6105,7 @@ Декорация8РасширеннаяПодсказка - 837 + 839 Label true true @@ -6146,7 +6146,7 @@ Декорация39РасширеннаяПодсказка - 839 + 841 Label true true @@ -6181,7 +6181,7 @@ НадписьПорядокОбновления1РасширеннаяПодсказка - 840 + 842 Label true true @@ -6214,7 +6214,7 @@ ВертикальнаяГруппа1РасширеннаяПодсказка - 838 + 840 Label true true @@ -6243,7 +6243,7 @@ ВсеГотовоПорядокОбновленияРасширеннаяПодсказка - 836 + 838 Label true true @@ -6267,7 +6267,7 @@ ПанельВсеГотовоФайлРасширеннаяПодсказка - 833 + 835 Label true true @@ -6280,6 +6280,40 @@ Auto
                + + НадписьПолученоОбновлениеИзПриложенияФайл + 641 + + <key>ru</key> + <value>Получено обновление из приложения в Интернете. Процесс обновления может занять длительное время. +Не выключайте питание компьютера до завершения процесса установки.</value> + + true + + true + + + НадписьПолученоОбновлениеИзПриложенияФайлРасширеннаяПодсказка + 843 + Label + true + true + + Left + + + + НадписьПолученоОбновлениеИзПриложенияФайлКонтекстноеМеню + 642 + true + + Label + true + true + + Left + + ПереключательОбновленияФайл 612 @@ -6298,7 +6332,7 @@ ПереключательОбновленияФайлРасширеннаяПодсказка - 841 + 844 Label true true @@ -6352,7 +6386,7 @@ Картинка1РасширеннаяПодсказка - 844 + 847 Label true true @@ -6396,7 +6430,7 @@ Надпись43РасширеннаяПодсказка - 847 + 850 Label true true @@ -6431,7 +6465,7 @@ НадписьСписокДействийРасширеннаяПодсказка - 848 + 851 Label true true @@ -6469,7 +6503,7 @@ АктивныеПользователиРасширеннаяПодсказка - 846 + 849 Label true true @@ -6500,7 +6534,7 @@ Надпись42РасширеннаяПодсказка - 850 + 853 Label true true @@ -6535,7 +6569,7 @@ НадписьСписокДействий1РасширеннаяПодсказка - 851 + 854 Label true true @@ -6573,7 +6607,7 @@ АктивныеСоединенияРасширеннаяПодсказка - 849 + 852 Label true true @@ -6604,7 +6638,7 @@ Надпись45РасширеннаяПодсказка - 853 + 856 Label true true @@ -6640,7 +6674,7 @@ НадписьСписокДействий3РасширеннаяПодсказка - 854 + 857 Label true true @@ -6679,7 +6713,7 @@ СоединениеКонфигуратораРасширеннаяПодсказка - 852 + 855 Label true true @@ -6706,7 +6740,7 @@ false ПанельАктивныеПользователиРасширеннаяПодсказка - 845 + 848 Label true true @@ -6730,7 +6764,7 @@ ГруппаСоединенийРасширеннаяПодсказка - 843 + 846 Label true true @@ -6763,7 +6797,7 @@ НадписьПроцессОбновленияМожетЗанятьМногоВремениРасширеннаяПодсказка - 855 + 858 Label true true @@ -6795,7 +6829,7 @@ НадписьОтступ3РасширеннаяПодсказка - 856 + 859 Label true true @@ -6834,7 +6868,7 @@ Надпись46РасширеннаяПодсказка - 858 + 861 Label true true @@ -6869,7 +6903,7 @@ НадписьРезервнаяКопияФайлРасширеннаяПодсказка - 859 + 862 Label true true @@ -6903,7 +6937,7 @@ ГруппаРезервнаяКопияРасширеннаяПодсказка - 857 + 860 Label true true @@ -6928,7 +6962,7 @@ Далее 334 - Декорация41 + НадписьДалееВыборРежимаОбновленияФайл 207 <key>ru</key> @@ -6940,8 +6974,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация41РасширеннаяПодсказка</name> - <id>862</id> + <name>НадписьДалееВыборРежимаОбновленияФайлРасширеннаяПодсказка</name> + <id>865</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6950,7 +6984,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Декорация41КонтекстноеМеню</name> + <name>НадписьДалееВыборРежимаОбновленияФайлКонтекстноеМеню</name> <id>208</id> <autoFill>true</autoFill> </contextMenu> @@ -6973,7 +7007,7 @@ ДалееРасширеннаяПодсказка - 861 + 864 Label true true @@ -7004,7 +7038,7 @@ Декорация56РасширеннаяПодсказка - 864 + 867 Label true true @@ -7036,7 +7070,7 @@ ГотовоРасширеннаяПодсказка - 863 + 866 Label true true @@ -7067,7 +7101,7 @@ Декорация57РасширеннаяПодсказка - 866 + 869 Label true true @@ -7095,7 +7129,7 @@ АктивныеСоединения2РасширеннаяПодсказка - 865 + 868 Label true true @@ -7126,7 +7160,7 @@ Декорация58РасширеннаяПодсказка - 868 + 871 Label true true @@ -7154,7 +7188,7 @@ СоединениеКонфигуратора2РасширеннаяПодсказка - 867 + 870 Label true true @@ -7179,7 +7213,7 @@ ПанельПереходаНаСледующийШагРежимаОбновленияФайлРасширеннаяПодсказка - 860 + 863 Label true true @@ -7203,7 +7237,7 @@ ВыборРежимаОбновленияФайлРасширеннаяПодсказка - 831 + 833 Label true true @@ -7234,7 +7268,7 @@ НадписьШапкаВыборРежимаОбнСерверРасширеннаяПодсказка - 870 + 873 Label true true @@ -7272,7 +7306,7 @@ ВсеГотово1 345 - Декорация43 + НадписьВыберитеСпособОбновленияСервер 212 <key>ru</key> @@ -7284,8 +7318,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация43РасширеннаяПодсказка</name> - <id>873</id> + <name>НадписьВыберитеСпособОбновленияСерверРасширеннаяПодсказка</name> + <id>876</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7294,7 +7328,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Декорация43КонтекстноеМеню</name> + <name>НадписьВыберитеСпособОбновленияСерверКонтекстноеМеню</name> <id>213</id> <autoFill>true</autoFill> </contextMenu> @@ -7315,7 +7349,7 @@ </userVisible> <extendedTooltip> <name>ВсеГотово1РасширеннаяПодсказка</name> - <id>872</id> + <id>875</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7342,7 +7376,7 @@ </userVisible> <extendedTooltip> <name>Декорация1РасширеннаяПодсказка</name> - <id>875</id> + <id>878</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7370,7 +7404,7 @@ <name>ВертикальнаяГруппа7</name> <id>347</id> <items xsi:type="form:Decoration"> - <name>Декорация59</name> + <name>НадписьПорядокОбновленияСервер</name> <id>348</id> <title> <key>ru</key> @@ -7382,8 +7416,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация59РасширеннаяПодсказка</name> - <id>877</id> + <name>НадписьПорядокОбновленияСерверРасширеннаяПодсказка</name> + <id>880</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7392,7 +7426,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Декорация59КонтекстноеМеню</name> + <name>НадписьПорядокОбновленияСерверКонтекстноеМеню</name> <id>349</id> <autoFill>true</autoFill> </contextMenu> @@ -7418,7 +7452,7 @@ </userVisible> <extendedTooltip> <name>НадписьПорядокОбновления3РасширеннаяПодсказка</name> - <id>878</id> + <id>881</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7451,7 +7485,7 @@ </userVisible> <extendedTooltip> <name>ВертикальнаяГруппа7РасширеннаяПодсказка</name> - <id>876</id> + <id>879</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7476,7 +7510,7 @@ </userVisible> <extendedTooltip> <name>ВсеГотовоПорядокОбновления1РасширеннаяПодсказка</name> - <id>874</id> + <id>877</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7500,7 +7534,7 @@ ПанельВсеГотовоСерверРасширеннаяПодсказка - 871 + 874 Label true true @@ -7534,7 +7568,7 @@ ПереключательОбновленияСерверРасширеннаяПодсказка - 880 + 883 Label true true @@ -7595,7 +7629,7 @@ ОтступЧетыреРасширеннаяПодсказка - 879 + 882 Label true true @@ -7637,7 +7671,7 @@ ПолеДатаВремяОбновленияРасширеннаяПодсказка - 884 + 887 Label true true @@ -7680,7 +7714,7 @@ Надпись51РасширеннаяПодсказка - 886 + 889 Label true true @@ -7729,7 +7763,7 @@ ВыслатьОтчетНаПочтуРасширеннаяПодсказка - 888 + 891 Label true true @@ -7763,7 +7797,7 @@ None АдресЭлектроннойПочтыРасширеннаяПодсказка - 890 + 893 Label true true @@ -7805,7 +7839,7 @@ false ПанельПочтаРасширеннаяПодсказка - 887 + 890 Label true true @@ -7833,7 +7867,7 @@ СтраницаЗапланированнойПерезагрузкиРасширеннаяПодсказка - 883 + 886 Label true true @@ -7851,7 +7885,7 @@ СтраницаПерезагрузкиСейчас1 217 - Надпись47 + НадписьБудетУстановленоОбновлениеСервер 218 <key>ru</key> @@ -7863,8 +7897,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Надпись47РасширеннаяПодсказка</name> - <id>893</id> + <name>НадписьБудетУстановленоОбновлениеСерверРасширеннаяПодсказка</name> + <id>896</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7873,7 +7907,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Надпись47КонтекстноеМеню</name> + <name>НадписьБудетУстановленоОбновлениеСерверКонтекстноеМеню</name> <id>219</id> <autoFill>true</autoFill> </contextMenu> @@ -7901,7 +7935,7 @@ </userVisible> <extendedTooltip> <name>Картинка2РасширеннаяПодсказка</name> - <id>895</id> + <id>898</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7945,7 +7979,7 @@ </userVisible> <extendedTooltip> <name>Надпись48РасширеннаяПодсказка</name> - <id>898</id> + <id>901</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7981,7 +8015,7 @@ </userVisible> <extendedTooltip> <name>НадписьСписокДействий2РасширеннаяПодсказка</name> - <id>899</id> + <id>902</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8019,7 +8053,7 @@ АктивныеПользователи1РасширеннаяПодсказка - 897 + 900 Label true true @@ -8051,7 +8085,7 @@ Надпись49РасширеннаяПодсказка - 901 + 904 Label true true @@ -8087,7 +8121,7 @@ НадписьСписокДействий4РасширеннаяПодсказка - 902 + 905 Label true true @@ -8126,7 +8160,7 @@ АктивныеСоединения1РасширеннаяПодсказка - 900 + 903 Label true true @@ -8147,7 +8181,7 @@ ПанельАктивныеПользователи1РасширеннаяПодсказка - 896 + 899 Label true true @@ -8168,7 +8202,7 @@ false ГруппаСоединений1РасширеннаяПодсказка - 894 + 897 Label true true @@ -8196,7 +8230,7 @@ СтраницаПерезагрузкиСейчас1РасширеннаяПодсказка - 892 + 895 Label true true @@ -8221,7 +8255,7 @@ СтраницыИнформацииПерезагрузки1РасширеннаяПодсказка - 882 + 885 Label true true @@ -8244,7 +8278,7 @@ НадписьОтступ2РасширеннаяПодсказка - 903 + 906 Label true true @@ -8279,7 +8313,7 @@ Декорация13РасширеннаяПодсказка - 905 + 908 Label true true @@ -8317,7 +8351,7 @@ НадписьРезервнаяКопияСерверРасширеннаяПодсказка - 906 + 909 Label true true @@ -8351,7 +8385,7 @@ ГруппаРезервнаяКопияСерверРасширеннаяПодсказка - 904 + 907 Label true true @@ -8376,7 +8410,7 @@ Сейчас 353 - Декорация44 + НадписьДалееВыборРежимаОбновленияСервер 254 <key>ru</key> @@ -8388,8 +8422,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Декорация44РасширеннаяПодсказка</name> - <id>909</id> + <name>НадписьДалееВыборРежимаОбновленияСерверРасширеннаяПодсказка</name> + <id>912</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8398,7 +8432,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Декорация44КонтекстноеМеню</name> + <name>НадписьДалееВыборРежимаОбновленияСерверКонтекстноеМеню</name> <id>255</id> <autoFill>true</autoFill> </contextMenu> @@ -8421,7 +8455,7 @@ СейчасРасширеннаяПодсказка - 908 + 911 Label true true @@ -8452,7 +8486,7 @@ Декорация60РасширеннаяПодсказка - 911 + 914 Label true true @@ -8484,7 +8518,7 @@ ОтложитьРасширеннаяПодсказка - 910 + 913 Label true true @@ -8515,7 +8549,7 @@ Декорация61РасширеннаяПодсказка - 913 + 916 Label true true @@ -8547,7 +8581,7 @@ ОтменаРасширеннаяПодсказка - 912 + 915 Label true true @@ -8572,7 +8606,7 @@ ПанельПереходаНаСледующийШагРежимаОбновленияСерверРасширеннаяПодсказка - 907 + 910 Label true true @@ -8596,7 +8630,7 @@ ВыборРежимаОбновленияСерверРасширеннаяПодсказка - 869 + 872 Label true true @@ -8627,7 +8661,7 @@ НадписьШапкаУспешноеОбновлениеРасширеннаяПодсказка - 915 + 918 Label true true @@ -8672,7 +8706,7 @@ Декорация46РасширеннаяПодсказка - 916 + 919 Label true true @@ -8707,7 +8741,7 @@ НадписьИнформацияОбОбновленииПриЗавершенииРасширеннаяПодсказка - 917 + 920 Label true true @@ -8747,7 +8781,7 @@ Картинка3РасширеннаяПодсказка - 919 + 922 Label true true @@ -8788,7 +8822,7 @@ Декорация47РасширеннаяПодсказка - 921 + 924 Label true true @@ -8823,7 +8857,7 @@ НадписьПорядокОбновления2РасширеннаяПодсказка - 922 + 925 Label true true @@ -8856,7 +8890,7 @@ Группа30РасширеннаяПодсказка - 920 + 923 Label true true @@ -8885,7 +8919,7 @@ ПанельПорядокОбновленияПриЗавершенииРасширеннаяПодсказка - 918 + 921 Label true true @@ -8913,7 +8947,7 @@ Отступ45РасширеннаяПодсказка - 923 + 926 Label true true @@ -8949,7 +8983,7 @@ НадписьСообщениеДалее2РасширеннаяПодсказка - 924 + 927 Label true true @@ -8981,7 +9015,7 @@ УспешноеОбновлениеРасширеннаяПодсказка - 914 + 917 Label true true @@ -9012,7 +9046,7 @@ НадписьШапкаНеудачноеОбновлениеРасширеннаяПодсказка - 926 + 929 Label true true @@ -9057,7 +9091,7 @@ Надпись54РасширеннаяПодсказка - 927 + 930 Label true true @@ -9094,7 +9128,7 @@ НадписьОткрытьЖурналРегистрацииРасширеннаяПодсказка - 928 + 931 Label true true @@ -9132,7 +9166,7 @@ ОтступНеуспешноеОбновлениеРасширеннаяПодсказка - 929 + 932 Label true true @@ -9169,7 +9203,7 @@ Надпись56РасширеннаяПодсказка - 930 + 933 Label true true @@ -9201,7 +9235,7 @@ НеуспешноеОбновлениеРасширеннаяПодсказка - 925 + 928 Label true true @@ -9232,7 +9266,7 @@ НадписьШапкаПараметрыАвторизацииРасширеннаяПодсказка - 932 + 935 Label true true @@ -9279,7 +9313,7 @@ Картинка6РасширеннаяПодсказка - 935 + 938 Label true true @@ -9318,7 +9352,7 @@ Декорация53РасширеннаяПодсказка - 936 + 939 Label true true @@ -9356,7 +9390,7 @@ ПочтиВсеГотовоРасширеннаяПодсказка - 934 + 937 Label true true @@ -9385,7 +9419,7 @@ Картинка7РасширеннаяПодсказка - 939 + 942 Label true true @@ -9427,7 +9461,7 @@ None ОбнаруженнаяОшибкаПодключенияРасширеннаяПодсказка - 940 + 943 Label true true @@ -9470,7 +9504,7 @@ false ГоризонтальнаяГруппа10РасширеннаяПодсказка - 938 + 941 Label true true @@ -9500,7 +9534,7 @@ Картинка9РасширеннаяПодсказка - 943 + 946 Label true true @@ -9537,7 +9571,7 @@ НадписьИнфоЖР2РасширеннаяПодсказка - 945 + 948 Label true true @@ -9573,7 +9607,7 @@ НадписьОткрытьЖурналРегистрации3РасширеннаяПодсказка - 946 + 949 Label true true @@ -9610,7 +9644,7 @@ false ВертикальнаяГруппаНадписиЖР1РасширеннаяПодсказка - 944 + 947 Label true true @@ -9635,7 +9669,7 @@ false ПанельЖурналРегистрации2РасширеннаяПодсказка - 942 + 945 Label true true @@ -9664,7 +9698,7 @@ true ОбнаруженаОшибкаПодключенияРасширеннаяПодсказка - 937 + 940 Label true true @@ -9690,7 +9724,7 @@ false СтраницыНадписиПроверкиПодключенияРасширеннаяПодсказка - 933 + 936 Label true true @@ -9720,7 +9754,7 @@ НадписьОбновитьВерсиюКомпоненты2РасширеннаяПодсказка - 948 + 951 Label true true @@ -9764,7 +9798,7 @@ ИмяАдминистратораИБРасширеннаяПодсказка - 951 + 954 Label true true @@ -9810,7 +9844,7 @@ ПарольАдминистратораИБСерверРасширеннаяПодсказка - 953 + 956 Label true true @@ -9847,7 +9881,7 @@ Группа36РасширеннаяПодсказка - 950 + 953 Label true true @@ -9882,7 +9916,7 @@ Декорация54РасширеннаяПодсказка - 956 + 959 Label true true @@ -9917,7 +9951,7 @@ true ПанельПредупреждениеОWindowsАвторизацииРасширеннаяПодсказка - 955 + 958 Label true true @@ -9942,7 +9976,7 @@ Группа7РасширеннаяПодсказка - 949 + 952 Label true true @@ -9970,7 +10004,7 @@ ПанельАвторизацияИБРасширеннаяПодсказка - 947 + 950 Label true true @@ -10018,7 +10052,7 @@ КластерТребуетАутентификацииРасширеннаяПодсказка - 959 + 962 Label true true @@ -10058,7 +10092,7 @@ ИмяАдминистратораКластераРасширеннаяПодсказка - 962 + 965 Label true true @@ -10104,7 +10138,7 @@ ПарольАдминистратораКластераРасширеннаяПодсказка - 964 + 967 Label true true @@ -10145,7 +10179,7 @@ ПанельДоступККластеруРасширеннаяПодсказка - 961 + 964 Label true true @@ -10175,7 +10209,7 @@ ПанельАдминистраторКластераСерверовРасширеннаяПодсказка - 958 + 961 Label true true @@ -10219,7 +10253,7 @@ НестандартныеПортыСервераРасширеннаяПодсказка - 967 + 970 Label true true @@ -10259,7 +10293,7 @@ ПортКластераСерверовРасширеннаяПодсказка - 970 + 973 Label true true @@ -10304,7 +10338,7 @@ ПортАгентаСервераРасширеннаяПодсказка - 972 + 975 Label true true @@ -10343,7 +10377,7 @@ ПанельНестандартныеПортыСервераРасширеннаяПодсказка - 969 + 972 Label true true @@ -10374,7 +10408,7 @@ false ПанельПортыСервераРасширеннаяПодсказка - 966 + 969 Label true true @@ -10404,7 +10438,7 @@ ПанельАвторизацияКластераСерверовРасширеннаяПодсказка - 957 + 960 Label true true @@ -10438,7 +10472,7 @@ НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 975 + 978 Label true true @@ -10471,7 +10505,7 @@ false КнопкаОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 976 + 979 Label true true @@ -10495,7 +10529,7 @@ ГруппаComcntrРасширеннаяПодсказка - 974 + 977 Label true true @@ -10522,7 +10556,7 @@ НадписьОтступ1РасширеннаяПодсказка - 977 + 980 Label true true @@ -10558,7 +10592,7 @@ НадписьСообщениеДалее3РасширеннаяПодсказка - 978 + 981 Label true true @@ -10590,7 +10624,7 @@ ПараметрыАвторизацииРасширеннаяПодсказка - 931 + 934 Label true true @@ -10621,7 +10655,7 @@ НадписьШапкаДополнительныеНастройкиРасширеннаяПодсказка - 980 + 983 Label true true @@ -10665,7 +10699,7 @@ Картинка12РасширеннаяПодсказка - 982 + 985 Label true true @@ -10707,7 +10741,7 @@ None ОбнаруженнаяОшибкаПодключения1РасширеннаяПодсказка - 983 + 986 Label true true @@ -10750,7 +10784,7 @@ false ГоризонтальнаяГруппаОшибкаПодключенияРасширеннаяПодсказка - 981 + 984 Label true true @@ -10780,7 +10814,7 @@ Картинка10РасширеннаяПодсказка - 986 + 989 Label true true @@ -10817,7 +10851,7 @@ НадписьИнфоЖР3РасширеннаяПодсказка - 988 + 991 Label true true @@ -10853,7 +10887,7 @@ НадписьОткрытьЖурналРегистрации4РасширеннаяПодсказка - 989 + 992 Label true true @@ -10890,7 +10924,7 @@ false ВертикальнаяГруппаНадписиЖР3РасширеннаяПодсказка - 987 + 990 Label true true @@ -10915,7 +10949,7 @@ false ПанельЖурналРегистрации3РасширеннаяПодсказка - 985 + 988 Label true true @@ -10949,7 +10983,7 @@ НадписьОбновитьВерсиюКомпоненты3РасширеннаяПодсказка - 991 + 994 Label true true @@ -10993,7 +11027,7 @@ ИмяАдминистратораИБФайлРасширеннаяПодсказка - 994 + 997 Label true true @@ -11039,7 +11073,7 @@ ПарольАдминистратораИБФайлРасширеннаяПодсказка - 996 + 999 Label true true @@ -11076,7 +11110,7 @@ Группа38РасширеннаяПодсказка - 993 + 996 Label true true @@ -11111,7 +11145,7 @@ Декорация55РасширеннаяПодсказка - 999 + 1002 Label true true @@ -11142,7 +11176,7 @@ true ПредупреждениеОWindowsАвторизацииФайлРасширеннаяПодсказка - 998 + 1001 Label true true @@ -11167,7 +11201,7 @@ Группа37РасширеннаяПодсказка - 992 + 995 Label true true @@ -11195,7 +11229,7 @@ ПанельАвторизацияИБ1РасширеннаяПодсказка - 990 + 993 Label true true @@ -11232,7 +11266,7 @@ НадписьОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 1001 + 1004 Label true true @@ -11265,7 +11299,7 @@ false КнопкаОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 1002 + 1005 Label true true @@ -11289,7 +11323,7 @@ ГруппаComcntrФайловыйРежимРасширеннаяПодсказка - 1000 + 1003 Label true true @@ -11317,7 +11351,7 @@ НадписьОтступ4РасширеннаяПодсказка - 1003 + 1006 Label true true @@ -11353,7 +11387,7 @@ НадписьСообщениеДалее5РасширеннаяПодсказка - 1004 + 1007 Label true true @@ -11385,7 +11419,7 @@ ДополнительныеНастройкиРасширеннаяПодсказка - 979 + 982 Label true true @@ -11410,7 +11444,7 @@ СтраницыПомощникаРасширеннаяПодсказка - 644 + 646 Label true true @@ -11439,7 +11473,7 @@ false КнопкаНазадРасширеннаяПодсказка - 641 + 643 Label true true @@ -11466,7 +11500,7 @@ false КнопкаДалееРасширеннаяПодсказка - 642 + 644 Label true true @@ -11493,7 +11527,7 @@ false КнопкаЗакрытьРасширеннаяПодсказка - 643 + 645 Label true true @@ -11511,6 +11545,14 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + + + NotificationProcessing + ОбработкаОповещения + OnOpen ПриОткрытии @@ -12012,6 +12054,13 @@ true + + ПолученоОбновлениеКонфигурации + + Boolean + + true + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl index 85768055b..649125792 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl @@ -1,13 +1,17 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + ЗаписьЖурналаРегистрации(ОбновлениеКонфигурации.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, НСтр("ru = 'Открытие помощника обновления конфигурации...'")); ОбновлениеКонфигурации.ПрерватьВыполнениеЕслиАвторизованВнешнийПользователь(); @@ -29,6 +33,17 @@ Элементы.ПереключательОбновленияСервер.Видимость = Ложь; КонецЕсли; + Если Параметры.ПолученоОбновлениеКонфигурации Тогда + Элементы.ПереключательОбновленияФайл.Видимость = Ложь; + Элементы.НадписьПолученоОбновлениеИзПриложенияФайл.Видимость = Истина; + Элементы.НадписьДалееВыборРежимаОбновленияФайл.Заголовок = Нстр("ru = 'Нажмите ""Далее"" для установки обновления.'"); + Элементы.НадписьДалееВыборРежимаОбновленияСервер.Заголовок = Нстр("ru = 'Нажмите ""Далее"" для установки обновления.'"); + Элементы.НадписьБудетУстановленоОбновлениеСервер.Заголовок = Нстр("ru = 'Получено обновление из приложения в Интернете. Процесс обновления может занять длительное время. + |Не выключайте питание компьютера до завершения процесса установки.'"); + Элементы.НадписьВыберитеСпособОбновленияСервер.Видимость = Ложь; + Элементы.НадписьПорядокОбновленияСервер.Заголовок = Нстр("ru = 'Для продолжения необходимо ознакомиться с порядком обновления.'"); + КонецЕсли; + ИнформацияОНаличииСоединений = ПолучитьИнформациюОНаличииСоединений(Неопределено); Параметры.ВыполнитьОбновление = ?(ИнформацияОНаличииСоединений.НаличиеАктивныхСоединений, Ложь, Параметры.ВыполнитьОбновление); @@ -41,13 +56,26 @@ Процедура ПриОткрытии(Отказ) #Если ВебКлиент Тогда Отказ = Истина; - ТекстСообщения = НСтр("ru = 'Обновление конфигурации информационной базы недоступно в веб-клиенте.'"); + ТекстСообщения = НСтр("ru = 'Обновление программы недоступно в веб-клиенте.'"); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(),, ТекстСообщения,,Истина); Предупреждение(ТекстСообщения); Возврат; #КонецЕсли + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Обновление программы недоступно в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), + , + ТекстСообщения, + , + Истина); + Возврат; + КонецЕсли; + ВосстановитьНастройкиОбновленияКонфигурации(); Если Параметры.ВыполнитьОбновление Тогда @@ -80,8 +108,8 @@ Если Объект.КодЗадачиПланировщика <> 0 Тогда Если ПолучитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) = Неопределено Тогда Объект.КодЗадачиПланировщика = 0; - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; // Если форма открывается при запуске программы после обновления Если Объект.РезультатОбновления <> Неопределено Тогда @@ -137,6 +165,45 @@ Элементы.СтраницыПомощника.ТекущаяСтраница = Страницы[ИмяСтраницы]; КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение); + КонецЕсли; + + ПередОткрытиемСтраницы(); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей") Тогда + + ПередОткрытиемСтраницы(); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение); + КонецЕсли; + + ПередОткрытиемСтраницы(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ЛегальностьПолученияОбновлений" И Не Параметр + И ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + + ОтработатьНажатиеКнопкиНазад(); + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПриЗакрытии() @@ -284,15 +351,13 @@ &НаКлиенте Процедура ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеНажатие(Элемент) - ПараметрыФормы = Новый Структура("ПроверятьНаличиеОбновленияПриЗапуске, РасписаниеПроверкиНаличияОбновления", - Объект.ПроверятьНаличиеОбновленияПриЗапуске, Объект.РасписаниеПроверкиНаличияОбновления); - Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания", ПараметрыФормы, ЭтаФорма); - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Объект, Результат); - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПроверятьНаличиеОбновленияПриЗапуске", Объект.ПроверятьНаличиеОбновленияПриЗапуске); + ПараметрыФормы.Вставить("РасписаниеПроверкиНаличияОбновления", Объект.РасписаниеПроверкиНаличияОбновления); + + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания", ПараметрыФормы, ЭтаФорма); - ПередОткрытиемСтраницы(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -316,35 +381,32 @@ &НаКлиенте Процедура НадписьСписокДействийНажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НадписьСписокДействий1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НадписьСписокДействий3Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОповещатьОЗакрытии", Истина); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НадписьРезервнаяКопияНажатие(Элемент) - ПараметрыФормы = Новый Структура("СоздаватьРезервнуюКопию, ИмяКаталогаРезервнойКопииИБ, ВосстанавливатьИнформационнуюБазу", - Объект.СоздаватьРезервнуюКопию, - Объект.ИмяКаталогаРезервнойКопииИБ, - Объект.ВосстанавливатьИнформационнуюБазу); - Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтаФорма); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Объект, Результат); - КонецЕсли; - - ПередОткрытиемСтраницы(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СоздаватьРезервнуюКопию", Объект.СоздаватьРезервнуюКопию); + ПараметрыФормы.Вставить("ИмяКаталогаРезервнойКопииИБ", Объект.ИмяКаталогаРезервнойКопииИБ); + ПараметрыФормы.Вставить("ВосстанавливатьИнформационнуюБазу", Объект.ВосстанавливатьИнформационнуюБазу); + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -396,63 +458,8 @@ &НаКлиенте Процедура КнопкаНазадНажатие(Команда) - Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; - ТекущаяСтраница = Элементы.СтраницыПомощника.ТекущаяСтраница; - НоваяТекущаяСтраница = ТекущаяСтраница; - Если ТекущаяСтраница = Страницы.ДоброПожаловать Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКИнтернет Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКСайту Тогда - НоваяТекущаяСтраница = Страницы.ДоступноеОбновление; - ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС - НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС - НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Страницы.ДлительнаяОперация Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ - ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер ИЛИ - ТекущаяСтраница = Страницы.ПараметрыАвторизации ИЛИ - ТекущаяСтраница = Страницы.ДополнительныеНастройки Тогда - Если Объект.ИсточникОбновления = 0 Тогда // Интернет - НоваяТекущаяСтраница = Страницы.ДоступноеОбновление; - ИначеЕсли Объект.ИсточникОбновления = 1 Тогда // диск ИТС - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - Иначе // файл - НоваяТекущаяСтраница = Страницы.ФайлОбновления; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Страницы.УспешноеОбновление Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС - НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС - НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; - КонецЕсли; - Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда - НоваяТекущаяСтраница = Страницы[ПерейтиКВыборуРежимаОбновления()]; - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Страницы.ФайлОбновления Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - ИначеЕсли ТекущаяСтраница = Страницы.МестоположениеДискаИТС Тогда - НоваяТекущаяСтраница = Страницы.ДоброПожаловать; - КонецЕсли; - - ПередОткрытиемСтраницы(НоваяТекущаяСтраница); - - Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяТекущаяСтраница; + ОтработатьНажатиеКнопкиНазад(); КонецПроцедуры @@ -484,7 +491,7 @@ &НаКлиенте Процедура НастроитьПараметрыПроксиСервера(Команда) - ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера"); + ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", , ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -561,7 +568,7 @@ ИменаФайловОбновления = ""; Для Каждого Обновление Из Объект.ДоступныеОбновления Цикл - ИменаФайловОбновления = ИменаФайловОбновления + Подг(Обновление.ПутьКЛокальномуФайлуОбновления) + ","; + ИменаФайловОбновления = ИменаФайловОбновления + Форматировать(Обновление.ПутьКЛокальномуФайлуОбновления) + ","; КонецЦикла; Если СтрДлина(ИменаФайловОбновления) > 0 Тогда ИменаФайловОбновления = Лев(ИменаФайловОбновления, СтрДлина(ИменаФайловОбновления) - 1); @@ -587,25 +594,25 @@ СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКонфигуратора]" , Подг(ИмяИсполняемогоФайлаКонфигуратора)); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКлиента]" , Подг(ИмяИсполняемогоФайлаКлиента)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Подг(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Подг(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКонфигуратора]" , Форматировать(ИмяИсполняемогоФайлаКонфигуратора)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКлиента]" , Форматировать(ИмяИсполняемогоФайлаКлиента)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Форматировать(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Форматировать(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + "1Cv8.1CD")); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , Подг(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , Подг(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Подг(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , Форматировать(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , Форматировать(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Форматировать(СтруктураПараметров.СобытиеЖурналаРегистрации)); Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", - Подг(?(Объект.РежимОбновления = 2 И Объект.ВыслатьОтчетНаПочту, Объект.АдресЭлектроннойПочты, ""))); - Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Подг(ИмяПользователя())); + Форматировать(?(Объект.РежимОбновления = 2 И Объект.ВыслатьОтчетНаПочту, Объект.АдресЭлектроннойПочты, ""))); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Форматировать(ИмяПользователя())); Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" , ?(ПризнакФайловогоРежима И Объект.СоздаватьРезервнуюКопию <> 0, "true", "false")); Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" , - Подг(?(Объект.СоздаватьРезервнуюКопию = 2, ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ИмяКаталогаРезервнойКопииИБ), ""))); + Форматировать(?(Объект.СоздаватьРезервнуюКопию = 2, ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.ИмяКаталогаРезервнойКопииИБ), ""))); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , ?(Объект.ВосстанавливатьИнформационнуюБазу, "true", "false")); БлокироватьСоединенияИБ = НЕ СтруктураПараметров.ИнформационнаяБазаФайловая ИЛИ РежимИмитацииКлиентСервернойИБ(); Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(БлокироватьСоединенияИБ, "true", "false")); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Подг(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Форматировать(СтруктураПараметров.ИмяCOMСоединителя)); Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); Результат = СтрЗаменить(Результат, "[ЗапускСеансаПослеОбновления]" , ?(Параметры.ЗавершениеРаботыСистемы, "false", "true")); @@ -614,7 +621,7 @@ КонецФункции &НаСервереБезКонтекста -Функция Подг(Знач Текст) +Функция Форматировать(Знач Текст) Текст = СтрЗаменить(Текст, "\", "\\"); Текст = СтрЗаменить(Текст, """", "\"""); @@ -835,8 +842,8 @@ Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.Имя = "v8u:updateList" Тогда - Прервать; - КонецЕсли; + Прервать; + КонецЕсли; Поставщик = ""; Версия = ""; ПутьКФайлуОбновления = ""; @@ -848,8 +855,8 @@ МассивВерсийДляОбновления = Новый Массив; Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.Имя = "v8u:update" Тогда - Прервать; - КонецЕсли; + Прервать; + КонецЕсли; Если ЧтениеXML.Имя = "v8u:vendor" Тогда ЧтениеXML.Прочитать(); Поставщик = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(СокрЛП(ЧтениеXML.Значение)); @@ -885,7 +892,7 @@ НоваяСтрока.НомерДискаИТС = НомерДискаИТС; НоваяСтрока.РазмерФайлаОбновления = РазмерФайлаОбновления; - КонецЦикла; + КонецЦикла; КонецЦикла; ЧтениеXML.Закрыть(); @@ -951,27 +958,25 @@ &НаСервереБезКонтекста Функция РежимОтладкиСкрипта() - Результат = Ложь; + Результат = Ложь; СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда СтруктураНастройки.Свойство("РежимОтладкиСкрипта", Результат); - КонецЕсли; + КонецЕсли; Возврат Результат = Истина; КонецФункции &НаСервереБезКонтекста Функция РежимИмитацииКлиентСервернойИБ() - Результат = Ложь; + Результат = Ложь; СтруктураНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбновлениеКонфигурации", - "НастройкиОбновленияКонфигурации" - ); + "НастройкиОбновленияКонфигурации"); Если СтруктураНастройки <> Неопределено Тогда СтруктураНастройки.Свойство("РежимИмитацииКлиентСервернойИБ", Результат); - КонецЕсли; + КонецЕсли; Возврат Результат = Истина; КонецФункции @@ -1062,12 +1067,12 @@ Если НастройкиОбновленияКонфигурации = Неопределено Тогда НастройкиОбновленияКонфигурации = ОбновлениеКонфигурацииВызовСервера.ПолучитьСтруктуруНастроекПомощника(); ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновленияКонфигурации); - КонецЕсли; + КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, НастройкиОбновленияКонфигурации); Объект.РасписаниеПроверкиНаличияОбновления = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Объект.РасписаниеПроверкиНаличияОбновления); ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); Если ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая И Объект.РежимОбновления > 1 Тогда - Объект.РежимОбновления = 0; + Объект.РежимОбновления = 0; КонецЕсли; Если КонфигурацияИзменена Тогда @@ -1183,7 +1188,7 @@ ИначеЕсли НоваяТекущаяСтраница = Страницы.ДоступноеОбновление Тогда - СтруктураДоступногоОбновления = ПолучитьСтруктуруДостуступногоОбновления(Истина); + СтруктураДоступногоОбновления = ПолучитьСтруктуруДоступногоОбновления(Истина); Если СтруктураДоступногоОбновления <> Неопределено Тогда Элементы.НадписьИнформацияОбОбновлении.Видимость = НЕ ПустаяСтрока(ИмяФайлаИнформацияОбОбновлении); Элементы.НадписьОписаниеКонфигурации.Заголовок = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().СинонимКонфигурации; @@ -1199,7 +1204,7 @@ ИначеЕсли НоваяТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда - СтруктураДоступногоОбновления = ПолучитьСтруктуруДостуступногоОбновления(); + СтруктураДоступногоОбновления = ПолучитьСтруктуруДоступногоОбновления(); ФункцияКнопкиДалее = Ложь; ДоступностьКнопкиДалее = Ложь; Элементы.НадписьОписаниеТекущейКонфигурации.Заголовок = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().СинонимКонфигурации; @@ -1245,7 +1250,7 @@ ИначеЕсли НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл Тогда - ФункцияКнопкиДалее = (Объект.РежимОбновления = 0); // Если НЕ обновляем сейчас, то "готово". + ФункцияКнопкиДалее = (Объект.РежимОбновления = 0);// Если НЕ обновляем сейчас, то "готово". СтраницыПанельВсеГотово = Элементы.ПанельВсеГотовоФайл.ПодчиненныеЭлементы; Элементы.ПанельВсеГотовоФайл.ТекущаяСтраница = ?(ПустаяСтрока(ИмяФайлаПорядокОбновления), @@ -1285,11 +1290,17 @@ ДатаВремяОбновленияУстановлена = Истина; КонецЕсли; - ФункцияКнопкиДалее = (Объект.РежимОбновления = 0); // Если НЕ обновляем сейчас, то "готово". + ФункцияКнопкиДалее = (Объект.РежимОбновления = 0);// Если НЕ обновляем сейчас, то "готово". СтраницыПанельВсеГотово = Элементы.ПанельВсеГотовоСервер.ПодчиненныеЭлементы; Элементы.ПанельВсеГотовоСервер.ТекущаяСтраница = ?(ПустаяСтрока(ИмяФайлаПорядокОбновления), СтраницыПанельВсеГотово.ВсеГотово1, СтраницыПанельВсеГотово.ВсеГотовоПорядокОбновления1); + + Если ПустаяСтрока(ИмяФайлаПорядокОбновления) И Элементы.НадписьВыберитеСпособОбновленияСервер.Видимость = Ложь Тогда + + Элементы.ПанельВсеГотовоСервер.Видимость = Ложь; + + КонецЕсли; СтраницыПанелиИнформацииПерезагрузки1 = Элементы.СтраницыИнформацииПерезагрузки1.ПодчиненныеЭлементы; Элементы.СтраницыИнформацииПерезагрузки1.ТекущаяСтраница = ?(Объект.РежимОбновления = 0, @@ -1325,10 +1336,12 @@ Элементы.ПанельПорядокОбновленияПриЗавершении.Видимость = НЕ ПустаяСтрока(ИмяФайлаПорядокОбновления); ФункцияКнопкиДалее = Ложь; ДоступностьКнопкиНазад = Ложь; + ДоступностьКнопкиЗакрыть = Ложь; ИначеЕсли НоваяТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда ФункцияКнопкиДалее = Ложь; + ДоступностьКнопкиЗакрыть = Ложь; ИначеЕсли НоваяТекущаяСтраница = Страницы.ФайлОбновления Тогда @@ -1465,7 +1478,7 @@ Возврат ПерейтиНаСтраницуМестоположениеДискаИТС(); ИначеЕсли Объект.ИсточникОбновления = 2 Тогда Возврат ПроверитьОбновлениеФайл(ВыдаватьСообщения); - КонецЕсли; + КонецЕсли; Возврат Неопределено; КонецФункции @@ -1489,7 +1502,7 @@ Возврат Страницы.ДоступноеОбновление.Имя; КонецЕсли; - Возврат ?(Объект.ДоступныеОбновления.Количество() = 0, ПроверитьОбновлениеИнтернет(ВыдаватьСообщения), Страницы.ПодключениеКСайту.Имя); + Возврат ?(Объект.ДоступныеОбновления.Количество() = 0, ПроверитьОбновлениеИнтернет(ВыдаватьСообщения), Страницы.ПодключениеКСайту.Имя); КонецФункции &НаКлиенте @@ -1499,7 +1512,7 @@ Если НЕ ЗначениеЗаполнено(Объект.КодПользователяСервераОбновлений) Тогда Если ВыдаватьСообщения Тогда Предупреждение(НСтр("ru = 'Укажите код пользователя сервера обновлений.'")); - КонецЕсли; + КонецЕсли; ТекущийЭлемент = Элементы.КодПользователяСервераОбновлений; Возврат Страницы.ПодключениеКСайту.Имя; КонецЕсли; @@ -1518,7 +1531,7 @@ Возврат Страницы.ДоступноеОбновление.Имя; КонецЕсли; - Возврат ПроверитьОбновлениеИнтернет(ВыдаватьСообщения); + Возврат ПроверитьОбновлениеИнтернет(ВыдаватьСообщения); КонецФункции &НаКлиенте @@ -1541,7 +1554,7 @@ КонецЕсли; КонецЕсли; ВыполнитьОбновление = Истина; - ФлагЗавершенияРаботы = Истина; + ФлагЗавершенияРаботы = Истина; Возврат ТекущаяСтраница.Имя; ИначеЕсли Объект.РежимОбновления = 1 Тогда // При завершении работы @@ -1549,7 +1562,7 @@ Если НЕ ПроверитьДопустимуюДатуОбновления(Объект.ДатаВремяОбновления, ВыдаватьСообщения) Тогда ТекущийЭлемент = Элементы.ПолеДатаВремяОбновления; Возврат ТекущаяСтраница.Имя; - КонецЕсли; + КонецЕсли; Если Объект.ВыслатьОтчетНаПочту Тогда ИмяНовойСтраницы = ПроверитьНастройкиЭлектроннойПочты(ТекущаяСтраница.Имя, ВыдаватьСообщения); Если НЕ ПустаяСтрока(ИмяНовойСтраницы) Тогда @@ -1559,7 +1572,7 @@ Если НЕ УстановленWMI(ВыдаватьСообщения) Тогда Возврат ТекущаяСтраница.Имя; - КонецЕсли; + КонецЕсли; Если НЕ ЗапланироватьОбновлениеКонфигурации() Тогда Предупреждение(НСтр("ru = 'Невозможно запланировать обновление конфигурации. Сведения об ошибке сохранены в журнал регистрации.'")); @@ -1570,13 +1583,12 @@ Возврат ТекущаяСтраница.Имя; КонецЕсли; - // Емец ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса = Объект.РежимОбновления = 1; Сообщение = НСтр("ru = 'Выбран режим обновления:'") + " "; Если Объект.РежимОбновления = 0 Тогда // Обновить сейчас Сообщение = Сообщение + НСтр("ru = 'сейчас'"); - ИначеЕсли Объект.РежимОбновления = 1 Тогда // при завершении работы // Емец + ИначеЕсли Объект.РежимОбновления = 1 Тогда // при завершении работы Сообщение = Сообщение + НСтр("ru = 'при завершении работы'"); ИначеЕсли Объект.РежимОбновления = 2 Тогда // Запланировать обновление Сообщение = Сообщение + НСтр("ru = 'запланировать'"); @@ -1637,8 +1649,7 @@ Отказ = Ложь; - ОбновлениеКонфигурацииКлиентПереопределяемый.ПриПереходеНаСтраницуПомощника(ТекущаяСтраница.Имя, - НоваяТекущаяСтраница.Имя, Отказ); + ПриПереходеНаСтраницуПомощника(ТекущаяСтраница.Имя, НоваяТекущаяСтраница.Имя, Отказ); ТекущаяСтраница.Доступность = Истина; @@ -1656,12 +1667,89 @@ Предупреждение(НСтр("ru = 'Недостаточно прав для выполнения обновления конфигурации.'")); КонецЕсли; - Если НЕ Отказ Тогда + Если Отказ Тогда + ОтработатьНажатиеКнопкиНазад(); + Иначе ПередОткрытиемСтраницы(НоваяТекущаяСтраница); Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяТекущаяСтраница; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОтработатьНажатиеКнопкиНазад() + + Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; + ТекущаяСтраница = Элементы.СтраницыПомощника.ТекущаяСтраница; + НоваяТекущаяСтраница = ТекущаяСтраница; + + Если ТекущаяСтраница = Страницы.ДоброПожаловать Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКИнтернет Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + ИначеЕсли ТекущаяСтраница = Страницы.ПодключениеКСайту Тогда + НоваяТекущаяСтраница = Страницы.ДоступноеОбновление; + ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС + НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС + НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Страницы.ДлительнаяОперация Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + ИначеЕсли ТекущаяСтраница = Страницы.ВыборРежимаОбновленияФайл ИЛИ + ТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер ИЛИ + ТекущаяСтраница = Страницы.ПараметрыАвторизации ИЛИ + ТекущаяСтраница = Страницы.ДополнительныеНастройки Тогда + Если Объект.ИсточникОбновления = 0 Тогда // Интернет + НоваяТекущаяСтраница = Страницы.ДоступноеОбновление; + ИначеЕсли Объект.ИсточникОбновления = 1 Тогда // диск ИТС + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + Иначе // файл + НоваяТекущаяСтраница = Страницы.ФайлОбновления; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Страницы.УспешноеОбновление Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС + НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС + НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; + КонецЕсли; + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + НоваяТекущаяСтраница = Страницы[ПерейтиКВыборуРежимаОбновления()]; + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Страницы.ФайлОбновления Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + ИначеЕсли ТекущаяСтраница = Страницы.МестоположениеДискаИТС Тогда + НоваяТекущаяСтраница = Страницы.ДоброПожаловать; + КонецЕсли; + + ПередОткрытиемСтраницы(НоваяТекущаяСтраница); + + Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяТекущаяСтраница; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ) + + Если ПредыдущаяСтраница = "ФайлОбновления" И СледующаяСтраница <> "ФайлОбновления" + И Не ОбновлениеКонфигурацииКлиент.ПроверитьЛегальностьПолученияОбновления() Тогда + Отказ = Истина; + КонецЕсли; + + ОбновлениеКонфигурацииКлиентПереопределяемый.ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ); + +КонецПроцедуры + &НаКлиенте Функция ОбработатьСтраницуДоступноеОбновление(ВыдаватьСообщения = Истина) Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; @@ -1669,8 +1757,8 @@ Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.ЕстьДоступДляОбновления Тогда Предупреждение(НСтр("ru = 'Недостаточно прав для выполнения обновления конфигурации.'")); - Возврат Страницы.ДоступноеОбновление.Имя; - КонецЕсли; + Возврат Страницы.ДоступноеОбновление.Имя; + КонецЕсли; СписокФайловДляПолучения.ЗагрузитьЗначения(СоздатьСписокФайловДляПолучения()); Если ПроверитьФайлыОбновленияПолучены() Тогда @@ -1678,7 +1766,7 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Информация", НСтр("ru = 'Обнаружено, что файлы обновления конфигурации уже были получены и сохранены локально.'")); Возврат ПерейтиКВыборуРежимаОбновления(Ложь); - КонецЕсли; + КонецЕсли; Возврат Страницы.ДлительнаяОперация.Имя; КонецФункции @@ -1694,7 +1782,7 @@ Функция ОбработатьСтраницуУспешноеОбновление(ВыдаватьСообщения = Истина) Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; Закрыть(); - Возврат Страницы.УспешноеОбновление.Имя; + Возврат Страницы.УспешноеОбновление.Имя; КонецФункции &НаКлиенте @@ -1738,7 +1826,7 @@ КонецПопытки; КонецЕсли; ПолучитьДоступноеОбновлениеИзФайла(?(Объект.НуженФайлОбновления = 1, Объект.ИмяФайлаОбновления, Неопределено),Истина); - Возврат ПерейтиКВыборуРежимаОбновления(Истина); + Возврат ПерейтиКВыборуРежимаОбновления(Истина); КонецФункции @@ -1776,12 +1864,12 @@ Возврат Страницы.ПараметрыАвторизации.Имя; КонецЕсли; - Возврат ПерейтиКВыборуРежимаОбновления(ВыдаватьСообщения); + Возврат ПерейтиКВыборуРежимаОбновления(ВыдаватьСообщения); КонецФункции &НаКлиенте Функция ОбработатьСтраницуДополнительныеНастройки(ВыдаватьСообщения = Истина) - Возврат ПерейтиКВыборуРежимаОбновления(ВыдаватьСообщения); + Возврат ПерейтиКВыборуРежимаОбновления(ВыдаватьСообщения); КонецФункции &НаКлиенте @@ -1804,7 +1892,7 @@ КонецФункции &НаКлиенте -Функция ПолучитьСтруктуруДостуступногоОбновления(ПолучатьРазмерОбновления = Ложь) +Функция ПолучитьСтруктуруДоступногоОбновления(ПолучатьРазмерОбновления = Ложь) Если Объект.ДоступныеОбновления.Количество() = 0 Тогда Возврат Неопределено; @@ -1908,12 +1996,12 @@ Для Каждого Привод Из Приводы Цикл Если Привод.DriveType <> 4 Тогда Продолжить; - КонецЕсли; + КонецЕсли; Если Привод.IsReady Тогда // 4 = CD-ROM drive, http://www.microsoft.com/technet/scriptcenter/guide/sas_scr_czxq.mspx?mfr=true Диск = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Привод.Path); Файл = Новый Файл(Диск + ИмяФайлаАдресовРелизовИТС); Если Файл.Существует() Тогда - Возврат Диск; + Возврат Диск; КонецЕсли; КонецЕсли; Если НЕ ПустаяСтрока(ПутиДискаИТС) Тогда @@ -1926,20 +2014,20 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", НСтр("ru = 'Ошибка при поиске диска 1С:ИТС:'") + " " + ОписаниеОшибки()); - Возврат ""; + Возврат ""; КонецПопытки; Возврат ""; КонецФункции -// Проверка, что файл является дистибутивом обновления. +// Проверка, что файл является дистрибутивом обновления. // // Параметр: // ПутьКФайлу - Строка - путь к файлу. // // Возвращаемое значение: -// Булево - Истина, если файл является дистибутивом обновления. +// Булево - Истина, если файл является дистрибутивом обновления. // &НаКлиенте Функция ЭтоДистрибутивОбновления(Знач ПутьКФайлу) @@ -1953,7 +2041,7 @@ ЭтоФайловаяБаза = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; Если ПроверитьДоступКИБ() Тогда Возврат ?(ЭтоФайловаяБаза И НЕ РежимИмитацииКлиентСервернойИБ(), Страницы.ВыборРежимаОбновленияФайл.Имя, - Страницы.ВыборРежимаОбновленияСервер.Имя); + Страницы.ВыборРежимаОбновленияСервер.Имя); Иначе Возврат ?(ЭтоФайловаяБаза, Страницы.ДополнительныеНастройки.Имя, Страницы.ПараметрыАвторизации.Имя); КонецЕсли; @@ -2026,7 +2114,7 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбнаруженнаяОшибкаПодключения = ТекстСообщения + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + КонецПопытки; Если Результат И НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда ОбнаруженнаяОшибкаПодключения = ПроверитьДоступККластеру(ПараметрыПодключения); @@ -2074,10 +2162,10 @@ Если Найти(Объект.АдресЭлектроннойПочты, "@") = 0 ИЛИ Найти(Объект.АдресЭлектроннойПочты, ".") = 0 Тогда Если ВыдаватьСообщения Тогда Предупреждение(НСтр("ru = 'Укажите допустимый адрес электронной почты.'")); - КонецЕсли; + КонецЕсли; ТекущийЭлемент = Элементы.ПолеАдресЭлектроннойПочты; Возврат ИмяТекущейСтраницы; - КонецЕсли; + КонецЕсли; Возврат ""; КонецФункции @@ -2131,13 +2219,13 @@ , // DaysOfWeek Pow(2, День(ДатаВремя) - 1), // DaysOfMonth Ложь, // InteractWithDesktop - КодЗадачи); // out JobId + КодЗадачи);// out JobId Если КодОшибки <> 0 Тогда // Коды ошибок: http://msdn2.microsoft.com/en-us/library/aa389389(VS.85).aspx ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", НСтр("ru = 'Ошибка при создании задачи планировщика:'") + " " + КодОшибки); Возврат 0; - КонецЕсли; + КонецЕсли; ТекстСообщения = НСтр("ru = 'Задача планировщика успешно запланирована (команда: %1; дата: %2; код задачи: %3).'"); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, @@ -2239,20 +2327,20 @@ ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); КонецЕсли; - Возврат ИмяГлавногоФайлаСкрипта; + Возврат ИмяГлавногоФайлаСкрипта; КонецФункции &НаКлиенте Функция УстановленWMI(Знач ВыдаватьСообщения = Истина) Попытка - Возврат ОбъектWMI() <> Неопределено; + Возврат ОбъектWMI() <> Неопределено; Исключение ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ОписаниеОшибки()); Если ВыдаватьСообщения Тогда - ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.ПредупреждениеWMI"); + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.ПредупреждениеWMI", , ЭтаФорма); КонецЕсли; - Возврат Ложь; + Возврат Ложь; КонецПопытки; КонецФункции @@ -2304,7 +2392,7 @@ НСтр("ru = 'Ошибка при удалении задачи планировщика:'") + " " + КодОшибки); Возврат Результат; - КонецЕсли; + КонецЕсли; ТекстСообщения = НСтр("ru = 'Задача планировщика успешно удалена (код задачи: %1).'"); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Информация", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, КодЗадачи)); @@ -2392,7 +2480,7 @@ Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ИмяФайла), Неопределено, ИмяФайла))); Если Результат.Статус Тогда Возврат ИмяФайла; - КонецЕсли; + КонецЕсли; Попытка УдалитьФайлы(ИмяФайла); @@ -2446,14 +2534,14 @@ Новый Структура("ПутьДляСохранения", ? (ПустаяСтрока(ИмяФайла), Неопределено, ИмяФайла))); Если Результат.Статус Тогда Возврат ИмяФайла; - КонецЕсли; + КонецЕсли; Попытка УдалитьФайлы(ИмяФайла); Исключение ТекстСообщения = НСтр("ru = 'Ошибка при удалении временного файла %1 |%2'"); - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); @@ -2471,7 +2559,7 @@ ИмяФайла); Если Результат Тогда Возврат ИмяФайла; - КонецЕсли; + КонецЕсли; Попытка УдалитьФайлы(ИмяФайла); @@ -2531,14 +2619,14 @@ КонецЕсли; КороткоеИмяКонфигурации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.КороткоеИмяКонфигурации; - КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, "/", "\"); + КороткоеИмяКонфигурации = СтрЗаменить(КороткоеИмяКонфигурации, "/", "\"); КороткоеИмяКонфигурации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КороткоеИмяКонфигурации); Результат = СтрЗаменить(ДоступноеОбновление.ПутьКФайлуОбновления, "/", "\"); Результат = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Результат); Результат = СтрЗаменить(Результат, "_", "."); Если Объект.ИсточникОбновления = 1 Тогда Результат = "ITS\" + КороткоеИмяКонфигурации + Результат; - КонецЕсли; + КонецЕсли; Результат = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Результат); Возврат Результат; @@ -2557,7 +2645,7 @@ Если НЕ ЭтоДистрибутивОбновления(Обновление.ПутьКЛокальномуФайлу) Тогда Обновление.ПутьКЛокальномуФайлуОбновления = ?(ПустаяСтрока(Обновление.ПутьКЛокальномуФайлуОбновления), Обновление.ПутьКЛокальномуФайлу, Обновление.ПутьКЛокальномуФайлуОбновления); - Продолжить; + Продолжить; КонецЕсли; Попытка @@ -2626,9 +2714,9 @@ ВерсияКонфигурации, АдресФайлаВоВремХранилище, СообщенияДляЖурналаРегистрации); Исключение Если ВыдаватьСообщения Тогда - Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецЕсли; - КонецПопытки; + КонецПопытки; КонецПроцедуры @@ -2657,7 +2745,7 @@ Предупреждение(ТекстОшибки); КонецЕсли; Возврат ТекстОшибки; - КонецЕсли; + КонецЕсли; Если НЕ ФайлСуществуетНаКлиенте(ПутьКФайлуСпискаШаблонов) Тогда Возврат НСтр("ru = 'Файл не существует:'") + " " + ПутьКФайлуСпискаШаблонов; @@ -2751,7 +2839,7 @@ Если НЕ Файл.Значение.Получен И Файл.Значение.Обязательный Тогда Возврат Страницы.ПодключениеКСайту.Имя; - КонецЕсли; + КонецЕсли; Иначе // Вывод сообщения в журнал регистрации о копировании файла. Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2762,7 +2850,7 @@ Файл.Значение.Получен = ОбновлениеКонфигурацииКлиент.СкопироватьФайл( Файл.Значение.Адрес, Файл.Значение.ЛокальныйПуть, Файл.Значение.Обязательный И ВыдаватьСообщения); КонецЕсли; - КонецЕсли; + КонецЕсли; НомерФайла = НомерФайла + 1; КонецЦикла; @@ -2858,7 +2946,7 @@ Возврат Страницы.МестоположениеДискаИТС.Имя; КонецЕсли; ТекущийДискИТС = ДискИТС; - КонецЕсли; + КонецЕсли; ПутьКФайламОбновленияНаДискеИТС = ""; ПереченьРелизовНаДискахИТС = ""; @@ -2937,7 +3025,7 @@ Возврат Страницы.ОбновленияНеОбнаружено.Имя; КонецЕсли; - // Получение файла описания обновлений выполняется только ести вставлен последний в цепочке диск ИТС + // Получение файла описания обновлений выполняется только если вставлен последний в цепочке диск ИТС Если Объект.ДоступныеОбновления.Количество() > 0 И ПоследняяВерсияКонфигурации = Объект.ДоступныеОбновления[Объект.ДоступныеОбновления.Количество()-1].Версия Тогда ИмяФайлаИнформацияОбОбновлении = ПолучитьФайлОписанияОбновленияИТС(); @@ -2990,7 +3078,7 @@ КонецЕсли; ПолучитьДоступноеОбновлениеИзФайла(?(Объект.НуженФайлОбновления = 1, Объект.ИмяФайлаОбновления, Неопределено)); - Возврат ПерейтиКВыборуРежимаОбновления(Ложь); + Возврат ПерейтиКВыборуРежимаОбновления(Ложь); КонецФункции @@ -3048,8 +3136,7 @@ ОбновлениеЗапланировано, ОбновлениеВыполнено, РезультатОбновления, - СообщенияДляЖурналаРегистрации - ); + СообщенияДляЖурналаРегистрации); КонецПроцедуры @@ -3072,4 +3159,3 @@ Возврат Неопределено; КонецПопытки; КонецФункции - diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html index 070ffadda..03cc2608e 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                Получение обновлений через Интернет

                diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index 913a00892..e164ae536 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -95,8 +95,7 @@ СообщениеТекст, , ПутьЭлемент.Имя, - ПутьЭлемент.ПутьКДанным - ); + ПутьЭлемент.ПутьКДанным); ОшибокНет = Ложь; КонецЕсли; КонецЦикла; @@ -145,7 +144,7 @@ &НаСервереБезКонтекста Функция КаталогиЭкспортаОценкиПроизводительности() - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); Каталоги = Новый Структура; Если Задание.Параметры.Количество() > 0 Тогда Каталоги = Задание.Параметры[0]; @@ -163,7 +162,7 @@ &НаСервереБезКонтекста Процедура УстановитьКаталогЭкспорта(ВыполнятьЛокальныйКаталогЭкспорта, ВыполнятьFTPКаталогЭкспорта) - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); Каталоги = Новый Структура(); @@ -188,7 +187,7 @@ &НаСервереБезКонтекста Функция ВыполнятьРегламентноеЗадание() - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); Возврат Задание.Использование; КонецФункции @@ -204,7 +203,7 @@ &НаСервереБезКонтекста Функция УстановитьИспользованиеРегламентногоЗадания(НовоеЗначение) - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); ТекущееСостояние = Задание.Использование; Если ТекущееСостояние <> НовоеЗначение Тогда Задание.Использование = НовоеЗначение; @@ -223,7 +222,7 @@ &НаСервереБезКонтекста Функция РасписаниеЭкспортаОценкиПроизводительности() - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); Возврат Задание.Расписание; КонецФункции @@ -231,12 +230,12 @@ // Устанавливает новое расписание регламентному заданию // // Параметры: -// НовоеРасписание - РасписаниеРегламентногоЗадания, которе надо установить +// НовоеРасписание - РасписаниеРегламентногоЗадания, которое надо установить // &НаСервереБезКонтекста Процедура УстановитьРасписание(Знач НовоеРасписание) - Задание = РегламетноеЗаданиеЭкспортаОценкиПроизводительности(); + Задание = РегламентноеЗаданиеЭкспортаОценкиПроизводительности(); Задание.Расписание = НовоеРасписание; ЗафиксироватьРегламентноеЗадание(Задание); @@ -248,16 +247,14 @@ // РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание // &НаСервереБезКонтекста -Функция РегламетноеЗаданиеЭкспортаОценкиПроизводительности() +Функция РегламентноеЗаданиеЭкспортаОценкиПроизводительности() УстановитьПривилегированныйРежим(Истина); Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания( - Новый Структура("Метаданные", "ЭкспортОценкиПроизводительности") - ); + Новый Структура("Метаданные", "ЭкспортОценкиПроизводительности")); Если Задания.Количество() = 0 Тогда Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание( - Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности - ); + Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности); Задание.Записать(); Возврат Задание; Иначе diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form index 9910b07f4..46fbbce48 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form @@ -648,7 +648,7 @@ OnCreateAtServer ПриСозданииНаСервере
                - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form index d1185efe5..a8dc37c54 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form @@ -802,6 +802,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index 0223fa1ec..d91a5e2e9 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -1,4 +1,3 @@ - /////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -29,6 +28,47 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ОценкаПроизводительности.Форма.ФормаОтбора") Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ОбновитьПоказатели(ВыбранноеЗначение); + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.КлючевыеОперации.Форма.ФормаВыбора") Тогда + + ТЧ = Объект.Производительность; + + ТекущаяСтрока = Элементы.Производительность.ТекущиеДанные; + Если ВыбранноеЗначение = Неопределено Тогда + Если ТекущаяСтрока = Неопределено ИЛИ ЗначениеЗаполнено(ТекущаяСтрока.КлючеваяОперация) Тогда + Возврат; + КонецЕсли; + ТЧ.Удалить(ТекущаяСтрока.НомерСтроки - 1); + Возврат; + КонецЕсли; + + ПредопределенныйЭлемент = ПредопределенноеЗначение("Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы"); + ТекущаяСтрока.КлючеваяОперация = ВыбранноеЗначение.КлючеваяОперация; + ТекущаяСтрока.ЦелевоеВремя = ВыбранноеЗначение.ЦелевоеВремя; + ТекущаяСтрока.Приоритет = ВыбранноеЗначение.Приоритет; + + ТЧ.Сортировать("Приоритет"); + МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("КлючеваяОперация", ПредопределенныйЭлемент)); + Если МассивСтрок.Количество() > 0 Тогда + ТекущийИндекс = ТЧ.Индекс(МассивСтрок[0]); + ТЧ.Сдвинуть(ТекущийИндекс, ТЧ.Количество() - 1 - ТекущийИндекс); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ПроизводительностьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) @@ -109,11 +149,10 @@ НастройкиИстории = Новый Структура("КлючеваяОперация, ДатаНачала, ДатаОкончания", СтрокаТЧ.КлючеваяОперация, НачалоПериода, ОкончаниеПериода); ПараметрыОткрытия = Новый Структура("НастройкиИстории", НастройкиИстории); - ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ИсторияВыполнения", ПараметрыОткрытия); + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.ИсторияВыполнения", ПараметрыОткрытия, ЭтаФорма); КонецПроцедуры - /////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -196,7 +235,7 @@ &НаКлиенте Процедура Настройка(Команда) - ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.АвтоматическийЭкспортЗамеровПроизводительности"); + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.АвтоматическийЭкспортЗамеровПроизводительности", , ЭтаФорма); КонецПроцедуры @@ -243,13 +282,7 @@ &НаКлиенте Процедура УстановитьОтбор(Команда) - ЗначенияОтбора = ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ФормаОтбора"); - - Если ЗначенияОтбора = Неопределено Тогда - Возврат; - КонецЕсли; - - ОбновитьПоказатели(ЗначенияОтбора); + ОткрытьФорму("Обработка.ОценкаПроизводительности.Форма.ФормаОтбора", , ЭтаФорма); КонецПроцедуры @@ -307,7 +340,7 @@ // Вычисляет целевое время для указанного значения APDEX // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчетать целевое время +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчитать целевое время // ЗначениеAPDEX - Число, APDEX, для которого необходимо подобрать целевое время // ИндексПериода - Число, индекс периода, для которого будет вычислено целевое время // @@ -341,7 +374,7 @@ ПараметрыВычисления.ВыводитьИтоги = Ложь; ЦелевоеВремя = 0.01; - ПредыдущеецелевоеВремя = ЦелевоеВремя; + ПредыдущееЦелевоеВремя = ЦелевоеВремя; ШагСекунд = 1; Пока Истина Цикл @@ -353,7 +386,7 @@ Если ЗначениеAPDEXРассчитанное < ЗначениеAPDEX Тогда - ПредыдущеецелевоеВремя = ЦелевоеВремя; + ПредыдущееЦелевоеВремя = ЦелевоеВремя; ЦелевоеВремя = ЦелевоеВремя + ШагСекунд; ИначеЕсли ЗначениеAPDEXРассчитанное > ЗначениеAPDEX Тогда @@ -476,7 +509,7 @@ // КолонкиТаблицаКлючевыхОпераций - КоллекцияКолонокТаблицыЗначений, список колонок, которые необходимо создать // // Возвращаемое значение: -// Массив - Массив реквизтов формы +// Массив - Массив реквизитов формы // &НаСервереБезКонтекста Функция ДобавляемыеРеквизиты(КолонкиТаблицаКлючевыхОпераций) @@ -503,7 +536,7 @@ // и удаляет элементы формы связанные с реквизитами // // Возвращаемое значение: -// Массив - Массив реквизтов формы +// Массив - Массив реквизитов формы // &НаСервереБезКонтекста Функция УдаляемыеРеквизиты(РеквизитыОбъекта) @@ -887,8 +920,8 @@ // // Параметры: // ИмяФайлаОписания - Строка, имя файла для размещения описания -// Начало - ДатаВермя, начало периода экспорта -// Конец - ДатаВремя, конец периода экспорта +// Начало - Дата и время, начало периода экспорта +// Конец - Дата и время, конец периода экспорта // &НаСервереБезКонтекста Процедура ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКлючевыхОпераций) @@ -963,7 +996,7 @@ Приоритет1 = Врем[ТекущийИндекс].Приоритет; Приоритет2 = Врем[ТекущийИндекс + НаправлениеСдвига].Приоритет; - ОбментятьПриоритеты( + ОбменятьПриоритеты( Врем[ТекущийИндекс].КлючеваяОперация, Приоритет1, Врем[ТекущийИндекс + НаправлениеСдвига].КлючеваяОперация, @@ -1038,7 +1071,7 @@ // Приоритет2 - Число, будет присвоен КлючеваяОперация1 // &НаСервере -Процедура ОбментятьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) +Процедура ОбменятьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) НачатьТранзакцию(); @@ -1056,7 +1089,7 @@ КонецПроцедуры // Процедура открывает форму выбора справочника КлючевыеОперации -// и устанавливает отбор, чтобы в списке небыло операций которые уже выбраны +// и устанавливает отбор, чтобы в списке не было операций которые уже выбраны // &НаКлиенте Процедура ОткрытьФормуВыбора() @@ -1068,31 +1101,11 @@ Отбор.Добавить(ТЧ[а].КлючеваяОперация); КонецЦикла; - Структура = Новый Структура("Отбор"); - Структура.Отбор = Отбор; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", Отбор); + ПараметрыФормы.Вставить("РежимВыбора", Истина); - РезультатВыбора = ОткрытьФормуМодально("Справочник.КлючевыеОперации.ФормаВыбора", Структура, ЭтаФорма); - - ТекущаяСтрока = Элементы.Производительность.ТекущиеДанные; - Если РезультатВыбора = Неопределено Тогда - Если ТекущаяСтрока = Неопределено ИЛИ ЗначениеЗаполнено(ТекущаяСтрока.КлючеваяОперация) Тогда - Возврат; - КонецЕсли; - ТЧ.Удалить(ТекущаяСтрока.НомерСтроки - 1); - Возврат; - КонецЕсли; - - ПредопределенныйЭлемент = ПредопределенноеЗначение("Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы"); - ТекущаяСтрока.КлючеваяОперация = РезультатВыбора.КлючеваяОперация; - ТекущаяСтрока.ЦелевоеВремя = РезультатВыбора.ЦелевоеВремя; - ТекущаяСтрока.Приоритет = РезультатВыбора.Приоритет; - - ТЧ.Сортировать("Приоритет"); - МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("КлючеваяОперация", ПредопределенныйЭлемент)); - Если МассивСтрок.Количество() > 0 Тогда - ТекущийИндекс = ТЧ.Индекс(МассивСтрок[0]); - ТЧ.Сдвинуть(ТекущийИндекс, ТЧ.Количество() - 1 - ТекущийИндекс); - КонецЕсли; + ОткрытьФорму("Справочник.КлючевыеОперации.ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -1124,7 +1137,7 @@ КонецПроцедуры -// Вычисляет точные дату начала и окончания на выбранном отрезкпе +// Вычисляет точные дату начала и окончания на выбранном отрезке // // Параметры: // ДатаНачала [OUT] - Дата, дата начала выбранного периода @@ -1158,10 +1171,10 @@ КонецФункции -// Создает таблицу значения, которая необходима для рассчета APDEX +// Создает таблицу значения, которая необходима для расчета APDEX // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений со структурой необходимой для рассчета APDEX +// ТаблицаЗначений - таблица значений со структурой необходимой для расчета APDEX // &НаСервереБезКонтекста Функция ТаблицаКлючевыхОперацийДляВычисленияAPDEX() @@ -1169,16 +1182,13 @@ ТаблицаКлючевыхОпераций = Новый ТаблицаЗначений; ТаблицаКлючевыхОпераций.Колонки.Добавить( "КлючеваяОперация", - Новый ОписаниеТипов("СправочникСсылка.КлючевыеОперации") - ); + Новый ОписаниеТипов("СправочникСсылка.КлючевыеОперации")); ТаблицаКлючевыхОпераций.Колонки.Добавить( "Приоритет", - Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 0, ДопустимыйЗнак.Неотрицательный)) - ); + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 0, ДопустимыйЗнак.Неотрицательный))); ТаблицаКлючевыхОпераций.Колонки.Добавить( "ЦелевоеВремя", - Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный)) - ); + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный))); Возврат ТаблицаКлючевыхОпераций; @@ -1188,13 +1198,13 @@ /////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (ОФОРМЛЕНИЕ, НАСТРОЙКИ) -// Функция возвращает цвет значения Неприемлимо +// Функция возвращает цвет значения Неприемлемо // // Возвращаемое значение: // Цвет - цвет значения // &НаСервереБезКонтекста -Функция ЦветНеприемлимо() +Функция ЦветНеприемлемо() Возврат Новый Цвет(187, 187, 187); @@ -1263,8 +1273,8 @@ Значения = Новый Структура("От, До, Цвет"); Значения.От = 0.001; // 0 означает что операция не выполнялась вообще Значения.До = 0.5; - Значения.Цвет = ЦветНеприемлимо(); - Соответствие.Вставить("Неприемлимо", Значения); + Значения.Цвет = ЦветНеприемлемо(); + Соответствие.Вставить("Неприемлемо", Значения); Значения = Новый Структура("От, До, Цвет"); Значения.От = 0.5; @@ -1296,7 +1306,7 @@ // Функция проверяет правильность настроек формы // -// Возварщаемое значение: +// Возвращаемое значение: // Истина - настройки верны // Ложь - Настройки не верны // @@ -1314,8 +1324,7 @@ НСтр("ru = 'Целевое время обязательно должно быть заполнено.'"), , "Производительность[" + Объект.Производительность.Индекс(СтрокаТЧ) + "].ЦелевоеВремя", - "Объект" - ); + "Объект"); Выполнена = Ложь; Прервать; @@ -1327,7 +1336,7 @@ КонецФункции -// Процедура при первом открытии офрмы обработки заполняет +// Процедура при первом открытии формы обработки заполняет // ТЧ "Производительность" из справочника "КлючевыеОперации" // &НаСервереБезКонтекста @@ -1364,7 +1373,7 @@ // Меняет целевое время ключевой операции // // Параметры: -// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целеове время +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целевое время // ЦелевоеВремя - Число, новое целевое время // &НаСервере @@ -1438,4 +1447,3 @@ КонецЦикла; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form index aeb618e26..ea23888d6 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form @@ -20,7 +20,7 @@ Надпись1РасширеннаяПодсказка - 25 + 27 Label true true @@ -61,7 +61,7 @@ НаправлениеРасширеннаяПодсказка - 27 + 29 Label true true @@ -119,7 +119,7 @@ Надпись2РасширеннаяПодсказка - 29 + 31 Label true true @@ -160,7 +160,7 @@ СостояниеРасширеннаяПодсказка - 31 + 33 Label true true @@ -217,7 +217,7 @@ Группа1РасширеннаяПодсказка - 24 + 26 Label true true @@ -247,7 +247,7 @@ УсловиеРасширеннаяПодсказка - 33 + 35 Label true true @@ -276,6 +276,8 @@ Normal
                + Bottom + true ФормаКоманднаяПанель -1 @@ -289,7 +291,7 @@ ОКРасширеннаяПодсказка - 23 + 24 Label true true @@ -305,9 +307,35 @@ UserCmds Auto
                - Left + + ФормаОтмена + 23 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl index ec432a92a..54f4b4c50 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl @@ -1,21 +1,5 @@ - -/////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНД - -&НаКлиенте -Процедура ОК(Команда) - - Структура = Новый Структура("Направление, Состояние"); - Структура.Направление = Направление; - Структура.Состояние = Состояние; - - ЭтаФорма.Закрыть(Структура); - -КонецПроцедуры - - -/////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура НаправлениеПриИзменении(Элемент) @@ -31,9 +15,22 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -/////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ОК(Команда) + + РезультатВыбора = Новый Структура("Направление, Состояние"); + РезультатВыбора.Направление = Направление; + РезультатВыбора.Состояние = Состояние; + + ОповеститьОВыборе(РезультатВыбора); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура СформироватьУсловие() @@ -59,4 +56,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index aa83b61e1..6b981c211 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html @@ -1,4 +1,4 @@ - +

                Интерпретация полученных значений APDEX:

            Настройка

            Шкала APDEX

            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl index fa5f2f88f..51476f1d6 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиПользователейИПрав/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.НастройкиПользователейИПрав" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl index e4cd97f83..df4d259d0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/НастройкиРаботыСФайлами/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.НастройкиРаботыСФайлами" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl index 1d89d7331..a42afd8e2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ОбщиеНастройки/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.ОбщиеНастройки" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl index 4d6b1d6e3..3b1f9fa52 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/Органайзер/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.Органайзер" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl index fc404a437..1e279c3fe 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПечатныеФормыОтчетыИОбработки/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.ПечатныеФормыОтчетыИОбработки" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоддержкаИОбслуживание/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоддержкаИОбслуживание/CommandModule.bsl index 7c6187d87..8e866e38f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоддержкаИОбслуживание/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/ПоддержкаИОбслуживание/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.ПоддержкаИОбслуживание" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl index 665333ff0..e5fcef071 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанных/CommandModule.bsl @@ -9,7 +9,6 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.СинхронизацияДанных" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанныхВМоделиСервиса/CommandModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанныхВМоделиСервиса/CommandModule.bsl index a2be73791..5044fe5f9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанныхВМоделиСервиса/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Commands/СинхронизацияДанныхВМоделиСервиса/CommandModule.bsl @@ -11,8 +11,7 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.СинхронизацияДанныхДляАдминистратораАбонента" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); Иначе ОткрытьФорму( @@ -20,8 +19,7 @@ Новый Структура, ПараметрыВыполненияКоманды.Источник, "Обработка.ПанельАдминистрированияБСП.Форма.СинхронизацияДанныхДляАдминистратораСервиса" + ?(ПараметрыВыполненияКоманды.Окно = Неопределено, ".ОтдельноеОкно", ""), - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index 7b9b11ca8..1e2c6b994 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -17,7 +17,7 @@ ОписаниеРазделаРасширеннаяПодсказка - 2031 + 2038 Label true true @@ -59,7 +59,7 @@ Декорация1РасширеннаяПодсказка - 2032 + 2039 Label true true @@ -93,7 +93,7 @@ СправкаРасширеннаяПодсказка - 2034 + 2041 Label true true @@ -126,7 +126,7 @@ false ГруппаСправкаРасширеннаяПодсказка - 2033 + 2040 Label true true @@ -154,7 +154,7 @@ ГруппаЗаголовокРасширеннаяПодсказка - 2030 + 2037 Label true true @@ -187,7 +187,7 @@ ОткрытьПользователиРасширеннаяПодсказка - 2037 + 2044 Label true true @@ -218,7 +218,7 @@ ПояснениеПользователиРасширеннаяПодсказка - 2038 + 2045 Label true true @@ -258,7 +258,7 @@ false ГруппаПользователиРасширеннаяПодсказка - 2036 + 2043 Label true true @@ -301,7 +301,7 @@ ИспользоватьГруппыПользователейРасширеннаяПодсказка - 2040 + 2047 Label true true @@ -335,7 +335,7 @@ ПояснениеИспользоватьГруппыПользователейРасширеннаяПодсказка - 2042 + 2049 Label true true @@ -375,7 +375,7 @@ false ГруппаГруппыПользователейРасширеннаяПодсказка - 2039 + 2046 Label true true @@ -410,7 +410,7 @@ false Группа3РасширеннаяПодсказка - 2035 + 2042 Label true true @@ -448,7 +448,7 @@ ОткрытьГруппыДоступаРасширеннаяПодсказка - 2046 + 2053 Label true true @@ -479,7 +479,7 @@ ПояснениеГруппыДоступаРасширеннаяПодсказка - 2047 + 2054 Label true true @@ -519,7 +519,7 @@ false ГруппаГруппыДоступаРасширеннаяПодсказка - 2045 + 2052 Label true true @@ -550,7 +550,7 @@ ОткрытьПрофилиГруппДоступаРасширеннаяПодсказка - 2049 + 2056 Label true true @@ -581,7 +581,7 @@ ПояснениеПрофилиГруппДоступаРасширеннаяПодсказка - 2050 + 2057 Label true true @@ -621,7 +621,7 @@ false ГруппаПрофилиГруппДоступаРасширеннаяПодсказка - 2048 + 2055 Label true true @@ -655,7 +655,7 @@ Группа7РасширеннаяПодсказка - 2044 + 2051 Label true true @@ -698,7 +698,7 @@ ОграничиватьДоступНаУровнеЗаписейРасширеннаяПодсказка - 2052 + 2059 Label true true @@ -732,7 +732,7 @@ ПояснениеОграничиватьДоступНаУровнеЗаписейРасширеннаяПодсказка - 2054 + 2061 Label true true @@ -773,7 +773,7 @@ false ГруппаОграничиватьДоступНаУровнеЗаписейРасширеннаяПодсказка - 2051 + 2058 Label true true @@ -808,7 +808,7 @@ false Группа4РасширеннаяПодсказка - 2043 + 2050 Label true true @@ -843,7 +843,7 @@ КопированиеНастроекПользователейРасширеннаяПодсказка - 2057 + 2064 Label true true @@ -874,7 +874,7 @@ ПояснениеКопированиеНастроекПользователейРасширеннаяПодсказка - 2058 + 2065 Label true true @@ -906,7 +906,7 @@ false ГруппаКопированиеНастроекПользователейРасширеннаяПодсказка - 2056 + 2063 Label true true @@ -937,7 +937,7 @@ НастройкиПользователейРасширеннаяПодсказка - 2060 + 2067 Label true true @@ -968,7 +968,7 @@ ПояснениеНастройкиПользователейРасширеннаяПодсказка - 2061 + 2068 Label true true @@ -1000,7 +1000,7 @@ false ГруппаНастройкиПользователейРасширеннаяПодсказка - 2059 + 2066 Label true true @@ -1035,7 +1035,7 @@ false Группа5РасширеннаяПодсказка - 2055 + 2062 Label true true @@ -1066,7 +1066,7 @@ ОчисткаНастроекПользователейРасширеннаяПодсказка - 2063 + 2070 Label true true @@ -1097,7 +1097,7 @@ ПояснениеОчисткаНастроекПользователейРасширеннаяПодсказка - 2064 + 2071 Label true true @@ -1129,7 +1129,7 @@ false ГруппаОчисткаНастроекПользователейРасширеннаяПодсказка - 2062 + 2069 Label true true @@ -1176,7 +1176,7 @@ ИспользоватьВнешнихПользователейРасширеннаяПодсказка - 2067 + 2074 Label true true @@ -1210,7 +1210,7 @@ ПояснениеИспользоватьВнешнихПользователейРасширеннаяПодсказка - 2069 + 2076 Label true true @@ -1250,7 +1250,7 @@ false ГруппаИспользоватьВнешнихПользователейРасширеннаяПодсказка - 2066 + 2073 Label true true @@ -1273,7 +1273,7 @@ 855 СправочникВнешниеПользователи - 2021 + 2031 true true @@ -1281,7 +1281,7 @@ СправочникВнешниеПользователиРасширеннаяПодсказка - 2071 + 2078 Label true true @@ -1312,7 +1312,7 @@ ПояснениеСправочникВнешниеПользователиРасширеннаяПодсказка - 2072 + 2079 Label true true @@ -1352,7 +1352,7 @@ false ГруппаСправочникВнешниеПользователиРасширеннаяПодсказка - 2070 + 2077 Label true true @@ -1387,7 +1387,7 @@ false Группа6РасширеннаяПодсказка - 2065 + 2072 Label true true @@ -1406,6 +1406,132 @@ Auto + + ГруппаПубликацияБазы + 2032 + + АдресПубликацииИнформационнойБазыВИнтернете + 2033 + true + true + + true + + + НаборКонстант.АдресПубликацииИнформационнойБазыВИнтернете + + Top + + OnChange + АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении + + + АдресПубликацииИнформационнойБазыВИнтернетеРасширеннаяПодсказка + 2081 + Label + true + true + + Left + + + + АдресПубликацииИнформационнойБазыВИнтернетеКонтекстноеМеню + 2034 + true + + InputField + Enter + true + Left + true + + 42 + true + true + false + true + true + true + true + Normal + + + + ПояснениеАдресПубликацииИнфомационнойБазыВИнтернете + 2035 + + <key>ru</key> + <value>Используется для формирования ссылок на объекты информационной базы при отправке электронных писем партнерам.</value> + + true + true + + true + + + ПояснениеАдресПубликацииИнфомационнойБазыВИнтернетеРасширеннаяПодсказка + 2083 + Label + true + true + + Left + + + + ПояснениеАдресПубликацииИнфомационнойБазыВИнтернетеКонтекстноеМеню + 2036 + true + + Label + 43 + true + true + false + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группа публикация базы</value> + + + ru + Группа публикация базы + + 86 + false + + ГруппаПубликацияБазыРасширеннаяПодсказка + 2080 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + ФормаКоманднаяПанель -1 diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html index 58137340d..1ec05fe66 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 012994f82..7ab59b8f9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -15,10 +15,12 @@ РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); // Настройки видимости при запуске - Если УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда - Элементы.ГруппаГруппыДоступа.Видимость = Ложь; - Элементы.ГруппаПрофилиГруппДоступа.Видимость = Ложь; - КонецЕсли; + + // СтандартныеПодсистемы.УправлениеДоступом + УпрощенныйИнтерфейс = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + Элементы.ГруппаГруппыДоступа.Видимость = НЕ УпрощенныйИнтерфейс; + Элементы.ГруппаПрофилиГруппДоступа.Видимость = НЕ УпрощенныйИнтерфейс; + // Конец СтандартныеПодсистемы.УправлениеДоступом // Обновление состояния элементов УстановитьДоступность(); @@ -32,28 +34,45 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// СтандартныеПодсистемы.УправлениеДоступом &НаКлиенте Процедура ИспользоватьГруппыПользователейПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.УправлениеДоступом &НаКлиенте Процедура ОграничиватьДоступНаУровнеЗаписейПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.УправлениеДоступом +// СтандартныеПодсистемы.Пользователи &НаКлиенте Процедура ИспользоватьВнешнихПользователейПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.Пользователи + +// СтандартныеПодсистемы.Взаимодействия +&НаКлиенте +Процедура АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении(Элемент) + + Подключаемый_ПриИзмененииРеквизита(Элемент); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.Взаимодействия //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.Пользователи &НаКлиенте Процедура СправочникВнешниеПользователи(Команда) ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаСписка", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.Пользователи //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -64,20 +83,46 @@ &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) + // СтандартныеПодсистемы.УправлениеДоступом + Если Элемент.Имя = "ОграничиватьДоступНаУровнеЗаписей" + И НаборКонстант.ОграничиватьДоступНаУровнеЗаписей Тогда + + ТекстВопроса = + НСтр("ru = 'Включить ограничение доступа на уровне записей? + | + |Потребуется заполнение данных, которое будет выполняться частями + |регламентным заданием ""Заполнение данных для ограничения доступа"" + |(ход выполнения в журнале регистрации). + | + |Выполнение может сильно замедлить работу программы и выполняться + |от нескольких секунд до многих часов (в зависимости от объема данных).'"); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + НаборКонстант.ОграничиватьДоступНаУровнеЗаписей = Ложь; + Возврат; + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом + Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); - Если Элемент.Имя = "ОграничиватьДоступНаУровнеЗаписей" И НаборКонстант.ОграничиватьДоступНаУровнеЗаписей Тогда - Предупреждение(НСтр("ru = 'Включено ограничение доступа на уровне записей. - |Требуется заполнение данных, которое будет выполняться частями - |регламентным заданием ""Заполнение данных для ограничения доступа"" - |(ход выполнения в журнале регистрации).'")); + // СтандартныеПодсистемы.УправлениеДоступом + Если Элемент.Имя = "ОграничиватьДоступНаУровнеЗаписей" + И НаборКонстант.ОграничиватьДоступНаУровнеЗаписей Тогда + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - Предупреждение(НСтр("ru = 'В режиме файловой информационной базы регламентное задание - |""Заполнение данных для ограничения доступа"" - |необходимо выполнить вручную через консоль регламентных заданий.'")); + ПоказатьОповещениеПользователя( + НСтр("ru = 'В режиме файловой информационной базы регламентное задание + |""Заполнение данных для ограничения доступа"" + |необходимо выполнить вручную через консоль регламентных заданий.'"), + "e1cib/app/Обработка.РегламентныеИФоновыеЗадания", + НСтр("ru = 'Заполнить данные для ограничения доступа'"), + БиблиотекаКартинок.РегламентныеЗадания); КонецЕсли; КонецЕсли; + // Конец СтандартныеПодсистемы.УправлениеДоступом Если ОбновлятьИнтерфейс Тогда #Если НЕ ВебКлиент Тогда ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); @@ -85,9 +130,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -153,8 +196,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -162,8 +207,16 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + // СтандартныеПодсистемы.Пользователи Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВнешнихПользователей" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СправочникВнешниеПользователи", "Доступность", НаборКонстант.ИспользоватьВнешнихПользователей); + Элементы.СправочникВнешниеПользователи.Доступность = НаборКонстант.ИспользоватьВнешнихПользователей; КонецЕсли; + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.Взаимодействия + Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВнешнихПользователей" ИЛИ РеквизитПутьКДанным = "" Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "АдресПубликацииИнформационнойБазыВИнтернете", "Доступность", НаборКонстант.ИспользоватьВнешнихПользователей); + КонецЕсли; + // Конец СтандартныеПодсистемы.Взаимодействия КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html index 236d55679..32b82d55d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Пользователи
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index 86c75afb9..e508a725d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -14,16 +14,21 @@ РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + // СтандартныеПодсистемы.ФайловыеФункции МаксимальныйРазмерФайла = ФайловыеФункции.МаксимальныйРазмерФайлаОбщий() / (1024*1024); МаксимальныйРазмерФайлаОбластиДанных = ФайловыеФункции.МаксимальныйРазмерФайла() / (1024*1024); Если РежимРаботы.МодельСервиса Тогда Элементы.МаксимальныйРазмерФайла.МаксимальноеЗначение = МаксимальныйРазмерФайла; КонецЕсли; + // Конец СтандартныеПодсистемы.ФайловыеФункции // Настройки видимости при запуске + + // СтандартныеПодсистемы.ФайловыеФункции Элементы.ГруппаХранитьФайлыВТомахНаДиске.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; Элементы.ГруппаСправочникТомаХраненияФайлов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; Элементы.ОбщиеПараметрыДляВсехОбластейДанных.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ФайловыеФункции // Обновление состояния элементов УстановитьДоступность(); @@ -37,6 +42,7 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура ХранитьФайлыВТомахНаДискеПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -66,15 +72,19 @@ Процедура СписокРасширенийТекстовыхФайловПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ФайловыеФункции +// СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись &НаКлиенте Процедура ИспользоватьЭлектронныеЦифровыеПодписиПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись //////////////////////////////////////////////////////////////////////////////// // Общие параметры для всех областей данных +// СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -89,19 +99,24 @@ Процедура СписокРасширенийФайловOpenDocumentПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ФайловыеФункции //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.ФайловыеФункции &НаКлиенте Процедура СправочникТомаХраненияФайлов(Команда) ОткрытьФорму("Справочник.ТомаХраненияФайлов.ФормаСписка", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.ФайловыеФункции +// СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись &НаКлиенте Процедура ОбщаяФормаНастройкиЭЦП(Команда) ОткрытьФорму("ОбщаяФорма.НастройкиЭЦП", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -123,9 +138,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -180,11 +193,13 @@ Иначе // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". // Используется для тех реквизитов формы, которые связаны с константами напрямую (в отношении один-к-одному). + + // СтандартныеПодсистемы.ФайловыеФункции Если РеквизитПутьКДанным = "МаксимальныйРазмерФайла" Тогда НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайла * (1024*1024); КонстантаИмя = "МаксимальныйРазмерФайла"; ИначеЕсли РеквизитПутьКДанным = "МаксимальныйРазмерФайлаОбластиДанных" Тогда - Если РежимРаботы.Локальный Тогда + Если РежимРаботы.Локальный Или РежимРаботы.Автономный Тогда НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайлаОбластиДанных * (1024*1024); КонстантаИмя = "МаксимальныйРазмерФайла"; Иначе @@ -192,6 +207,8 @@ КонстантаИмя = "МаксимальныйРазмерФайлаОбластиДанных"; КонецЕсли; КонецЕсли; + // Конец СтандартныеПодсистемы.ФайловыеФункции + КонецЕсли; // Сохранения значения константы. @@ -203,8 +220,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -212,16 +231,22 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + // СтандартныеПодсистемы.ФайловыеФункции Если РеквизитПутьКДанным = "НаборКонстант.ХранитьФайлыВТомахНаДиске" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СправочникТомаХраненияФайлов", "Доступность", НаборКонстант.ХранитьФайлыВТомахНаДиске); - КонецЕсли; - - Если РеквизитПутьКДанным = "НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокЗапрещенныхРасширенийОбластиДанных", "Доступность", НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению); + Элементы.СправочникТомаХраненияФайлов.Доступность = НаборКонстант.ХранитьФайлыВТомахНаДиске; КонецЕсли; + // Конец СтандартныеПодсистемы.ФайловыеФункции - Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеЦифровыеПодписи" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбщаяФормаНастройкиЭЦП", "Доступность", НаборКонстант.ИспользоватьЭлектронныеЦифровыеПодписи); + // СтандартныеПодсистемы.ФайловыеФункции + Если РеквизитПутьКДанным = "НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению" ИЛИ РеквизитПутьКДанным = "" Тогда + Элементы.СписокЗапрещенныхРасширенийОбластиДанных.Доступность = НаборКонстант.ЗапрещатьЗагрузкуФайловПоРасширению; КонецЕсли; + // Конец СтандартныеПодсистемы.ФайловыеФункции + + // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись + Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеЦифровыеПодписи" ИЛИ РеквизитПутьКДанным = "" Тогда + Элементы.ОбщаяФормаНастройкиЭЦП.Доступность = НаборКонстант.ИспользоватьЭлектронныеЦифровыеПодписи; + КонецЕсли; + // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index 1e0ecbf38..de594f49f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -18,7 +18,7 @@ ОписаниеРазделаРасширеннаяПодсказка - 1796 + 1803 Label true true @@ -60,7 +60,7 @@ Декорация1РасширеннаяПодсказка - 1797 + 1804 Label true true @@ -94,7 +94,7 @@ СправкаРасширеннаяПодсказка - 1799 + 1806 Label true true @@ -127,7 +127,7 @@ false ГруппаСправкаРасширеннаяПодсказка - 1798 + 1805 Label true true @@ -155,7 +155,7 @@ ГруппаЗаголовокРасширеннаяПодсказка - 1795 + 1802 Label true true @@ -176,7 +176,7 @@ Группа9 612 - ЗаголовокСистемы + ЗаголовокПрограммы 1785 <key>ru</key> @@ -193,11 +193,11 @@ <titleLocation>Left</titleLocation> <handlers> <event>OnChange</event> - <name>ЗаголовокСистемыПриИзменении</name> + <name>ЗаголовокПрограммыПриИзменении</name> </handlers> <extendedTooltip> - <name>ЗаголовокСистемыРасширеннаяПодсказка</name> - <id>1801</id> + <name>ЗаголовокПрограммыРасширеннаяПодсказка</name> + <id>1808</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -206,7 +206,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ЗаголовокСистемыКонтекстноеМеню</name> + <name>ЗаголовокПрограммыКонтекстноеМеню</name> <id>1786</id> <autoFill>true</autoFill> </contextMenu> @@ -245,7 +245,7 @@ </handlers> <extendedTooltip> <name>ЧасовойПоясПрограммыРасширеннаяПодсказка</name> - <id>1804</id> + <id>1811</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -291,7 +291,7 @@ </userVisible> <extendedTooltip> <name>ВремяТекущегоСеансаРасширеннаяПодсказка</name> - <id>1806</id> + <id>1813</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -323,7 +323,7 @@ </toolTip> <extendedTooltip> <name>ГруппаЧасовойПоясПрограммыРасширеннаяПодсказка</name> - <id>1803</id> + <id>1810</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -357,7 +357,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>Группа9РасширеннаяПодсказка</name> - <id>1800</id> + <id>1807</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -403,7 +403,7 @@ </handlers> <extendedTooltip> <name>ИспользоватьВерсионированиеОбъектовРасширеннаяПодсказка</name> - <id>1809</id> + <id>1816</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -437,7 +437,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеИспользоватьВерсионированиеРасширеннаяПодсказка</name> - <id>1811</id> + <id>1818</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -475,7 +475,7 @@ </toolTip> <extendedTooltip> <name>ГруппаИспользоватьВерсионированиеОбъектовРасширеннаяПодсказка</name> - <id>1808</id> + <id>1815</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -498,7 +498,7 @@ <id>884</id> <items xsi:type="form:Button"> <name>РегистрСведенийНастройкиВерсионированияОбъектов</name> - <id>1581</id> + <id>1800</id> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -506,7 +506,7 @@ </userVisible> <extendedTooltip> <name>РегистрСведенийНастройкиВерсионированияОбъектовРасширеннаяПодсказка</name> - <id>1813</id> + <id>1820</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -537,7 +537,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеРегистрСведенийНастройкиВерсионированияОбъектовРасширеннаяПодсказка</name> - <id>1814</id> + <id>1821</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -575,7 +575,7 @@ </toolTip> <extendedTooltip> <name>ГруппаРегистрСведенийНастройкиВерсионированияОбъектовРасширеннаяПодсказка</name> - <id>1812</id> + <id>1819</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -610,7 +610,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>Группа3РасширеннаяПодсказка</name> - <id>1807</id> + <id>1814</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -657,7 +657,7 @@ </handlers> <extendedTooltip> <name>ИспользоватьДополнительныеРеквизитыИСведенияРасширеннаяПодсказка</name> - <id>1817</id> + <id>1824</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -691,7 +691,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеИспользоватьДополнительныеРеквизитыИСведенияРасширеннаяПодсказка</name> - <id>1819</id> + <id>1826</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -729,7 +729,7 @@ </toolTip> <extendedTooltip> <name>ГруппаИспользоватьДополнительныеРеквизитыИСведенияРасширеннаяПодсказка</name> - <id>1816</id> + <id>1823</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -752,7 +752,7 @@ <id>888</id> <items xsi:type="form:Button"> <name>СправочникНаборыДополнительныхРеквизитовИСведений</name> - <id>1582</id> + <id>1801</id> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -760,7 +760,7 @@ </userVisible> <extendedTooltip> <name>СправочникНаборыДополнительныхРеквизитовИСведенийРасширеннаяПодсказка</name> - <id>1821</id> + <id>1828</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -791,7 +791,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеНаборыДополнительныхРеквизитовИСведенийРасширеннаяПодсказка</name> - <id>1822</id> + <id>1829</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -829,7 +829,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСправочникНаборыДополнительныхРеквизитовИСведенийРасширеннаяПодсказка</name> - <id>1820</id> + <id>1827</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -864,7 +864,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>Группа4РасширеннаяПодсказка</name> - <id>1815</id> + <id>1822</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -896,7 +896,7 @@ </userVisible> <extendedTooltip> <name>ОткрытьВидыКонтактнойИнформацииРасширеннаяПодсказка</name> - <id>1824</id> + <id>1831</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -927,7 +927,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеОткрытьВидыКонтактнойИнформацииРасширеннаяПодсказка</name> - <id>1825</id> + <id>1832</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -969,7 +969,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаОткрытьВидыКонтактнойИнформацииРасширеннаяПодсказка</name> - <id>1823</id> + <id>1830</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1008,7 +1008,7 @@ </userVisible> <extendedTooltip> <name>ОткрытьПараметрыПроксиСервераРасширеннаяПодсказка</name> - <id>1828</id> + <id>1835</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1039,7 +1039,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеОткрытьПараметрыПроксиСервераРасширеннаяПодсказка</name> - <id>1829</id> + <id>1836</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1077,7 +1077,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОткрытьПараметрыПроксиСервераРасширеннаяПодсказка</name> - <id>1827</id> + <id>1834</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1109,7 +1109,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ПараметрыАдминистрированияИБРасширеннаяПодсказка</name> - <id>1831</id> + <id>1838</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1141,7 +1141,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеПараметрыАдминистрированияИБРасширеннаяПодсказка</name> - <id>1832</id> + <id>1839</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1179,7 +1179,7 @@ </toolTip> <extendedTooltip> <name>ГруппаПараметрыАдминистрированияИБРасширеннаяПодсказка</name> - <id>1830</id> + <id>1837</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1222,7 +1222,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>Группа6РасширеннаяПодсказка</name> - <id>1826</id> + <id>1833</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1265,7 +1265,7 @@ </handlers> <extendedTooltip> <name>КаталогВременныхФайловДляWindowsРасширеннаяПодсказка</name> - <id>1834</id> + <id>1841</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1314,7 +1314,7 @@ </handlers> <extendedTooltip> <name>КаталогВременныхФайловДляLinuxРасширеннаяПодсказка</name> - <id>1836</id> + <id>1843</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1356,7 +1356,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеВременныеКаталогиРасширеннаяПодсказка</name> - <id>1838</id> + <id>1845</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1396,7 +1396,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаВременныеКаталогиКластераСерверовРасширеннаяПодсказка</name> - <id>1833</id> + <id>1840</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1428,7 +1428,7 @@ </userVisible> <extendedTooltip> <name>ОткрытьНастройкиАгентаСервисаРасширеннаяПодсказка</name> - <id>1840</id> + <id>1847</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1459,7 +1459,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеОткрытьНастройкиАгентаСервисаРасширеннаяПодсказка</name> - <id>1841</id> + <id>1848</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1493,7 +1493,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаОткрытьНастройкиАгентаСервисаРасширеннаяПодсказка</name> - <id>1839</id> + <id>1846</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1597,50 +1597,6 @@ <common>true</common> </edit> </attributes> - <formCommands> - <name>РегистрСведенийНастройкиВерсионированияОбъектов</name> - <title> - <key>ru</key> - <value>Версионируемые объекты</value> - - 46 - - ru - Регистр сведений "Настройки версионирования объектов" - - - true - - - - РегистрСведенийНастройкиВерсионированияОбъектов - - - Auto - Auto - - - СправочникНаборыДополнительныхРеквизитовИСведений - - <key>ru</key> - <value>Наборы дополнительных реквизитов и сведений</value> - - 47 - - ru - Справочник наборы дополнительных реквизитов и сведений - - - true - - - - СправочникНаборыДополнительныхРеквизитовИСведений - - - Auto - Auto - ВремяТекущегоСеанса @@ -1663,6 +1619,50 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>РегистрСведенийНастройкиВерсионированияОбъектов</name> + <title> + <key>ru</key> + <value>Версионируемые объекты</value> + + 2 + + ru + Регистр сведений "Настройки версионирования объектов" + + + true + + + + РегистрСведенийНастройкиВерсионированияОбъектов + + + Auto + Auto + + + СправочникНаборыДополнительныхРеквизитовИСведений + + <key>ru</key> + <value>Наборы дополнительных реквизитов и сведений</value> + + 3 + + ru + Справочник наборы дополнительных реквизитов и сведений + + + true + + + + СправочникНаборыДополнительныхРеквизитовИСведений + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html index 4a2576353..0ea11a919 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Хранить файлы в томах на диске
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index ed981d031..d83fd7363 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -18,10 +18,22 @@ Элементы.ЧасовойПоясПрограммы.СписокВыбора.Добавить(ЧасовойПоясПрограммы); // Настройки видимости при запуске - Элементы.ГруппаОткрытьПараметрыПроксиСервера.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаПараметрыАдминистрированияИБ.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + Элементы.ГруппаОткрытьПараметрыПроксиСервера.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + Элементы.ГруппаПараметрыАдминистрированияИБ.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // СтандартныеПодсистемы.БазоваяФункциональность Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = РежимРаботы.КлиентСерверный И РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаОткрытьНастройкиАгентаСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + Элементы.ГруппаОткрытьНастройкиАгентаСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса // Обновление состояния элементов УстановитьДоступность(); @@ -36,7 +48,7 @@ // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура ЗаголовокСистемыПриИзменении(Элемент) +Процедура ЗаголовокПрограммыПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); КонецПроцедуры @@ -53,15 +65,19 @@ КонецЕсли; КонецПроцедуры +// СтандартныеПодсистемы.ВерсионированиеОбъектов &НаКлиенте Процедура ИспользоватьВерсионированиеОбъектовПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура ИспользоватьДополнительныеРеквизитыИСведенияПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства &НаКлиенте Процедура КаталогВременныхФайловДляWindowsПриИзменении(Элемент) @@ -76,19 +92,23 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.ВерсионированиеОбъектов &НаКлиенте Процедура РегистрСведенийНастройкиВерсионированияОбъектов(Команда) ОткрытьФорму("РегистрСведений.НастройкиВерсионированияОбъектов.ФормаСписка", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура СправочникНаборыДополнительныхРеквизитовИСведений(Команда) ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.ФормаСписка", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства &НаКлиенте Процедура ПоказатьВремяТекущегоСеанса(Команда) @@ -103,9 +123,7 @@ |приведенное к часовому поясу клиента.'"), Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДЛФ=T"), Формат(ДатаСервера(), "ДЛФ=T"), - Формат(ТекущаяДата(), "ДЛФ=T") - ) - ); + Формат(ТекущаяДата(), "ДЛФ=T"))); КонецПроцедуры @@ -127,9 +145,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -222,8 +238,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -231,12 +249,16 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + // СтандартныеПодсистемы.ВерсионированиеОбъектов Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьВерсионированиеОбъектов" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РегистрСведенийНастройкиВерсионированияОбъектов", "Доступность", НаборКонстант.ИспользоватьВерсионированиеОбъектов); + Элементы.РегистрСведенийНастройкиВерсионированияОбъектов.Доступность = НаборКонстант.ИспользоватьВерсионированиеОбъектов; КонецЕсли; + // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов + // СтандартныеПодсистемы.Свойства Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СправочникНаборыДополнительныхРеквизитовИСведений", "Доступность", НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения); + Элементы.СправочникНаборыДополнительныхРеквизитовИСведений.Доступность = НаборКонстант.ИспользоватьДополнительныеРеквизитыИСведения; КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form index a33116b6f..a45bd158b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Form.form @@ -451,7 +451,7 @@ 705 <key>ru</key> - <value>Звонки, встречи и запланированные взаимодействия</value> + <value>Звонки, SMS, встречи и запланированные взаимодействия</value> truetrue @@ -493,7 +493,7 @@ 1314 <key>ru</key> - <value>Регистрация звонков, встреч и запланированных взаимодействий с клиентами в программе.</value> + <value>Отправка SMS, регистрация звонков, встреч и запланированных взаимодействий с клиентами в программе.</value> truetrue diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html index d3fd5e664..dd6b7cad3 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Заголовок программы
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index 6d485a518..cb538971c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -28,6 +28,7 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// СтандартныеПодсистемы.Взаимодействия &НаКлиенте Процедура ИспользоватьПочтовыйКлиентПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -47,22 +48,30 @@ Процедура ИспользоватьПризнакРассмотреноПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.Взаимодействия +// СтандартныеПодсистемы.ЗаметкиПользователя &НаКлиенте Процедура ИспользоватьЗаметкиПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ЗаметкиПользователя +// СтандартныеПодсистемы.НапоминанияПользователя &НаКлиенте Процедура ИспользоватьНапоминанияПользователяПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.НапоминанияПользователя +// СтандартныеПодсистемы.Анкетирование &НаКлиенте Процедура ИспользоватьАнкетированиеПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.Анкетирование +// СтандартныеПодсистемы.БизнесПроцессыИЗадачи &НаКлиенте Процедура ИспользоватьБизнесПроцессыИЗадачиПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); @@ -87,16 +96,19 @@ Процедура ИспользоватьДатуИВремяВСрокахЗадачПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.БизнесПроцессыИЗадачи &НаКлиенте Процедура ОткрытьРолиИИсполнителиБизнесПроцессов(Команда) ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.АдресацияПоОбъекту",,ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -116,9 +128,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -188,8 +198,10 @@ ЭтаФорма.Прочитать(); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -197,22 +209,26 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + // СтандартныеПодсистемы.Взаимодействия Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПочтовыйКлиент" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИспользоватьПрочиеВзаимодействия", "Доступность", НаборКонстант.ИспользоватьПочтовыйКлиент); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИспользоватьПризнакРассмотрено", "Доступность", НаборКонстант.ИспользоватьПочтовыйКлиент); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОтправлятьПисьмаВФорматеHTML", "Доступность", НаборКонстант.ИспользоватьПочтовыйКлиент); + Элементы.ИспользоватьПрочиеВзаимодействия.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.ИспользоватьПризнакРассмотрено.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; + Элементы.ОтправлятьПисьмаВФорматеHTML.Доступность = НаборКонстант.ИспользоватьПочтовыйКлиент; КонецЕсли; + // Конец СтандартныеПодсистемы.Взаимодействия + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОткрытьРолиИИсполнителиБизнесПроцессов", "Доступность", НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИспользоватьПодчиненныеБизнесПроцессы", "Доступность", НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИзменятьЗаданияЗаднимЧислом", "Доступность", НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИспользоватьДатуНачалаЗадач", "Доступность", НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИспользоватьДатуИВремяВСрокахЗадач", "Доступность", НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи); + Элементы.ОткрытьРолиИИсполнителиБизнесПроцессов.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ИспользоватьПодчиненныеБизнесПроцессы.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ИзменятьЗаданияЗаднимЧислом.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ИспользоватьДатуНачалаЗадач.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; + Элементы.ИспользоватьДатуИВремяВСрокахЗадач.Доступность = НаборКонстант.ИспользоватьБизнесПроцессыИЗадачи; КонецЕсли; + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html index a2a409418..0d6db0dd0 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Почтовый клиент
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl index a2fd9f437..116af4949 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -15,8 +15,12 @@ РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); // Настройки видимости при запуске - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаИспользоватьДополнительныеОтчетыИОбработки", "Видимость", РежимРаботы.Локальный); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОткрытьДополнительныеОтчетыИОбработки", "Видимость", РежимРаботы.Локальный ИЛИ НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки); + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Элементы.ГруппаИспользоватьДополнительныеОтчетыИОбработки.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; + Элементы.ГруппаОткрытьДополнительныеОтчетыИОбработки.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный + Или НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; // при работе в модели сервиса, если включено администратором сервиса + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки // Обновление состояния элементов УстановитьДоступность(); @@ -30,20 +34,24 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте Процедура ИспользоватьДополнительныеОтчетыИОбработкиПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте Процедура СправочникДополнительныеОтчетыИОбработки(Команда) ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -63,9 +71,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -131,8 +137,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -140,8 +148,10 @@ &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОткрытьДополнительныеОтчетыИОбработки", "Доступность", НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки); + Элементы.ОткрытьДополнительныеОтчетыИОбработки.Доступность = НаборКонстант.ИспользоватьДополнительныеОтчетыИОбработки; КонецЕсли; + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form index 2b5abe5b3..c687cf473 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Form.form @@ -17,7 +17,7 @@ ОписаниеРаздела1РасширеннаяПодсказка - 1622 + 1633 Label true true @@ -59,7 +59,7 @@ Декорация1РасширеннаяПодсказка - 1623 + 1634 Label true true @@ -93,7 +93,7 @@ СправкаРасширеннаяПодсказка - 1625 + 1636 Label true true @@ -126,7 +126,7 @@ false ГруппаСправкаРасширеннаяПодсказка - 1624 + 1635 Label true true @@ -154,7 +154,7 @@ ГруппаЗаголовокРасширеннаяПодсказка - 1621 + 1632 Label true true @@ -184,7 +184,7 @@ ОбработкаЖурналРегистрацииОткрытьРасширеннаяПодсказка - 1627 + 1638 Label true true @@ -211,7 +211,7 @@ ОбработкаАктивныеПользователиОткрытьРасширеннаяПодсказка - 1628 + 1639 Label true true @@ -238,7 +238,7 @@ ОбработкаБлокировкаСоединенийСИнформационнойБазойОткрытьРасширеннаяПодсказка - 1629 + 1640 Label true true @@ -265,7 +265,7 @@ ОбработкаУдалениеПомеченныхОбъектовОткрытьРасширеннаяПодсказка - 1630 + 1641 Label true true @@ -299,7 +299,7 @@ false ГруппаЧастотныйСервисРасширеннаяПодсказка - 1626 + 1637 Label true true @@ -336,7 +336,7 @@ ОбработкаРегламентныеИФоновыеЗаданияРасширеннаяПодсказка - 1634 + 1645 Label true true @@ -367,7 +367,7 @@ ПояснениеОбработкаРегламентныеИФоновыеЗаданияРасширеннаяПодсказка - 1635 + 1646 Label true true @@ -408,7 +408,7 @@ false ГруппаОбработкаРегламентныеИФоновыеЗаданияРасширеннаяПодсказка - 1633 + 1644 Label true true @@ -439,7 +439,7 @@ РегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхРасширеннаяПодсказка - 1637 + 1648 Label true true @@ -470,7 +470,7 @@ ПояснениеРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхРасширеннаяПодсказка - 1638 + 1649 Label true true @@ -510,7 +510,7 @@ false ГруппаРегистрСведенийДатыЗапретаИзмененияДатыЗапретаИзмененияДанныхРасширеннаяПодсказка - 1636 + 1647 Label true true @@ -543,7 +543,7 @@ Группа5РасширеннаяПодсказка - 1632 + 1643 Label true true @@ -576,7 +576,7 @@ ОбработкаУправлениеИтогамиИАгрегатамиОткрытьРасширеннаяПодсказка - 1641 + 1652 Label true true @@ -608,7 +608,7 @@ ПояснениеОбработкаУправлениеИтогамиИАгрегатамиОткрытьРасширеннаяПодсказка - 1642 + 1653 Label true true @@ -648,7 +648,7 @@ false ГруппаОбработкаУправлениеИтогамиИАгрегатамиОткрытьРасширеннаяПодсказка - 1640 + 1651 Label true true @@ -683,7 +683,7 @@ УправлениеПолнотекстовымПоискомИИзвлечениемТекстовРасширеннаяПодсказка - 1644 + 1655 Label true true @@ -715,7 +715,7 @@ ПояснениеУправлениеПолнотекстовымПоискомИИзвлечениемТекстовРасширеннаяПодсказка - 1645 + 1656 Label true true @@ -755,7 +755,7 @@ false ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстовРасширеннаяПодсказка - 1643 + 1654 Label true true @@ -788,7 +788,7 @@ Группа6РасширеннаяПодсказка - 1639 + 1650 Label true true @@ -830,7 +830,7 @@ false ГруппаРегламентныеОперацииРасширеннаяПодсказка - 1631 + 1642 Label true true @@ -877,7 +877,7 @@ РезервноеКопированиеПрограммыРасширеннаяПодсказка - 1650 + 1661 Label true true @@ -916,7 +916,7 @@ ПояснениеРезервноеКопированиеПрограммыРасширеннаяПодсказка - 1651 + 1662 Label true true @@ -956,7 +956,7 @@ false ГруппаРезервноеКопированиеПрограммыРасширеннаяПодсказка - 1649 + 1660 Label true true @@ -991,7 +991,7 @@ ВосстановлениеИзРезервнойКопииРасширеннаяПодсказка - 1653 + 1664 Label true true @@ -1030,7 +1030,7 @@ ПояснениеВосстановлениеРезервнойКопииРасширеннаяПодсказка - 1654 + 1665 Label true true @@ -1070,7 +1070,7 @@ false ГруппаВосстановлениеРезервнойКопииРасширеннаяПодсказка - 1652 + 1663 Label true true @@ -1103,7 +1103,7 @@ Группа3РасширеннаяПодсказка - 1648 + 1659 Label true true @@ -1138,7 +1138,7 @@ НастройкаРезервногоКопированияРасширеннаяПодсказка - 1656 + 1667 Label true true @@ -1177,7 +1177,7 @@ ПояснениеНастройкаРезервногоКопированияРасширеннаяПодсказка - 1657 + 1668 Label true true @@ -1198,6 +1198,7 @@ Left + Top true @@ -1217,7 +1218,7 @@ false ГруппаНастройкаРезервногоКопированияРасширеннаяПодсказка - 1655 + 1666 Label true true @@ -1242,7 +1243,7 @@ Группа1РасширеннаяПодсказка - 1647 + 1658 Label true true @@ -1272,7 +1273,7 @@ Декорация18РасширеннаяПодсказка - 1659 + 1670 Label true true @@ -1309,7 +1310,7 @@ ПояснениеВосстановлениеРезервнойКопииВМоделиСервисаРасширеннаяПодсказка - 1660 + 1671 Label true true @@ -1349,7 +1350,7 @@ false ГруппаВосстановлениеРезервнойКопииВМоделиСервисаРасширеннаяПодсказка - 1658 + 1669 Label true true @@ -1392,7 +1393,7 @@ false ГруппаРезервноеКопированиеИВосстановлениеРасширеннаяПодсказка - 1646 + 1657 Label true true @@ -1441,7 +1442,7 @@ ВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка - 1663 + 1674 Label true true @@ -1475,7 +1476,7 @@ ПояснениеВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка - 1665 + 1676 Label true true @@ -1513,7 +1514,7 @@ ГруппаВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка - 1662 + 1673 Label true true @@ -1548,7 +1549,7 @@ ОбработкаОценкаПроизводительностиРасширеннаяПодсказка - 1667 + 1678 Label true true @@ -1579,7 +1580,7 @@ ПояснениеОбработкаОценкаПроизводительностиРасширеннаяПодсказка - 1668 + 1679 Label true true @@ -1617,7 +1618,7 @@ ГруппаОбработкаОценкаПроизводительностиРасширеннаяПодсказка - 1666 + 1677 Label true true @@ -1660,7 +1661,7 @@ false ГруппаОценкаПроизводительностиРасширеннаяПодсказка - 1661 + 1672 Label true true @@ -1691,7 +1692,7 @@ 1579 ЗагрузитьКлассификаторБанков - 1558 + 1625 true true @@ -1699,7 +1700,7 @@ ЗагрузитьКлассификаторБанковРасширеннаяПодсказка - 1672 + 1683 Label true true @@ -1731,7 +1732,7 @@ ПояснениеЗагрузитьКлассификаторБанковРасширеннаяПодсказка - 1673 + 1684 Label true true @@ -1771,7 +1772,7 @@ false ГруппаЗагрузитьКлассификаторБанковРасширеннаяПодсказка - 1671 + 1682 Label true true @@ -1790,19 +1791,19 @@ - ГруппаАдресныйКлассификатор + ГруппаРегистрСведенийАдресныйКлассификатор 1583 - АдресныйКлассификатор - 1561 + РегистрСведенийАдресныйКлассификатор + 1626 true true true - АдресныйКлассификаторРасширеннаяПодсказка - 1675 + РегистрСведенийАдресныйКлассификаторРасширеннаяПодсказка + 1686 Label true true @@ -1811,7 +1812,7 @@ Hyperlink - Form.Command.АдресныйКлассификатор + Form.Command.РегистрСведенийАдресныйКлассификатор Normal Auto true @@ -1833,7 +1834,7 @@ ПояснениеАдресныйКлассификаторРасширеннаяПодсказка - 1676 + 1687 Label true true @@ -1863,17 +1864,17 @@ <key>ru</key> - <value>Группа адресный классификатор</value> + <value> </value> ru - Группа адресный классификатор + 43 false - ГруппаАдресныйКлассификаторРасширеннаяПодсказка - 1674 + ГруппаРегистрСведенийАдресныйКлассификаторРасширеннаяПодсказка + 1685 Label true true @@ -1908,7 +1909,7 @@ false Группа4РасширеннаяПодсказка - 1670 + 1681 Label true true @@ -1927,19 +1928,19 @@ - ГруппаЗагрузитьКурсыВалют + ГруппаОбработкаЗагрузкаКурсовВалют 1564 - ЗагрузитьКурсыВалют - 1565 + ОбработкаЗагрузкаКурсовВалют + 1624 true true true - ЗагрузитьКурсыВалютРасширеннаяПодсказка - 1678 + ОбработкаЗагрузкаКурсовВалютРасширеннаяПодсказка + 1689 Label true true @@ -1948,7 +1949,7 @@ Hyperlink - Form.Command.ЗагрузитьКурсыВалют + Form.Command.ОбработкаЗагрузкаКурсовВалют Normal Auto true @@ -1957,7 +1958,7 @@ Auto - ПояснениеЗагрузитьКурсыВалют + ПояснениеОбработкаЗагрузкаКурсовВалют 1566 <key>ru</key> @@ -1969,8 +1970,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПояснениеЗагрузитьКурсыВалютРасширеннаяПодсказка</name> - <id>1679</id> + <name>ПояснениеОбработкаЗагрузкаКурсовВалютРасширеннаяПодсказка</name> + <id>1690</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1979,7 +1980,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПояснениеЗагрузитьКурсыВалютКонтекстноеМеню</name> + <name>ПояснениеОбработкаЗагрузкаКурсовВалютКонтекстноеМеню</name> <id>1567</id> <autoFill>true</autoFill> </contextMenu> @@ -1998,11 +1999,19 @@ <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value> </value> + + + ru + + 43 false - ГруппаЗагрузитьКурсыВалютРасширеннаяПодсказка - 1677 + ГруппаОбработкаЗагрузкаКурсовВалютРасширеннаяПодсказка + 1688 Label true true @@ -2045,7 +2054,7 @@ false ГруппаКлассификаторыРасширеннаяПодсказка - 1669 + 1680 Label true true @@ -2081,7 +2090,7 @@ ОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымРасширеннаяПодсказка - 1682 + 1693 Label true true @@ -2112,7 +2121,7 @@ ПояснениеОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымРасширеннаяПодсказка - 1683 + 1694 Label true true @@ -2142,7 +2151,7 @@ ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДаннымРасширеннаяПодсказка - 1681 + 1692 Label true true @@ -2173,7 +2182,7 @@ ОбработкаЗащитаПерсональныхДанныхРасширеннаяПодсказка - 1685 + 1696 Label true true @@ -2204,7 +2213,7 @@ ПояснениеОбработкаЗащитаПерсональныхДанныхРасширеннаяПодсказка - 1686 + 1697 Label true true @@ -2242,7 +2251,7 @@ ГруппаОбработкаЗащитаПерсональныхДанныхРасширеннаяПодсказка - 1684 + 1695 Label true true @@ -2285,7 +2294,7 @@ false ГруппаЗащитаПерсональныхДанныхРасширеннаяПодсказка - 1680 + 1691 Label true true @@ -2312,10 +2321,10 @@ Колонки1 1614 - ГруппаОбновлениеКонфигурации + ГруппаОбработкаОбновлениеКонфигурации 1460 - ОбработкаОбновлениеКонфигурацииОткрыть + ОбработкаОбновлениеКонфигурации 1452 true true @@ -2323,8 +2332,8 @@ true - ОбработкаОбновлениеКонфигурацииОткрытьРасширеннаяПодсказка - 1690 + ОбработкаОбновлениеКонфигурацииРасширеннаяПодсказка + 1701 Label true true @@ -2342,7 +2351,7 @@ Auto - ПояснениеОбработкаОбновлениеКонфигурацииОткрыть + ПояснениеОбработкаОбновлениеКонфигурации 1461 <key>ru</key> @@ -2354,8 +2363,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПояснениеОбработкаОбновлениеКонфигурацииОткрытьРасширеннаяПодсказка</name> - <id>1691</id> + <name>ПояснениеОбработкаОбновлениеКонфигурацииРасширеннаяПодсказка</name> + <id>1702</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2364,7 +2373,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПояснениеОбработкаОбновлениеКонфигурацииОткрытьКонтекстноеМеню</name> + <name>ПояснениеОбработкаОбновлениеКонфигурацииКонтекстноеМеню</name> <id>1462</id> <autoFill>true</autoFill> </contextMenu> @@ -2396,8 +2405,8 @@ <width>43</width> <horizontalStretch>false</horizontalStretch> <extendedTooltip> - <name>ГруппаОбновлениеКонфигурацииРасширеннаяПодсказка</name> - <id>1689</id> + <name>ГруппаОбработкаОбновлениеКонфигурацииРасширеннаяПодсказка</name> + <id>1700</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2440,7 +2449,7 @@ </handlers> <extendedTooltip> <name>ДетализироватьОбновлениеИБВЖурналеРегистрацииРасширеннаяПодсказка</name> - <id>1693</id> + <id>1704</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2474,7 +2483,7 @@ </userVisible> <extendedTooltip> <name>ПояснениеДетализироватьОбновлениеИБВЖурналеРегистрацииРасширеннаяПодсказка</name> - <id>1695</id> + <id>1706</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2514,7 +2523,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаДетализироватьОбновлениеИБВЖурналеРегистрацииРасширеннаяПодсказка</name> - <id>1692</id> + <id>1703</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2547,7 +2556,7 @@ </toolTip> <extendedTooltip> <name>Колонки1РасширеннаяПодсказка</name> - <id>1688</id> + <id>1699</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2565,50 +2574,93 @@ </extInfo> </items> <items xsi:type="form:FormGroup"> - <name>ГруппаОткрытьОписаниеИзмененийСистемы</name> - <id>1464</id> - <items xsi:type="form:Button"> - <name>ОткрытьОписаниеИзмененийСистемы</name> - <id>1463</id> + <name>Колонки2</name> + <id>1627</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаОткрытьОписаниеИзмененийСистемы</name> + <id>1464</id> + <items xsi:type="form:Button"> + <name>ОткрытьОписаниеИзмененийСистемы</name> + <id>1463</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка</name> + <id>1709</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>Hyperlink</type> + <commandName>CommonForm.ОписаниеИзмененийСистемы.StandardCommand.Open</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Decoration"> + <name>ПояснениеОткрытьОписаниеИзмененийСистемы</name> + <id>1465</id> + <title> + <key>ru</key> + <value>История изменений по версиям программы.</value> + + true + true + + true + + + ПояснениеОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка + 1710 + Label + true + true + + Left + + + + ПояснениеОткрытьОписаниеИзмененийСистемыКонтекстноеМеню + 1466 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - ОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка - 1697 - Label - true - true - - Left - - - Hyperlink - CommonForm.ОписаниеИзмененийСистемы.StandardCommand.Open - Normal - Auto - true - true - UserCmds - Auto - - - ПояснениеОткрытьОписаниеИзмененийСистемы - 1465 <key>ru</key> - <value>История изменений по версиям программы.</value> + <value>Группа открыть описание изменений системы</value> - true - true - - true - + + ru + Группа открыть описание изменений системы + + 43 + false - ПояснениеОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка - 1698 + ГруппаОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка + 1708 Label true true @@ -2616,19 +2668,115 @@ Left - - ПояснениеОткрытьОписаниеИзмененийСистемыКонтекстноеМеню - 1466 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтложеннаяОбработкаДанных + 1628 + + ОтложеннаяОбработкаДанных + 1629 + true + true + + true + + + ОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 1712 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОтложеннаяОбработкаДанных + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеОтложеннаяОбработкаДанных + 1630 + + <key>ru</key> + <value>Ход выполнения отложенных процедур обновления версии программы</value> + + true + true + + true + + + ПояснениеОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 1713 + Label + true + true + + Left + + + + ПояснениеОтложеннаяОбработкаДанныхКонтекстноеМеню + 1631 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа отложенная обработка данных</value> + + + ru + Группа отложенная обработка данных + + 43 + + ГруппаОтложеннаяОбработкаДанныхРасширеннаяПодсказка + 1711 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -2636,19 +2784,9 @@ true - - <key>ru</key> - <value>Группа открыть описание изменений системы</value> - - - ru - Группа открыть описание изменений системы - - 43 - false - ГруппаОткрытьОписаниеИзмененийСистемыРасширеннаяПодсказка - 1696 + Колонки2РасширеннаяПодсказка + 1707 Label true true @@ -2658,7 +2796,6 @@ UsualGroup - Vertical Auto true true @@ -2687,7 +2824,7 @@ false ГруппаОбновлениеИОписаниеИзмененийРасширеннаяПодсказка - 1687 + 1698 Label true true @@ -2713,6 +2850,10 @@ -1 Left + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере @@ -2780,90 +2921,6 @@ - - ПоддержкаРезервногоКопированияВМоделиСервиса - - <key>ru</key> - <value>Поддержка резервного копирования в модели сервиса</value> - - 2 - - 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 - - - - ЗагрузитьКурсыВалют - - - FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме - Auto - Auto - УправлениеПолнотекстовымПоискомИИзвлечениемТекстов @@ -2886,6 +2943,91 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>РегистрСведенийАдресныйКлассификатор</name> + <title> + <key>ru</key> + <value>Адресный классификатор</value> + + 1 + + ru + + + + true + + + + ОткрытьАдресныйКлассификатор + + + Auto + Auto + + + ОбработкаЗагрузкаКурсовВалют + + <key>ru</key> + <value>Загрузить курсы валют</value> + + 2 + + ru + Загрузить курсы валют с веб-сайта РБК + + + true + + + + ОбработкаЗагрузкаКурсовВалют + + + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме + Auto + Auto + + + ЗагрузитьКлассификаторБанков + + <key>ru</key> + <value>Загрузить классификатор банков</value> + + 3 + + ru + Загрузить классификатор банков + + + true + + + + ЗагрузитьКлассификаторБанков + + + Auto + Auto + + + ОтложеннаяОбработкаДанных + + <key>ru</key> + <value>Отложенная обработка данных</value> + + 5 + + true + + + + ОтложеннаяОбработкаДанных + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html index 8564a5619..d9b61810e 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } -В данной панели осуществляется контроль за состоянием программы, резервное копирование и восстановление, обновление версии, оптимизация быстродействия.

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

            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl index 80ed8d713..2d851da81 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl @@ -14,29 +14,80 @@ РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); - Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных") Тогда - Модуль = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("РезервноеКопированиеОбластейДанных"); - ПоддержкаРезервногоКопированияВМоделиСервиса = Модуль.РезервноеКопированиеИспользуется(); - КонецЕсли; - // Настройки видимости при запуске - Элементы.ГруппаОбработкаРегламентныеИФоновыеЗадания.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаОбработкаУправлениеИтогамиИАгрегатамиОткрыть.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы ИЛИ РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса; - Элементы.ГруппаВосстановлениеРезервнойКопии.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаВосстановлениеРезервнойКопииВМоделиСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса; - Элементы.ГруппаОценкаПроизводительности.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаКлассификаторы.Видимость = РежимРаботы.Локальный; - Элементы.ГруппаЗагрузитьКлассификаторБанков.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы; + + // СтандартныеПодсистемы.РегламентныеЗадания + Элементы.ГруппаОбработкаРегламентныеИФоновыеЗадания.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами + Элементы.ГруппаОбработкаУправлениеИтогамиИАгрегатамиОткрыть.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами + + // СтандартныеПодсистемы.ПолнотекстовыйПоиск + Элементы.ГруппаУправлениеПолнотекстовымПоискомИИзвлечениемТекстов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск + + // СтандартныеПодсистемы.РезервноеКопированиеИБ + ПоддержкаРезервногоКопированияВМоделиСервиса = Истина; + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + ПоддержкаРезервногоКопированияВМоделиСервиса = РезервноеКопированиеОбластейДанных.РезервноеКопированиеИспользуется(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = ((РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы) + ИЛИ (РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса); + ОбновитьНастройкиРезервногоКопирования(); + Элементы.ГруппаВосстановлениеРезервнойКопии.Видимость = (РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы; + Элементы.ГруппаВосстановлениеРезервнойКопииВМоделиСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы + И ПоддержкаРезервногоКопированияВМоделиСервиса; + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + + // СтандартныеПодсистемы.ОценкаПроизводительности + Элементы.ГруппаОценкаПроизводительности.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ОценкаПроизводительности + + Элементы.ГруппаКлассификаторы.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; + + // СтандартныеПодсистемы.АдресныйКлассификатор + Элементы.ГруппаРегистрСведенийАдресныйКлассификатор.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + // СтандартныеПодсистемы.Валюты + Элементы.ГруппаОбработкаЗагрузкаКурсовВалют.Видимость = РежимРаботы.Локальный; + // Конец СтандартныеПодсистемы.Валюты + + // СтандартныеПодсистемы.Банки + Элементы.ГруппаЗагрузитьКлассификаторБанков.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.Банки + + // СтандартныеПодсистемы.ЗащитаПерсональныхДанных Элементы.ГруппаОткрытьНастройкиРегистрацииСобытийДоступаКПерсональнымДанным.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаОбновлениеКонфигурации.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + Элементы.ГруппаОбработкаОбновлениеКонфигурации.Видимость = РежимРаботы.Локальный И РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.ЭтоLinuxКлиент; + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + Элементы.ГруппаДетализироватьОбновлениеИБВЖурналеРегистрации.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ // Обновление состояния элементов УстановитьДоступность(); КонецПроцедуры +// СтандартныеПодсистемы.РезервноеКопированиеИБ +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + + Если ИмяСобытия = "ЗакрытаФормаНастройкиРезервногоКопирования" Тогда + ОбновитьНастройкиРезервногоКопирования(); + КонецЕсли; + + +КонецПроцедуры +// Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + &НаКлиенте Процедура ПриЗакрытии() ОбновитьИнтерфейсПрограммы(); @@ -45,25 +96,32 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// СтандартныеПодсистемы.РезервноеКопированиеИБ &НаКлиенте Процедура РезервноеКопированиеПрограммыНажатие(Элемент) - Если РежимРаботы.Локальный Тогда - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма", , ЭтаФорма); - ИначеЕсли РежимРаботы.МодельСервиса Тогда + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + Если РежимРаботы.МодельСервиса Тогда ОткрытьФорму("ОбщаяФорма.СозданиеРезервнойКопии", , ЭтаФорма); + Возврат; КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НастройкаРезервногоКопированияНажатие(Элемент) - Если РежимРаботы.Локальный Тогда - ОткрытьФорму("Обработка.НастройкаРезервногоКопированияИБ.Форма", , ЭтаФорма); - ИначеЕсли РежимРаботы.МодельСервиса Тогда - ОткрытьФорму("ОбщаяФорма.НастройкиРезервногоКопированияПриложений", , ЭтаФорма); + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + Если РежимРаботы.МодельСервиса Тогда + ОткрытьФорму("Обработка.НастройкаРезервногоКопированияПриложения.Форма", , ЭтаФорма); + Возврат; КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + + ОткрытьФорму("Обработка.НастройкаРезервногоКопированияИБ.Форма", , ЭтаФорма); КонецПроцедуры @@ -73,47 +131,68 @@ ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.РезервноеКопированиеИБ +// СтандартныеПодсистемы.ОценкаПроизводительности &НаКлиенте Процедура ВыполнятьЗамерыПроизводительностиПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ОценкаПроизводительности +// СтандартныеПодсистемы.ОбновлениеВерсииИБ &НаКлиенте Процедура ДетализироватьОбновлениеИБВЖурналеРегистрацииПриИзменении(Элемент) Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// СтандартныеПодсистемы.Валюты &НаКлиенте -Процедура ЗагрузитьКурсыВалют(Команда) +Процедура ОбработкаЗагрузкаКурсовВалют(Команда) ОткрытьФорму("Обработка.ЗагрузкаКурсовВалют.Форма"); КонецПроцедуры +// Конец СтандартныеПодсистемы.Валюты +// СтандартныеПодсистемы.Банки &НаКлиенте Процедура ЗагрузитьКлассификаторБанков(Команда) ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); КонецПроцедуры +// Конец СтандартныеПодсистемы.Банки +// СтандартныеПодсистемы.АдресныйКлассификатор &НаКлиенте Процедура ОткрытьАдресныйКлассификатор(Команда) ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АдресныйКлассификатор"); КонецПроцедуры +// Конец СтандартныеПодсистемы.АдресныйКлассификатор +// СтандартныеПодсистемы.ПолнотекстовыйПоиск &НаКлиенте Процедура ОбработкаУправлениеПолнотекстовымПоиском(Команда) ОткрытьФорму("Обработка.ПанельАдминистрированияБСП.Форма.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов", , ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск + +// СтандартныеПодсистемы.ОбновлениеВерсииИБ +&НаКлиенте +Процедура ОтложеннаяОбработкаДанных(Команда) + ПараметрыФормы = Новый Структура("ОткрытиеИзПанелиАдминистрирования", Истина); + ОткрытьФорму("Обработка.ОбновлениеИнформационнойБазы.Форма.ИндикацияХодаОтложенногоОбновленияИБ", ПараметрыФормы); +КонецПроцедуры +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -133,9 +212,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -201,8 +278,11 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + КонецЕсли; КонецПроцедуры @@ -212,12 +292,23 @@ Если РежимРаботы.ЭтоАдминистраторСистемы Тогда + // СтандартныеПодсистемы.ОценкаПроизводительности Если РеквизитПутьКДанным = "НаборКонстант.ВыполнятьЗамерыПроизводительности" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбработкаОценкаПроизводительности", "Доступность", НаборКонстант.ВыполнятьЗамерыПроизводительности); + Элементы.ОбработкаОценкаПроизводительности.Доступность = НаборКонстант.ВыполнятьЗамерыПроизводительности; КонецЕсли; + // Конец СтандартныеПодсистемы.ОценкаПроизводительности КонецЕсли; КонецПроцедуры - +&НаСервере +Процедура ОбновитьНастройкиРезервногоКопирования() + + // СтандартныеПодсистемы.РезервноеКопированиеИБ + Если (РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы Тогда + Элементы.ПояснениеНастройкаРезервногоКопирования.Заголовок = РезервноеКопированиеИБСервер.ТекущаяНастройкаРезервногоКопирования(); + КонецЕсли; + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form index 62ad97429..c99f4cdf9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Form.form @@ -1052,12 +1052,12 @@ РезультатыСинхронизацииДанных <key>ru</key> - <value>Результаты синхронизации данных</value> + <value>Предупреждения при синхронизации данных</value> 1 ru - Результаты синхронизации данных + Предупреждения, возникающие в процессе синхронизации данных true diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html index b5588fb61..9248efa2d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html @@ -4,14 +4,14 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Журнал регистрации
          • Просмотр событий и действий, которые происходили в регламентных заданиях или в процессе работы пользователей в программе.
          • Активные пользователи
          • +
          • Предупреждения при синхронизации данных
          • Синхронизация данных
          • Флажок синхронизации данных с другими программами, например с 1С:Бухгалтерия предприятия, редакция 3.0.
          • Синхронизация данных
          • Настройка и выполнение синхронизации данных с другими программами.
            -
          • Результаты синхронизации данных
          • Просмотр непроведенных документов, незаполненных реквизитов, конфликтов и непринятых по дате запрета.
          • Префикс этой информационной базы
          • Префикс добавляется автоматически к кодам элементов справочников и номерам документов для того, чтобы различать программы, в которых они были введены, и избежать дублирования данных.
            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl index 44b8d9653..a50885c6c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl @@ -74,8 +74,7 @@ ОткрытьФорму( "РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", Новый Структура("ДатыЗапретаЗагрузкиДанных", Истина), - ЭтаФорма - ); + ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -101,9 +100,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -169,8 +166,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -180,9 +179,9 @@ Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСинхронизациюДанных" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПрефиксУзлаРаспределеннойИнформационнойБазы", "Доступность", НаборКонстант.ИспользоватьСинхронизациюДанных); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НастройкиСинхронизацииДанных", "Доступность", НаборКонстант.ИспользоватьСинхронизациюДанных); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДатыЗапретаЗагрузкиДанных", "Доступность", НаборКонстант.ИспользоватьСинхронизациюДанных); + Элементы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.НастройкиСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.ДатыЗапретаЗагрузкиДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html index 616b4c990..6e0d78ac7 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl index 963d8be7a..a4b5a50de 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораАбонента/Module.bsl @@ -35,8 +35,7 @@ ОткрытьФорму( "РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", Новый Структура("ДатыЗапретаЗагрузкиДанных", Истина), - ЭтаФорма - ); + ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -57,9 +56,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -123,8 +120,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form index 83ba85f98..e1a8bad9b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Form.form @@ -31,7 +31,7 @@ ИспользоватьСинхронизациюДанныхРасширеннаяПодсказка - 2053 + 2056 Label true true @@ -66,7 +66,7 @@ ПояснениеСинхронизацияДанныхСПриложениямиВИнтернете1РасширеннаяПодсказка - 2055 + 2058 Label true true @@ -104,7 +104,7 @@ ГруппаСинхронизацияДанныхФлагРасширеннаяПодсказка - 2052 + 2055 Label true true @@ -137,7 +137,7 @@ СинхронизацияДанныхГруппаРасширеннаяПодсказка - 2051 + 2054 Label true true @@ -168,7 +168,7 @@ Декорация2РасширеннаяПодсказка - 2057 + 2060 Label true true @@ -216,7 +216,7 @@ ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернетеРасширеннаяПодсказка - 2060 + 2063 Label true true @@ -250,7 +250,7 @@ ПояснениеСинхронизацияДанныхСПриложениямиВИнтернетеРасширеннаяПодсказка - 2062 + 2065 Label true true @@ -288,7 +288,7 @@ СинхронизацияДанныхСПриложениямиВИнтернетеРасширеннаяПодсказка - 2059 + 2062 Label true true @@ -331,7 +331,7 @@ ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммойРасширеннаяПодсказка - 2064 + 2067 Label true true @@ -365,7 +365,7 @@ ПояснениеСинхронизацияДанныхСПрограммамиВЛокальномРежимеРасширеннаяПодсказка - 2066 + 2069 Label true true @@ -395,7 +395,7 @@ СинхронизацияДанныхСПрограммамиВЛокальномРежимеРасширеннаяПодсказка - 2063 + 2066 Label true true @@ -438,7 +438,7 @@ ИспользоватьАвтономнуюРаботуВМоделиСервисаРасширеннаяПодсказка - 2068 + 2071 Label true true @@ -472,7 +472,7 @@ ПояснениеАвтономнаяРаботаРасширеннаяПодсказка - 2070 + 2073 Label true true @@ -510,7 +510,7 @@ АвтономнаяРаботаРасширеннаяПодсказка - 2067 + 2070 Label true true @@ -535,7 +535,7 @@ Группа1РасширеннаяПодсказка - 2058 + 2061 Label true true @@ -568,7 +568,7 @@ СинхронизацияДанныхПодчиненнаяГруппировкаРасширеннаяПодсказка - 2056 + 2059 Label true true @@ -600,7 +600,7 @@ ОбщиеПараметрыДляВсехОбластейДанныхРасширеннаяПодсказка - 2050 + 2053 Label true true @@ -631,7 +631,7 @@ МониторСинхронизацииДанныхРасширеннаяПодсказка - 2072 + 2075 Label true true @@ -662,7 +662,7 @@ ПояснениеМониторСинхронизацииДанныхРасширеннаяПодсказка - 2073 + 2076 Label true true @@ -698,7 +698,7 @@ НастройкиТранспортаОбменаРасширеннаяПодсказка - 2075 + 2078 Label true true @@ -729,7 +729,7 @@ ПояснениеНастройкиТранспортаОбменаРасширеннаяПодсказка - 2076 + 2079 Label true true @@ -762,7 +762,7 @@ НастройкиТранспортаОбменаОбластейДанныхРасширеннаяПодсказка - 2077 + 2080 Label true true @@ -793,7 +793,7 @@ ПояснениеНастройкиТранспортаОбменаОбластейДанныхРасширеннаяПодсказка - 2078 + 2081 Label true true @@ -823,7 +823,7 @@ НастройкиТранспортаОбменаГруппаРасширеннаяПодсказка - 2074 + 2077 Label true true @@ -842,6 +842,70 @@ Auto + + ПравилаДляОбменаДанными + 2050 + true + true + + true + + + ПравилаДляОбменаДаннымиРасширеннаяПодсказка + 2082 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПравилаДляОбменаДанными + Normal + Auto + true + true + UserCmds + Auto + + + ПояснениеПравилаДляОбменаДанными + 2051 + + <key>ru</key> + <value>Правила конвертации и правила регистрации объектов.</value> + + true + true + + true + + + ПояснениеПравилаДляОбменаДаннымиРасширеннаяПодсказка + 2083 + Label + true + true + + Left + + + + ПояснениеПравилаДляОбменаДаннымиКонтекстноеМеню + 2052 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true @@ -853,7 +917,7 @@ ГруппаСинхронизацияДанныхМониторСинхронизацииДанныхРасширеннаяПодсказка - 2071 + 2074 Label true true @@ -981,6 +1045,28 @@ Auto Auto + + ПравилаДляОбменаДанными + + <key>ru</key> + <value>Правила для обмена данными</value> + + 4 + + ru + Правила для обмена данными + + + true + + + + ПравилаДляОбменаДанными + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html index 616b4c990..6e0d78ac7 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

          • Синхронизация данных
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl index adeadb777..4d2cd65e7 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl @@ -54,6 +54,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПравилаДляОбменаДанными(Команда) + + ОткрытьФорму("РегистрСведений.ПравилаДляОбменаДанными.ФормаСписка",, ЭтаФорма); + +КонецПроцедуры + &НаКлиенте Процедура ИспользоватьСинхронизациюДанныхПриИзменении(Элемент) @@ -106,9 +113,7 @@ #КонецЕсли КонецЕсли; - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -174,8 +179,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -184,8 +191,8 @@ Процедура УстановитьДоступность(РеквизитПутьКДанным = "") Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСинхронизациюДанных" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СинхронизацияДанныхПодчиненнаяГруппировка", "Доступность", НаборКонстант.ИспользоватьСинхронизациюДанных); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаСинхронизацияДанныхМониторСинхронизацииДанных", "Доступность", НаборКонстант.ИспользоватьСинхронизациюДанных); + Элементы.СинхронизацияДанныхПодчиненнаяГруппировка.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; + Элементы.ГруппаСинхронизацияДанныхМониторСинхронизацииДанных.Доступность = НаборКонстант.ИспользоватьСинхронизациюДанных; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 5e6582531..991060780 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

            Команды управления полнотекстовым поиском:

          • Синхронизация данных
          • diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index 744176fae..6c498948f 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -67,9 +67,7 @@ ОбновитьИнтерфейс = Истина; #КонецЕсли - Если Результат.Свойство("ОповещениеФорм") Тогда - Оповестить(Результат.ОповещениеФорм.ИмяСобытия, Результат.ОповещениеФорм.Параметр, Результат.ОповещениеФорм.Источник); - КонецЕсли; + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтаФорма, Результат); КонецПроцедуры @@ -80,8 +78,7 @@ Процедура ОбновитьИндекс(Команда) Состояние( НСтр("ru = 'Идет обновление полнотекстового индекса... - |Пожалуйста, подождите.'") - ); + |Пожалуйста, подождите.'")); ОбновитьИндексСервер(); @@ -92,8 +89,7 @@ Процедура ОчиститьИндекс(Команда) Состояние( НСтр("ru = 'Идет очистка полнотекстового индекса... - |Пожалуйста, подождите.'") - ); + |Пожалуйста, подождите.'")); ОчиститьИндексСервер(); @@ -117,7 +113,7 @@ &НаКлиенте Процедура ЗапуститьИзвлечениеТекстов(Команда) - Если РежимРаботы.Локальный Тогда + Если РежимРаботы.Локальный Или РежимРаботы.Автономный Тогда ИмяОткрываемойФормы = "Обработка.АвтоматическоеИзвлечениеТекстов.Форма"; Иначе ИмяОткрываемойФормы = "Обработка.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.Форма"; @@ -149,16 +145,14 @@ Если МетаданныеПредопределенного = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Регламентное задание ""%1"" не найдено в метаданных.'"), - ИмяПредопределенного - ); + ИмяПредопределенного); КонецЕсли; РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(МетаданныеПредопределенного); Если РегламентноеЗадание = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Регламентное задание ""%1"" не найдено.'"), - ИмяПредопределенного - ); + ИмяПредопределенного); КонецЕсли; Возврат РегламентноеЗадание.УникальныйИдентификатор; @@ -251,8 +245,10 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник", "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - Результат.Вставить("ОповещениеФорм", ОповещениеФорм); + СтандартныеПодсистемыКлиентСервер.РезультатВыполненияДобавитьОповещениеОткрытыхФорм(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); + // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; КонецПроцедуры @@ -268,15 +264,15 @@ Если РеквизитПутьКДанным = "ИзвлекатьТекстыФайловНаСервере" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаРедактироватьРегламентноеЗадание", "Доступность", НаборКонстант.ИзвлекатьТекстыФайловНаСервере); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаЗапуститьИзвлечениеТекстов", "Доступность", НЕ НаборКонстант.ИзвлекатьТекстыФайловНаСервере); + Элементы.ГруппаРедактироватьРегламентноеЗадание.Доступность = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + Элементы.ГруппаЗапуститьИзвлечениеТекстов.Доступность = НЕ НаборКонстант.ИзвлекатьТекстыФайловНаСервере; КонецЕсли; Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПолнотекстовыйПоиск" ИЛИ РеквизитПутьКДанным = "" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаУправлениеПолнотекстовымПоиском", "Доступность", НаборКонстант.ИспользоватьПолнотекстовыйПоиск); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаАвтоматическоеИзвлечениеТекстов", "Доступность", НаборКонстант.ИспользоватьПолнотекстовыйПоиск); + Элементы.ГруппаУправлениеПолнотекстовымПоиском.Доступность = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Доступность = НаборКонстант.ИспользоватьПолнотекстовыйПоиск; КонецЕсли; @@ -298,7 +294,7 @@ СтатусИндекса = НСтр("ru = 'Полнотекстовый поиск отключен'"); КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбновитьИндекс", "Доступность", ФлагДоступность); + Элементы.ОбновитьИндекс.Доступность = ФлагДоступность; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form new file mode 100644 index 000000000..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Form.form @@ -0,0 +1,43 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + String + + + + true + + + true + +
            true
            +
            + + + + +
            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index 8dfced4c5..8382c750c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            См. также:

            diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo index ecb4555f0..330d2fbe2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ПанельАдминистрированияБСП.mdo @@ -9,6 +9,7 @@ ru Панель администрирования БСП + DataProcessor.ПанельАдминистрированияБСП.Form.Форма ru @@ -154,6 +155,15 @@ PersonalComputer MobileDevice + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + ПоддержкаИОбслуживание diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index 8fb3fafe2..16cf606b4 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -299,7 +299,8 @@ ИмяДляЖурнала = ВерсияСтруктура.Текст; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Ошибка переноса файла в том'"), + НСтр("ru = 'Файлы.Ошибка переноса файла в том'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ФайлСсылка, @@ -315,7 +316,8 @@ ИмяДляЖурнала = ВерсияСтруктура.Текст; ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Начат перенос файла в том'"), + НСтр("ru = 'Файлы.Начат перенос файла в том'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ФайлСсылка, @@ -369,8 +371,7 @@ ВерсияСсылка.Расширение, ВерсияСсылка.Размер, ФайлСсылка.Зашифрован, - ВерсияСсылка.ДатаМодификацииУниверсальная // чтобы все файлы не попали в одну папку - за сегодняшний день - подставляем дату создания файла - ); + ВерсияСсылка.ДатаМодификацииУниверсальная); // чтобы все файлы не попали в одну папку - за сегодняшний день - подставляем дату создания файла ВерсияОбъект.ПутьКФайлу = ПутьКФайлуНаТоме; ВерсияОбъект.Том = СсылкаНаТом.Ссылка; @@ -386,7 +387,8 @@ РаботаСФайламиСлужебныйВызовСервера.УдалитьЗаписьИзРегистраХранимыеФайлыВерсий(ВерсияСсылка); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Завершен перенос файла в том'"), + НСтр("ru = 'Файлы.Завершен перенос файла в том'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ФайлСсылка, @@ -408,7 +410,8 @@ МассивФайловСОшибками.Добавить(СтруктураОшибки); ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Ошибка переноса файла в том'"), + НСтр("ru = 'Файлы.Ошибка переноса файла в том'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, , ФайлСсылка, diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html index f52b7756a..20b0433ef 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html @@ -1 +1 @@ -Обработка предназначена для переноса файлов, хранящихся в информационной базе в тома хранения файлов. При этом в настройках программы должна быть включена настройка "Хранить файлы в томах на диске". \ No newline at end of file +Обработка предназначена для переноса файлов, хранящихся в информационной базе в тома хранения файлов. При этом в настройках программы должна быть включена настройка "Хранить файлы в томах на диске". \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl index 455c5cdb6..018162669 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Commands/ПолнотекстовыйПоиск/CommandModule.bsl @@ -9,7 +9,6 @@ , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index 74f1361cc..f9336ce74 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -7,6 +7,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; ИсторияПоиска = ИсторияПоиска(); Если ТипЗнч(ИсторияПоиска) = Тип("Массив") Тогда diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl index 35b549a71..b9313269b 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Форма/Module.bsl @@ -105,17 +105,20 @@ КонецЕсли; Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда - ЧастьURL = ЭлементHTML.pathName; - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ЧастьURL, "/"); + + Платформа83 = ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83(); + + ЧастьURL = ?(Платформа83, ЭлементHTML.outerHTML, ЭлементHTML.pathName); + Позиция = ?(Платформа83, Найти(ЧастьURL, "sel_num="), СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ЧастьURL, "/")); Если Позиция <> 0 Тогда - ЧастьURL = Сред(ЧастьURL, Позиция + 1); - КонецЕсли; - + ЧастьURL = ?(Платформа83, Сред(ЧастьURL, Позиция+9, 1), Сред(ЧастьURL, Позиция + 1)); + КонецЕсли; + НомерВСписке = Число(ЧастьURL); СтруктураРезультата = РезультатыПоиска[НомерВСписке].Значение; ВыбраннаяСтрока = СтруктураРезультата.Значение; - МассивОбъектов = СтруктураРезультата.ЗначенияДляОткрытия; - + МассивОбъектов = СтруктураРезультата.ЗначенияДляОткрытия; + Если МассивОбъектов.Количество() = 1 Тогда ОткрытьЗначениеПоиска(МассивОбъектов[0]); ИначеЕсли МассивОбъектов.Количество() <> 0 Тогда @@ -128,9 +131,10 @@ ОткрытьЗначениеПоиска(ВыбранныйОбъект.Значение); КонецЕсли; КонецЕсли; - + СтандартнаяОбработка = Ложь; КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -223,8 +227,7 @@ НСтр("ru = 'Показаны %1 - %2 из %3'"), Формат(ТекущаяПозиция + 1, "ЧН=0; ЧГ="), Формат(ТекущаяПозиция + РезультатыПоиска.Количество(), "ЧН=0; ЧГ="), - Формат(ПолноеКоличество, "ЧН=0; ЧГ=") - ); + Формат(ПолноеКоличество, "ЧН=0; ЧГ=")); Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); Элементы.Назад.Доступность = (ТекущаяПозиция > 0); @@ -246,8 +249,7 @@ |
          • Убедитесь, что все слова написаны без ошибок. |
          • Попробуйте использовать другие ключевые слова. |
          • Попробуйте уменьшить количество искомых слов.'"), - СокрЛП(СтрокаПоиска) - ); + СокрЛП(СтрокаПоиска)); HTMLТекст = " @@ -405,8 +407,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска", , - Строки - ); + Строки); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html index 7a01f43fa..44a69acbf 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 4b3f4f8c3..672bd3170 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -6980,6 +6980,9 @@ true + + StdPicture.Refresh + ОбновитьИнформациюСопоставленияДляСтроки @@ -7071,7 +7074,7 @@ 2 ru - Выполнить загрузку данных всех таблиц + Получить данные всех таблиц true @@ -7097,7 +7100,7 @@ 3 ru - Выполнить загрузку данных + Получить данные true diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 3fdd5f793..8f214e0ac 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -44,8 +44,7 @@ Иначе - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Непосредственное открытие помощника не предусмотрено.'"), Отказ); - Возврат; + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); КонецЕсли; @@ -186,25 +185,25 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОбщийПериодДокументовОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение.ДействиеВыбора=1 Тогда - // Отбор и период всех документов - УстановитьПараметрыДополненияВсехДокументов(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=2 Тогда - // Детальная настройка - УстановитьПараметрыДополненияДетально(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=3 Тогда - // Обновление настроек - ДополнениеВыгрузкиПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; - КонецЕсли; - + + Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение.ДействиеВыбора=1 Тогда + // Отбор и период всех документов + УстановитьПараметрыДополненияВсехДокументов(ВыбранноеЗначение); + + ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=2 Тогда + // Детальная настройка + УстановитьПараметрыДополненияДетально(ВыбранноеЗначение); + + ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=3 Тогда + // Обновление настроек + ДополнениеВыгрузкиПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -263,11 +262,10 @@ &НаКлиенте Процедура ОткрытьНастройкуРасписания(Команда) - ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); + ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ОткрытьФорму("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Страница СтраницаНачала @@ -429,7 +427,7 @@ &НаКлиенте Процедура ВыполнитьЗагрузкуДанныхВсехТаблиц(Команда) - НСтрока = НСтр("ru = 'Выполнить загрузку всех данных в информационную базу?'"); + НСтрока = НСтр("ru = 'Получить все данные в информационную базу?'"); Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Да); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; @@ -608,68 +606,65 @@ &НаКлиенте Процедура ДополнениеВыгрузкиИсторияОтборов(Команда) - - // Выбор из меню - списка - СписокВариантов = ПрочитатьСписокВариантовНастроекСервер(); - - Текст = НСтр("ru='Сохранить текущую настройку...'"); - СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); - - ВыбраныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); - Если ВыбраныйВариант=Неопределено Тогда - Возврат; - КонецЕсли; - - ПредставлениеНастройки = ВыбраныйВариант.Значение; - Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); - - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки); - КонецЕсли; - - ИначеЕсли ПредставлениеНастройки=1 Тогда - // Форма всех настроек - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеСоставаНастроек", - Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", - Истина, 3, - ДополнениеВыгрузки, ДополнениеВыгрузкиПредставлениеНастройки - ), Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); - КонецЕсли; - + + // Выбор из меню - списка + СписокВариантов = ПрочитатьСписокВариантовНастроекСервер(); + + Текст = НСтр("ru='Сохранить текущую настройку...'"); + СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); + + ВыбранныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); + Если ВыбранныйВариант=Неопределено Тогда + Возврат; + КонецЕсли; + + ПредставлениеНастройки = ВыбранныйВариант.Значение; + Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); + + ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки); + КонецЕсли; + + ИначеЕсли ПредставлениеНастройки=1 Тогда + // Форма всех настроек + ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеСоставаНастроек", + Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", + Истина, 3, ДополнениеВыгрузки, ДополнениеВыгрузкиПредставлениеНастройки + ), Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы.Очистить(); - УстановитьОписаниеДополненияОбщегоОтбора(); - КонецЕсли; + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы.Очистить(); + УстановитьОписаниеДополненияОбщегоОтбора(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); - УстановитьОписаниеДополненияДетально(); - КонецЕсли; + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); + УстановитьОписаниеДополненияДетально(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиСоставВыгрузки(Команда) ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.СоставВыгрузки", - Новый Структура("АдресОбъекта", АдресОбъектаДополнительнойВыгрузки() ) - ); + Новый Структура("АдресОбъекта", АдресОбъектаДополнительнойВыгрузки() )); КонецПроцедуры @@ -687,8 +682,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - WSПароль - ); + WSПароль); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); @@ -715,8 +709,7 @@ Отказ, ИдентификаторФайлаПакетаДанных, ИдентификаторФайла, - WSПароль - ); + WSПароль); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); @@ -747,8 +740,7 @@ Если Не Отказ Тогда ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, - Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, ОбработкаОбъект.НомерВходящегоСообщения - ); + Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, ОбработкаОбъект.НомерВходящегоСообщения); КонецЕсли; Иначе @@ -793,8 +785,7 @@ // сохраняем данные статистики сопоставления ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, - Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения - ); + Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения); ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); @@ -816,8 +807,7 @@ // сохраняем данные статистики сопоставления ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, - Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения - ); + Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения); ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); @@ -842,8 +832,7 @@ // сохраняем данные статистики сопоставления ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, - Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения - ); + Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных, Объект.НомерВходящегоСообщения); ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); @@ -872,8 +861,7 @@ КоллекцияЭлементовДерева.Очистить(); ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, - ОбменДаннымиСервер.ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) - ); + ОбменДаннымиСервер.ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики)); КонецПроцедуры @@ -1174,8 +1162,7 @@ ИдентификаторОперации, ИдентификаторФайла, Истина, - WSПароль - ); + WSПароль); КонецПроцедуры @@ -1184,43 +1171,41 @@ РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; - - ВидТранспортаСообщенийОбменаПоУмолчанию = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(Объект.УзелИнформационнойБазы); + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + + ВидТранспортаСообщенийОбменаПоУмолчанию = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(Объект.УзелИнформационнойБазы); НастроенныеВидыТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастроенныеВидыТранспорта(Объект.УзелИнформационнойБазы); - ТекущийВидТранпорта = Объект.ВидТранспортаСообщенийОбмена; - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); - - СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = Новый Цвет; - - Если СписокВыбораТранспорта.НайтиПоЗначению(ТекущийВидТранпорта)<>Неопределено Тогда - // Не меняем - - ИначеЕсли СписокВыбораТранспорта.НайтиПоЗначению(ВидТранспортаСообщенийОбменаПоУмолчанию)<>Неопределено Тогда - - Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаСообщенийОбменаПоУмолчанию; - - ИначеЕсли СписокВыбораТранспорта.Количество()>0 Тогда + ТекущийВидТранспорта = Объект.ВидТранспортаСообщенийОбмена; + + ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); + + СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; + + Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = Новый Цвет; + + Если СписокВыбораТранспорта.НайтиПоЗначению(ТекущийВидТранспорта)<>Неопределено Тогда + // Не меняем + + ИначеЕсли СписокВыбораТранспорта.НайтиПоЗначению(ВидТранспортаСообщенийОбменаПоУмолчанию)<>Неопределено Тогда + + Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаСообщенийОбменаПоУмолчанию; + + ИначеЕсли СписокВыбораТранспорта.Количество()>0 Тогда Объект.ВидТранспортаСообщенийОбмена = СписокВыбораТранспорта[0].Значение; - - Иначе - // Ничего нет - Объект.ВидТранспортаСообщенийОбмена = Неопределено; - - СписокВыбораТранспорта.Очистить(); - СписокВыбораТранспорта.Добавить(Неопределено, - НСтр("ru='подключение не настроено'") - ); - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст - КонецЕсли; - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Заголовок = СписокВыбораТранспорта[0].Представление; - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость = СписокВыбораТранспорта.Количество()=1; - Элементы.ВидТранспортаСообщенийОбмена.Видимость= Не Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость; + + Иначе + // Ничего нет + Объект.ВидТранспортаСообщенийОбмена = Неопределено; + + СписокВыбораТранспорта.Очистить(); + СписокВыбораТранспорта.Добавить(Неопределено, НСтр("ru='подключение не настроено'") ); + + Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст + КонецЕсли; + + Элементы.ВидТранспортаСообщенияОбменаСтрокой.Заголовок = СписокВыбораТранспорта[0].Представление; + Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость = СписокВыбораТранспорта.Количество()=1; + Элементы.ВидТранспортаСообщенийОбмена.Видимость= Не Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость; ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); КонецПроцедуры @@ -1229,34 +1214,34 @@ Процедура УстановитьВидимостьКнопкиОткрытияКаталогаОбмена() ВидимостьКнопки = Объект.ВидТранспортаСообщенийОбмена=Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или Объект.ВидТранспортаСообщенийОбмена=Перечисления.ВидыТранспортаСообщенийОбмена.FTP; - - Элементы.КаталогОбменаИнформацией.Видимость = ВидимостьКнопки; - Если ВидимостьКнопки Тогда - Элементы.КаталогОбменаИнформацией.Заголовок = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); - КонецЕсли; + Или Объект.ВидТранспортаСообщенийОбмена=Перечисления.ВидыТранспортаСообщенийОбмена.FTP; + + Элементы.КаталогОбменаИнформацией.Видимость = ВидимостьКнопки; + Если ВидимостьКнопки Тогда + Элементы.КаталогОбменаИнформацией.Заголовок = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); + КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗарегистрироватьДополнительныеДанные() - - Если ДополнениеВыгрузки.ВариантВыгрузки=0 Тогда - Возврат; - КонецЕсли; - - // Оперируем с объктом, в реквизите остаются текущие настройки! - ДополнениеВыгрузкиОбъект = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - Если ДополнениеВыгрузки.ВариантВыгрузки=1 Тогда - // За период с отбором, очищаем дополнительную - ДополнениеВыгрузкиОбъект.ДополнительнаяРегистрация.Очистить(); - ИначеЕсли ДополнениеВыгрузки.ВариантВыгрузки=2 Тогда - // Детально настроено, очищаем общее - ДополнениеВыгрузкиОбъект.КомпоновщикОтбораВсехДокументов = Неопределено; - ДополнениеВыгрузкиОбъект.ПериодОтбораВсехДокументов = Неопределено; - КонецЕсли; - - ДополнениеВыгрузкиОбъект.ЗарегистрироватьДополнительныеИзменения(); - + + Если ДополнениеВыгрузки.ВариантВыгрузки=0 Тогда + Возврат; + КонецЕсли; + + // Оперируем с объектом, в реквизите остаются текущие настройки! + ДополнениеВыгрузкиОбъект = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + Если ДополнениеВыгрузки.ВариантВыгрузки=1 Тогда + // За период с отбором, очищаем дополнительную + ДополнениеВыгрузкиОбъект.ДополнительнаяРегистрация.Очистить(); + ИначеЕсли ДополнениеВыгрузки.ВариантВыгрузки=2 Тогда + // Детально настроено, очищаем общее + ДополнениеВыгрузкиОбъект.КомпоновщикОтбораВсехДокументов = Неопределено; + ДополнениеВыгрузкиОбъект.ПериодОтбораВсехДокументов = Неопределено; + КонецЕсли; + + ДополнениеВыгрузкиОбъект.ЗарегистрироватьДополнительныеИзменения(); + КонецПроцедуры &НаСервере @@ -1264,8 +1249,7 @@ ОбъектДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); ОбъектДополнения.ВосстановитьТекущееИзНастроек( - ПредставлениеНастройки - ); + ПредставлениеНастройки); ЗначениеВРеквизитФормы(ОбъектДополнения, "ДополнениеВыгрузки"); // Текущее представление @@ -1330,26 +1314,26 @@ ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов, ДополнениеВыгрузки.ПериодОтбораВсехДокументов ), - Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); + Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОткрытьДетальныйПодбор() - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма", - Новый Структура( - "ДействиеВыбора, АдресОбъекта", 2, АдресОбъектаДополнительнойВыгрузки() - ), - Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДействиеВыбора", 2); + ПараметрыФормы.Вставить("АдресОбъекта", АдресОбъектаДополнительнойВыгрузки()); + ПараметрыФормы.Вставить("ОткрытаПоСценарию", Истина); + ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма", ПараметрыФормы, Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); КонецПроцедуры &НаСервере Функция АдресОбъектаДополнительнойВыгрузки() - Возврат ПоместитьВоВременноеХранилище( - РеквизитФормыВЗначение("ДополнениеВыгрузки"), - УникальныйИдентификатор - ); + ОбъектРезультат = Новый Структура("УзелИнформационнойБазы, ВариантВыгрузки, КомпоновщикОтбораВсехДокументов, ПериодОтбораВсехДокументов"); + ЗаполнитьЗначенияСвойств(ОбъектРезультат, ДополнениеВыгрузки); + + ОбъектРезультат.Вставить("ДополнительнаяРегистрация", ДанныеФормыВЗначение(ДополнениеВыгрузки.ДополнительнаяРегистрация, Тип("ТаблицаЗначений"))); + + Возврат ПоместитьВоВременноеХранилище(ОбъектРезультат, УникальныйИдентификатор); КонецФункции &НаСервере @@ -1374,38 +1358,37 @@ &НаСервере Процедура УстановитьОписаниеДополненияОбщегоОтбора() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = ОбработкаДополнения.ПредставлениеОтбораВсехДокументов(""); - - НетОтбора = ПустаяСтрока(Текст); - Если НетОтбора Тогда - Текст = НСтр("ru='Все документы'"); - КонецЕсли; - - Элементы.ДополнениеВыгрузкиОбщийОтборДокументов.Заголовок = Текст; - Элементы.ДополнениеВыгрузкиОчисткаОбщегоОтбора.Видимость = Не НетОтбора; -КонецПроцедуры + + ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + + Текст = ОбработкаДополнения.ПредставлениеОтбораВсехДокументов(""); + + НетОтбора = ПустаяСтрока(Текст); + Если НетОтбора Тогда + Текст = НСтр("ru='Все документы'"); + КонецЕсли; + + Элементы.ДополнениеВыгрузкиОбщийОтборДокументов.Заголовок = Текст; + Элементы.ДополнениеВыгрузкиОчисткаОбщегоОтбора.Видимость = Не НетОтбора; +КонецПроцедуры &НаСервере Процедура УстановитьОписаниеДополненияДетально() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = СтрЗаменить( - СокрЛП(ОбработкаДополнения.ПредставлениеДетальногоОтбора("")), - Символы.ПС, ", " - ); - - НетОтбора = ПустаяСтрока(Текст); - Если НетОтбора Тогда - Текст = НСтр("ru='Дополнительные данные не выбраны'") - КонецЕсли; - - Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; - Элементы.ДополнениеВыгрузкиОчисткаДетальногоОтбора.Видимость = Не НетОтбора; -КонецПроцедуры + + ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + + Текст = СтрЗаменить( + СокрЛП(ОбработкаДополнения.ПредставлениеДетальногоОтбора("")), + Символы.ПС, ", "); + + НетОтбора = ПустаяСтрока(Текст); + Если НетОтбора Тогда + Текст = НСтр("ru='Дополнительные данные не выбраны'") + КонецЕсли; + + Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; + Элементы.ДополнениеВыгрузкиОчисткаДетальногоОтбора.Видимость = Не НетОтбора; +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики ожидания @@ -1420,8 +1403,7 @@ WSURLВебСервиса, WSИмяПользователя, WSПароль, - ДлительнаяОперацияСтрокаСообщенияОбОшибке - ); + ДлительнаяОперацияСтрокаСообщенияОбОшибке); Если СостояниеОперации = "Active" Тогда @@ -1577,18 +1559,18 @@ Процедура ОбновитьОтображениеЭлементовСтатусаОбменаДанными() Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаЗагрузкиДанных()[РезультатЗагрузкиДанных]]; - Если Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница=Элементы.СтатусЗагрузкиНеопределено Тогда - Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = НСтр("ru='Загрузка данных не произведена'"); - Иначе - Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокЗагрузкиДанных()[РезультатЗагрузкиДанных]; - КонецЕсли; - + Если Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница=Элементы.СтатусЗагрузкиНеопределено Тогда + Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = НСтр("ru='Загрузка данных не произведена'"); + Иначе + Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокЗагрузкиДанных()[РезультатЗагрузкиДанных]; + КонецЕсли; + Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаВыгрузкиДанных()[РезультатВыгрузкиДанных]]; - Если Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница=Элементы.СтатусВыгрузкиНеопределено Тогда - Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = НСтр("ru='Выгрузка данных не произведена'"); - Иначе - Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокВыгрузкиДанных()[РезультатВыгрузкиДанных]; - КонецЕсли; + Если Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница=Элементы.СтатусВыгрузкиНеопределено Тогда + Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = НСтр("ru='Выгрузка данных не произведена'"); + Иначе + Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокВыгрузкиДанных()[РезультатВыгрузкиДанных]; + КонецЕсли; КонецПроцедуры @@ -1820,8 +1802,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -1943,8 +1924,7 @@ Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); Возврат; КонецПопытки; @@ -2127,8 +2107,7 @@ Объект.УзелИнформационнойБазы, "ВыгрузкаДанных", ДатаНачалаОперации, - ДлительнаяОперацияСтрокаСообщенияОбОшибке - ); + ДлительнаяОперацияСтрокаСообщенияОбОшибке); Иначе diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index 2374cd564..51ae10554 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index b643da85e..89d92b0dd 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -254,8 +254,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - Пароль - ); + Пароль); Иначе // FILE, FTP, EMAIL @@ -288,8 +287,7 @@ Отказ, УзелИнформационнойБазы, ИдентификаторФайла, - Пароль - ); + Пароль); ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; ИдентификаторФайлаПакетаДанных = СтруктураДанных.ИдентификаторФайлаПакетаДанных; @@ -513,4 +511,4 @@ КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl index 14b22336f..63840aa0c 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/Forms/Форма/Module.bsl @@ -22,33 +22,32 @@ Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - - ТекстОшибки = Неопределено; - Если Не ОбменДаннымиВМоделиСервисаПовтИсп.СинхронизацияДанныхПоддерживается() Тогда + + ТекстОшибки = Неопределено; + Если Не ОбменДаннымиВМоделиСервисаПовтИсп.СинхронизацияДанныхПоддерживается() Тогда ТекстОшибки = НСтр("ru='Синхронизация данных для конфигурации не поддерживается!'"); - - ИначеЕсли Не Параметры.Свойство("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) Тогда - ТекстОшибки = НСтр("ru='Непосредственное открытие помощника не предусмотрено.'"); - - ИначеЕсли Объект.УзелИнформационнойБазы.Пустая() Тогда - ТекстОшибки = НСтр("ru='Настройка обмена данными не найдена.'"); - - КонецЕсли; - - Если ТекстОшибки<>Неопределено Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(ТекстОшибки, Отказ); - Возврат; - КонецЕсли; - + + ИначеЕсли Не Параметры.Свойство("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) Тогда + ТекстОшибки = НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + + ИначеЕсли Объект.УзелИнформационнойБазы.Пустая() Тогда + ТекстОшибки = НСтр("ru='Настройка обмена данными не найдена.'"); + + КонецЕсли; + + Если ТекстОшибки<>Неопределено Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + // Устанавливаем заголовки, зависящие от узла - УстановитьКорреспондентаВЗаголовок(ЭтаФорма); - + УстановитьКорреспондентаВЗаголовок(ЭтаФорма); + // Устанавливаем таблицу переходов в зависимости от параметров ПорядковыйНомерПерехода = 0; - СценарийПолныйВручную(); - - // Дополнение выгрузки - ДополнениеВыгрузкиИнициализировать() + СценарийПолныйВручную(); + + // Дополнение выгрузки + ДополнениеВыгрузкиИнициализировать() КонецПроцедуры &НаКлиенте @@ -94,68 +93,65 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаОбщегоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы.Очистить(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); - КонецЕсли; + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Очистить общий отбор?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов.Настройки.Отбор.Элементы.Очистить(); + ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОчисткаДетальногоОтбора(Команда) - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); - КонецЕсли; + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Очистить детальный отбор?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузки.ДополнительнаяРегистрация.Очистить(); + ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиСоставВыгрузки(Команда) ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.СоставВыгрузки", - Новый Структура("АдресОбъекта", ДополнениеВыгрузкиАдресОбъекта() ) - ); + Новый Структура("АдресОбъекта", ДополнениеВыгрузкиАдресОбъекта() )); КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиИсторияОтборов(Команда) - - // Выбор из меню - списка - СписокВариантов = ДополнениеВыгрузкиПрочитатьСписокВариантовНастроекСервер(); - - Текст = НСтр("ru='Сохранить текущую настройку...'"); - СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); - - ВыбраныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); - Если ВыбраныйВариант=Неопределено Тогда - Возврат; - КонецЕсли; - - ПредставлениеНастройки = ВыбраныйВариант.Значение; - Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда - ТекстЗаголовка = НСтр("ru='Подтверждение'"); - ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); - - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); - Если Ответ=КодВозвратаДиалога.Да Тогда - ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки); - КонецЕсли; - - ИначеЕсли ПредставлениеНастройки=1 Тогда - // Форма всех настроек - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеСоставаНастроек", - Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", - Истина, 3, - ДополнениеВыгрузки, ДополнениеВыгрузкиПредставлениеНастройки - ), Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); - КонецЕсли; - + + // Выбор из меню - списка + СписокВариантов = ДополнениеВыгрузкиПрочитатьСписокВариантовНастроекСервер(); + + Текст = НСтр("ru='Сохранить текущую настройку...'"); + СписокВариантов.Добавить(1, Текст, , БиблиотекаКартинок.СохранитьНастройкиОтчета); + + ВыбранныйВариант = ВыбратьИзМеню(СписокВариантов, Элементы.ДополнениеВыгрузкиИсторияОтборов); + Если ВыбранныйВариант=Неопределено Тогда + Возврат; + КонецЕсли; + + ПредставлениеНастройки = ВыбранныйВариант.Значение; + Если ТипЗнч(ПредставлениеНастройки)=Тип("Строка") Тогда + ТекстЗаголовка = НСтр("ru='Подтверждение'"); + ТекстВопроса = НСтр("ru='Восстановить настройки ""%1""?'"); + + ТекстВопроса = СтрЗаменить(ТекстВопроса, "%1", ПредставлениеНастройки); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ТекстЗаголовка); + Если Ответ=КодВозвратаДиалога.Да Тогда + ДополнениеВыгрузкиУстановитьНастройкиСервер(ПредставлениеНастройки); + КонецЕсли; + + ИначеЕсли ПредставлениеНастройки=1 Тогда + // Форма всех настроек + ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма.РедактированиеСоставаНастроек", + Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора, Объект, ПредставлениеТекущейНастройки", + Истина, 3, ДополнениеВыгрузки, ДополнениеВыгрузкиПредставлениеНастройки + ), Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -171,25 +167,25 @@ &НаКлиенте Процедура ДополнениеВыгрузкиОбщийПериодДокументовОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение.ДействиеВыбора=1 Тогда - // Отбор и период всех документов - ДополнениеВыгрузкиУстановитьПараметрыДополненияВсехДокументов(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=2 Тогда - // Детальная настройка - ДополнениеВыгрузкиУстановитьПараметрыДополненияДетально(ВыбранноеЗначение); - - ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=3 Тогда - // Обновление настроек - ДополнениеВыгрузкиПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; - КонецЕсли; - + + Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение.ДействиеВыбора=1 Тогда + // Отбор и период всех документов + ДополнениеВыгрузкиУстановитьПараметрыДополненияВсехДокументов(ВыбранноеЗначение); + + ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=2 Тогда + // Детальная настройка + ДополнениеВыгрузкиУстановитьПараметрыДополненияДетально(ВыбранноеЗначение); + + ИначеЕсли ВыбранноеЗначение.ДействиеВыбора=3 Тогда + // Обновление настроек + ДополнениеВыгрузкиПредставлениеНастройки = ВыбранноеЗначение.ПредставлениеНастройки; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -237,8 +233,7 @@ // Устанавливаем отображение страниц СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура( - "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - )); + "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); Если СтрокиПереходаТекущие.Количество() = 0 Тогда ВызватьИсключение НСтр("ru='Не определена страница для отображения.'"); @@ -273,8 +268,7 @@ // Обработчики событий переходов Если ЭтоПереходДалее Тогда СтрокиПерехода = ТаблицаПереходов.НайтиСтроки( Новый Структура( - "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1 - )); + "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); Если СтрокиПерехода.Количество() > 0 Тогда СтрокаПерехода = СтрокиПерехода[0]; // обработчик ПриПереходеДалее @@ -290,12 +284,11 @@ Возврат; КонецЕсли; КонецЕсли; - КонецЕсли; - + КонецЕсли; + Иначе СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура( - "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1) - ); + "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); Если СтрокиПерехода.Количество() > 0 Тогда СтрокаПерехода = СтрокиПерехода[0]; // обработчик ПриПереходеНазад @@ -316,8 +309,7 @@ КонецЕсли; СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура( - "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - )); + "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); Если СтрокиПереходаТекущие.Количество() = 0 Тогда ВызватьИсключение НСтр("ru='Не определена страница для отображения.'"); КонецЕсли; @@ -357,8 +349,7 @@ Процедура ВыполнитьОбработчикДлительнойОперации() СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура( - "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - )); + "ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); Если СтрокиПереходаТекущие.Количество() = 0 Тогда ВызватьИсключение НСтр("ru='Не определена страница для отображения.'"); КонецЕсли; @@ -407,8 +398,7 @@ Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "", ИмяОбработчикаПриОткрытии = "", ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", - ДлительнаяОперация = Ложь, ИмяОбработчикаДлительнойОперации = "" -) + ДлительнаяОперация = Ложь, ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); @@ -440,8 +430,8 @@ ИначеЕсли ТипЗнч(Элемент)=Тип("КнопкаФормы") И Найти(Элемент.ИмяКоманды, ИмяКоманды)>0 Тогда Возврат Элемент; - КонецЕсли; - + КонецЕсли; + КонецЦикла; Возврат Неопределено; @@ -463,26 +453,26 @@ &НаСервере Процедура ДополнениеВыгрузкиИнициализировать() - - ДополнениеВыгрузки.УзелИнформационнойБазы = Объект.УзелИнформационнойБазы; - ДополнениеВыгрузки.ПериодОтбораВсехДокументов.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц; - - Если Параметры.ЗапретитьВыгрузкуТолькоИзмененного Тогда - Элементы.ДополнениеВыгрузкиВариантВыгрузки0.Видимость = Ложь; - ДополнениеВыгрузки.ВариантВыгрузки = 1; - Иначе - ДополнениеВыгрузки.ВариантВыгрузки = 0; - КонецЕсли; - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов = ОбработкаДополнения.КомпоновщикНастроекОбщегоОтбора(УникальныйИдентификатор); - - ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); - ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); - - ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); - - Элементы.ДополнениеВыгрузкиИсторияОтборов.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + + ДополнениеВыгрузки.УзелИнформационнойБазы = Объект.УзелИнформационнойБазы; + ДополнениеВыгрузки.ПериодОтбораВсехДокументов.Вариант = ВариантСтандартногоПериода.ПрошлыйМесяц; + + Если Параметры.ЗапретитьВыгрузкуТолькоИзмененного Тогда + Элементы.ДополнениеВыгрузкиВариантВыгрузки0.Видимость = Ложь; + ДополнениеВыгрузки.ВариантВыгрузки = 1; + Иначе + ДополнениеВыгрузки.ВариантВыгрузки = 0; + КонецЕсли; + + ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов = ОбработкаДополнения.КомпоновщикНастроекОбщегоОтбора(УникальныйИдентификатор); + + ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора(); + ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально(); + + ДополнениеВыгрузкиВариантВыгрузкиУстановитьВидимость(); + + Элементы.ДополнениеВыгрузкиИсторияОтборов.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); КонецПроцедуры &НаСервере @@ -490,8 +480,7 @@ ОбъектДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); ОбъектДополнения.ВосстановитьТекущееИзНастроек( - ПредставлениеНастройки - ); + ПредставлениеНастройки); ЗначениеВРеквизитФормы(ОбъектДополнения, "ДополнениеВыгрузки"); // Текущее представление @@ -513,8 +502,7 @@ Функция ДополнениеВыгрузкиАдресОбъекта() Возврат ПоместитьВоВременноеХранилище( РеквизитФормыВЗначение("ДополнениеВыгрузки"), - УникальныйИдентификатор - ); + УникальныйИдентификатор); КонецФункции &НаСервере @@ -547,59 +535,58 @@ &НаСервере Процедура ДополнениеВыгрузкиУстановитьОписаниеДополненияОбщегоОтбора() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = ОбработкаДополнения.ПредставлениеОтбораВсехДокументов(""); - - НетОтбора = ПустаяСтрока(Текст); - Если НетОтбора Тогда - Текст = НСтр("ru='Все документы'"); - КонецЕсли; - - Элементы.ДополнениеВыгрузкиОбщийОтборДокументов.Заголовок = Текст; - Элементы.ДополнениеВыгрузкиОчисткаОбщегоОтбора.Видимость = Не НетОтбора; -КонецПроцедуры + + ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + + Текст = ОбработкаДополнения.ПредставлениеОтбораВсехДокументов(""); + + НетОтбора = ПустаяСтрока(Текст); + Если НетОтбора Тогда + Текст = НСтр("ru='Все документы'"); + КонецЕсли; + + Элементы.ДополнениеВыгрузкиОбщийОтборДокументов.Заголовок = Текст; + Элементы.ДополнениеВыгрузкиОчисткаОбщегоОтбора.Видимость = Не НетОтбора; +КонецПроцедуры &НаСервере Процедура ДополнениеВыгрузкиУстановитьОписаниеДополненияДетально() - - ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - - Текст = СтрЗаменить( - СокрЛП(ОбработкаДополнения.ПредставлениеДетальногоОтбора("")), - Символы.ПС, ", " - ); - - НетОтбора = ПустаяСтрока(Текст); - Если НетОтбора Тогда - Текст = НСтр("ru='Дополнительные данные не выбраны'") - КонецЕсли; - - Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; - Элементы.ДополнениеВыгрузкиОчисткаДетальногоОтбора.Видимость = Не НетОтбора; -КонецПроцедуры + + ОбработкаДополнения = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + + Текст = СтрЗаменить( + СокрЛП(ОбработкаДополнения.ПредставлениеДетальногоОтбора("")), + Символы.ПС, ", "); + + НетОтбора = ПустаяСтрока(Текст); + Если НетОтбора Тогда + Текст = НСтр("ru='Дополнительные данные не выбраны'") + КонецЕсли; + + Элементы.ДополнениеВыгрузкиДетальныйОтбор.Заголовок = Текст; + Элементы.ДополнениеВыгрузкиОчисткаДетальногоОтбора.Видимость = Не НетОтбора; +КонецПроцедуры &НаСервере Процедура ДополнениеВыгрузкиЗарегистрироватьДанные() - - Если ДополнениеВыгрузки.ВариантВыгрузки=0 Тогда - Возврат; - КонецЕсли; - - // Оперируем с объктом, в реквизите остаются текущие настройки! - ДополнениеВыгрузкиОбъект = РеквизитФормыВЗначение("ДополнениеВыгрузки"); - Если ДополнениеВыгрузки.ВариантВыгрузки=1 Тогда - // За период с отбором, очищаем дополнительную - ДополнениеВыгрузкиОбъект.ДополнительнаяРегистрация.Очистить(); - ИначеЕсли ДополнениеВыгрузки.ВариантВыгрузки=2 Тогда - // Детально настроено, очищаем общее - ДополнениеВыгрузкиОбъект.КомпоновщикОтбораВсехДокументов = Неопределено; - ДополнениеВыгрузкиОбъект.ПериодОтбораВсехДокументов = Неопределено; - КонецЕсли; - - ДополнениеВыгрузкиОбъект.ЗарегистрироватьДополнительныеИзменения(); - + + Если ДополнениеВыгрузки.ВариантВыгрузки=0 Тогда + Возврат; + КонецЕсли; + + // Оперируем с объектом, в реквизите остаются текущие настройки! + ДополнениеВыгрузкиОбъект = РеквизитФормыВЗначение("ДополнениеВыгрузки"); + Если ДополнениеВыгрузки.ВариантВыгрузки=1 Тогда + // За период с отбором, очищаем дополнительную + ДополнениеВыгрузкиОбъект.ДополнительнаяРегистрация.Очистить(); + ИначеЕсли ДополнениеВыгрузки.ВариантВыгрузки=2 Тогда + // Детально настроено, очищаем общее + ДополнениеВыгрузкиОбъект.КомпоновщикОтбораВсехДокументов = Неопределено; + ДополнениеВыгрузкиОбъект.ПериодОтбораВсехДокументов = Неопределено; + КонецЕсли; + + ДополнениеВыгрузкиОбъект.ЗарегистрироватьДополнительныеИзменения(); + КонецПроцедуры &НаКлиенте @@ -612,18 +599,16 @@ ДополнениеВыгрузки.КомпоновщикОтбораВсехДокументов, ДополнениеВыгрузки.ПериодОтбораВсехДокументов ), - Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); + Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); КонецПроцедуры &НаКлиенте Процедура ДополнениеВыгрузкиОткрытьДетальныйПодбор() - ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма", - Новый Структура( - "ДействиеВыбора, АдресОбъекта", 2, ДополнениеВыгрузкиАдресОбъекта() - ), - Элементы.ДополнениеВыгрузкиОбщийПериодДокументов - ); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДействиеВыбора", 2); + ПараметрыФормы.Вставить("АдресОбъекта", ДополнениеВыгрузкиАдресОбъекта()); + ПараметрыФормы.Вставить("ОткрытаПоСценарию", Истина); + ОткрытьФорму("Обработка.ИнтерактивноеИзменениеВыгрузки.Форма", ПараметрыФормы, Элементы.ДополнениеВыгрузкиОбщийПериодДокументов); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -631,7 +616,7 @@ // Функция Подключаемый_Окончание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - // Регистрируем все, что накликано + // Регистрируем все, что выбрано ДополнениеВыгрузкиЗарегистрироватьДанные(); КонецФункции @@ -645,11 +630,9 @@ ТаблицаПереходов.Очистить(); ТаблицаПереходовНоваяСтрока(1, "ИзменениеСоставаВыгрузки", "СтраницаНавигацииНачало", - ,, - ); + ,,); ТаблицаПереходовНоваяСтрока(2, "Окончание", "СтраницаНавигацииОкончание",, - "Окончание_ПриОткрытии", - ); + "Окончание_ПриОткрытии",); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl index 27eb7e01b..6df4ae8bc 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ОтключениеСинхронизацииДанных/Module.bsl @@ -22,13 +22,11 @@ Элементы.НадписьПредупреждения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Отключить синхронизацию данных - |с ""%1""?'"), Параметры.НаименованиеКорреспондента - ); + |с ""%1""?'"), Параметры.НаименованиеКорреспондента); Элементы.НадписьИнформационная.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Синхронизация данных - |с ""%1"" отключена.'"), Параметры.НаименованиеКорреспондента - ); + |с ""%1"" отключена.'"), Параметры.НаименованиеКорреспондента); // Устанавливаем текущую таблицу переходов СценарийОтключенияСинхронизацииДанных(); @@ -64,8 +62,7 @@ СтатусСессии = СтатусСессии(Сессия); Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); ПерейтиНазад(); Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); Возврат; @@ -381,8 +378,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -512,8 +508,7 @@ // Отправляем сообщение Менеджеру сервиса Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеОтключитьСинхронизацию() - ); + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеОтключитьСинхронизацию()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; Сессия = ОбменДаннымиВМоделиСервиса.ОтправитьСообщение(Сообщение); @@ -522,8 +517,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl index feb9e1889..a7e97ed4d 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/ПолучениеДанныхКорреспондента/Module.bsl @@ -45,8 +45,7 @@ СтатусСессии = СтатусСессии(Сессия); Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); ОтменитьОперацию(); Возврат; КонецПопытки; @@ -346,8 +345,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -457,8 +455,7 @@ // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьДанныеКорреспондента() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьДанныеКорреспондента()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.Tables = СериализаторXDTO.ЗаписатьXDTO(ТаблицыКорреспондента); Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -468,8 +465,7 @@ // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьОбщиеДанныеУзловКорреспондента() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьОбщиеДанныеУзловКорреспондента()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; Сессия = ОбменДаннымиВМоделиСервиса.ОтправитьСообщение(Сообщение); @@ -484,8 +480,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; @@ -545,8 +540,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); Отказ = Истина; Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl index 69443cb6d..382c31d87 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/Forms/Форма/Module.bsl @@ -16,6 +16,10 @@ Возврат; КонецЕсли; + Если ПустаяСтрока(Параметры.ИмяПланаОбмена) Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + // Включать синхронизацию данных может только администратор обмена (для абонента). ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); @@ -113,8 +117,7 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, , ЗакрытьФормуБезусловно, - НСтр("ru = 'Отменить настройку синхронизации данных?'") - ); + НСтр("ru = 'Отменить настройку синхронизации данных?'")); КонецПроцедуры @@ -154,8 +157,7 @@ СтатусСессии = СтатусСессии(Сессия); Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); ПерейтиНазад(); Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); Возврат; @@ -194,8 +196,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); ПерейтиНазад(); Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); КонецПопытки; @@ -257,8 +258,7 @@ ПараметрыФормы.Вставить("УникальныйИдентификаторВладельца", ЭтаФорма.УникальныйИдентификатор); ОткрытьФорму("Обработка.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.Форма.ПолучениеДанныхКорреспондента", - ПараметрыФормы, ЭтаФорма - ); + ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -272,8 +272,7 @@ ПараметрыФормы.Вставить("ТаблицыКорреспондента", ТаблицыКорреспондента); ОткрытьФорму("Обработка.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.Форма.ПолучениеДанныхКорреспондента", - ПараметрыФормы, ЭтаФорма - ); + ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -581,8 +580,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -895,15 +893,13 @@ УникальныйИдентификатор, "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.НастроитьОбменШаг1", ПараметрыМетода, - НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (шаг 1)'") - ); + НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (шаг 1)'")); ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресВременногоХранилища = Результат.АдресХранилища; Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -963,15 +959,13 @@ УникальныйИдентификатор, "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.ВыполнитьАвтоматическоеСопоставлениеДанных", ПараметрыМетода, - НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (автоматическое сопоставление данных)'") - ); + НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (автоматическое сопоставление данных)'")); ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресВременногоХранилища = Результат.АдресХранилища; Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1016,8 +1010,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1090,15 +1083,13 @@ УникальныйИдентификатор, "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.ПолучитьСтатистикуСопоставления", ПараметрыМетода, - НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (получение статистики сопоставления)'") - ); + НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (получение статистики сопоставления)'")); ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресВременногоХранилища = Результат.АдресХранилища; Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1126,8 +1117,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1147,8 +1137,7 @@ Элементы.СтраницыСтатусаСопоставленияДанных.ТекущаяСтраница = ?(ВсеДанныеСопоставлены, Элементы.СтатусСопоставленияВсеДанныеСопоставлены, - Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные - ); + Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные); КонецФункции // Страница 3: Сопоставление данных пользователем @@ -1164,8 +1153,7 @@ Сообщение = НСтр("ru = 'Не все данные сопоставлены. Наличие несопоставленных данных |может привести к появлению одинаковых элементов справочников (дублей). - |Продолжить?'" - ); + |Продолжить?'"); Ответ = Вопрос(Сообщение, Кнопки,, КодВозвратаДиалога.Нет); @@ -1212,15 +1200,13 @@ УникальныйИдентификатор, "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.ВыполнитьСинхронизациюСправочников", ПараметрыМетода, - НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (синхронизация справочников)'") - ); + НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (синхронизация справочников)'")); ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресВременногоХранилища = Результат.АдресХранилища; Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1306,8 +1292,7 @@ // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьДанныеКорреспондента() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьДанныеКорреспондента()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.Tables = СериализаторXDTO.ЗаписатьXDTO(ТаблицыКорреспондента); @@ -1319,8 +1304,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1347,8 +1331,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1422,8 +1405,7 @@ // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьПараметрыУчетаКорреспондента() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеПолучитьПараметрыУчетаКорреспондента()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -1435,8 +1417,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1474,8 +1455,7 @@ Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1551,8 +1531,7 @@ Если Не ФормаНастройки.ПроверитьЗаполнение() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо задать обязательные настройки для второго приложения.'") - ,,, "ОписаниеЗначенийПоУмолчаниюКорреспондента", Отказ - ); + ,,, "ОписаниеЗначенийПоУмолчаниюКорреспондента", Отказ); КонецЕсли; КонецЕсли; @@ -1596,15 +1575,13 @@ УникальныйИдентификатор, "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.НастроитьОбменШаг2", ПараметрыМетода, - НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (шаг 2)'") - ); + НСтр("ru = 'Настройка синхронизации данных между приложениями в сети Интернет (шаг 2)'")); ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресВременногоХранилища = Результат.АдресХранилища; Исключение ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1678,8 +1655,7 @@ // Отправляем сообщение менеджеру сервиса - включить синхронизацию Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеВключитьСинхронизацию() - ); + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеВключитьСинхронизацию()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -1688,8 +1664,7 @@ // Отправляем сообщение менеджеру сервиса - запрос на выполнение синхронизации между двумя приложениями Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПротолкнутьСинхронизациюДвухПриложений() - ); + СообщенияАдминистрированиеОбменаДаннымиУправлениеИнтерфейс.СообщениеПротолкнутьСинхронизациюДвухПриложений()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; ОбменДаннымиВМоделиСервиса.ОтправитьСообщение(Сообщение); @@ -1698,8 +1673,7 @@ Исключение ОтменитьТранзакцию(); ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных - ); + СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных); СообщитьОбОшибке(Отказ); Возврат; КонецПопытки; @@ -1728,8 +1702,7 @@ // Получение статистики сопоставления (опционально) ТаблицаПереходовНоваяСтрока(НомерСтраницы_ПолучениеСтатистикиСопоставления(), - "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставления_ОбработкаДлительнойОперации" - ); + "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставления_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(9, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗадание_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(10, "ОжиданиеАнализаДанных", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеПолученияСтатистикиСопоставленияФоновоеЗаданиеОкончание_ОбработкаДлительнойОперации"); diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl index 52336aafd..623ba1035 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl @@ -32,16 +32,14 @@ Корреспондент, , , - Префикс - ); + Префикс); // Регистрируем справочники к выгрузке в этой базе ОбменДаннымиСервер.ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(Корреспондент); // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг1() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг1()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -90,8 +88,7 @@ // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг2() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг2()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -125,13 +122,11 @@ // Получаем сообщение обмена во временный каталог Отказ = Ложь; ПараметрыСообщения = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталог( - Отказ, Корреспондент, Неопределено - ); + Отказ, Корреспондент, Неопределено); Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки при получении сообщения обмена из внешнего ресурса для корреспондента ""%1"".'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; ПомощникИнтерактивногоОбменаДанными = Обработки.ПомощникИнтерактивногоОбменаДанными.Создать(); @@ -148,8 +143,7 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки при анализе сообщения обмена для корреспондента ""%1"".'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; // Объекты, для которых выполняется автоматическое сопоставление в процессе обмена (классификаторы), @@ -163,8 +157,7 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки при выполнении автоматического сопоставления данных, полученных от корреспондента ""%1"".'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; ТаблицаИнформацииСтатистики = ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики(); @@ -176,8 +169,7 @@ ВсеДанныеСопоставлены = (ТаблицаИнформацииСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки", 1)).Количество() = 0); ВыходныеПараметры = Новый Структура("ИнформацияСтатистики, ВсеДанныеСопоставлены, ИмяФайлаСообщенияОбмена, СтатистикаПустая", - ТаблицаИнформацииСтатистики, ВсеДанныеСопоставлены, ПараметрыСообщения.ИмяФайлаСообщенияОбмена, ТаблицаИнформацииСтатистики.Количество() = 0 - ); + ТаблицаИнформацииСтатистики, ВсеДанныеСопоставлены, ПараметрыСообщения.ИмяФайлаСообщенияОбмена, ТаблицаИнформацииСтатистики.Количество() = 0); ПоместитьВоВременноеХранилище(ВыходныеПараметры, АдресВременногоХранилища); КонецПроцедуры @@ -198,8 +190,7 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки в процессе загрузки справочников от корреспондента %1.'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; // Выполняем выгрузку сообщения обмена для корреспондента (только справочники) @@ -208,14 +199,12 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки в процессе выгрузки справочников для корреспондента %1.'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; // Отправляем сообщение корреспонденту Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеЗагрузитьСообщениеОбмена() - ); + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеЗагрузитьСообщениеОбмена()); Сообщение.Body.CorrespondentZone = ОбластьДанныхКорреспондента; Сообщение.Body.ExchangePlan = ИмяПланаОбмена; @@ -257,15 +246,13 @@ Если Отказ Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Возникли ошибки при получении информации статистики для корреспондента ""%1"".'"), - Строка(Параметры.Корреспондент) - ); + Строка(Параметры.Корреспондент)); КонецЕсли; ВсеДанныеСопоставлены = (ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики().НайтиСтроки(Новый Структура("ИндексКартинки", 1)).Количество() = 0); ВыходныеПараметры = Новый Структура("ИнформацияСтатистики, ВсеДанныеСопоставлены", - ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики(), ВсеДанныеСопоставлены - ); + ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики(), ВсеДанныеСопоставлены); ПоместитьВоВременноеХранилище(ВыходныеПараметры, АдресВременногоХранилища); КонецПроцедуры @@ -310,4 +297,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl index 046f89abc..1df050376 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl @@ -87,7 +87,7 @@ &НаКлиенте Процедура ЗабылиПароль(Команда) - ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(); + ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры @@ -364,8 +364,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -453,8 +452,7 @@ Исключение ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(АвтономнаяРаботаСлужебный.СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/ConditionalAppearance.dcssca new file mode 100644 index 000000000..754661d6b --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/ConditionalAppearance.dcssca @@ -0,0 +1,28 @@ + + + + + + ПользователиРазрешитьСинхронизациюДанных + + + + + ПользователиСинхронизации.СинхронизацияДанныхРазрешена + Equal + true + + + + + false + Доступность + false + + + ТолькоПросмотр + true + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form index db1f011b7..30317e983 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form @@ -24,7 +24,7 @@ Заголовок1РасширеннаяПодсказка - 221 + 228 Label true true @@ -64,7 +64,7 @@ КартинкаСозданиеЛокальногоРабочегоМестаРасширеннаяПодсказка - 222 + 229 Label true true @@ -98,7 +98,7 @@ Декорация5РасширеннаяПодсказка - 224 + 231 Label true true @@ -136,7 +136,7 @@ ПоясняющаяНадписьОВерсииПлатформыРасширеннаяПодсказка - 225 + 232 Label true true @@ -168,7 +168,7 @@ Группа3РасширеннаяПодсказка - 223 + 230 Label true true @@ -198,7 +198,7 @@ Декорация8РасширеннаяПодсказка - 227 + 234 Label true true @@ -229,7 +229,7 @@ true КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеРасширеннаяПодсказка - 228 + 235 Label true true @@ -253,7 +253,7 @@ Группа5РасширеннаяПодсказка - 226 + 233 Label true true @@ -284,7 +284,7 @@ НадписьДалее1РасширеннаяПодсказка - 229 + 236 Label true true @@ -318,7 +318,7 @@ НачалоРасширеннаяПодсказка - 220 + 227 Label true true @@ -349,7 +349,7 @@ Заголовок2РасширеннаяПодсказка - 231 + 238 Label true true @@ -397,7 +397,7 @@ Top НаименованиеАвтономногоРабочегоМестаРасширеннаяПодсказка - 232 + 239 Label true true @@ -441,7 +441,7 @@ Декорация4РасширеннаяПодсказка - 234 + 241 Label true true @@ -467,78 +467,17 @@ Группа2 143 - - Группа1 - 108 - - НастроитьОграниченияПередачиДанных - 105 - true - true - - true - - - НастроитьОграниченияПередачиДанныхРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - UsualButton - Form.Command.НастроитьОграниченияПередачиДанных - Normal - Auto - true - true - UserCmds - Auto - - - ОписаниеОграниченийПередачиДанных - 206 - - <key>ru</key> - <value><В автономном рабочем месте доступны все данные.></value> - - true - true - - true - - - ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - - ОписаниеОграниченийПередачиДанныхКонтекстноеМеню - 207 - true - - Label - true - true - - Left - - + + НастроитьОграниченияПередачиДанных + 105 true true true - Группа1РасширеннаяПодсказка - 236 + НастроитьОграниченияПередачиДанныхРасширеннаяПодсказка + 243 Label true true @@ -546,143 +485,21 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - Группа2РасширеннаяПодсказка - 235 - Label + UsualButton + Form.Command.НастроитьОграниченияПередачиДанных + Normal + Auto true true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ПарольДляСинхронизацииДанных - 212 - - Пароль - 213 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - Объект.ПарольДляСинхронизацииДанных - - - ПарольРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 214 - true - - InputField - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - true - Normal - - - - ПодтверждениеПароля - 215 - true - true - - true - - - ПодтверждениеПароля - - - ПодтверждениеПароляРасширеннаяПодсказка - 242 - Label - true - true - - Left - - - - ПодтверждениеПароляКонтекстноеМеню - 216 - true - - InputField - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - true - Normal - + UserCmds + Auto - ПояснениеКПаролю - 217 + ОписаниеОграниченийПередачиДанных + 206 <key>ru</key> - <value>Пароль должен содержать 7 и более символов, используйте буквы и цифры. -Необходимо наличие строчных и заглавных букв (например: Qazx123)</value> + <value><В автономном рабочем месте доступны все данные.></value> true true @@ -690,7 +507,7 @@ true - ПояснениеКПаролюРасширеннаяПодсказка + ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка 244 Label true @@ -700,12 +517,279 @@ - ПояснениеКПаролюКонтекстноеМеню - 218 + ОписаниеОграниченийПередачиДанныхКонтекстноеМеню + 207 + true + + Label + true + true + + Left + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 242 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + НастройкаПравПользователей + 212 + + ПользователиСинхронизации + 213 + + <key>ru</key> + <value>Разрешить выполнять синхронизацию данных пользователям</value> + + true + true + + true + + + ПользователиСинхронизации + + Top + + ПользователиРазрешитьСинхронизациюДанных + 224 + true + true + + true + + + ПользователиСинхронизации.РазрешитьСинхронизациюДанных + + + ПользователиРазрешитьСинхронизациюДанныхРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + ПользователиРазрешитьСинхронизациюДанныхКонтекстноеМеню + 225 + true + + CheckBoxField + Auto + true + Left + true + + + + ПользователиПользователь + 216 + true + true + + true + + + ПользователиСинхронизации.Пользователь + + + ПользователиПользовательРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + + ПользователиПользовательКонтекстноеМеню + 217 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ПользователиСинхронизацииКоманднаяПанель + 215 + Left + true + + + ПользователиСинхронизацииСтрокаПоиска + 247 + + ПользователиСинхронизацииСтрокаПоискаРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + + ПользователиСинхронизацииСтрокаПоискаКонтекстноеМеню + 248 + true + + ПользователиСинхронизации + + true + + + + ПользователиСинхронизацииСостояниеПросмотра + 250 + + ПользователиСинхронизацииСостояниеПросмотраРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + + ПользователиСинхронизацииСостояниеПросмотраКонтекстноеМеню + 251 + true + + ViewStatusAddition + ПользователиСинхронизации + + true + + + + ПользователиСинхронизацииУправлениеПоиском + 253 + + ПользователиСинхронизацииУправлениеПоискомРасширеннаяПодсказка + 255 + Label + true + true + + Left + + + + ПользователиСинхронизацииУправлениеПоискомКонтекстноеМеню + 254 + true + + SearchControlAddition + ПользователиСинхронизации + + true + + + + ПользователиСинхронизацииРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + + ПользователиСинхронизацииКонтекстноеМеню + 214 + true + + 42 + true + 6 + true + true + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + None + None + None + true + + + + Декорация6 + 222 + + <key>ru</key> + <value>Указанные пользователи могут выполнять синхронизацию данных +с любыми автономными рабочими местами и другими программами.</value> + + true + true + + true + + + Декорация6РасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 223 true Label - 50 true true @@ -722,16 +806,15 @@ <key>ru</key> - <value>Пароль для синхронизации данных</value> + <value>Настройка прав пользователей</value> ru - Пароль для синхронизации данных + Настройка прав пользователей - true - ПарольДляСинхронизацииДанныхРасширеннаяПодсказка - 239 + НастройкаПравПользователейРасширеннаяПодсказка + 245 Label true true @@ -743,48 +826,12 @@ Vertical Auto - StrongSeparation true true - auto Auto Auto - - Декорация6 - 197 - true - true - - true - - - Декорация6РасширеннаяПодсказка - 245 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 198 - true - - Label - true - true - true - - Style.ПоясняющийТекст - - - Left - - НадписьДалее2 95 @@ -799,7 +846,7 @@ НадписьДалее2РасширеннаяПодсказка - 246 + 269 Label true true @@ -814,7 +861,9 @@ Label true + 3 true + true Left Bottom @@ -831,7 +880,7 @@ НастройкаВыгрузкиРасширеннаяПодсказка - 230 + 237 Label true true @@ -862,7 +911,7 @@ Заголовок4РасширеннаяПодсказка - 248 + 271 Label true true @@ -908,7 +957,7 @@ Декорация14РасширеннаяПодсказка - 251 + 274 Label true true @@ -947,7 +996,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 250 + 273 Label true true @@ -984,7 +1033,7 @@ Декорация15РасширеннаяПодсказка - 253 + 276 Label true true @@ -1027,7 +1076,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 252 + 275 Label true true @@ -1056,7 +1105,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 249 + 272 Label true true @@ -1089,7 +1138,7 @@ ОжиданиеСозданияНачальногоОбразаРасширеннаяПодсказка - 247 + 270 Label true true @@ -1120,7 +1169,7 @@ Заголовок6РасширеннаяПодсказка - 255 + 278 Label true true @@ -1167,7 +1216,7 @@ Декорация3РасширеннаяПодсказка - 257 + 280 Label true true @@ -1201,7 +1250,7 @@ ЗагрузитьНачальныйОбразНаКомпьютерПользователяРасширеннаяПодсказка - 258 + 281 Label true true @@ -1225,7 +1274,7 @@ Группа4РасширеннаяПодсказка - 256 + 279 Label true true @@ -1256,7 +1305,7 @@ Декорация1РасширеннаяПодсказка - 259 + 282 Label true true @@ -1292,7 +1341,7 @@ ИнструкцияПоНастройкеАвтономногоРабочегоМестаПечатьИнструкцииРасширеннаяПодсказка - 262 + 285 Label true true @@ -1318,7 +1367,7 @@ ИнструкцияПоНастройкеАвтономногоРабочегоМестаСохранитьИнструкциюКакРасширеннаяПодсказка - 263 + 286 Label true true @@ -1341,7 +1390,7 @@ Группа6РасширеннаяПодсказка - 261 + 284 Label true true @@ -1369,7 +1418,7 @@ None ИнструкцияПоНастройкеАвтономногоРабочегоМестаРасширеннаяПодсказка - 264 + 287 Label true true @@ -1403,7 +1452,7 @@ Группа9РасширеннаяПодсказка - 260 + 283 Label true true @@ -1427,9 +1476,13 @@ true + + <key>ru</key> + <value>Окончание</value> + ОкончаниеРасширеннаяПодсказка - 254 + 277 Label true true @@ -1460,7 +1513,7 @@ true ПанельОсновнаяРасширеннаяПодсказка - 219 + 226 Label true true @@ -1495,7 +1548,7 @@ КомандаНазадРасширеннаяПодсказка - 270 + 293 Label true true @@ -1522,7 +1575,7 @@ true КомандаДалееРасширеннаяПодсказка - 271 + 294 Label true true @@ -1549,7 +1602,7 @@ КомандаОтменаРасширеннаяПодсказка - 272 + 295 Label true true @@ -1575,7 +1628,7 @@ СправкаРасширеннаяПодсказка - 273 + 296 Label true true @@ -1599,7 +1652,7 @@ true КоманднаяПанель1РасширеннаяПодсказка - 269 + 292 Label true true @@ -1627,7 +1680,7 @@ СтраницаНавигацииНачалоРасширеннаяПодсказка - 268 + 291 Label true true @@ -1656,7 +1709,7 @@ КомандаНазад1РасширеннаяПодсказка - 276 + 299 Label true true @@ -1683,7 +1736,7 @@ true КомандаДалее1РасширеннаяПодсказка - 277 + 300 Label true true @@ -1709,7 +1762,7 @@ КомандаОтмена1РасширеннаяПодсказка - 278 + 301 Label true true @@ -1735,7 +1788,7 @@ Справка1РасширеннаяПодсказка - 279 + 302 Label true true @@ -1759,7 +1812,7 @@ true КоманднаяПанель2РасширеннаяПодсказка - 275 + 298 Label true true @@ -1783,7 +1836,7 @@ СтраницаНавигацииПродолжениеРасширеннаяПодсказка - 274 + 297 Label true true @@ -1812,7 +1865,7 @@ КомандаНазад2РасширеннаяПодсказка - 282 + 305 Label true true @@ -1838,7 +1891,7 @@ КомандаГотовоРасширеннаяПодсказка - 283 + 306 Label true true @@ -1864,7 +1917,7 @@ КомандаОтмена2РасширеннаяПодсказка - 284 + 307 Label true true @@ -1890,7 +1943,7 @@ Справка2РасширеннаяПодсказка - 285 + 308 Label true true @@ -1914,7 +1967,7 @@ true КоманднаяПанель3РасширеннаяПодсказка - 281 + 304 Label true true @@ -1938,7 +1991,7 @@ СтраницаНавигацииОкончаниеРасширеннаяПодсказка - 280 + 303 Label true true @@ -1967,7 +2020,7 @@ КомандаНазад3РасширеннаяПодсказка - 288 + 311 Label true true @@ -1997,7 +2050,7 @@ КомандаДалее3РасширеннаяПодсказка - 289 + 312 Label true true @@ -2023,7 +2076,7 @@ КомандаОтмена3РасширеннаяПодсказка - 290 + 313 Label true true @@ -2049,7 +2102,7 @@ Справка3РасширеннаяПодсказка - 291 + 314 Label true true @@ -2074,7 +2127,7 @@ true КоманднаяПанель4РасширеннаяПодсказка - 287 + 310 Label true true @@ -2100,7 +2153,7 @@ true СтраницаНавигацииОжиданиеРасширеннаяПодсказка - 286 + 309 Label true true @@ -2125,7 +2178,7 @@ true ПанельНавигацииРасширеннаяПодсказка - 267 + 290 Label true true @@ -2153,7 +2206,7 @@ РамкаПанелиНавигацииРасширеннаяПодсказка - 266 + 289 Label true true @@ -2611,36 +2664,14 @@ - ПодтверждениеПароля + ПользователиСинхронизации <key>ru</key> - <value>Подтверждение пароля</value> + <value>Пользователи синхронизации</value> 4 - String - - 50 - - - - true - - - true - - ShowError - - - КлассОшибкиСозданиеСлужебногоПользователя - - <key>ru</key> - <value>Класс ошибки создание служебного пользователя</value> - - 5 - - String - + ValueTable true @@ -2648,6 +2679,57 @@ true + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 1 + + CatalogRef.Пользователи + + + true + + + true + + + + СинхронизацияДанныхРазрешена + + <key>ru</key> + <value>Синхронизация данных разрешена</value> + + 2 + + Boolean + + + true + + + true + + + + РазрешитьСинхронизациюДанных + + <key>ru</key> + <value>Разрешить синхронизацию данных</value> + + 3 + + Boolean + + + true + + + true + + КомандаГотово diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl index 5e7a40edd..b6341759c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl @@ -17,8 +17,7 @@ Если Пользователи.ЭтоНеразделенныйПользователь() Тогда ВызватьИсключение НСтр("ru = 'Создать автономное рабочее место можно только от имени разделенного пользователя. - |Текущий пользователь является неразделенным.'" - ); + |Текущий пользователь является неразделенным.'"); КонецЕсли; ИмяПланаОбмена = АвтономнаяРаботаСлужебный.ПланОбменаАвтономнойРаботы(); @@ -45,21 +44,23 @@ ЗакрытьФормуБезусловно = Ложь; СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста = АвтономнаяРаботаСлужебный.СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(); - КлассОшибкиСозданиеСлужебногоПользователя = АвтономнаяРаботаСлужебный.КлассОшибкиСозданиеСлужебногоПользователя(); ИмяФайлаПакетаУстановки = АвтономнаяРаботаСлужебный.ИмяФайлаПакетаУстановки(); - Если ПолучитьПроверкуСложностиПаролейПользователей() Тогда - Элементы.ПояснениеКПаролю.Заголовок = - НСтр("ru = 'Пароль должен содержать 7 и более символов, используйте буквы и цифры. - |Необходимо наличие строчных и заглавных букв (например: Qazx123)'" - ); - Иначе - Элементы.ПояснениеКПаролю.Заголовок = - НСтр("ru = 'Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов.'" - ); + // Настройка прав пользователей на выполнение синхронизации данных + + Элементы.НастройкаПравПользователей.Видимость = Ложь; + + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ПользователиСинхронизации.Загрузить(ПользователиСинхронизации()); + + Элементы.НастройкаПравПользователей.Видимость = ПользователиСинхронизации.Количество() > 1; + КонецЕсли; + Модифицированность = Истина; + КонецПроцедуры &НаКлиенте @@ -76,8 +77,7 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, , ЗакрытьФормуБезусловно, - НСтр("ru = 'Отменить создание автономного рабочего места?'") - ); + НСтр("ru = 'Отменить создание автономного рабочего места?'")); КонецПроцедуры @@ -101,28 +101,10 @@ Исключение ДлительнаяОперация = Ложь; ПерейтиНазад(); - - КлассОшибки = КлассОшибкиСозданиеСлужебногоПользователя; - - ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - Если Найти(ПодробноеПредставлениеОшибки, КлассОшибки) > 0 Тогда - - ПодробноеПредставлениеОшибки = СтрЗаменить(ПодробноеПредставлениеОшибки, КлассОшибки, ""); - КраткоеПредставлениеОшибки = СтрЗаменить(КраткоеПредставлениеОшибки, КлассОшибки, ""); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки,, "Объект.ПарольДляСинхронизацииДанных"); - - Иначе - - Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); - - КонецЕсли; + Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки, СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста); КонецПопытки; КонецПроцедуры @@ -471,8 +453,7 @@ ИмяОбработчикаПриПереходеДалее = "", ИмяОбработчикаПриПереходеНазад = "", ДлительнаяОперация = Ложь, - ИмяОбработчикаДлительнойОперации = "" - ) + ИмяОбработчикаДлительнойОперации = "") НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -529,6 +510,10 @@ Попытка + ВыбранныеПользователиСинхронизации = ПользователиСинхронизации.Выгрузить( + Новый Структура("СинхронизацияДанныхРазрешена, РазрешитьСинхронизациюДанных", Ложь, Истина), "Пользователь" + ).ВыгрузитьКолонку("Пользователь"); + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда АдресВременногоХранилищаНачальногоОбраза = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); @@ -539,10 +524,11 @@ УстановитьПривилегированныйРежим(Истина); Попытка - ОбработкаОбъект.СоздатьНачальныйОбразАвтономногоРабочегоМеста(НастройкаОтборовНаУзле, + ОбработкаОбъект.СоздатьНачальныйОбразАвтономногоРабочегоМеста( + НастройкаОтборовНаУзле, + ВыбранныеПользователиСинхронизации, АдресВременногоХранилищаНачальногоОбраза, - АдресВременногоХранилищаИнформацииОПакетеУстановки - ); + АдресВременногоХранилищаИнформацииОПакетеУстановки); Исключение Отказ = Истина; Возврат; @@ -561,14 +547,14 @@ КонтекстПомощника.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]); КонецЦикла; КонтекстПомощника.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); + КонтекстПомощника.Вставить("ВыбранныеПользователиСинхронизации", ВыбранныеПользователиСинхронизации); Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, "АвтономнаяРаботаСлужебный.СоздатьНачальныйОбразАвтономногоРабочегоМеста", КонтекстПомощника, НСтр("ru = 'Создание начального образа автономного рабочего места'"), - Истина - ); + Истина); АдресВременногоХранилищаНачальногоОбраза = Результат.АдресХранилища; АдресВременногоХранилищаИнформацииОПакетеУстановки = Результат.АдресХранилищаДополнительный; @@ -588,26 +574,9 @@ КонецЕсли; Исключение - Отказ = Истина; - - КлассОшибки = КлассОшибкиСозданиеСлужебногоПользователя; - - ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - Если Найти(ПодробноеПредставлениеОшибки, КлассОшибки) > 0 Тогда - - ПодробноеПредставлениеОшибки = АвтономнаяРаботаСлужебный.УдалитьКлассОшибки(ПодробноеПредставлениеОшибки, КлассОшибки); - КраткоеПредставлениеОшибки = АвтономнаяРаботаСлужебный.УдалитьКлассОшибки(КраткоеПредставлениеОшибки, КлассОшибки); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки,, "Объект.ПарольДляСинхронизацииДанных",, Отказ); - - КонецЕсли; - ЗаписатьОшибкуВЖурналРегистрации( - ПодробноеПредставлениеОшибки, СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста); Возврат; КонецПопытки; @@ -660,6 +629,55 @@ КонецФункции +&НаСервере +Функция ПользователиСинхронизации() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Пользователь"); // Тип: СправочникСсылка.Пользователи + Результат.Колонки.Добавить("СинхронизацияДанныхРазрешена", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("РазрешитьСинхронизациюДанных", Новый ОписаниеТипов("Булево")); + + ТекстЗапроса = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | + |УПОРЯДОЧИТЬ ПО + | Пользователи.Наименование"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено Тогда + + НастройкиПользователя = Результат.Добавить(); + НастройкиПользователя.Пользователь = Выборка.Пользователь; + НастройкиПользователя.СинхронизацияДанныхРазрешена = ОбменДаннымиСервер.СинхронизацияДанныхРазрешена(ПользовательИБ); + НастройкиПользователя.РазрешитьСинхронизациюДанных = НастройкиПользователя.СинхронизацияДанныхРазрешена; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Переопределяемая часть - Обработчики событий переходов @@ -673,18 +691,6 @@ КонецЕсли; - Если ПустаяСтрока(Объект.ПарольДляСинхронизацииДанных) Тогда - - НСтрока = НСтр("ru = 'Не задан пароль для синхронизации данных.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ПарольДляСинхронизацииДанных",, Отказ); - - ИначеЕсли Объект.ПарольДляСинхронизацииДанных <> ПодтверждениеПароля Тогда - - НСтрока = НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "ПодтверждениеПароля",, Отказ); - - КонецЕсли; - КонецФункции &НаКлиенте diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl index 1b2f412e1..d956ebb01 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl @@ -8,7 +8,9 @@ // АдресВременногоХранилищаНачальногоОбраза - Строка // АдресВременногоХранилищаИнформацииОПакетеУстановки - Строка // -Процедура СоздатьНачальныйОбразАвтономногоРабочегоМеста(Настройки, +Процедура СоздатьНачальныйОбразАвтономногоРабочегоМеста( + Знач Настройки, + Знач ВыбранныеПользователиСинхронизации, Знач АдресВременногоХранилищаНачальногоОбраза, Знач АдресВременногоХранилищаИнформацииОПакетеУстановки ) Экспорт @@ -21,20 +23,18 @@ НачатьТранзакцию(); Попытка - // Создаем служебного пользователя для выполнения синхронизации данных - ИмяПользователя = ""; - - Попытка - Пользователь = СоздатьСлужебногоПользователяДляСинхронизацииДанных(ИмяПользователя); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - ВызватьИсключение АвтономнаяРаботаСлужебный.ДобавитьКлассОшибки( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), - АвтономнаяРаботаСлужебный.КлассОшибкиСозданиеСлужебногоПользователя() - ); - КонецПопытки; + // Назначаем права на синхронизацию выбранным пользователям + Если ОбщегоНазначенияКлиентСервер.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ОбщийМодульУправлениеДоступомСлужебный = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеДоступомСлужебный"); + + Для Каждого Пользователь Из ВыбранныеПользователиСинхронизации Цикл + + ОбщийМодульУправлениеДоступомСлужебный.ВключитьПользователяВГруппуДоступа(Пользователь, + ОбменДаннымиСервер.ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами()); + КонецЦикла; + + КонецЕсли; // Формируем префикс для нового автономного рабочего места Блокировка = Новый БлокировкаДанных; @@ -53,7 +53,7 @@ ДатаСозданияНачальногоОбраза = ТекущаяДатаСеанса(); // Выгружаем параметры настройки в начальный образ автономного рабочего места - ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя); + ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто); // Устанавливаем дату создания начального образа, как дату первой успешной синхронизации данных. СтруктураЗаписи = Новый Структура; @@ -68,40 +68,29 @@ СтруктураЗаписи.Вставить("ДатаОкончания", ДатаСозданияНачальногоОбраза); РегистрыСведений.СостоянияУспешныхОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); - // Добавляем связь автономного рабочего места со служебным пользователем - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("УзелИнформационнойБазы", АвтономноеРабочееМесто); - СтруктураЗаписи.Вставить("ПользовательДляСинхронизацииДанных", Пользователь); - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьЗапись(СтруктураЗаписи); - ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; КаталогНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогВременныхФайлов(), - ИмяВременногоКаталогаНачальногоОбраза() - ); + ИмяВременногоКаталогаНачальногоОбраза()); КаталогУстановки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогНачальногоОбраза, - "1" - ); + "1"); КаталогАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогУстановки, - "InfoBase" - ); + "InfoBase"); ИмяФайлаДанныхНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( КаталогАрхива, - "data.xml" - ); + "data.xml"); СоздатьКаталог(КаталогАрхива); @@ -128,8 +117,7 @@ ПланыОбмена.СоздатьНачальныйОбраз(АвтономноеРабочееМестоОбъект, СтрокаСоединения); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); // Хранить настройки для автономного рабочего места в ИБ небезопасно. Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); @@ -139,8 +127,7 @@ УдалитьФайлы(КаталогНачальногоОбраза); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; // Удаляем автономное рабочее место @@ -153,20 +140,16 @@ ВыгруженныеДанные.Закрыть(); ИмяФайлаНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - КаталогНачальногоОбраза, "1Cv8.1CD" - ); + КаталогНачальногоОбраза, "1Cv8.1CD"); ИмяФайлаНачальногоОбразаВКаталогеАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - КаталогАрхива, "1Cv8.1CD" - ); + КаталогАрхива, "1Cv8.1CD"); ИмяФайлаПакетаУстановки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - КаталогНачальногоОбраза, АвтономнаяРаботаСлужебный.ИмяФайлаПакетаУстановки() - ); + КаталогНачальногоОбраза, АвтономнаяРаботаСлужебный.ИмяФайлаПакетаУстановки()); ИмяФайлаИнструкции = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - КаталогАрхива, "ReadMe.html" - ); + КаталогАрхива, "ReadMe.html"); ТекстИнструкции = АвтономнаяРаботаСлужебный.ТекстИнструкцииИзМакета("ИнструкцияПоНастройкеАвтономногоРабочегоМеста"); @@ -179,8 +162,7 @@ Архиватор = Новый ЗаписьZipФайла(ИмяФайлаПакетаУстановки,,,, УровеньСжатияZIP.Максимальный); Архиватор.Добавить(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогУстановки, "*.*"), РежимСохраненияПутейZIP.СохранятьОтносительныеПути, - РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно - ); + РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); Архиватор.Записать(); ДанныеПакетаУстановки = Новый ДвоичныеДанные(ИмяФайлаПакетаУстановки); @@ -198,8 +180,7 @@ УдалитьФайлы(КаталогНачальногоОбраза); Исключение ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; // Хранить настройки для автономного рабочего места в ИБ небезопасно. @@ -209,9 +190,9 @@ // -Процедура ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя) +Процедура ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто) - Константы.НастройкиПодчиненногоУзлаРИБ.Установить(ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя)); + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто)); КонецПроцедуры @@ -240,35 +221,7 @@ Возврат АвтономноеРабочееМестоОбъект.Ссылка; КонецФункции -Функция СоздатьСлужебногоПользователяДляСинхронизацииДанных(ИмяПользователя) - - ИмяПользователя = НСтр("ru = '(АР) [НаименованиеАвтономногоРабочегоМеста]'"); - ИмяПользователя = СтрЗаменить(ИмяПользователя, "[НаименованиеАвтономногоРабочегоМеста]", НаименованиеАвтономногоРабочегоМеста); - ИмяПользователя = АвтономнаяРаботаСлужебный.ЗаменитьНедопустимыеСимволыВИмениПользователя(ИмяПользователя); - - Роли = Новый Массив; - Роли.Добавить("ВыполнениеСинхронизацииДанных"); - Роли.Добавить("УдаленныйДоступБазоваяФункциональность"); - - ОписаниеПользователяИБ = Новый Структура; - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("Имя", Лев(ИмяПользователя, 64)); - ОписаниеПользователяИБ.Вставить("ПолноеИмя", ИмяПользователя); - ОписаниеПользователяИБ.Вставить("Роли", Роли); - ОписаниеПользователяИБ.Вставить("Пароль", ПарольДляСинхронизацииДанных); - ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина); - ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Ложь); - - Пользователь = Справочники.Пользователи.СоздатьЭлемент(); - Пользователь.Наименование = ИмяПользователя; - Пользователь.Служебный = Истина; - Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); - Пользователь.Записать(); - - Возврат Пользователь.Ссылка; -КонецФункции - -Функция ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, Знач ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, Знач ИмяПользователя) +Функция ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, Знач ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто) ПараметрыАвтономногоРабочегоМеста = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(АвтономноеРабочееМесто, "Код, Наименование"); ПараметрыПриложенияВСервисе = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(АвтономнаяРаботаСлужебный.ПриложениеВСервисе(), "Код, Наименование"); @@ -290,7 +243,6 @@ ЗаписатьXML(ЗаписьXML, ПрефиксАвтономногоРабочегоМеста, "Префикс", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, ЗаголовокСистемы(), "ЗаголовокСистемы", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, WSURLВебСервиса, "URL", НазначениеТипаXML.Явное); - ЗаписатьXML(ЗаписьXML, ИмяПользователя, "ИмяПользователя", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, ПользователиИнформационнойБазы.ТекущийПользователь().Имя, "ИмяВладельца", НазначениеТипаXML.Явное); ЗаписатьXML(ЗаписьXML, Строка(Пользователи.АвторизованныйПользователь().УникальныйИдентификатор()), "Владелец", НазначениеТипаXML.Явное); @@ -373,4 +325,4 @@ Возврат ?(ПустаяСтрока(Результат), НСтр("ru = 'Автономное рабочее место'"), Результат); КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html index f3a88bd73..7c203187a 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html @@ -1,4 +1,4 @@ - -

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

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html index ffd4cb9f1..a5168f347 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html @@ -1,4 +1,4 @@ - + 1 + +
            +
            + None + + СписокКонстантКоманднаяПанель + 6 + Left + true + + + Selection + СписокКонстантВыбор + + + СписокКонстантСтрокаПоиска + 37 + + СписокКонстантСтрокаПоискаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СписокКонстантСтрокаПоискаКонтекстноеМеню + 38 + true + + СписокКонстант + + true + + + + СписокКонстантСостояниеПросмотра + 40 + + СписокКонстантСостояниеПросмотраРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + СписокКонстантСостояниеПросмотраКонтекстноеМеню + 41 + true + + ViewStatusAddition + СписокКонстант + + true + + + + СписокКонстантУправлениеПоиском + 43 + + СписокКонстантУправлениеПоискомРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + СписокКонстантУправлениеПоискомКонтекстноеМеню + 44 + true + + SearchControlAddition + СписокКонстант + + true + + + + СписокКонстантРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СписокКонстантКонтекстноеМеню + 5 + + СписокКонстантКонтекстноеМенюВыбратьКонстанту + 16 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюВыбратьКонстантуРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.ВыбратьКонстанту + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюГруппа1 + 17 + + СписокКонстантКонтекстноеМенюНайти + 18 + true + true + + true + + + СписокКонстантКонтекстноеМенюНайтиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВыделитьВсе + 19 + true + true + + true + + + СписокКонстантКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОтменитьПоиск + 20 + true + true + + true + + + СписокКонстантКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВывестиСписок + 21 + true + true + + true + + + СписокКонстантКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюКопироватьВБуферОбмена + 22 + true + true + + true + + + СписокКонстантКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа1РасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + + + true + true + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + + СписокКонстант.ИндексКартинки + + + None + None + None + true + +
            + + Группа1 + 23 + + Декорация1 + 24 + + <key>ru</key> + <value>Картинка авторегистрации</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 25 + true + + 2 + true + 1 + true + false + false + + + + + + ДекорацияАвторегистрация + 26 + + <key>ru</key> + <value>Авторегистрация для узла</value> + + true + true + + true + + + ДекорацияАвторегистрацияРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + ДекорацияАвторегистрацияКонтекстноеМеню + 27 + true + + Label + true + true + true + false + + Left + Top + + + true + true + + + <key>ru</key> + <value>Легенда</value> + + true + false + + Группа1РасширеннаяПодсказка + 58 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаВыбратьКонстанту + 9 + true + true + + true + + + ФормаВыбратьКонстантуРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Command.ВыбратьКонстанту + PictureAndText + true + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnReopen + ПриПовторномОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + 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 + + Number + + 10 + + + + true + + + true + + + + ИндексКартинкиАвторегистрация + + <key>ru</key> + <value>Индекс картинки авторегистрация</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + + ВыбратьКонстанту + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать константу + + + true + + + StdPicture.ChooseValue + + + + ВыбратьКонстанту + + + Auto + Auto + + + НачальноеЗначениеВыбора + + String + + + true + + + МассивИменМетаданных + + + + МассивПредставлений + + + + МассивАвторегистрации + + + + УзелОбмена + + ExchangePlanRef + + true + + + + + + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/Декорация1/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..91d113a1c75bc860b847867c120956a6950e3387 GIT binary patch literal 355 zcmV-p0i6DcP)Sfq|8P9;@4P3o@`8z`(#De0y%eWPG|+lP4TN=3{u_ z$FDzF@x+bC8GiiwgJB?s0sk2o7-noc#qjsvKRBMT?G(f26E_*K#TU9482O+QTCw&GMCPu;reEI&1!9-1(Vb=CD3>WUbU^sR234?>4 zB143|F2gr0UcfNm^Y>p2-ezhH&)$A!IC0}KgN24HL#(qt!>bQp7)1EE2pjO@_aBBY z-+wVgI_NU|`TLh4(m|Ku%lBUl3=9kmKYtV90%b`d23b*l1_lNO25W736gf5)W(F>X zAHw(y(ACSFvIfe=2y||S?^0|Ge`Juw7>9ml0su#%ctvttjTHa@002ovPDHLkV1jim Bmp}jj literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстант/RowsPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d36e47e45b5f522755658b18272e10673e165fff GIT binary patch literal 5137 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 Bmp}jj literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Items/СписокКонстантИндексКартинкиАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc10f56a78f5bdb6165e754e42904fa52f1f99 GIT binary patch literal 778 zcmV+l1NHogP)! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl new file mode 100644 index 000000000..718a1e365 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Module.bsl @@ -0,0 +1,94 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + СписокКонстант.Очистить(); + Для ТекИнд=0 По Параметры.МассивИменМетаданных.ВГраница() Цикл + Строка = СписокКонстант.Добавить(); + Строка.ИндексКартинкиАвторегистрация = Параметры.МассивАвторегистрации[ТекИнд]; + Строка.ИндексКартинки = 2; + Строка.МетаПолноеИмя = Параметры.МассивИменМетаданных[ТекИнд]; + Строка.Наименование = Параметры.МассивПредставлений[ТекИнд]; + КонецЦикла; + + ЗаголовокАвторегистрации = НСтр("ru='Авторегистрация для узла ""%1""'"); + + Элементы.ДекорацияАвторегистрация.Заголовок = СтрЗаменить(ЗаголовокАвторегистрации, "%1", Параметры.УзелОбмена); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТекПараметры = УстановитьПараметрыФормы(); + Элементы.СписокКонстант.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + ТекПараметры = УстановитьПараметрыФормы(); + Элементы.СписокКонстант.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокКонстант +// + +&НаКлиенте +Процедура СписокКонстантВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПроизвестиВыборКонстанты(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +// Производит выбор константы +// +&НаКлиенте +Процедура ВыбратьКонстанту(Команда) + ПроизвестиВыборКонстанты(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +// Производит выбор и оповещает о нем +// +&НаКлиенте +Процедура ПроизвестиВыборКонстанты() + Данные = Новый Массив; + Для Каждого ТекЭл Из Элементы.СписокКонстант.ВыделенныеСтроки Цикл + ТекСтрока = СписокКонстант.НайтиПоИдентификатору(ТекЭл); + Данные.Добавить(ТекСтрока.МетаПолноеИмя); + КонецЦикла; + ОповеститьОВыборе(Данные); +КонецПроцедуры + +&НаСервере +Функция УстановитьПараметрыФормы() + Результат = Новый Структура("ТекущаяСтрока"); + Если Параметры.НачальноеЗначениеВыбора<>Неопределено Тогда + Результат.ТекущаяСтрока = ИдентификаторСтрокиПоМетаИмени(Параметры.НачальноеЗначениеВыбора); + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаСервере +Функция ИдентификаторСтрокиПоМетаИмени(ПолноеИмяМетаданных) + Данные = РеквизитФормыВЗначение("СписокКонстант"); + ТекСтрока = Данные.Найти(ПолноеИмяМетаданных, "МетаПолноеИмя"); + Если ТекСтрока<>Неопределено Тогда + Возврат ТекСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Возврат Неопределено; +КонецФункции diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Attributes/СписокДанных/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form new file mode 100644 index 000000000..f66f87673 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -0,0 +1,1033 @@ + + + + <key>ru</key> + <value>Выбор объектов отбором</value> + + + Группа1 + 18 + + Отбор + 15 + true + true + + true + + + СписокДанных.Filter + + None + + ОтборКоманднаяПанель + 17 + + ОтборДобавитьЭлементОтбора + 33 + true + true + + true + + + ОтборДобавитьЭлементОтбораРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.AddFilterItem + Normal + Auto + true + true + UserCmds + Auto + + + ОтборСгруппироватьЭлементыОтбора + 34 + true + true + + true + + + ОтборСгруппироватьЭлементыОтбораРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.GroupFilterItems + Normal + Auto + true + true + UserCmds + Auto + + + ОтборУдалить + 35 + true + true + + true + + + ОтборУдалитьРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ОтборПереместитьВниз + 36 + true + true + + true + + + ОтборПереместитьВнизРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + ОтборПереместитьВверх + 37 + true + true + + true + + + ОтборПереместитьВверхРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.Item.Отбор.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + ОтборГруппа1 + 38 + true + true + + true + + + <key>ru</key> + <value>Действия отбора</value> + + + ОтборГруппа1РасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + Item.Отбор + + + + ОтборГруппа2 + 39 + true + true + + true + + + <key>ru</key> + <value>Действия формы</value> + + + ОтборГруппа2РасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + Form + + + Left + + + OnChange + ОтборПриИзменении + + + ОтборСтрокаПоиска + 49 + + ОтборСтрокаПоискаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ОтборСтрокаПоискаКонтекстноеМеню + 50 + true + + Отбор + + true + + + + ОтборСостояниеПросмотра + 52 + + ОтборСостояниеПросмотраРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ОтборСостояниеПросмотраКонтекстноеМеню + 53 + true + + ViewStatusAddition + Отбор + + true + + + + ОтборУправлениеПоиском + 55 + + ОтборУправлениеПоискомРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ОтборУправлениеПоискомКонтекстноеМеню + 56 + true + + SearchControlAddition + Отбор + + true + + + + ОтборРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ОтборКонтекстноеМеню + 16 + true + + Tree + true + true + true + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + All + false +
            + true + true + + true + + + <key>ru</key> + <value>Элементы отбора</value> + + + Группа1РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + +
            + + СписокДанных + 10 + true + true + + true + + + СписокДанных + + Choose + Bottom + + СписокДанныхКоманднаяПанель + 12 + + СписокДанныхВыбратьОтобранныеЗначения + 22 + + <key>ru</key> + <value>Выбрать все</value> + + true + true + + true + + + СписокДанныхВыбратьОтобранныеЗначенияРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + Form.Command.ВыбратьОтобранныеЗначения + PictureAndText + true + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхВыбратьТекущуюСтроку + 21 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + СписокДанныхВыбратьТекущуюСтрокуРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Form.Command.ВыбратьТекущуюСтроку + Normal + PictureAndText + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхЗакрыть + 20 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + СписокДанныхЗакрытьРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + Right + + + Selection + СписокДанныхВыбор + + + СписокДанныхСтрокаПоиска + 80 + + СписокДанныхСтрокаПоискаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + СписокДанныхСтрокаПоискаКонтекстноеМеню + 81 + true + + СписокДанных + + true + + + + СписокДанныхСостояниеПросмотра + 83 + + СписокДанныхСостояниеПросмотраРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + СписокДанныхСостояниеПросмотраКонтекстноеМеню + 84 + true + + ViewStatusAddition + СписокДанных + + true + + + + СписокДанныхУправлениеПоиском + 86 + + СписокДанныхУправлениеПоискомРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + СписокДанныхУправлениеПоискомКонтекстноеМеню + 87 + true + + SearchControlAddition + СписокДанных + + true + + + + СписокДанныхРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + СписокДанныхКонтекстноеМеню + 11 + + СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначения + 23 + + <key>ru</key> + <value>Выбрать все отобранные</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначенияРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ВыбратьОтобранныеЗначения + Normal + Auto + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + СписокДанныхКонтекстноеМенюВыбратьТекущуюСтроку + 24 + + <key>ru</key> + <value>Выбрать текущие данные</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюВыбратьТекущуюСтрокуРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.ВыбратьТекущуюСтроку + Normal + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюГруппа2 + 31 + + СписокДанныхКонтекстноеМенюОткрытьТекущийОбъект + 32 + + <key>ru</key> + <value>Открыть форму текущего объекта</value> + + true + true + + true + + + СписокДанныхКонтекстноеМенюОткрытьТекущийОбъектРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.ОткрытьТекущийОбъект + Normal + Auto + true + true + UserCmds + + StdPicture.Form + + Auto + + true + true + + true + + + СписокДанныхКонтекстноеМенюГруппа2РасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + + + СписокДанныхКонтекстноеМенюГруппа1 + 25 + + СписокДанныхКонтекстноеМенюНайти + 26 + true + true + + true + + + СписокДанныхКонтекстноеМенюНайтиРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюОбновить + 27 + true + true + + true + + + СписокДанныхКонтекстноеМенюОбновитьРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюОтменитьПоиск + 28 + true + true + + true + + + СписокДанныхКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюНастройкаСписка + 29 + true + true + + true + + + СписокДанныхКонтекстноеМенюНастройкаСпискаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + СписокДанныхКонтекстноеМенюВывестиСписок + 30 + true + true + + true + + + СписокДанныхКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Form.Item.СписокДанных.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокДанныхКонтекстноеМенюГруппа1РасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + + + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + + СписокДанных.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
            + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
            true
            +
            + + СписокДанных + + <key>ru</key> + <value>Список данных</value> + + 2 + + DynamicList + + + true + + + true + + + ВЫБРАТЬ + NULL КАК Ссылка + true + true + true + true + + + + СтруктураДанных + + <key>ru</key> + <value>Структура данных</value> + + 3 + + + true + + + true + + + + КлючФормыДанных + + <key>ru</key> + <value>Ключ формы данных</value> + + 5 + + + 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 + + + ИмяТаблицы + + true + + + ДействиеВыбора + + true + + + + + + +
            diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl new file mode 100644 index 000000000..8822f3330 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -0,0 +1,206 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ИмяТаблицыДанных = Параметры.ИмяТаблицы; + ТекущийОбъект = ЭтотОбъект(); + ЗаголовокТаблицы = ""; + + // Определяемся, что за таблица к нам пришла + Описание = ТекущийОбъект.ХарактеристикиПоМетаданным(ИмяТаблицыДанных); + МетаИнфо = Описание.Метаданные; + Заголовок = МетаИнфо.Представление(); + + // Список и колонки + СтруктураДанных = ""; + Если Описание.ЭтоСсылка Тогда + ЗаголовокТаблицы = МетаИнфо.ПредставлениеОбъекта; + Если ПустаяСтрока(ЗаголовокТаблицы) Тогда + ЗаголовокТаблицы = Заголовок; + КонецЕсли; + + СписокДанных.ПроизвольныйЗапрос = Ложь; + СписокДанных.ОсновнаяТаблица = ИмяТаблицыДанных; + + Поле = СписокДанных.Отбор.ДоступныеПоляОтбора.Элементы.Найти(Новый ПолеКомпоновкиДанных("Ссылка")); + ТаблицаКолонок = Новый ТаблицаЗначений; + Колонки = ТаблицаКолонок.Колонки; + Колонки.Добавить("Ссылка", Поле.ТипЗначения, ЗаголовокТаблицы); + СтруктураДанных = "Ссылка"; + + КлючФормыДанных = "Ссылка"; + + ИначеЕсли Описание.ЭтоНабор Тогда + Колонки = ТекущийОбъект.ИзмеренияНабораЗаписей(МетаИнфо); + Для Каждого ТекЭл Из Колонки Цикл + СтруктураДанных = СтруктураДанных + "," + ТекЭл.Имя; + КонецЦикла; + СтруктураДанных = Сред(СтруктураДанных, 2); + + СписокДанных.ПроизвольныйЗапрос = Истина; + СписокДанных.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтруктураДанных + " ИЗ " + ИмяТаблицыДанных; + + Если Описание.ЭтоПоследовательность Тогда + КлючФормыДанных = "Регистратор"; + Иначе + КлючФормыДанных = Новый Структура(СтруктураДанных); + КонецЕсли; + + Иначе + // Без колонок??? + Возврат; + КонецЕсли; + СписокДанных.ДинамическоеСчитываниеДанных = Истина; + + ТекущийОбъект.ДобавитьКолонкиВТаблицуФормы( + Элементы.СписокДанных, + "Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление", + Колонки); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// + +&НаКлиенте +Процедура ОтборПриИзменении(Элемент) + Элементы.СписокДанных.Обновить(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокДанных +// + +&НаКлиенте +Процедура СписокДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОткрытьФормуТекущегоОбъекта(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +&НаКлиенте +Процедура ОткрытьТекущийОбъект(Команда) + ОткрытьФормуТекущегоОбъекта(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьОтобранныеЗначения(Команда) + ПроизвестиВыбор(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьТекущуюСтроку(Команда) + ПроизвестиВыбор(Ложь); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура ОткрытьФормуТекущегоОбъекта() + ТекПараметры = ПараметрыФормыТекущегоОбъекта(Элементы.СписокДанных.ТекущиеДанные); + Если ТекПараметры<>Неопределено Тогда + ОткрытьФорму(ТекПараметры.ИмяФормы, ТекПараметры.Ключ); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроизвестиВыбор(ВесьРезультатОтбора=Истина) + + Если ВесьРезультатОтбора Тогда + Данные = ВсеВыбранныеЭлементы(); + Иначе + Данные = Новый Массив; + Для Каждого ТекСтрока Из Элементы.СписокДанных.ВыделенныеСтроки Цикл + Элемент = Новый Структура(СтруктураДанных); + ЗаполнитьЗначенияСвойств(Элемент, Элементы.СписокДанных.ДанныеСтроки(ТекСтрока)); + Данные.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + + ОповеститьОВыборе(Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", + Параметры.ИмяТаблицы, + Данные, + Параметры.ДействиеВыбора, + СтруктураДанных)); +КонецПроцедуры + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПараметрыФормыТекущегоОбъекта(Знач Данные) + + Если Данные=Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(КлючФормыДанных)=Тип("Строка") Тогда + Значение = Данные[КлючФормыДанных]; + ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; + Иначе + // Там структура с именами измерений + ТекИмяФормы = ""; + ЗаполнитьЗначенияСвойств(КлючФормыДанных, Данные); + ТекПараметры = Новый Массив; + ТекПараметры.Добавить(КлючФормыДанных); + Попытка + Значение = Новый(СтрЗаменить(Параметры.ИмяТаблицы, ".", "КлючЗаписи."), ТекПараметры); + ТекИмяФормы = Параметры.ИмяТаблицы + ".ФормаЗаписи"; + Исключение + // Обработка не требуется + ; + КонецПопытки; + + Если ПустаяСтрока(ТекИмяФормы) Тогда + // Набор без ключей записи, типа оборотного регистра + Если Данные.Свойство("Регистратор") Тогда + Значение = Данные.Регистратор; + Иначе + Для Каждого КлючЗначение Из КлючФормыДанных Цикл + Значение = Данные[КлючЗначение.Ключ]; + Прервать; + КонецЦикла; + КонецЕсли; + ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; + КонецЕсли; + КонецЕсли; + + Возврат Новый Структура("ИмяФормы, Ключ", + ТекИмяФормы, + Новый Структура("Ключ", Значение)); +КонецФункции + +&НаСервере +Функция ВсеВыбранныеЭлементы() + + Данные = ЭтотОбъект().ТекущиеДанныеДинамическогоСписка(СписокДанных); + + Результат = Новый Массив(); + Для Каждого ТекСтрока Из Данные Цикл + Элемент = Новый Структура(СтруктураДанных); + ЗаполнитьЗначенияСвойств(Элемент, ТекСтрока); + Результат.Добавить(Элемент); + КонецЦикла; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca new file mode 100644 index 000000000..dceae1b97 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/ConditionalAppearance.dcssca @@ -0,0 +1,26 @@ + + + + + + ДеревоУзловОбменаКод + + + + + ДеревоУзловОбмена.Ссылка + NotFilled + + + + + Видимость + false + + + Отображать + false + + + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form new file mode 100644 index 000000000..1c1c3b1d2 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Form.form @@ -0,0 +1,743 @@ + + + + <key>ru</key> + <value>Выбор узла плана обмена</value> + + + ДеревоУзловОбмена + 1 + + <key>ru</key> + <value>Узлы обмена</value> + + true + true + + true + + + ДеревоУзловОбмена + + true + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоУзловОбменаПометкаНаименование + 14 + + ДеревоУзловОбменаПометка + 12 + true + true + + true + + + ДеревоУзловОбмена.Пометка + + None + + OnChange + ДеревоУзловОбменаПометкаПриИзменении + + + ДеревоУзловОбменаПометкаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДеревоУзловОбменаПометкаКонтекстноеМеню + 13 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + ДеревоУзловОбменаНаименование + 4 + + <key>ru</key> + <value>Узел</value> + + true + true + + true + + + ДеревоУзловОбмена.Наименование + + + ДеревоУзловОбменаНаименованиеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ДеревоУзловОбменаНаименованиеКонтекстноеМеню + 5 + true + + LabelField + true + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Описание узла</value> + + + ru + Описание узла + + + ДеревоУзловОбменаПометкаНаименованиеРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоУзловОбменаКод + 31 + + <key>ru</key> + <value>Код</value> + + true + true + + true + + + ДеревоУзловОбмена.Код + + + ДеревоУзловОбменаКодРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ДеревоУзловОбменаКодКонтекстноеМеню + 32 + true + + LabelField + Auto + true + Left + true + + true + true + + + None + + ДеревоУзловОбменаКоманднаяПанель + 3 + Left + + + Selection + ДеревоУзловОбменаВыбор + + + ДеревоУзловОбменаСтрокаПоиска + 44 + + ДеревоУзловОбменаСтрокаПоискаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ДеревоУзловОбменаСтрокаПоискаКонтекстноеМеню + 45 + true + + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаСостояниеПросмотра + 47 + + ДеревоУзловОбменаСостояниеПросмотраРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ДеревоУзловОбменаСостояниеПросмотраКонтекстноеМеню + 48 + true + + ViewStatusAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаУправлениеПоиском + 50 + + ДеревоУзловОбменаУправлениеПоискомРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ДеревоУзловОбменаУправлениеПоискомКонтекстноеМеню + 51 + true + + SearchControlAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ДеревоУзловОбменаКонтекстноеМеню + 2 + + ДеревоУзловОбменаКонтекстноеМенюВыбратьУзел + 27 + + <key>ru</key> + <value>Выбрать узел</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВыбратьУзелРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Command.ВыбратьУзел + Normal + Auto + true + true + UserCmds + + StdPicture.ChooseValue + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюИзменитьУзел + 28 + + <key>ru</key> + <value>Изменить узел</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюИзменитьУзелРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ИзменитьУзел + Normal + Auto + true + true + UserCmds + + StdPicture.Change + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1 + 33 + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписок + 34 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбмена + 35 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + + + Tree + true + true + true +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandAllLevels + true + true + + ДеревоУзловОбмена.ИндексКартинки + + + None + None + None + true +
            + + ФормаКоманднаяПанель + -1 + + ФормаВыбратьУзел + 29 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + ФормаВыбратьУзелРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.ВыбратьУзел + PictureAndText + true + true + true + UserCmds + Auto + + + ФормаИзменитьУзел + 30 + + <key>ru</key> + <value>Изменить</value> + + true + true + + true + + + ФормаИзменитьУзелРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Command.ИзменитьУзел + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnOpen + ПриОткрытии + + + OnReopen + ПриПовторномОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
            true
            +
            + + ДеревоУзловОбмена + + <key>ru</key> + <value>Дерево узлов обмена</value> + + 2 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Узел обмена</value> + + 1 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 8 + + Number + + + + true + + + true + + + + Пометка + 3 + + Number + + 10 + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + String + + + + true + + + true + + + + + МножественныйВыбор + + <key>ru</key> + <value>Множественный выбор</value> + + 3 + + Boolean + + + true + + + true + + + + ВыбратьУзел + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать узел + + + true + + + StdPicture.ChooseValue + + + + ВыбратьУзел + + + Auto + Auto + + + ИзменитьУзел + + <key>ru</key> + <value>Изменить</value> + + 2 + + ru + Изменить узел + + + true + + F2 + + StdPicture.Change + + + + ИзменитьУзел + + + Auto + Auto + + + МножественныйВыбор + + Boolean + + true + + + НачальноеЗначениеВыбора + + true + + + + + + +
            diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Items/ДеревоУзловОбмена/RowsPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..3285ca4d3abba0a15c9615e4cab4d85dc75dc2dc GIT binary patch literal 1455 zcmV;g1yK5lP)3k?=HC^WN zAqyqv+{(9moP+pYG;TiYykR;%rV-DWvfaiFM_|CuNQ722V(pTC>;Y)*7+ zJSrjSaNHSDR#`VKUgazRk_REj|5TI{3KOKWRpPQrjE7o;5F)3}p`eub-^cf0;T4)h@oIO6T(6GrIZOn; z;-pW(!j0bo5S^;nC%qV4*4_;O_~7;F3o=K~xB+#Ki__qN7|7-7)fH9)k29@S^s;)I*zJ7y-`UcuNod|aq09lI@ zWcjxHeg+e-EZuT5!@n3Q<*Bw?w{jS%@6oxPw*h%7ROf?@QFufIn#f2rQPD)k=-Ikt z3WlV+KEsq$^@op$h(N22B6^4poqiZwmrQyn{6ORPVF8Dw{k^jC3wgCQ)jc%mu-Z;Y zm-ASt251t+t9Ne5_0g${eSV$nb%P8^dL|SmV6XMg)g%hzK=2E*htuVZ!>bt0@L26b z;|CI78OZyph{(F?tELlno2Agl`?*VtveVPXjgn3kZo+e_yrCY{>|)_lUEgbi4QQLwmZx6D7E9x1_~B0Pi0^efUrS_OCgP2*aRIik|oiAMZ=N zUAtrS?1BN~cb#bjU}(un8f~34wsvB1cJuTfWqp|FLGjZ^#BkAem{k2sydO7N(PBOl zQ@zPDyQcwxysy#;65~fCTulG8J&3Tz2<9C_6emnZJ zF;^YtqOGzEjZXa&fHD~G?_7M58dGCq`S#{KfTN{V=CqN?NjAR?yuaPxQHjIpI)mFg zslaqi04%CDiITJwX>)sOAI6Vbs6VPWt0AR6dZK2`?IYC1eg>cnX9+gCCBc7XQtaJG5=3X@geFGjO)^XNT6f+}G|1bCRtKdxi>!1Jt002ov JPDHLkV1iHf)4c!y literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl new file mode 100644 index 000000000..31767b0c0 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl @@ -0,0 +1,208 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + МножественныйВыбор = Ложь; + ПрочитатьДеревоУзловОбмена(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТекПараметры = УстановитьПараметрыФормы(); + РазвернутьУзлы(ТекПараметры.Отмеченные); + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + ТекПараметры = УстановитьПараметрыФормы(); + РазвернутьУзлы(ТекПараметры.Отмеченные); + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = ТекПараметры.ТекущаяСтрока; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоУзлов +// + +&НаКлиенте +Процедура ДеревоУзловОбменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПроизвестиВыборУзлов(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоУзловОбменаПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +// Выбирает узел и передает выбранные значения в вызывающую форму. +&НаКлиенте +Процедура ВыбратьУзел(Команда) + ПроизвестиВыборУзлов(МножественныйВыбор); +КонецПроцедуры + +// Открывает форму узла, заданную в конфигурации. +&НаКлиенте +Процедура ИзменитьУзел(Команда) + КлючСсылка = Элементы.ДеревоУзловОбмена.ТекущиеДанные.Ссылка; + Если КлючСсылка<>Неопределено Тогда + ОткрытьФорму(ПолучитьИмяФормы(КлючСсылка) + "ФормаОбъекта", Новый Структура("Ключ", КлючСсылка)); + КонецЕсли; +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура РазвернутьУзлы(Отмеченные) + Если Отмеченные<>Неопределено Тогда + Для Каждого ТекИд Из Отмеченные Цикл + ТекСтрока = ДеревоУзловОбмена.НайтиПоИдентификатору(ТекИд); + ТекРодитель = ТекСтрока.ПолучитьРодителя(); + Если ТекРодитель<>Неопределено Тогда + Элементы.ДеревоУзловОбмена.Развернуть(ТекРодитель.ПолучитьИдентификатор()); + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроизвестиВыборУзлов(ЭтоМножественныйВыбор) + + Если ЭтоМножественныйВыбор Тогда + Данные = ВыбранныеУзлы(); + Если Данные.Количество()>0 Тогда + ОповеститьОВыборе(Данные); + КонецЕсли; + Возврат; + КонецЕсли; + + Данные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если Данные<>Неопределено И Данные.Ссылка<>Неопределено Тогда + ОповеститьОВыборе(Данные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВыбранныеУзлы(НовыеДанные=Неопределено) + + Если НовыеДанные<>Неопределено Тогда + // Установка + Отмеченные = Новый Массив; + ВнутрУстановитьВыбранныеУзлы(ЭтотОбъект(), ДеревоУзловОбмена, НовыеДанные, Отмеченные); + Возврат Отмеченные; + КонецЕсли; + + // Получение + Результат = Новый Массив; + Для Каждого ТекПлан Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого ТекСтрока Из ТекПлан.ПолучитьЭлементы() Цикл + Если ТекСтрока.Пометка И ТекСтрока.Ссылка<>Неопределено Тогда + Результат.Добавить(ТекСтрока.Ссылка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ВнутрУстановитьВыбранныеУзлы(ТекущийОбъект, Данные, НовыеДанные, Отмеченные) + Для Каждого ТекСтрока Из Данные.ПолучитьЭлементы() Цикл + Если НовыеДанные.Найти(ТекСтрока.Ссылка)<>Неопределено Тогда + ТекСтрока.Пометка = Истина; + ТекущийОбъект.ПроставитьПометкиВверх(ТекСтрока); + Отмеченные.Добавить(ТекСтрока.ПолучитьИдентификатор()); + КонецЕсли; + ВнутрУстановитьВыбранныеУзлы(ТекущийОбъект, ТекСтрока, НовыеДанные, Отмеченные); + КонецЦикла; +КонецПроцедуры + +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект=Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Процедура ПрочитатьДеревоУзловОбмена() + Дерево = ЭтотОбъект().СформироватьДеревоУзлов(); + ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); +КонецПроцедуры + +&НаСервере +Процедура ИзменениеПометки(СтрокаДанных) + ЭлементДанных = ДеревоУзловОбмена.НайтиПоИдентификатору(СтрокаДанных); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Функция УстановитьПараметрыФормы() + + Результат = Новый Структура("ТекущаяСтрока, Отмеченные"); + + // Множественный выбор + Элементы.ДеревоУзловОбменаПометка.Видимость = Параметры.МножественныйВыбор; + // Сбрасываем пометки только если выбор изменился + Если Параметры.МножественныйВыбор<>МножественныйВыбор Тогда + ТекущийОбъект = ЭтотОбъект(); + Для Каждого ТекСтрока Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + ТекСтрока.Пометка = Ложь; + ТекущийОбъект.ПроставитьПометкиВниз(ТекСтрока); + КонецЦикла; + КонецЕсли; + МножественныйВыбор = Параметры.МножественныйВыбор; + + // Позиционирование + Если МножественныйВыбор И ТипЗнч(Параметры.НачальноеЗначениеВыбора)=Тип("Массив") Тогда + Отмеченные = ВыбранныеУзлы(Параметры.НачальноеЗначениеВыбора); + Результат.Отмеченные = Отмеченные; + Если Отмеченные.Количество()>0 Тогда + Результат.ТекущаяСтрока = Отмеченные[0]; + КонецЕсли; + + ИначеЕсли Параметры.НачальноеЗначениеВыбора<>Неопределено Тогда + // Одиночный вариант + Результат.ТекущаяСтрока = ИдентификаторСтрокиПоУзлу(ДеревоУзловОбмена, Параметры.НачальноеЗначениеВыбора); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ИдентификаторСтрокиПоУзлу(Данные, Ссылка) + Для Каждого ТекСтрока Из Данные.ПолучитьЭлементы() Цикл + Если ТекСтрока.Ссылка=Ссылка Тогда + Возврат ТекСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Результат = ИдентификаторСтрокиПоУзлу(ТекСтрока, Ссылка); + Если Результат<>Неопределено Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form new file mode 100644 index 000000000..e6e913906 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Form.form @@ -0,0 +1,802 @@ + + + + <key>ru</key> + <value>Настройки</value> + + + Группа8 + 32 + + Группа1 + 5 + + Декорация1 + 13 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 14 + true + + Label + 1 + true + true + + Left + + + + Группа4 + 12 + + АвторегистрацияДвижений + 1 + + <key>ru</key> + <value>Движений вместе с документами</value> + + true + true + + true + + + Объект.НастройкаАвторегистрацияДвижений + + Right + + АвторегистрацияДвиженийРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + АвторегистрацияДвиженийКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + + АвторегистрацияПоследовательностей + 3 + + <key>ru</key> + <value>Последовательностей вместе с документами</value> + + true + true + + true + + + Объект.НастройкаАвторегистрацияПоследовательностей + + Right + + АвторегистрацияПоследовательностейРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + АвторегистрацияПоследовательностейКонтекстноеМеню + 4 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа4РасширеннаяПодсказка + 38 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Авторегистрация</value> + + true + + Группа1РасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Группа7 + 29 + + НомераСообщенийРегистрации + 30 + true + true + + true + + + Объект.НастройкаВариантНомераСообщения + + None + + НомераСообщенийРегистрацииРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + НомераСообщенийРегистрацииКонтекстноеМеню + 31 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Регистрировать как не отправленные + + + 0 + + + + + ru + Использовать номер сообщения узла обмена + + + 1 + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Установка номера сообщения при регистрации</value> + + + Группа7РасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + Группа8РасширеннаяПодсказка + 35 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа2 + 8 + + Декорация2 + 16 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 17 + true + + Label + 1 + true + true + + Left + + + + Группа3 + 15 + + Группа5 + 24 + + ОбработкаЗапросаВнешняя + 9 + + <key>ru</key> + <value>Вспомогательная обработка для работы с результатами запроса</value> + + true + true + + true + + + ВариантИспользованияКонсолиЗапросов + + None + + ОбработкаЗапросаВнешняяРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ОбработкаЗапросаВнешняяКонтекстноеМеню + 10 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + В каталоге сервера: + + + 2 + + + + + ru + В составе конфигурации + + + 1 + + + + + ru + Не использовать + + + 0 + + + Vertical + + + true + true + + true + + + Группа5РасширеннаяПодсказка + 49 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группа6 + 25 + + ОбработкаЗапросаПуть + 22 + true + true + + true + + + Объект.НастройкаАдресВнешнейОбработкиЗапросов + + None + + OnChange + ОбработкаЗапросаПутьПриИзменении + + + ОбработкаЗапросаПутьРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ОбработкаЗапросаПутьКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + + StartChoice + ОбработкаЗапросаПутьНачалоВыбора + + 50 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа6РасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + true + + Группа3РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Консоль запросов</value> + + true + + Группа2РасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаБСП + 26 + + НастройкаКонтрольВыгрузкиОбъектов + 27 + + <key>ru</key> + <value>Использовать при регистрации изменений объектов ограничения миграции данных</value> + + true + true + + true + + + Объект.НастройкаКонтрольВыгрузкиОбъектов + + Right + + НастройкаКонтрольВыгрузкиОбъектовРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + НастройкаКонтрольВыгрузкиОбъектовКонтекстноеМеню + 28 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Библиотека стандартных подсистем</value> + + + ru + Группа БСП + + true + + ГруппаБСПРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 18 + + <key>ru</key> + <value>Записать</value> + + true + true + + true + + true + + ФормаОКРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.ПодтвердитьВыбор + PictureAndText + true + true + true + UserCmds + + StdPicture.WriteAndClose + + Auto + + + ФормаОтмена + 19 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + + StdPicture.Close + + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
            true
            +
            + + ВариантИспользованияКонсолиЗапросов + + <key>ru</key> + <value>Вариант использования консоли запросов</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ИдентификаторКонсолиЗапросов + + <key>ru</key> + <value>Идентификатор консоли запросов</value> + + 2 + + String + + + + true + + + true + + + + ПодтвердитьВыбор + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + Подтвердить выбор + + + true + + + StdPicture.WriteAndClose + + + + ПодтвердитьВыбор + + + Auto + Auto + + + + + + +
            diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl new file mode 100644 index 000000000..2add99b61 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -0,0 +1,162 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + ИдентификаторКонсолиЗапросов = "КонсольЗапросов"; + + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.ПрочитатьНастройки(); + ТекущийОбъект.ПрочитатьПризнакПоддержкиБСП(); + + Строка = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + Если НРег(Прав(Строка, 4))=".epf" Тогда + ВариантИспользованияКонсолиЗапросов = 2; + ИначеЕсли Метаданные.Обработки.Найти(Строка)<>Неопределено Тогда + ВариантИспользованияКонсолиЗапросов = 1; + Строка = ""; + Иначе + ВариантИспользованияКонсолиЗапросов = 0; + Строка = ""; + КонецЕсли; + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = Строка; + + ЭтотОбъект(ТекущийОбъект); + + СписокВыбора = Элементы.ОбработкаЗапросаВнешняя.СписокВыбора; + + // В составе метаданных разрешаем, только если есть предопределенное + Если Метаданные.Обработки.Найти(ИдентификаторКонсолиЗапросов)=Неопределено Тогда + ТекЭлемент = СписокВыбора.НайтиПоЗначению(1); + Если ТекЭлемент<>Неопределено Тогда + СписокВыбора.Удалить(ТекЭлемент); + КонецЕсли; + КонецЕсли; + + // Строка опции из файла + Если ТекущийОбъект.ЭтоФайловаяБаза() Тогда + ТекЭлемент = СписокВыбора.НайтиПоЗначению(2); + Если ТекЭлемент<>Неопределено Тогда + ТекЭлемент.Представление = НСтр("ru='В каталоге:'"); + КонецЕсли; + КонецЕсли; + + // БСП разрешаем только если она есть и нужной версии + Элементы.ГруппаБСП.Видимость = ТекущийОбъект.КонфигурацияПоддерживаетБСП + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// + +&НаКлиенте +Процедура ОбработкаЗапросаПутьПриИзменении(Элемент) + ВариантИспользованияКонсолиЗапросов = 2; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаЗапросаПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.ПроверятьСуществованиеФайла = Истина; + Диалог.Фильтр = НСтр("ru='Внешние обработки (*.epf)|*.epf'"); + Если Диалог.Выбрать() Тогда + ВариантИспользованияКонсолиЗапросов = 2; + УстановитьНастройкуАдресВнешнейОбработкиЗапросов(Диалог.ПолноеИмяФайла); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +&НаКлиенте +Процедура ПодтвердитьВыбор(Команда) + + Проверка = ПроверитьНастройки(); + Если Проверка.ЕстьОшибки Тогда + // Сообщаем об ошибках + Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов<>Неопределено Тогда + СообщитьОбОшибке(Проверка.НастройкаАдресВнешнейОбработкиЗапросов, "Объект.НастройкаАдресВнешнейОбработкиЗапросов"); + Возврат; + КонецЕсли; + КонецЕсли; + + // Все успешно + СохранитьНастройки(); + Закрыть(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура СообщитьОбОшибке(Текст, ИмяРеквизита=Неопределено) + + Если ИмяРеквизита=Неопределено Тогда + ЗаголовокОшибки = НСтр("ru='Ошибка'"); + Предупреждение(Текст,,ЗаголовокОшибки); + Возврат; + КонецЕсли; + + Сообщение = Новый СообщениеПользователю(); + Сообщение.Текст = Текст; + Сообщение.Поле = ИмяРеквизита; + Сообщение.УстановитьДанные(ЭтаФорма); + Сообщение.Сообщить(); +КонецПроцедуры + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПроверитьНастройки() + ТекущийОбъект = ЭтотОбъект(); + + Если ВариантИспользованияКонсолиЗапросов=2 Тогда + Если НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4))<>".epf" Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) + ".epf"; + КонецЕсли; + ИначеЕсли ВариантИспользованияКонсолиЗапросов=0 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ""; + КонецЕсли; + Результат = ТекущийОбъект.ПроверитьКорректностьНастроек(); + ЭтотОбъект(ТекущийОбъект); + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура СохранитьНастройки() + ТекущийОбъект = ЭтотОбъект(); + Если ВариантИспользованияКонсолиЗапросов=0 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ""; + ИначеЕсли ВариантИспользованияКонсолиЗапросов=1 Тогда + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ИдентификаторКонсолиЗапросов ; + КонецЕсли; + ТекущийОбъект.СохранитьНастройки(); + ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура УстановитьНастройкуАдресВнешнейОбработкиЗапросов(ПутьКФайлу) + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов = ПутьКФайлу; + ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form similarity index 59% rename from SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form rename to SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form index 2b8b113da..aedd358bf 100644 --- a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Form.form @@ -1,117 +1,30 @@ - + + + <key>ru</key> + <value>Номера сообщений узла плана обмена</value> + - Группа1 - 3 + Группа3 + 6 - Пароль - 4 - true - true - - true - - - Пароль - - - ПарольРасширеннаяПодсказка - 13 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - Normal - - - - ПодтверждениеПароля - 6 - true - true - - true - - - ПодтверждениеПароля - - - ПодтверждениеПароляРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - ПодтверждениеПароляКонтекстноеМеню - 7 - true - - InputField - Enter - true - Left - true - - 30 - true - true - true - true - true - true - true - Normal - - - - Декорация2 - 8 + НомерОтправленного + 7 <key>ru</key> - <value>Надежный пароль должен: -- состоять не менее чем из восьми символов, -- включать в себя заглавные латинские буквы, -- включать в себя прописные латинские буквы, -- цифры, -- символы (подчеркивание, скобки и т.д.). - -Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся -группы символов.</value> + <value>Отправленного</value> true true true + + НомерОтправленного + - Декорация2РасширеннаяПодсказка - 17 + НомерОтправленногоРасширеннаяПодсказка + 16 Label true true @@ -120,19 +33,68 @@
            - Декорация2КонтекстноеМеню - 9 + НомерОтправленногоКонтекстноеМеню + 8 true - Label - 50 - true - true - - Style.ПоясняющийТекст - - - Left + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерПринятого + 9 + + <key>ru</key> + <value>Принятого</value> + + true + true + + true + + + НомерПринятого + + + НомерПринятогоРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НомерПринятогоКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal true @@ -140,9 +102,15 @@ true + + <key>ru</key> + <value>Номера сообщений</value> + + true + true - Группа1РасширеннаяПодсказка - 12 + Группа3РасширеннаяПодсказка + 15 Label true true @@ -152,29 +120,33 @@ UsualGroup - Vertical Auto - NormalSeparation + StrongSeparation true true + auto Auto Auto - - ФормаКоманднаяПанель - -1 + + Группа4 + 11 - ФормаСоздатьПользователя - 1 + ЗаписатьИзмененияУзла + 14 + + <key>ru</key> + <value>Записать</value> + true true true - ФормаСоздатьПользователяРасширеннаяПодсказка - 10 + ЗаписатьИзмененияУзлаРасширеннаяПодсказка + 21 Label true true @@ -182,7 +154,7 @@ Left
            - Form.Command.ЗаписатьИЗакрыть + Form.Command.ЗаписатьИзмененияУзла Auto true true @@ -191,16 +163,20 @@ Auto - Подробно - 2 + Отмена + 13 + + <key>ru</key> + <value>Закрыть</value> + true true true - ПодробноРасширеннаяПодсказка - 11 + ОтменаРасширеннаяПодсказка + 22 Label true true @@ -208,25 +184,52 @@ Left - Form.Command.Подробно + Form.StandardCommand.Cancel Normal Auto true true UserCmds Auto - InAdditionalSubmenu + true + true + + true + + + Группа4РасширеннаяПодсказка + 20 + Label + true + true + + Left + + + CommandBar + + Right + + + None + false + + ФормаКоманднаяПанель + -1 Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true - true true Vertical true @@ -236,17 +239,10 @@ auto true - Пароль - - <key>ru</key> - <value>Пароль</value> - + Объект 1 - String - - 50 - + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными true @@ -254,20 +250,17 @@ true - ShowError +
            true
            - ПодтверждениеПароля + УзелОбменаСсылка <key>ru</key> - <value>Подтверждение пароля</value> + <value>Узел обмена</value> 2 - String - - 50 - + ExchangePlanRef true @@ -275,73 +268,97 @@ true - ShowError + + УзелОбменаСсылка + + true - Пользователь + НомерОтправленного <key>ru</key> - <value>Пользователь</value> + <value>Номер отправленного</value> 3 - CatalogRef.Пользователи + Number + + 10 + true + true - + + true + + true - - ЗаписатьИЗакрыть + + НомерПринятого <key>ru</key> - <value>Записать и закрыть</value> + <value>Номер принятого</value> + + 4 + + Number + + 10 + true + + + + true + + + true + + true + + + ВерсияДанных + + <key>ru</key> + <value>Версия данных</value> + + 5 + + String + + + + true + + + true + + + + ЗаписатьИзмененияУзла + + <key>ru</key> + <value>Записать изменения узла</value> 1 ru - Записать и закрыть - - - true - - - StdPicture.WriteAndClose - - - - ЗаписатьИЗакрыть - - - Text - Auto - Auto - - - Подробно - - <key>ru</key> - <value>Подробные сведения</value> - - 2 - - ru - Подробно + Записать изменения узла true - Подробно + ЗаписатьИзмененияУзла Auto Auto - АвтономноеРабочееМесто + УзелОбменаСсылка ExchangePlanRef @@ -351,4 +368,5 @@ + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl new file mode 100644 index 000000000..064327c02 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/НомераСообщенийУзлаПланаОбмена/Module.bsl @@ -0,0 +1,67 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + УзелОбменаСсылка = Параметры.УзелОбменаСсылка; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПрочитатьНомераСообщений(); + Заголовок = УзелОбменаСсылка; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +// Производит запись измененных данных и закрывает форму. +&НаКлиенте +Процедура ЗаписатьИзмененияУзла(Команда) + ЗаписатьНомераСообщений(); + Оповестить("ИзменениеДанныхУзлаОбмена", УзелОбменаСсылка, ЭтаФорма); + Закрыть(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Процедура ПрочитатьНомераСообщений() + Данные = ЭтотОбъект().ПолучитьПараметрыУзлаОбмена(УзелОбменаСсылка, "НомерОтправленного, НомерПринятого, ВерсияДанных"); + Если Данные=Неопределено Тогда + НомерОтправленного = Неопределено; + НомерПринятого = Неопределено; + ВерсияДанных = Неопределено; + Иначе + НомерОтправленного = Данные.НомерОтправленного; + НомерПринятого = Данные.НомерПринятого; + ВерсияДанных = Данные.ВерсияДанных; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНомераСообщений() + Данные = Новый Структура("НомерОтправленного, НомерПринятого", НомерОтправленного, НомерПринятого); + ЭтотОбъект().УстановитьПараметрыУзлаОбмена(УзелОбменаСсылка, Данные); +КонецПроцедуры diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform new file mode 100644 index 0000000000000000000000000000000000000000..dba63f9b605370ca82db513038a6cef532d420f9 GIT binary patch literal 8033 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 L9xDGZ_}PC0qar|_ literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/ConditionalAppearance.dcssca new file mode 100644 index 000000000..e42f3054b --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/ConditionalAppearance.dcssca @@ -0,0 +1,88 @@ + + + + + + ДеревоУзловОбменаНомерСообщения + + + + + OrGroup + + ДеревоУзловОбмена.Ссылка + NotFilled + + + ДеревоУзловОбмена.Пометка + Equal + 0 + + + + + + Текст + + + + + + + + ДеревоУзловОбменаНомерСообщения + + + + + ДеревоУзловОбмена.НеВыгружалось + Equal + true + + + ДеревоУзловОбмена.Пометка + Greater + 0 + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + + + + ДеревоУзловОбменаКод + + + ДеревоУзловОбменаАвторегистрация + + + ДеревоУзловОбменаНомерСообщения + + + + + ДеревоУзловОбмена.Ссылка + NotFilled + + + + + Видимость + false + + + Отображать + false + + + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form new file mode 100644 index 000000000..5a5cde771 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Form.form @@ -0,0 +1,1347 @@ + + + + <key>ru</key> + <value>Узлы регистрации объекта</value> + + + ДеревоУзловОбмена + 1 + + <key>ru</key> + <value>Узлы обмена</value> + + true + true + + true + + + ДеревоУзловОбмена + + true + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоУзловОбменаПометкаНаименование + 14 + + ДеревоУзловОбменаПометка + 12 + true + true + + true + + + ДеревоУзловОбмена.Пометка + + None + + OnChange + ДеревоУзловОбменаПометкаПриИзменении + + + ДеревоУзловОбменаПометкаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ДеревоУзловОбменаПометкаКонтекстноеМеню + 13 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + ДеревоУзловОбменаНаименование + 4 + + <key>ru</key> + <value>Узел</value> + + true + true + + true + + + ДеревоУзловОбмена.Наименование + + + ДеревоУзловОбменаНаименованиеРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ДеревоУзловОбменаНаименованиеКонтекстноеМеню + 5 + true + + LabelField + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Описание узла</value> + + + ru + Описание узла + + + ДеревоУзловОбменаПометкаНаименованиеРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоУзловОбменаКод + 31 + + <key>ru</key> + <value>Код</value> + + true + true + + true + + + ДеревоУзловОбмена.Код + + + ДеревоУзловОбменаКодРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ДеревоУзловОбменаКодКонтекстноеМеню + 32 + true + + LabelField + Auto + true + Left + true + + true + true + + + + ДеревоУзловОбменаГруппа1 + 53 + + ДеревоУзловОбменаАвторегистрация + 34 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + ДеревоУзловОбмена.ИндексКартинкиАвторегистрация + + None + + ДеревоУзловОбменаАвторегистрацияРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + ДеревоУзловОбменаАвторегистрацияКонтекстноеМеню + 35 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + + 1 + + + + + ДеревоУзловОбменаНомерСообщения + 54 + + <key>ru</key> + <value>Номер сообщения</value> + + true + true + + true + + + ДеревоУзловОбмена.НомерСообщения + + + ДеревоУзловОбменаНомерСообщенияРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДеревоУзловОбменаНомерСообщенияКонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Описание регистрации</value> + + + ДеревоУзловОбменаГруппа1РасширеннаяПодсказка + 90 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + ДеревоУзловОбменаКоманднаяПанель + 3 + Left + + + Selection + ДеревоУзловОбменаВыбор + + + ДеревоУзловОбменаСтрокаПоиска + 74 + + ДеревоУзловОбменаСтрокаПоискаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ДеревоУзловОбменаСтрокаПоискаКонтекстноеМеню + 75 + true + + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаСостояниеПросмотра + 77 + + ДеревоУзловОбменаСостояниеПросмотраРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ДеревоУзловОбменаСостояниеПросмотраКонтекстноеМеню + 78 + true + + ViewStatusAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаУправлениеПоиском + 80 + + ДеревоУзловОбменаУправлениеПоискомРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ДеревоУзловОбменаУправлениеПоискомКонтекстноеМеню + 81 + true + + SearchControlAddition + ДеревоУзловОбмена + + true + + + + ДеревоУзловОбменаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ДеревоУзловОбменаКонтекстноеМеню + 2 + + ДеревоУзловОбменаКонтекстноеМенюГруппа1 + 40 + + ДеревоУзловОбменаКонтекстноеМенюПометитьВсеУзлы + 41 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюПометитьВсеУзлыРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ПометитьВсеУзлы + Normal + Auto + true + true + UserCmds + + StdPicture.CheckAll + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюСнятьПометкуВсемУзлам + 42 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюСнятьПометкуВсемУзламРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.СнятьПометкуВсемУзлам + Normal + Auto + true + true + UserCmds + + StdPicture.UncheckAll + + Auto + + + ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам + 43 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзламРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.ИнвертироватьПометкуВсемУзлам + Normal + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа1РасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + + + ДеревоУзловОбменаКонтекстноеМенюОткрытьФормуРедактированияОтУзла + 47 + + <key>ru</key> + <value>Регистрация других объектов узла</value> + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюОткрытьФормуРедактированияОтУзлаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРедактированияОтУзла + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюГруппа2 + 44 + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписок + 45 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбмена + 46 + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Item.ДеревоУзловОбмена.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ДеревоУзловОбменаКонтекстноеМенюГруппа2РасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + + true + + Tree + true + true + true +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + ExpandAllLevels + true + true + + ДеревоУзловОбмена.ИндексКартинки + + + None + None + None + true +
            + + ГруппаСкрытыхДанных + 50 + + СкрытаяКартинкаИнформация32 + 51 + + <key>ru</key> + <value>Скрытая картинка информация32</value> + + true + true + + true + + + СкрытаяКартинкаИнформация32РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + СкрытаяКартинкаИнформация32КонтекстноеМеню + 52 + true + + true + true + + + + + false + + true + + + <key>ru</key> + <value>Группа скрытых данных</value> + + + ru + Группа скрытых данных + + true + + ГруппаСкрытыхДанныхРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ДеревоУзловОбменаИзменитьРегистрацию + 33 + true + true + + true + + + ДеревоУзловОбменаИзменитьРегистрациюРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Command.ИзменитьРегистрацию + PictureAndText + true + true + true + UserCmds + + StdPicture.Write + + Auto + + + Группа1 + 48 + + ФормаУстановитьПометкуВсемУзлам + 36 + true + true + + true + + + ФормаУстановитьПометкуВсемУзламРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.ПометитьВсеУзлы + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСнятьПометкуВсемУзлам + 37 + true + true + + true + + + ФормаСнятьПометкуВсемУзламРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Command.СнятьПометкуВсемУзлам + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Переключение пометок</value> + + + Группа1РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + + + Группа2 + 56 + + ФормаПеречитатьДеревоУзлов + 49 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ФормаПеречитатьДеревоУзловРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Command.ПеречитатьДеревоУзлов + Normal + PictureAndText + true + true + UserCmds + + StdPicture.Refresh + + Auto + + + ФормаОткрытьФормуНастроек + 57 + true + true + + true + + + ФормаОткрытьФормуНастроекРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуНастроек + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ru + Группа2 + + + Группа2РасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
            true
            +
            + + ДеревоУзловОбмена + + <key>ru</key> + <value>Дерево узлов обмена</value> + + 2 + + ValueTree + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Узел обмена</value> + + 1 + + String + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 8 + + Number + + + + true + + + true + + + + Пометка + 3 + + Number + + 10 + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + Код + + <key>ru</key> + <value>Код</value> + + 2 + + String + + + + true + + + true + + + + ИндексКартинкиАвторегистрация + + <key>ru</key> + <value>Индекс картинки авторегистрация</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ИсходнаяПометка + + <key>ru</key> + <value>Исходная пометка</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + НомерСообщения + + <key>ru</key> + <value>Номер сообщения</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + НеВыгружалось + + <key>ru</key> + <value>Не выгружалось</value> + + 9 + + Boolean + + + 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 + + ru + Изменить регистрацию + + + true + + + StdPicture.Write + + + + ИзменитьРегистрацию + + + Auto + Auto + + + ПометитьВсеУзлы + + <key>ru</key> + <value>Пометить все узлы</value> + + 2 + + ru + Пометить все узлы + + + true + + + StdPicture.CheckAll + + + + ПометитьВсеУзлы + + + Auto + Auto + + + СнятьПометкуВсемУзлам + + <key>ru</key> + <value>Снять пометку у всех узлов</value> + + 4 + + ru + Снять пометку всем узлам + + + true + + + StdPicture.UncheckAll + + + + СнятьПометкуВсемУзлам + + + Auto + Auto + + + ИнвертироватьПометкуВсемУзлам + + <key>ru</key> + <value>Изменить пометку всех узлов</value> + + 3 + + ru + Изменить пометку всех узлов + + + true + + + + ИнвертироватьПометкуВсемУзлам + + + Auto + Auto + + + ОткрытьФормуРедактированияОтУзла + + <key>ru</key> + <value>Открыть форму редактирования от узла</value> + + 5 + + ru + Открыть форму редактирования от узла + + + true + + + + ОткрытьФормуРедактированияОтУзла + + + Auto + Auto + + + ПеречитатьДеревоУзлов + + <key>ru</key> + <value>Перечитать дерево узлов</value> + + 6 + + ru + Перечитать дерево узлов + + + true + + + StdPicture.Reread + + + + ПеречитатьДеревоУзлов + + + Auto + Auto + + + ОткрытьФормуНастроек + + <key>ru</key> + <value>Настройки</value> + + 7 + + ru + Открыть форму настроек + + + true + + + StdPicture.ReportSettings + + + + ОткрытьФормуНастроек + + + Auto + Auto + + + ОбъектРегистрации + + true + + + ТаблицаРегистрации + + String + + + true + + + ОповещатьОбИзменениях + + Boolean + + true + + + + + + +
            diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбмена/RowsPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..3285ca4d3abba0a15c9615e4cab4d85dc75dc2dc GIT binary patch literal 1455 zcmV;g1yK5lP)3k?=HC^WN zAqyqv+{(9moP+pYG;TiYykR;%rV-DWvfaiFM_|CuNQ722V(pTC>;Y)*7+ zJSrjSaNHSDR#`VKUgazRk_REj|5TI{3KOKWRpPQrjE7o;5F)3}p`eub-^cf0;T4)h@oIO6T(6GrIZOn; z;-pW(!j0bo5S^;nC%qV4*4_;O_~7;F3o=K~xB+#Ki__qN7|7-7)fH9)k29@S^s;)I*zJ7y-`UcuNod|aq09lI@ zWcjxHeg+e-EZuT5!@n3Q<*Bw?w{jS%@6oxPw*h%7ROf?@QFufIn#f2rQPD)k=-Ikt z3WlV+KEsq$^@op$h(N22B6^4poqiZwmrQyn{6ORPVF8Dw{k^jC3wgCQ)jc%mu-Z;Y zm-ASt251t+t9Ne5_0g${eSV$nb%P8^dL|SmV6XMg)g%hzK=2E*htuVZ!>bt0@L26b z;|CI78OZyph{(F?tELlno2Agl`?*VtveVPXjgn3kZo+e_yrCY{>|)_lUEgbi4QQLwmZx6D7E9x1_~B0Pi0^efUrS_OCgP2*aRIik|oiAMZ=N zUAtrS?1BN~cb#bjU}(un8f~34wsvB1cJuTfWqp|FLGjZ^#BkAem{k2sydO7N(PBOl zQ@zPDyQcwxysy#;65~fCTulG8J&3Tz2<9C_6emnZJ zF;^YtqOGzEjZXa&fHD~G?_7M58dGCq`S#{KfTN{V=CqN?NjAR?yuaPxQHjIpI)mFg zslaqi04%CDiITJwX>)sOAI6Vbs6VPWt0AR6dZK2`?IYC1eg>cnX9+gCCBc7XQtaJG5=3X@geFGjO)^XNT6f+}G|1bCRtKdxi>!1Jt002ov JPDHLkV1iHf)4c!y literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаАвторегистрация/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d7cc10f56a78f5bdb6165e754e42904fa52f1f99 GIT binary patch literal 778 zcmV+l1NHogP)! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/УзлыРегистрацииОбъекта/Items/ДеревоУзловОбменаКонтекстноеМенюИнвертироватьПометкуВсемУзлам/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8178eadfb014c8701699239c0ba23b649f0a2 GIT binary patch literal 517 zcmV+g0{Z=lP)(;6179( zUX0GIa@r+bsiX#~LTh(>KpGWiFf@opYOOvbuGZ@8|BMD?XG+$2 zG6Nq|ELGV1@r|e*vfqj59~})Egmd6~lsEn(0OMIK!@zTa zVv74d@E7QGcU1( zjq~@@Awvh8G6j^u{xz1ICGZ%D)`*-cItUO7ur=}z0e1Zxfv|}@P9DzY!=J!b;hl_oxcOI3=YLy6&-1Gy!eGy(UWcRj@PLLdHj*sNQ||FHi^y z9?Gfi_oxDZI#*0LH?1Tjxi%A=E2toY~nVv-oNbss3W^N8RnMg@u35FNb zJWi?0O#%b#atR4?_ZAyJP4zmq$n^90-pO-;o`ioh$kn?rx+&FpC%^zotl9n5)`g=0 O0000Элементы.ДеревоУзловОбменаНомерСообщения Тогда + Возврат; + КонецЕсли; + + ТекДанные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru='Номер отправленного'"); + Если ВвестиЧисло(НомерСообщения, Подсказка) Тогда + ИзменитьНомерСообщенияНаСервере(ТекДанные.Ссылка, НомерСообщения, ОбъектРегистрации, ТаблицаРегистрации); + + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(Истина); + РазвернутьВсеУзлы(ТекущийУзел); + + Если Параметры.ОповещатьОбИзменениях Тогда + Оповестить("ИзменениеРегистрацииОбменаДаннымиОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации", ОбъектРегистрации, ТаблицаРегистрации), + ЭтаФорма); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоУзловОбменаПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоУзловОбмена.ТекущаяСтрока); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +&НаКлиенте +Процедура ПеречитатьДеревоУзлов(Команда) + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(); + РазвернутьВсеУзлы(ТекущийУзел); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРедактированияОтУзла(Команда) + ОткрытьФормуРедактированияДругихОбъектов(); +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьВсеУзлы(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + СтрокаПлана.Пометка = Истина; + ИзменениеПометки(СтрокаПлана.ПолучитьИдентификатор()) + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометкуВсемУзлам(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + СтрокаПлана.Пометка = Ложь; + ИзменениеПометки(СтрокаПлана.ПолучитьИдентификатор()) + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ИнвертироватьПометкуВсемУзлам(Команда) + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + СтрокаУзла.Пометка = Не СтрокаУзла.Пометка; + ИзменениеПометки(СтрокаУзла.ПолучитьИдентификатор()) + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРегистрацию(Команда) + + Текст = НСтр("ru='Изменить регистрацию ""%1"" + |на узлах?'"); + + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", ОбъектРегистрации); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет,,,ЗаголовокВопроса); + Если Ответ=КодВозвратаДиалога.Да Тогда + + Колво = ИзменениеРегистрацииПоУзлам(ДеревоУзловОбмена); + Если Колво>0 Тогда + Текст = НСтр("ru='Регистрация %1 была изменена на %2 узлах'"); + ЗаголовокОповещения = НСтр("ru='Изменение регистрации:'"); + + Текст = СтрЗаменить(Текст, "%1", ОбъектРегистрации); + Текст = СтрЗаменить(Текст, "%2", Колво); + + ПоказатьОповещениеПользователя(ЗаголовокОповещения, + ПолучитьНавигационнуюСсылку(ОбъектРегистрации), + Текст, + Элементы.СкрытаяКартинкаИнформация32.Картинка); + + Если Параметры.ОповещатьОбИзменениях Тогда + Оповестить("ИзменениеРегистрацииОбменаДаннымиОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации", ОбъектРегистрации, ТаблицаРегистрации), + ЭтаФорма); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + ТекущийУзел = ТекущийВыбранныйУзел(); + ПрочитатьУзлыОбмена(Истина); + РазвернутьВсеУзлы(ТекущийУзел); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(Команда) + ОткрытьФормуНастроекОбработки(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Функция ТекущийВыбранныйУзел() + ТекущиеДанные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если ТекущиеДанные=Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Возврат Новый Структура("Наименование, Ссылка", ТекущиеДанные.Наименование, ТекущиеДанные.Ссылка); +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуНастроекОбработки() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Настройки"; + ОткрытьФорму(ТекИмяФормы, , ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРедактированияДругихОбъектов() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Форма"; + Данные = Элементы.ДеревоУзловОбмена.ТекущиеДанные; + Если Данные<>Неопределено И Данные.Ссылка<>Неопределено Тогда + ТекПараметры = Новый Структура("УзелОбмена, ИдентификаторКоманды, ОбъектыНазначения", Данные.Ссылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, ЭтаФорма); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьВсеУзлы(УзелФокуса=Неопределено) + НайденныйУзел = Неопределено; + + Для Каждого Строка Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Идентификатор = Строка.ПолучитьИдентификатор(); + Элементы.ДеревоУзловОбмена.Развернуть(Идентификатор, Истина); + + Если УзелФокуса<>Неопределено И НайденныйУзел=Неопределено Тогда + Если Строка.Наименование=УзелФокуса.Наименование И Строка.Ссылка=УзелФокуса.Ссылка Тогда + НайденныйУзел = Идентификатор; + Иначе + Для Каждого Подстрока Из Строка.ПолучитьЭлементы() Цикл + Если Подстрока.Наименование=УзелФокуса.Наименование И Подстрока.Ссылка=УзелФокуса.Ссылка Тогда + НайденныйУзел = Подстрока.ПолучитьИдентификатор(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если УзелФокуса<>Неопределено И НайденныйУзел<>Неопределено Тогда + Элементы.ДеревоУзловОбмена.ТекущаяСтрока = НайденныйУзел; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ИзменениеРегистрацииПоУзлам(Знач Данные) + ТекущийОбъект = ЭтотОбъект(); + КолвоУзлов = 0; + Для Каждого Строка Из Данные.ПолучитьЭлементы() Цикл + Если Строка.Ссылка<>Неопределено Тогда + флУже = ТекущийОбъект.ОбъектЗарегистрированНаУзле(Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + Если Строка.Пометка=0 И флУже Тогда + Результат = ТекущийОбъект.ИзменитьРегистрациюНаСервере(Ложь, Истина, Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + КолвоУзлов = КолвоУзлов + Результат.Успешно; + ИначеЕсли Строка.Пометка=1 И (Не флУже) Тогда + Результат = ТекущийОбъект.ИзменитьРегистрациюНаСервере(Истина, Истина, Строка.Ссылка, ОбъектРегистрации, ТаблицаРегистрации); + КолвоУзлов = КолвоУзлов + Результат.Успешно; + КонецЕсли; + КонецЕсли; + КолвоУзлов = КолвоУзлов + ИзменениеРегистрацииПоУзлам(Строка); + КонецЦикла; + Возврат КолвоУзлов; +КонецФункции + +&НаСервере +Функция ИзменитьНомерСообщенияНаСервере(Узел, НомерСообщения, Данные, ИмяТаблицы=Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(НомерСообщения, Истина, Узел, Данные, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект=Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Процедура ИзменениеПометки(Строка) + ЭлементДанных = ДеревоУзловОбмена.НайтиПоИдентификатору(Строка); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьУзлыОбмена(ТолькоОбновить=Ложь) + ТекущийОбъект = ЭтотОбъект(); + Дерево = ТекущийОбъект.СформироватьДеревоУзлов(ОбъектРегистрации, ТаблицаРегистрации); + + Если ТолькоОбновить Тогда + // Обновляем некоторые поля текущим данным + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + СтрокаДерева = Дерево.Строки.Найти(СтрокаУзла.Ссылка, "Ссылка", Истина); + Если СтрокаДерева<>Неопределено Тогда + ЗаполнитьЗначенияСвойств(СтрокаУзла, СтрокаДерева, "Пометка, ИсходнаяПометка, НомерСообщения, НеВыгружалось"); + КонецЕсли; + КонецЦикла; + КонецЦикла; + Иначе + // Переформируем полностью + ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); + КонецЕсли; + + Для Каждого СтрокаПлана Из ДеревоУзловОбмена.ПолучитьЭлементы() Цикл + Для Каждого СтрокаУзла Из СтрокаПлана.ПолучитьЭлементы() Цикл + ТекущийОбъект.ИзменениеПометки(СтрокаУзла); + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокКонстант/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокНаборовЗаписей/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..e2ed0c717 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Attributes/СписокСсылок/ExtInfo/ListSettings.dcss @@ -0,0 +1,39 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + + + + НомерСообщения + + + + + НеВыгружалось + Equal + true + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca new file mode 100644 index 000000000..0697af8c5 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/ConditionalAppearance.dcssca @@ -0,0 +1,99 @@ + + + + + + СписокСсылокНомерСообщения + + + + + СписокСсылок.НеВыгружалось + Equal + true + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + + + + СписокКонстантНомерСообщения + + + + + СписокКонстант.НеВыгружалось + Equal + true + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + + + + СписокНаборовЗаписейНомерСообщения + + + + + СписокНаборовЗаписей.НеВыгружалось + Equal + true + + + + + ЦветТекста + web:LightGray + + + Текст + Не выгружалось + + + + + + + ДеревоМетаданныхКоличествоИзмененийСтрокой + + + + + ДеревоМетаданных.КоличествоИзменений + Equal + 0 + + + + + ЦветТекста + web:DarkGray + + + Текст + Нет изменений + + + + diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form new file mode 100644 index 000000000..659f45c5a --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -0,0 +1,5155 @@ + + + + <key>ru</key> + <value>Регистрация изменений для обмена данными</value> + + + Группа2 + 35 + + УзелОбменаСсылка + 1 + true + true + + true + + + УзелОбменаСсылка + + + OnChange + УзелОбменаСсылкаПриИзменении + + + УзелОбменаСсылкаРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + УзелОбменаСсылкаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + + StartChoice + УзелОбменаСсылкаНачалоВыбора + + + Clearing + УзелОбменаСсылкаОчистка + + + ChoiceProcessing + УзелОбменаСсылкаОбработкаВыбора + + true + true + false + true + false + true + true + true + Normal + + + + ФормаРедактироватьНомераСообщений + 85 + + <key>ru</key> + <value>№ сообщений: отпр. <нет>, прин. <нет></value> + + true + true + + true + + + ФормаРедактироватьНомераСообщенийРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Hyperlink + Form.Command.РедактироватьНомераСообщений + Normal + Auto + true + true + UserCmds + Auto + + + ВариантОтбораПоНомеруСообщения + 172 + + <key>ru</key> + <value>Отображать изменения</value> + + true + true + + true + + + ВариантОтбораПоНомеруСообщения + + + OnChange + ВариантОтбораПоНомеруСообщенияПриИзменении + + + ВариантОтбораПоНомеруСообщенияРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + ВариантОтбораПоНомеруСообщенияКонтекстноеМеню + 173 + true + + InputField + Enter + true + Left + true + + 18 + true + true + true + true + true + + + ru + Все + + + 0 + + + + + ru + Только выгруженные + + + 1 + + + + + ru + Только невыгруженные + + + 2 + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Быстрые отборы</value> + + true + + Группа2РасширеннаяПодсказка + 200 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа1 + 5 + + КоманднаяПанельОбщая + 95 + + ДеревоМетаданныхГруппаДобавить + 39 + + ДеревоМетаданныхДобавитьРегистрациюВсехОбъектов + 40 + + <key>ru</key> + <value>Всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюВсехОбъектовРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюВсехОбъектов + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхДобавитьРегистрациюАвтоОбъектов + 41 + + <key>ru</key> + <value>Объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюАвтоОбъектовРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюАвтоОбъектов + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаКомандДобавить + 183 + + ФормаДобавитьРегистрациюОдногоОбъекта + 184 + + <key>ru</key> + <value>Одиночного объекта</value> + + true + true + + true + + + ФормаДобавитьРегистрациюОдногоОбъектаРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОдногоОбъекта + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ФормаДобавитьРегистрациюОтбор + 185 + + <key>ru</key> + <value>Объектов при помощи отбора</value> + + true + true + + true + + + ФормаДобавитьРегистрациюОтборРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Регистрация</value> + + + ru + Группа команд добавить + + + ГруппаКомандДобавитьРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + + + ДеревоМетаданныхГруппа3 + 60 + + ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса + 59 + + <key>ru</key> + <value>Результатов запроса</value> + + true + true + + true + + + ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапросаРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюРезультатаЗапроса + Normal + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + <key>ru</key> + <value>Регистрация результатов запроса</value> + + + ДеревоМетаданныхГруппа3РасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Зарегистрировать изменения</value> + + + ru + Зарегистрировать объекты выбранных типов + + + ДеревоМетаданныхГруппаДобавитьРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ДеревоМетаданныхГруппаУдалить + 42 + + ДеревоМетаданныхУдалитьРегистрациюВсехОбъектов + 43 + + <key>ru</key> + <value>Всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюВсехОбъектовРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюВсехОбъектов + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхУдалитьРегистрациюАвтоОбъектов + 44 + + <key>ru</key> + <value>Объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюАвтоОбъектовРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюАвтоОбъектов + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаКомандУдалить + 186 + + ФормаУдалитьРегистрациюОдногоОбъекта + 187 + + <key>ru</key> + <value>Одиночного объекта</value> + + true + true + + true + + + ФормаУдалитьРегистрациюОдногоОбъектаРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОдногоОбъекта + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ФормаУдалитьРегистрациюОтбор + 188 + + <key>ru</key> + <value>Объектов при помощи отбора</value> + + true + true + + true + + + ФормаУдалитьРегистрациюОтборРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации</value> + + + ru + Группа команд удалить + + + ГруппаКомандУдалитьРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + + + ДеревоМетаданныхГруппа4 + 61 + + ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапроса + 62 + + <key>ru</key> + <value>Результатов запроса</value> + + true + true + + true + + + ДеревоМетаданныхУдалитьРегистрациюРезультатаЗапросаРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюРезультатаЗапроса + Normal + Auto + true + true + UserCmds + + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации результатов запроса</value> + + + ДеревоМетаданныхГруппа4РасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Отменить регистрацию изменений</value> + + + ru + Отменить регистрацию объектов выбранных типов + + + ДеревоМетаданныхГруппаУдалитьРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Popup + + + StdPicture.DeleteDirectly + + Auto + Normal + + + + ОбновитьВсеДанные + 97 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ОбновитьВсеДанныеРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + Form.Command.ОбновитьВсеДанные + Normal + PictureAndText + true + true + UserCmds + Auto + + + ФормаОткрытьФормуНастроек + 145 + + <key>ru</key> + <value>Настройки</value> + + true + true + + true + + + ФормаОткрытьФормуНастроекРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуНастроек + Normal + PictureAndText + true + true + UserCmds + Auto + + + ПоказатьРезультатВыгрузки + 133 + true + true + + true + + + ПоказатьРезультатВыгрузкиРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Normal + Auto + true + true + UserCmds + + Auto + + + ФормаОткрытьФормуРегистрацииНаУзлах + 182 + + <key>ru</key> + <value>Регистрация объекта на всех узлах</value> + + true + true + + true + + + ФормаОткрытьФормуРегистрацииНаУзлахРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Normal + Picture + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель </value> + + + ru + Общая командная панель + + + КоманднаяПанельОбщаяРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Группа5 + 96 + + ДеревоМетаданных + 6 + + <key>ru</key> + <value>Виды объектов регистрации</value> + + true + true + + true + + + ДеревоМетаданных + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ДеревоМетаданныхГруппа1 + 9 + + ДеревоМетаданныхПометка + 16 + true + true + + true + + + ДеревоМетаданных.Пометка + + None + + OnChange + ДеревоМетаданныхПометкаПриИзменении + + + ДеревоМетаданныхПометкаРасширеннаяПодсказка + 255 + Label + true + true + + Left + + + + ДеревоМетаданныхПометкаКонтекстноеМеню + 17 + true + + CheckBoxField + true + Left + true + + true + + + + ДеревоМетаданныхНаименование + 10 + + <key>ru</key> + <value>Объект конфигурации</value> + + true + true + + true + + + ДеревоМетаданных.Наименование + + + ДеревоМетаданныхНаименованиеРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + ДеревоМетаданныхНаименованиеКонтекстноеМеню + 11 + true + + LabelField + true + Auto + true + Left + true + + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Объекты регистрации</value> + + true + true + true + + ДеревоМетаданныхГруппа1РасширеннаяПодсказка + 254 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоМетаданныхГруппа2 + 26 + + ДеревоМетаданныхАвторегистрация + 27 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + ДеревоМетаданных.Авторегистрация + + None + + ДеревоМетаданныхАвторегистрацияРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + + ДеревоМетаданныхАвторегистрацияКонтекстноеМеню + 28 + true + + PictureField + true + Left + Auto + true + Left + true + + true + true + true + + + + 1 + + + + + ДеревоМетаданныхКоличествоИзмененийСтрокой + 29 + + <key>ru</key> + <value>Зарегистрировано/не выгружено</value> + + true + true + + true + + + ДеревоМетаданных.КоличествоИзмененийСтрокой + + + ДеревоМетаданныхКоличествоИзмененийСтрокойРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + + ДеревоМетаданныхКоличествоИзмененийСтрокойКонтекстноеМеню + 30 + true + + LabelField + true + Left + Auto + true + Left + true + + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Информация о регистрации</value> + + true + true + true + + ДеревоМетаданныхГруппа2РасширеннаяПодсказка + 259 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоМетаданныхКоманднаяПанель + 8 + Left + + + OnActivateRow + ДеревоМетаданныхПриАктивизацииСтроки + + + ДеревоМетаданныхСтрокаПоиска + 245 + + ДеревоМетаданныхСтрокаПоискаРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + ДеревоМетаданныхСтрокаПоискаКонтекстноеМеню + 246 + true + + ДеревоМетаданных + + true + + + + ДеревоМетаданныхСостояниеПросмотра + 248 + + ДеревоМетаданныхСостояниеПросмотраРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + ДеревоМетаданныхСостояниеПросмотраКонтекстноеМеню + 249 + true + + ViewStatusAddition + ДеревоМетаданных + + true + + + + ДеревоМетаданныхУправлениеПоиском + 251 + + ДеревоМетаданныхУправлениеПоискомРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + ДеревоМетаданныхУправлениеПоискомКонтекстноеМеню + 252 + true + + SearchControlAddition + ДеревоМетаданных + + true + + + + ДеревоМетаданныхРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ДеревоМетаданныхКонтекстноеМеню + 7 + + ДеревоМетаданныхКонтекстноеМенюГруппа1 + 114 + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюВсехОбъектов + 115 + + <key>ru</key> + <value>Зарегистрировать изменения всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюВсехОбъектовРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюВсехОбъектов + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюАвтоОбъектов + 116 + + <key>ru</key> + <value>Зарегистрировать изменения объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюАвтоОбъектовРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюАвтоОбъектов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавление по виду объектов</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа1РасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + + + ГруппаКомандДобавить1 + 190 + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОдногоОбъекта + 191 + + <key>ru</key> + <value>Зарегистрировать изменения одиночного объекта</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОдногоОбъектаРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОдногоОбъекта + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОтбор + 192 + + <key>ru</key> + <value>Зарегистрировать изменения объектов при помощи отбора</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюДобавитьРегистрациюОтборРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавление объектов</value> + + + ru + Группа команд добавить + + + ГруппаКомандДобавить1РасширеннаяПодсказка + 232 + Label + true + true + + Left + + + + + + ДеревоМетаданныхКонтекстноеМенюГруппа2 + 142 + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюВсехОбъектов + 143 + + <key>ru</key> + <value>Отменить регистрацию изменений всех объектов выбранных типов</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюВсехОбъектовРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюВсехОбъектов + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюАвтоОбъектов + 144 + + <key>ru</key> + <value>Отменить регистрацию изменений объектов выбранных типов с авторегистрацией</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюАвтоОбъектовРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюАвтоОбъектов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации по виду объектов</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа2РасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + + + ГруппаКомандУдалить1 + 193 + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОдногоОбъекта + 194 + + <key>ru</key> + <value>Отменить регистрацию изменений одиночного объекта</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОдногоОбъектаРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОдногоОбъекта + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОтбор + 195 + + <key>ru</key> + <value>Отменить регистрацию изменений объектов при помощи отбора</value> + + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюУдалитьРегистрациюОтборРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отмена регистрации</value> + + + ru + Группа команд удалить + + + ГруппаКомандУдалить1РасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + + + ДеревоМетаданныхКонтекстноеМенюГруппа3 + 149 + + ДеревоМетаданныхКонтекстноеМенюВывестиСписок + 150 + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + Form.Item.ДеревоМетаданных.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоМетаданныхКонтекстноеМенюКопироватьВБуферОбмена + 151 + true + true + + true + + + ДеревоМетаданныхКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Item.ДеревоМетаданных.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Системное меню</value> + + + ДеревоМетаданныхКонтекстноеМенюГруппа3РасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + + true + + Tree + true + true + true +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + ExpandTopLevel + true + true + + ДеревоМетаданных.ИндексКартинки + + + None + None + None + true +
            + + ВариантыСпискаОбъектов + 45 + + СтраницаКонстанты + 49 + + СписокКонстант + 63 + + <key>ru</key> + <value>Список констант</value> + + true + true + + true + + + СписокКонстант + + None + Choose + + СписокКонстантНаименование + 66 + + <key>ru</key> + <value>Константа</value> + + true + true + + true + + + СписокКонстант.Наименование + + + СписокКонстантНаименованиеРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + + СписокКонстантНаименованиеКонтекстноеМеню + 67 + true + + LabelField + Enter + true + Left + true + + true + true + true + + + + СписокКонстантГруппа1 + 148 + + СписокКонстантАвторегистрация + 146 + + <key>ru</key> + <value>Авторегистрация</value> + + true + true + + + СписокКонстант.ИндексКартинкиАвторегистрация + + None + + СписокКонстантАвторегистрацияРасширеннаяПодсказка + 300 + Label + true + true + + Left + + + + СписокКонстантАвторегистрацияКонтекстноеМеню + 147 + true + + PictureField + true + true + Left + true + + true + true + true + true + + + + 1 + + + + + СписокКонстантНомерСообщения + 68 + + <key>ru</key> + <value>Номер отправленного</value> + + true + true + + true + + + СписокКонстант.НомерСообщения + + + СписокКонстантНомерСообщенияРасширеннаяПодсказка + 302 + Label + true + true + + Left + + + + СписокКонстантНомерСообщенияКонтекстноеМеню + 69 + true + + LabelField + Left + true + Left + true + + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Информация о регистрации</value> + + + СписокКонстантГруппа1РасширеннаяПодсказка + 299 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокКонстантКоманднаяПанель + 65 + Left + + + ChoiceProcessing + СписокКонстантОбработкаВыбора + + + СписокКонстантСтрокаПоиска + 288 + + СписокКонстантСтрокаПоискаРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + + СписокКонстантСтрокаПоискаКонтекстноеМеню + 289 + true + + СписокКонстант + + true + + + + СписокКонстантСостояниеПросмотра + 291 + + СписокКонстантСостояниеПросмотраРасширеннаяПодсказка + 293 + Label + true + true + + Left + + + + СписокКонстантСостояниеПросмотраКонтекстноеМеню + 292 + true + + ViewStatusAddition + СписокКонстант + + true + + + + СписокКонстантУправлениеПоиском + 294 + + СписокКонстантУправлениеПоискомРасширеннаяПодсказка + 296 + Label + true + true + + Left + + + + СписокКонстантУправлениеПоискомКонтекстноеМеню + 295 + true + + SearchControlAddition + СписокКонстант + + true + + + + СписокКонстантРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + СписокКонстантКонтекстноеМеню + 64 + + СписокКонстантКонтекстноеМенюГруппа1 + 101 + + СписокКонстантКонтекстноеМенюДобавитьРегистрациюКонстанты + 98 + + <key>ru</key> + <value>Зарегистрировать изменение константы</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюДобавитьРегистрациюКонстантыРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюКонстанты + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + СписокКонстантКонтекстноеМенюУдалитьРегистрациюКонстанты + 99 + + <key>ru</key> + <value>Отменить регистрацию изменений константы</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюУдалитьРегистрациюКонстантыРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюКонстанты + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + true + true + + true + + true + + СписокКонстантКонтекстноеМенюГруппа1РасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + + + СписокКонстантКонтекстноеМенюГруппа3 + 177 + + СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки + 100 + + <key>ru</key> + <value>Результат стандартной выгрузки (РИБ)</value> + + true + true + + true + + + СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузкиРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Normal + Auto + true + true + UserCmds + + Auto + + + СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 178 + true + true + + true + + + СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Normal + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокКонстантКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 197 + true + true + + true + + + СписокКонстантКонтекстноеМенюРедактироватьНомерСообщенияОбъектаРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа3РасширеннаяПодсказка + 277 + Label + true + true + + Left + + + + + + СписокКонстантКонтекстноеМенюГруппа2 + 152 + + СписокКонстантКонтекстноеМенюНайти + 153 + true + true + + true + + + СписокКонстантКонтекстноеМенюНайтиРасширеннаяПодсказка + 282 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОтменитьПоиск + 154 + true + true + + true + + + СписокКонстантКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюНастройкаСписка + 155 + true + true + + true + + + СписокКонстантКонтекстноеМенюНастройкаСпискаРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюВывестиСписок + 156 + true + true + + true + + + СписокКонстантКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 285 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонстантКонтекстноеМенюОбновить + 157 + true + true + + true + + + СписокКонстантКонтекстноеМенюОбновитьРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + Form.Item.СписокКонстант.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокКонстантКонтекстноеМенюГруппа2РасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + + + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + true + true + true + + СписокКонстант.ИндексКартинки + + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
            + true + true + + true + + + <key>ru</key> + <value>Константы</value> + + + ru + Страница константы + + + СтраницаКонстантыРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Page + + Vertical + auto + +
            + + СтраницаСписокСсылок + 48 + + СписокСсылок + 18 + + <key>ru</key> + <value>Список ссылок</value> + + true + true + + true + + + СписокСсылок + + Choose + + СписокСсылокСсылкаПредставление + 21 + true + true + + true + + + СписокСсылок.Ссылка + + + СписокСсылокСсылкаПредставлениеРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + + СписокСсылокСсылкаПредставлениеКонтекстноеМеню + 22 + true + + LabelField + Enter + true + Left + true + + true + true + true + + + + СписокСсылокНомерСообщения + 52 + + <key>ru</key> + <value>Номер отправленного</value> + + true + true + + true + + + СписокСсылок.НомерСообщения + + + СписокСсылокНомерСообщенияРасширеннаяПодсказка + 342 + Label + true + true + + Left + + + + СписокСсылокНомерСообщенияКонтекстноеМеню + 53 + true + + LabelField + Enter + true + Left + true + + true + true + true + + + + СписокСсылокКоманднаяПанель + 20 + Left + + + ChoiceProcessing + СписокСсылокОбработкаВыбора + + + СписокСсылокСтрокаПоиска + 331 + + СписокСсылокСтрокаПоискаРасширеннаяПодсказка + 333 + Label + true + true + + Left + + + + СписокСсылокСтрокаПоискаКонтекстноеМеню + 332 + true + + СписокСсылок + + true + + + + СписокСсылокСостояниеПросмотра + 334 + + СписокСсылокСостояниеПросмотраРасширеннаяПодсказка + 336 + Label + true + true + + Left + + + + СписокСсылокСостояниеПросмотраКонтекстноеМеню + 335 + true + + ViewStatusAddition + СписокСсылок + + true + + + + СписокСсылокУправлениеПоиском + 337 + + СписокСсылокУправлениеПоискомРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + + СписокСсылокУправлениеПоискомКонтекстноеМеню + 338 + true + + SearchControlAddition + СписокСсылок + + true + + + + СписокСсылокРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + + СписокСсылокКонтекстноеМеню + 19 + + СписокСсылокКонтекстноеМенюГруппа1 + 102 + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиПодбор + 134 + + <key>ru</key> + <value>Зарегистрировать изменение объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиПодборРасширеннаяПодсказка + 314 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюСсылкиПодбор + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиОтбор + 135 + + <key>ru</key> + <value>Зарегистрировать изменения объектов при помощи отбора</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюСсылкиОтборРасширеннаяПодсказка + 315 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюСсылкиОтбор + Normal + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюУдаленияОбъекта + 196 + + <key>ru</key> + <value>Зарегистрировать удаление объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюДобавитьРегистрациюУдаленияОбъектаРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюУдаленияОбъекта + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + СписокСсылокКонтекстноеМенюГруппа1РасширеннаяПодсказка + 313 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа3 + 158 + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылки + 105 + + <key>ru</key> + <value>Отменить регистрацию изменений объекта</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюСсылки + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиОтбор + 189 + + <key>ru</key> + <value>Отменить регистрацию изменения объектов при помощи отбора</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюУдалитьРегистрациюСсылкиОтборРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюСсылкиОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСсылокКонтекстноеМенюГруппа3РасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа4 + 181 + + СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузки + 106 + + <key>ru</key> + <value>Показать результат выгрузки</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюПоказатьРезультатВыгрузкиРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Normal + Auto + true + true + UserCmds + + Auto + + + СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 137 + + <key>ru</key> + <value>Регистрация на других узлах</value> + + true + true + + true + + + СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Normal + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокСсылокКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 198 + true + true + + true + + + СписокСсылокКонтекстноеМенюРедактироватьНомерСообщенияОбъектаРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСсылокКонтекстноеМенюГруппа4РасширеннаяПодсказка + 320 + Label + true + true + + Left + + + + + + СписокСсылокКонтекстноеМенюГруппа2 + 136 + + СписокСсылокКонтекстноеМенюНайти + 159 + true + true + + true + + + СписокСсылокКонтекстноеМенюНайтиРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюОтменитьПоиск + 160 + true + true + + true + + + СписокСсылокКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюНастройкаСписка + 161 + true + true + + true + + + СписокСсылокКонтекстноеМенюНастройкаСпискаРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюВывестиСписок + 162 + true + true + + true + + + СписокСсылокКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 328 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + СписокСсылокКонтекстноеМенюОбновить + 163 + true + true + + true + + + СписокСсылокКонтекстноеМенюОбновитьРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Item.СписокСсылок.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + СписокСсылокКонтекстноеМенюГруппа2РасширеннаяПодсказка + 324 + Label + true + true + + Left + + + + + + true + true + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + Auto + true + true + true + + СписокСсылок.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + true + + true + true + +
            + true + true + + true + + + <key>ru</key> + <value>Ссылки</value> + + + ru + Страница списка ссылок + + + СтраницаСписокСсылокРасширеннаяПодсказка + 312 + Label + true + true + + Left + + + Page + + Vertical + auto + +
            + + СтраницаНаборЗаписей + 50 + + СписокНаборовЗаписей + 78 + + <key>ru</key> + <value>Набор записей</value> + + true + true + + true + + + СписокНаборовЗаписей + + None + Choose + + СписокНаборовЗаписейГруппаИзмерений + 86 + true + true + + true + + + <key>ru</key> + <value>Измерения</value> + + + ru + Измерения набора записей + + + СписокНаборовЗаписейГруппаИзмеренийРасширеннаяПодсказка + 378 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокНаборовЗаписейНомерСообщения + 83 + + <key>ru</key> + <value>Номер отправленного</value> + + true + true + + true + + + СписокНаборовЗаписей.НомерСообщения + + + СписокНаборовЗаписейНомерСообщенияРасширеннаяПодсказка + 379 + Label + true + true + + Left + + + + СписокНаборовЗаписейНомерСообщенияКонтекстноеМеню + 84 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокНаборовЗаписейКоманднаяПанель + 80 + Left + + + Selection + СписокНаборовЗаписейВыбор + + + ChoiceProcessing + СписокНаборовЗаписейОбработкаВыбора + + + СписокНаборовЗаписейСтрокаПоиска + 369 + + СписокНаборовЗаписейСтрокаПоискаРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + СписокНаборовЗаписейСтрокаПоискаКонтекстноеМеню + 370 + true + + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейСостояниеПросмотра + 372 + + СписокНаборовЗаписейСостояниеПросмотраРасширеннаяПодсказка + 374 + Label + true + true + + Left + + + + СписокНаборовЗаписейСостояниеПросмотраКонтекстноеМеню + 373 + true + + ViewStatusAddition + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейУправлениеПоиском + 375 + + СписокНаборовЗаписейУправлениеПоискомРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + СписокНаборовЗаписейУправлениеПоискомКонтекстноеМеню + 376 + true + + SearchControlAddition + СписокНаборовЗаписей + + true + + + + СписокНаборовЗаписейРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + СписокНаборовЗаписейКонтекстноеМеню + 79 + + СписокНаборовЗаписейКонтекстноеМенюГруппа1 + 164 + + СписокНаборовЗаписейКонтекстноеМенюДобавитьРегистрациюНабораЗаписейОтбор + 138 + + <key>ru</key> + <value>Зарегистрировать изменения набора записей</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюДобавитьРегистрациюНабораЗаписейОтборРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + Form.Command.ДобавитьРегистрациюНабораЗаписейОтбор + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа1РасширеннаяПодсказка + 353 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа2 + 165 + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписей + 139 + + <key>ru</key> + <value>Отменить регистрацию изменений текущей строки</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейРасширеннаяПодсказка + 356 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюНабораЗаписей + Normal + Auto + true + true + UserCmds + + StdPicture.DeleteDirectly + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейОтбор + 140 + + <key>ru</key> + <value>Отменить регистрацию изменений при помощи отбора</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюУдалитьРегистрациюНабораЗаписейОтборРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + Form.Command.УдалитьРегистрациюНабораЗаписейОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа2РасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа4 + 179 + + СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузки + 141 + + <key>ru</key> + <value>Показать результат выгрузки</value> + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюПоказатьРезультатВыгрузкиРасширеннаяПодсказка + 359 + Label + true + true + + Left + + + Form.Command.ПоказатьРезультатВыгрузки + Normal + Auto + true + true + UserCmds + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах + 180 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлахРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + Form.Command.ОткрытьФормуРегистрацииНаУзлах + Normal + Auto + true + true + UserCmds + + StdPicture.ExchangePlan + + Auto + + + СписокНаборовЗаписейКонтекстноеМенюРедактироватьНомерСообщенияОбъекта + 199 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюРедактироватьНомерСообщенияОбъектаРасширеннаяПодсказка + 361 + Label + true + true + + Left + + + Form.Command.РедактироватьНомерСообщенияОбъекта + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа4РасширеннаяПодсказка + 358 + Label + true + true + + Left + + + + + + СписокНаборовЗаписейКонтекстноеМенюГруппа3 + 166 + + СписокНаборовЗаписейКонтекстноеМенюНайти + 167 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюНайтиРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОбновить + 168 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОбновитьРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюОтменитьПоиск + 169 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюНастройкаСписка + 170 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюНастройкаСпискаРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + + + СписокНаборовЗаписейКонтекстноеМенюВывестиСписок + 171 + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + Form.Item.СписокНаборовЗаписей.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокНаборовЗаписейКонтекстноеМенюГруппа3РасширеннаяПодсказка + 362 + Label + true + true + + Left + + + + + + HierarchicalList + true + true + true + true + true + AfterCurrentRow + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + true + true + true + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + true + + true + true + +
            + true + true + + true + + + <key>ru</key> + <value>Наборы записей</value> + + + ru + Страница набора записей + + + СтраницаНаборЗаписейРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + Page + + Vertical + auto + +
            + + СтраницаПустая + 74 + + Группа4 + 77 + + ДекорацияПустаяСтраница + 75 + true + true + + true + + + ДекорацияПустаяСтраницаРасширеннаяПодсказка + 391 + Label + true + true + + Left + + + + ДекорацияПустаяСтраницаКонтекстноеМеню + 76 + true + + Label + true + true + true + true + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + true + + Группа4РасширеннаяПодсказка + 390 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Итоги по виду объекта</value> + + + ru + Страница итогов + + true + + СтраницаПустаяРасширеннаяПодсказка + 389 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Регистрация объектов</value> + + + ru + Варианты списка объектов + + + ВариантыСпискаОбъектовРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + ВариантыСпискаОбъектовПриСменеСтраницы + + Auto + +
            + true + true + + true + + + <key>ru</key> + <value>Регистрируемые объекты</value> + + + Группа5РасширеннаяПодсказка + 228 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
            + true + true + + true + + + <key>ru</key> + <value>Данные регистрации</value> + + true + true + + Группа1РасширеннаяПодсказка + 206 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
            + + ГруппаСкрытыхДанных + 174 + + СкрытаяКартинкаИнформация32 + 175 + + <key>ru</key> + <value>Скрытая картинка информация32</value> + + true + true + + true + + + СкрытаяКартинкаИнформация32РасширеннаяПодсказка + 393 + Label + true + true + + Left + + + + СкрытаяКартинкаИнформация32КонтекстноеМеню + 176 + true + + true + true + + + + + false + + true + + + <key>ru</key> + <value>Группа скрытых данных</value> + + + ru + Группа скрытых данных + + true + + ГруппаСкрытыхДанныхРасширеннаяПодсказка + 392 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + ChoiceProcessing + ОбработкаВыбора + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + DontBlock + Use + UseList + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.РегистрацияИзмененийДляОбменаДанными + + + true + + + true + +
            true
            +
            + + УзелОбменаСсылка + + <key>ru</key> + <value>Узел обмена</value> + + 2 + + ExchangePlanRef + + + true + + + true + + + УзелОбменаСсылка + + + + ДеревоМетаданных + + <key>ru</key> + <value>Метаданные</value> + + 3 + + ValueTree + + + 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 + + Number + + 10 + + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + Авторегистрация + + <key>ru</key> + <value>Авторегистрация</value> + + 5 + + Number + + 1 + + + + true + + + true + + + + КоличествоИзменений + + <key>ru</key> + <value>Количество изменений</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + КоличествоВыгруженных + + <key>ru</key> + <value>Количество выгруженных</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + КоличествоНевыгруженных + + <key>ru</key> + <value>Количество невыгруженных</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + КоличествоИзмененийСтрокой + + <key>ru</key> + <value>Количество изменений строкой</value> + + 9 + + String + + + + true + + + true + + + + + СписокСсылок + + <key>ru</key> + <value>Список ссылок</value> + + 4 + + DynamicList + + + true + + + true + + + СписокСсылок.ИндексКартинки + + + СписокСсылок.СсылкаПредставление + + + СписокСсылок.Узел + + + СписокСсылок.НеВыгружалось + + + СписокСсылок.НомерСообщения + + + СписокСсылок.Ссылка + + + ВЫБРАТЬ + NULL КАК Ссылка, + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось + true + true + true + true + + + + СписокКонстант + + <key>ru</key> + <value>Список констант</value> + + 5 + + DynamicList + + + true + + + true + + + СписокКонстант.Зарегистрировано + + + СписокКонстант.ИндексКартинки + + + СписокКонстант.ИндексКартинкиАвторегистрация + + + СписокКонстант.МетаПолноеИмя + + + СписокКонстант.НеВыгружалось + + + СписокКонстант.НомерСообщения + + + ВЫБРАТЬ + 0 КАК ИндексКартинки, + 0 КАК ИндексКартинкиАвторегистрация, + NULL КАК Наименование, + NULL КАК МетаПолноеИмя, + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось, + ЛОЖЬ КАК Зарегистрировано + true + true + true + true + + + + СтруктураИменМетаданных + + <key>ru</key> + <value>Структура имен метаданных</value> + + 6 + + + true + + + true + + + + СтруктураПредставленийМетаданных + + <key>ru</key> + <value>Структура представлений метаданных</value> + + 7 + + + true + + + true + + + + СписокНаборовЗаписей + + <key>ru</key> + <value>Список наборов записей</value> + + 8 + + DynamicList + + + true + + + true + + + СписокНаборовЗаписей.НеВыгружалось + + + СписокНаборовЗаписей.НомерСообщения + + + ВЫБРАТЬ + NULL КАК НомерСообщения, + ЛОЖЬ КАК НеВыгружалось + true + true + true + true + + + + СписокНаборовЗаписейИмяТаблицы + + <key>ru</key> + <value>Список наборов записей имя таблицы</value> + + 9 + + String + + + + true + + + true + + + + СтруктураАвторегистрацииМетаданных + + <key>ru</key> + <value>Структура авторегистрации метаданных</value> + + 11 + + + true + + + true + + + + ВариантОтбораПоНомеруСообщения + + <key>ru</key> + <value>Вариант отбора по номеру сообщения</value> + + 12 + + Number + + 10 + + + + true + + + true + + + ВариантОтбораПоНомеруСообщения + + + + ПараметрОбъектРегистрации + + <key>ru</key> + <value>Параметр объект регистрации</value> + + 10 + + + true + + + true + + + + ПараметрТаблицаРегистрации + + <key>ru</key> + <value>Параметр таблица регистрации</value> + + 13 + + + true + + + true + + + + ЗапрещеноВыбиратьУзелОбмена + + <key>ru</key> + <value>Запрещено выбирать узел обмена</value> + + 14 + + Boolean + + + true + + + true + + + + ИменаСкрываемыхМетаданных + + <key>ru</key> + <value>Имена скрываемых метаданных</value> + + 15 + + ValueList + + + true + + + true + + + + + + + ДобавитьРегистрациюСсылки + + <key>ru</key> + <value>Добавить регистрацию</value> + + 1 + + ru + Добавить регистрацию + + + true + + + StdPicture.CreateListItem + + + + ДобавитьРегистрациюСсылки + + + Auto + Auto + + + УдалитьРегистрациюСсылки + + <key>ru</key> + <value>Удалить</value> + + 2 + + ru + Удалить регистрацию ссылки + + + true + + + + УдалитьРегистрациюСсылки + + + Auto + Auto + + + ОбновитьВсеДанные + + <key>ru</key> + <value>Обновить все данные</value> + + 3 + + ru + Обновить все данные + + + true + + + StdPicture.Refresh + + + + ОбновитьВсеДанные + + + 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 + + + ДобавитьРегистрациюСсылкиПодбор + + <key>ru</key> + <value>Добавить регистрацию результата подбора</value> + + 9 + + ru + Добавить регистрацию результата подбора + + + true + + + + ДобавитьРегистрациюСсылкиПодбор + + + Auto + Auto + + + ДобавитьРегистрациюРезультатаЗапроса + + <key>ru</key> + <value>Добавить по результату запроса</value> + + 10 + + ru + Добавить по результату запроса + + + true + + + + ДобавитьРегистрациюРезультатаЗапроса + + + Auto + Auto + + + УдалитьРегистрациюРезультатаЗапроса + + <key>ru</key> + <value>Удалить по результату запроса</value> + + 11 + + ru + Удалить по результату запроса + + + true + + + + УдалитьРегистрациюРезультатаЗапроса + + + Auto + Auto + + + ДобавитьРегистрациюКонстанты + + <key>ru</key> + <value>Добавить регистрацию константы</value> + + 12 + + ru + Добавить регистрацию константы + + + true + + + + ДобавитьРегистрациюКонстанты + + + Auto + Auto + + + УдалитьРегистрациюКонстанты + + <key>ru</key> + <value>Удалить регистрацию константы</value> + + 13 + + ru + Удалить регистрацию константы + + + true + + + + УдалитьРегистрациюКонстанты + + + Auto + Auto + + + РедактироватьНомераСообщений + + <key>ru</key> + <value>Редактировать номера сообщений</value> + + 14 + + ru + Редактировать номера сообщений + + + true + + + + РедактироватьНомераСообщений + + + Auto + Auto + + + ПоказатьРезультатВыгрузки + + <key>ru</key> + <value>Результат стандартной выгрузки (РИБ)</value> + + 15 + + ru + Показать результат выгрузки + + + true + + + + ПоказатьРезультатВыгрузки + + + Auto + Auto + + + ДобавитьРегистрациюСсылкиОтбор + + <key>ru</key> + <value>Добавить регистрацию результата отбора</value> + + 8 + + ru + Добавить регистрацию результата отбора + + + true + + + + ДобавитьРегистрациюСсылкиОтбор + + + Auto + Auto + + + УдалитьРегистрациюСсылкиОтбор + + <key>ru</key> + <value>Удалить регистрацию результата отбора</value> + + 16 + + ru + Удалить регистрацию результата отбора + + + true + + + + УдалитьРегистрациюСсылкиОтбор + + + Auto + Auto + + + ДобавитьРегистрациюНабораЗаписейОтбор + + <key>ru</key> + <value>Добавить регистрацию результата отбора</value> + + 17 + + ru + Добавить регистрацию результата отбора + + + true + + + + ДобавитьРегистрациюНабораЗаписейОтбор + + + Auto + Auto + + + УдалитьРегистрациюНабораЗаписейОтбор + + <key>ru</key> + <value>Удалить регистрацию по отбору</value> + + 18 + + ru + Удалить регистрацию набора записей отбор + + + true + + + + УдалитьРегистрациюНабораЗаписейОтбор + + + Auto + Auto + + + УдалитьРегистрациюНабораЗаписей + + <key>ru</key> + <value>Удалить регистрацию набора записей</value> + + 19 + + ru + Удалить регистрацию набора записей + + + true + + + + УдалитьРегистрациюНабораЗаписей + + + Auto + Auto + + + ОткрытьФормуРегистрацииНаУзлах + + <key>ru</key> + <value>Открыть форму регистрации на узлах</value> + + 20 + + ru + Регистрация объекта на всех узлах + + + true + + + + ОткрытьФормуРегистрацииНаУзлах + + + Auto + Auto + + + ОткрытьФормуНастроек + + <key>ru</key> + <value>Настройки</value> + + 21 + + ru + Открыть форму настроек + + + true + + + StdPicture.ReportSettings + + + + ОткрытьФормуНастроек + + + Auto + Auto + + + ДобавитьРегистрациюОдногоОбъекта + + <key>ru</key> + <value>Добавить регистрацию одного объекта</value> + + 22 + + ru + Добавить регистрацию одного объекта + + + true + + + + ДобавитьРегистрациюОдногоОбъекта + + + Auto + Auto + + + ДобавитьРегистрациюОтбор + + <key>ru</key> + <value>Добавить регистрацию отбор</value> + + 23 + + ru + Добавить регистрацию отбор + + + true + + + + ДобавитьРегистрациюОтбор + + + Auto + Auto + + + УдалитьРегистрациюОдногоОбъекта + + <key>ru</key> + <value>Удалить регистрацию одного объекта</value> + + 24 + + ru + Удалить регистрацию одного объекта + + + true + + + + УдалитьРегистрациюОдногоОбъекта + + + Auto + Auto + + + УдалитьРегистрациюОтбор + + <key>ru</key> + <value>Удалить регистрацию отбор</value> + + 25 + + ru + Удалить регистрацию отбор + + + true + + + + УдалитьРегистрациюОтбор + + + Auto + Auto + + + ДобавитьРегистрациюУдаленияОбъекта + + <key>ru</key> + <value>Добавить регистрацию удаления объекта</value> + + 26 + + ru + Добавить регистрацию удаления объекта + + + true + + + + ДобавитьРегистрациюУдаленияОбъекта + + + Auto + Auto + + + РедактироватьНомерСообщенияОбъекта + + <key>ru</key> + <value>Редактировать номер сообщения объекта</value> + + 27 + + ru + Редактировать номер сообщения объекта + + + true + + + StdPicture.Change + + + + РедактироватьНомерСообщенияОбъекта + + + Auto + Auto + + + ИдентификаторКоманды + + true + + + ОбъектыНазначения + + true + + + УзелОбмена + + ExchangePlanRef + + true + + + ЗапрещеноВыбиратьУзелОбмена + + Boolean + + true + + + + + + +
            diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..d36e47e45b5f522755658b18272e10673e165fff GIT binary patch literal 5137 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 IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданныхДобавитьРегистрациюРезультатаЗапроса/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9270d02ef401ee94873abf06c4baaeec706b3743 GIT binary patch literal 738 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 O0000 zd3;pW*~hWhThx&sQR;A2q{6Sc1*U=27;%#dUzVn5~g&zzfBXY0d>?&QXLVNpF?uZLZQ)Q< zdSw-x-HFBKz+!W7%I4tUlbfW8=D%#|hBj0l$<_&%E8@L(52ZDkJ0?jwmz*%oD1UAF zh2=WEzBBpUt?HRL(SH}s$jI0m`0|rm zHoI+q`LjB+%6dBYCg9f59^X`1l>73NTXqJJKcm;*e>(4}in>OoU9*lLAQG6|-@fCi z?W5{@yu7b5L>f(WwzrZJseAsu+rIf)Ao)QK?6bG-j_U2UTq@Mi^%pEzc?HX&A|#DK z^t5zUpFI4Y!QlL(P_qtBS+w2ib2J|M@y-ukwD$C@^=z9I8oKk>YnR>@DE{7U&;RQBH#iJP(Rpzqn6UUB%$QtCt#>`)rwFS6f z`}eNTR9&v&2aezlZ~Xq2xFJpc@@HHdb4#~5WqCS)swe6Um=p z-MZ;kQ)WkRJvHssq^j2vmC`|LR}1xB<^kKiKeyN(2kZ%MZv3%DbD162O^ai&?cNWwhrOY{Jb=sP z-*SY%d~QJ-O`W~C)V?Hbasd3@;MjGxi@*nyp*u$nP{|OfD95C!czze4wHg( z&gm5eZ{1&AUR3Q;?|Nt2#eY(vFG^~)SO-N(rszpKf4z3;ZFZ+ZRa-aJmL4Rax}^)b ze`f2JzdV4YCKpJgwLN{1eX4WHh<2cPx5{>8`OFii-?3fb#d!sScPlB*NK%|}Si4gh zT?TlJ{Ngly$EchSfN-%mz&vF;vIef7TXr0Nt*yEwvSinT>7(t_U%p=n@e2$O1%+ug z1sODGgC!J)*kp)QH>nQwgT_xC>wt=h;NLCI9e7<>T0y<>eXsUJ@B>mExa$8ORXK)6 z*XLj@brEQy785;d1(H@jVf-imJc7lkW$w&roG7iNuA&5~vk^w=fc)jZ3Oe}Y#@)c~ z^gFh%1oD8)vK?8YioOEDuY2NE{`=Ysu{W97w{IUAvog4K^=g6*A=GyE(rfFXx>H#P zjOf6|%Ig4B#TDVOcdRqUhfg(x1%a^OQn~^6j9f*MoPr&DV0TzIU zR?FH)*Dt5GqXz^OnakOKqIoTFo82K}?XlBt=?mDptXAxf!4Ak@J~?%I_1?DYrn~L5 z^dimPw(DAb*bRZ?N28lQoYwDnD#x`DI#%9W1T~UV@|T}8@7!bCzjysbqv=-&!S&zG zE*LKl@a^wxE;!vW8c8Hxy7A{9hntdm<7S=L31dqM>Vt!0$H2!=IWPR-u*l#|hVUQ^ zp}~NJq>(^?;*wEa>e8rarQFico6~fn`#}afB7b?#3;G#NjSUo*_BC5RzHHEVEFWLS zIWyBpNSsW;2=@+uc>ujmOLzI3gwLu5rU5a4oy24trFp+axKt7r-01x?_mh8e<23+0 z@vfQrici`aZSTJL5hHhDiu2~Y! z8dSy5pZ64iL|-CQMRIjv26dW?z~PW7u5F{H&58unwR9rOeJMYO z?Buw)imK*La6y-~3%g_REZ$$fuBtrcmLF{}x$WFnUn_q+YppMPav*ttt+iMCjQ^*` zPUe)YEBmg`=JBUR$A?8v{_;WyT>W1c0uo}QNr;W^xBD6;B)nCf`pW|x>xF{9zR3I= zZu7dG6YPDAqv01Ae0@q^NO39}b8U5OoI`R(r_JviYf8~6%UW}-`Lz6$`Qf{w6GK-| ziVPznJe;85AoNl&T1i5Z`qmMg!iB0haYo80Q=F?)(|cAoR-eiN*7(c2&v((hIZVFn zd;qc@+0OPYUu0N4?FLH^&+Q)Wfc)i!5D3LiXVr&TyV^)tkdCAQXKg*rB^9)qPZE^a z;`93Rn|JRMf^J!5G z=kgzr9G}wnolXD`AW70JAgSgbPpwRvF&BgYNus&Nyi$^+D}Z_-M9D<)LI~D8zK86a zFQd_1NL^hW$;rv2rlumj{4CbPA2ILM1K7Gw1&r4L)K|B}%t;T5boCS>cl3bJBJglv zeS-sJuveki_QbYSy29L@IAjObZW|qzzK*TkR_w9^0H;%VBkz#;+9BuqhNs~#|5ecO z8n55$AeFw-mA&u8U;F!b*@12s!L$%Xdoja z15-!6*R5(w^p8&*Hg^~%y}2%@5OW&drDBR*Mktvqv2}{y4TbebZ?!vBstrZ z5xUwmDVh*nFj`FzLP%&NP=tz0anRP$MOkTW&SwX!w*tk1;J+$TT+m&XPtsM%bd-m4 z;&1!0R+b>kHnh5E;?Dmu@fY5Mw`HC{@Jj#sze_-`-9bfFC+Uk+PL@?tTV9IP)qrdL z$POqF{39>j%Ynkz2@2H{5)y)5t3`FG9BzD@gTH^1>5&U~=Ds}>!uKml2(iEV@7bs= zD(=~+tJi`MV*d+wUbPwc#YFLn3!c62TL2t7P{+-;uHogs>|)8%W$>e|B=mo_f#h`n zLdXu)?htZEDcIVPG?9Rofx8w0P!Vbe&Rz>H1vDDf;qJsC%bYATQ`g!F0=m1cIGiB> z{Qc)^R&pBo%YPMA`bwA2{YjUGQh%@qVCzul6A0cZpuVw{wo{#hE0_A6kw6d|9Z5>k z$kDsMyb#bDlSJ{peFV+B(Capa5vq*Fz{h_zpIaOGjHLvU6);cUP@d- zEYLTu_O^ERzguW|KlkJ>T2I>E%2;I@>U;+HMN4M>r zC@ihyt*Y{Y6kygPgUgk@Zhe|{ z4c}+aKmSA-2T?RC22Bt~kZ^kdxT)Z1q9<#qEPIPR^yZy#obA;hMoIQG_CdQR@j5%-SRD(4j0q%c`l*n-#p?67zo}j_qmrz zh9FWCjo2MBF4ct)0=uJcNy6a80S1EalvSc*QpsBN7`2UN-aYX$%je$Al*AcyI}}>1 z4x&RRhWFG3cfXVgAV0Oy9Yn1>Sy-MoeP#kDkC^jjq$g$q`9gw`GWz4?Wm#q0roLoZ zV$8)X@O-N4yITkculJAf@;ZQvFUl}immJ>T>qxjhBsf}<(Dko-xNl+tGy;JWhx3$B zUplAU-AP2WaqaJh7h%kLWbLw{Z9`Lm0pS50uCdvH=Dlj&iay8lyl)5RLwT%Q zaavvl>YCf=uy~2&BrrxrGCetALU_UGBB&^D5!fhs(gXb7^+h1}ty+0w?|gKZ$d7#m4Qq>kVy3B{$Z>b1(Nx>_AMz?z}F-k?J- z>5(NH1+4`HMMH8_9I8`AQJpA>>gwJkd9|DOc3!U>eageS%-dmJHCEm!z^)3^U?awu z6lSklfmY+dS=&H!aV4$hlNh2}QN4V9f#LzK$}nGhxmR^Or&Vgjrgz+P(x7`9rD=Vwo@}{N6VsAf1QjCFkx?M^X90ykk|cz?7DvE{4+;i=S5z0Kj;7PEVR=bG zjh0tTBRkL`Y5@vIbD+O`cfGQvyI$Ekd3I2CSaith$%)~F1nJRg^n=&1oK8ABdugn) zTfKq`~D91N+p_k)!KC^R`}S9-&qt(EPFu53KBNZ^{cdCUE)s zpR#Pj0|WcI+r#;ezL~3y5~28p6$m3dPWBQjTQcmRL+NRM=)>{NK@_Wt7B z$tLD3^e8Oev>6@V?;qpkbpZ2LysC7*c-6u3qPE{?gS)a4l4H{%B2AJ$sIO#NmD{j& zwusgyt68hlZi|YK|1f>|?txpnw;~L0g&9NTFAvbEjLi-hUs&(E<9@Xr`YfAEW)S?L8C1d+OPn zW^dxA2M6r2rUX6t^?xZG4PV?))U~FesB7!|#Z$6V(i2z5#zz8uYgk5HmoPup7x&|h9vR2=RJX51nSaf^V*@GKgYWf_+m zGScY>miJIth>qmA=z+=am(36T83me;j*7^Sj*7@^t*g#6C8rFmU$@p*GbL?i=F*DK zC_QPK!PCf{BdOnU~)7cBgo5`Oe<1#)^uQ-M5Dur+>|*X^qipHIn4CwAoKp?9)iL zov{g#2WMXO`k=qU;jIY6TVcjf`O5=&_us#{&a>hE`#0zMus;hF-*#wdSA!KXIf<@@ zdVsAXIUj#{w~SF?L`(`pGvtaNnsP7<&W;6)j|vN-Y)Ah($%Pks-O64f+0pXj(a@CO z1hT~ipVY1?_@s90l4Tj$F>#YtH&k~#e)N;_KQp?jLBII2#=htFqKxqauSc>cf)-ACe9txS2q8ZHXTe9)TWaJ<8l6ivO%8S}Sr}ig(MDKjt$1TtETTA-H};=sy4JJX z-tP9Y{U?-k&o)p-EPwZx-}8UJ_|-`5qm@5=?1yHbYg28P%n! zTS${(9L9h9+(vD=i8G^v(;0>tCWJ*4k(7xLOYlmm!0@KBs0#}cx-|%5MmL>=uA&13 zF(|qVIt>dkXyu`Xu993hQg{50U6``w`pQ(S2i}YK{l7f#^Stl#@&63W5t^pWm10g1 z7WMRbz#khJJm2(Bnl;R3^WeD#q3FylHFYgDLQhs0aJDuHXj;1%3cJOT(P9Aeirj!X z&*lZSE$F$W?ik4&yOQRPM!@tN8QTUrPad9{7n>9wky7XJef7YvcpL+rCok!pQPSM;ICZWYi&XJ{1Wju< z=496uoH&4eTLmV&1yi;eqs>J0?FX`!2z4mQc0G!OC}$iO@4p}+$}{%QYp%sm*lpWf z4rrhxL5UH4(@XHeO`OMSu~!x#hQe+=4h^{cpbJG+r^n?7U3h(cWD1^cgl27EWVF~) zS_n!4lq6AqKS9rJoGrCjU3Mg!gc$l(tjD3MDqde7lB{y5W)r8bKjNu>i2b`NFbXq2 z*?BcEdGiU7HKP7Lf}T4#TWYWt+dz&^)-?T8M&crs>sE91;VXIqU+C)lMAb$Y4Li$; zWr)zc8ZhVE12KPpnbBq>=(&rtWe--D9i%8INn!)TnDZi2mqp(V;XJY%tLw+jt4UBL#(O?vc38Z690^G#5*KN# zDo0in8mr2Q#6W z&8OGMt^m1H)ai9A@l__|H7`5Q7A=T@#lT07*qo IM6N<$f-rMyjQ{`u literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/СписокКонстантКонтекстноеМенюПоказатьРезультатВыгрузки/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..519885bb6259a925f156039cbe4b67b492f0cdab GIT binary patch literal 1563 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 Тогда + // Нас открывают с указанием объекта + ОбъектНазначения = Параметры.ОбъектыНазначения[0]; + Тип = ТипЗнч(ОбъектНазначения); + Если ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда + УзелОбменаСсылка = ОбъектНазначения; + ОткрытиеСУзломПараметром = Истина; + Иначе + // Преобразуем в два наших параметра, при открытии будет создана вторая форма + Описание = ТекущийОбъект.ХарактеристикиПоМетаданным(ОбъектНазначения.Метаданные()); + Если Описание.ЭтоСсылка Тогда + ПараметрОбъектРегистрации = ОбъектНазначения; + ИначеЕсли Описание.ЭтоНабор Тогда + // Структура и имя таблицы + ПараметрТаблицаРегистрации = Описание.ИмяТаблицы; + ПараметрОбъектРегистрации = Новый Структура; + Для Каждого Измерение Из ТекущийОбъект.ИзмеренияНабораЗаписей(ПараметрТаблицаРегистрации) Цикл + ТекИмя = Измерение.Имя; + ПараметрОбъектРегистрации.Вставить(ТекИмя, ОбъектНазначения.Отбор[ТекИмя].Значение); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Иначе + ВызватьИсключение СтрЗаменить( + НСтр("ru='Неверные параметры команды открытия ""%1""'"), + "%1", Параметры.ИдентификаторКоманды); + + КонецЕсли; + + Иначе + ВызватьИсключение СтрЗаменить( + НСтр("ru='Нераспознанная команда ""%1""'"), + "%1", Параметры.ИдентификаторКоманды); + КонецЕсли; + + // Настройки объекта инициализируем всегда + ТекущийОбъект.ПрочитатьНастройки(); + ТекущийОбъект.ПрочитатьПризнакПоддержкиБСП(); + ЭтотОбъект(ТекущийОбъект); + + // Остальное инициализируем, только если будем открывать эту форму, + Если ПараметрОбъектРегистрации<>Неопределено Тогда + Возврат; + КонецЕсли; + + // Список запретных объектов метаданных из параметров + Параметры.Свойство("ИменаСкрываемыхМетаданных", ИменаСкрываемыхМетаданных); + + ТекущаяСтрокаМетаданных = Неопределено; + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; + Параметры.Свойство("ЗапрещеноВыбиратьУзелОбмена", ЗапрещеноВыбиратьУзелОбмена); + Если Не ПроконтролироватьНастройки() И ОткрытиеСУзломПараметром Тогда + ВызватьИсключение СтрЗаменить( + НСтр("ru='Для ""%1"" редактирование регистрации объектов недоступно.'"), + "%1", УзелОбменаСсылка); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ПараметрОбъектРегистрации<>Неопределено Тогда + // Открываем другую форму + Отказ = Истина; + ОткрытьФорму( + ПолучитьИмяФормы() + "Форма.УзлыРегистрацииОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации", ПараметрОбъектРегистрации, ПараметрТаблицаРегистрации)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + // Автосохранение настроек + СохраняемыеВНастройкахДанныеМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + // Результат выбора запроса, ожидаем структуру + Если ТипЗнч(ВыбранноеЗначение)<>Тип("Структура") + Или (Не ВыбранноеЗначение.Свойство("ДействиеВыбора")) + Или (Не ВыбранноеЗначение.Свойство("ДанныеВыбора")) + Или ТипЗнч(ВыбранноеЗначение.ДействиеВыбора)<>Тип("Булево") + Или ТипЗнч(ВыбранноеЗначение.ДанныеВыбора)<>Тип("Строка") + Тогда + Ошибка = НСтр("ru='Неожиданный результат выбора из консоли запросов'"); + Иначе + Ошибка = КонтрольСсылокДляВыбораЗапросом(ВыбранноеЗначение.ДанныеВыбора); + КонецЕсли; + + Если Ошибка<>"" Тогда + Предупреждение(Ошибка); + Возврат; + КонецЕсли; + + Если ВыбранноеЗначение.ДействиеВыбора Тогда + Текст = НСтр("ru='Зарегистрировать результат запроса + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru='Отменить регистрацию результата запроса + |на узле ""%1""?'"); + КонецЕсли; + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", Строка(УзелОбменаСсылка)); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет,,,ЗаголовокВопроса); + Если Ответ=КодВозвратаДиалога.Да Тогда + СообщитьОРезультатахРегистрации(ВыбранноеЗначение.ДействиеВыбора, + ИзменитьРегистрациюРезультатаЗапросаСервер(ВыбранноеЗначение.ДействиеВыбора, ВыбранноеЗначение.ДанныеВыбора)); + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия="ИзменениеРегистрацииОбменаДаннымиОбъекта" Тогда + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + ИначеЕсли ИмяСобытия="ИзменениеДанныхУзлаОбмена" И УзелОбменаСсылка=Параметр Тогда + УстановитьЗаголовокНомеровСообщений(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + // Автоматические настройки + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.СохранитьНастройки(); + ЭтотОбъект(ТекущийОбъект); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + Если ПараметрОбъектРегистрации<>Неопределено Тогда + // Будет работа с другой формой + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.УзелОбмена) Тогда + УзелОбменаСсылка = Параметры.УзелОбмена; + Иначе + УзелОбменаСсылка = Настройки["УзелОбменаСсылка"]; + // Если восстановленный узел обмена был удален, то очищаем его + Если УзелОбменаСсылка<>Неопределено + И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) + И ПустаяСтрока(УзелОбменаСсылка.ВерсияДанных) + Тогда + УзелОбменаСсылка = Неопределено; + КонецЕсли; + КонецЕсли; + + ПроконтролироватьНастройки(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// + +&НаКлиенте +Процедура УзелОбменаСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборУзлаПланаОбмена"; + ТекПараметры = Новый Структура("МножественныйВыбор, НачальноеЗначениеВыбора", + Ложь, УзелОбменаСсылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если УзелОбменаСсылка<>ВыбранноеЗначение Тогда + УзелОбменаСсылка = ВыбранноеЗначение; + ОбработкаВыбораУзлаОбмена(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаПриИзменении(Элемент) + ОбработкаВыбораУзлаОбмена(); + РазвернутьДеревоМетаданных(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура УзелОбменаСсылкаОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВариантОтбораПоНомеруСообщенияПриИзменении(Элемент) + УстановитьОтборПоНомеруСообщения(СписокКонстант, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокСсылок, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокНаборовЗаписей, ВариантОтбораПоНомеруСообщения); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыСпискаОбъектовПриСменеСтраницы(Элемент, ТекущаяСтраница) + ОбновитьСодержимоеСтраницы(ТекущаяСтраница); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоМетаданных +// + +&НаКлиенте +Процедура ДеревоМетаданныхПометкаПриИзменении(Элемент) + ИзменениеПометки(Элементы.ДеревоМетаданных.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент) + Если Элементы.ДеревоМетаданных.ТекущаяСтрока<>ТекущаяСтрокаМетаданных Тогда + ТекущаяСтрокаМетаданных = Элементы.ДеревоМетаданных.ТекущаяСтрока; + ПодключитьОбработчикОжидания("НастроитьРедактированиеИзменений", 0.0000001, Истина); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокКонстант +// + +&НаКлиенте +Процедура СписокКонстантОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Результат = ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, ВыбранноеЗначение); + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + СообщитьОРезультатахРегистрации(Истина, Результат); + + Если ТипЗнч(ВыбранноеЗначение)=Тип("Массив") И ВыбранноеЗначение.Количество()>0 Тогда + Элемент.ТекущаяСтрока = ВыбранноеЗначение[0]; + Иначе + Элемент.ТекущаяСтрока = ВыбранноеЗначение; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокСсылок +// + +&НаКлиенте +Процедура СписокСсылокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокНаборовЗаписей +// + +&НаКлиенте +Процедура СписокНаборовЗаписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыЗаписи = СтруктураКлючаНабораЗаписей(Элемент.ТекущиеДанные); + Если ПараметрыЗаписи<>Неопределено Тогда + ОткрытьФорму(ПараметрыЗаписи.ИмяФормы, Новый Структура("Ключ", ПараметрыЗаписи.Ключ)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокНаборовЗаписейОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ОбработкаВыбораДанных(Элемент, ВыбранноеЗначение); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// + +&НаКлиенте +Процедура ДобавитьРегистрациюОдногоОбъекта(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр=Элементы.СтраницаКонстанты Тогда + ДобавитьРегистрациюКонстантыВСписке(); + ИначеЕсли ТекСтр=Элементы.СтраницаСписокСсылок Тогда + ДобавитьРегистрациюВСписокСсылок(); + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюОдногоОбъекта(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр=Элементы.СтраницаКонстанты Тогда + УдалитьРегистрациюКонстантыВСписке(); + ИначеЕсли ТекСтр=Элементы.СтраницаСписокСсылок Тогда + УдалитьРегистрациюИзСпискаСсылок(); + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + УдалитьРегистрациюВНабореЗаписей(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюОтбор(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр=Элементы.СтраницаСписокСсылок Тогда + ДобавитьРегистрациюВСписокОтбор(); + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюОтбор(Команда) + + Если Не ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + Возврат; + КонецЕсли; + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Если ТекСтр=Элементы.СтраницаСписокСсылок Тогда + УдалитьРегистрациюВСпискеОтбор(); + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + УдалитьРегистрациюВНабореЗаписейОтбор(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРегистрацииНаУзлах(Команда) + + Если ЗапрещеноВыбиратьУзелОбмена Тогда + Возврат; + КонецЕсли; + + Данные = ПолучитьТекущийОбъектРедактирования(); + Если Данные<>Неопределено Тогда + ТаблицаРегистрации = ?(ТипЗнч(Данные)=Тип("Структура"), СписокНаборовЗаписейИмяТаблицы, ""); + ОткрытьФорму(ПолучитьИмяФормы() + "Форма.УзлыРегистрацииОбъекта", + Новый Структура("ОбъектРегистрации, ТаблицаРегистрации, ОповещатьОбИзменениях", + Данные, ТаблицаРегистрации, Истина + ), + ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатВыгрузки(Команда) + + ТекСтраница = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + Сериализация = Новый Массив; + + Если ТекСтраница=Элементы.СтраницаКонстанты Тогда + ЭлементФормы = Элементы.СписокКонстант; + Для Каждого Строка Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = ЭлементФормы.ДанныеСтроки(Строка); + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 1, ТекДанные.МетаПолноеИмя)); + КонецЦикла; + + ИначеЕсли ТекСтраница=Элементы.СтраницаНаборЗаписей Тогда + СписокИзмерений = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + ЭлементФормы = Элементы.СписокНаборовЗаписей; + Префикс = "СписокНаборовЗаписей"; + Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = Новый Структура(); + Данные = ЭлементФормы.ДанныеСтроки(Элемент); + Для Каждого Имя Из СписокИзмерений Цикл + ТекДанные.Вставить(Имя, Данные[Префикс + Имя]); + КонецЦикла; + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 2, ТекДанные)); + КонецЦикла; + + ИначеЕсли ТекСтраница=Элементы.СтраницаСписокСсылок Тогда + ЭлементФормы = Элементы.СписокСсылок; + Для Каждого Элемент Из ЭлементФормы.ВыделенныеСтроки Цикл + ТекДанные = ЭлементФормы.ДанныеСтроки(Элемент); + Сериализация.Добавить(Новый Структура("ФлагТипа, Данные", 3, ТекДанные.Ссылка)); + КонецЦикла; + + Иначе + Возврат; + КонецЕсли; + + Если Сериализация.Количество()>0 Тогда + Текст = ТекстСериализации(Сериализация); + ЗаголовокТекста = НСтр("ru='Результат стандартной выгрузки (РИБ)'"); + Текст.Показать(ЗаголовокТекста); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомераСообщений(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.НомераСообщенийУзлаПланаОбмена"; + ТекПараметры = Новый Структура("УзелОбменаСсылка", УзелОбменаСсылка); + ОткрытьФорму(ТекИмяФормы, ТекПараметры); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюКонстанты(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюКонстантыВСписке(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюКонстанты(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюКонстантыВСписке(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылки(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюУдаленияОбъекта(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюСсылки(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюИзСпискаСсылок(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылкиПодбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокСсылок(Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюСсылкиОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВСписокОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюСсылкиОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВСпискеОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюАвтоОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВыделенныхОбъектов(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюАвтоОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВыделенныхОбъектов(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВсехОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВыделенныхОбъектов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВсехОбъектов(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВыделенныхОбъектов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюНабораЗаписейОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ДобавитьРегистрациюВНаборЗаписейОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюНабораЗаписей(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВНабореЗаписей(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюНабораЗаписейОтбор(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + УдалитьРегистрациюВНабореЗаписейОтбор(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьВсеДанные(Команда) + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюРезультатаЗапроса(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОперацияСРезультатамиЗапроса(Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюРезультатаЗапроса(Команда) + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОперацияСРезультатамиЗапроса(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(Команда) + ОткрытьФормуНастроекОбработки(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияОбъекта(Команда) + + Если Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаКонстанты Тогда + РедактироватьНомерСообщенияКонстанты(); + + ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаСписокСсылок Тогда + РедактироватьНомерСообщенияСсылки(); + + ИначеЕсли Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаНаборЗаписей Тогда + РедактироватьНомерСообщенияСписокНаборов() + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +&НаКлиенте +Процедура РедактироватьНомерСообщенияКонстанты() + ТекДанные = Элементы.СписокКонстант.ТекущиеДанные; + Если ТекДанные=Неопределено Тогда + Возврат; + КонецЕсли; + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru='Номер отправленного'"); + Если ВвестиЧисло(НомерСообщения, Подсказка) Тогда + + СообщитьОРезультатахРегистрации(НомерСообщения, + ИзменитьНомерСообщенияНаСервере(УзелОбменаСсылка, НомерСообщения, ТекДанные.МетаПолноеИмя)); + + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияСсылки() + ТекДанные = Элементы.СписокСсылок.ТекущиеДанные; + Если ТекДанные=Неопределено Тогда + Возврат; + КонецЕсли; + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru='Номер отправленного'"); + Если ВвестиЧисло(НомерСообщения, Подсказка) Тогда + + СообщитьОРезультатахРегистрации(НомерСообщения, + ИзменитьНомерСообщенияНаСервере(УзелОбменаСсылка, НомерСообщения, ТекДанные.Ссылка)); + + Элементы.СписокСсылок.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьНомерСообщенияСписокНаборов() + ТекДанные = Элементы.СписокНаборовЗаписей.ТекущиеДанные; + Если ТекДанные=Неопределено Тогда + Возврат; + КонецЕсли; + + НомерСообщения = ТекДанные.НомерСообщения; + Подсказка = НСтр("ru='Номер отправленного'"); + Если ВвестиЧисло(НомерСообщения, Подсказка) Тогда + + ДанныеСтроки = Новый Структура; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + ДанныеСтроки.Вставить(Имя, ТекДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + + СообщитьОРезультатахРегистрации(НомерСообщения, + ИзменитьНомерСообщенияНаСервере(УзелОбменаСсылка, НомерСообщения, ДанныеСтроки, СписокНаборовЗаписейИмяТаблицы)); + + Элементы.СписокНаборовЗаписей.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРедактированиеИзменений() + НастроитьРедактированиеИзмененийСервер(ТекущаяСтрокаМетаданных); +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьДеревоМетаданных() + Для Каждого Строка Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + Элементы.ДеревоМетаданных.Развернуть( Строка.ПолучитьИдентификатор() ); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокНомеровСообщений() + + Текст = НСтр("ru='№ сообщений: отпр. %1, прин. %2'"); + + Данные = ПрочитатьНомераСообщений(); + Текст = СтрЗаменить(Текст, "%1", Формат(Данные.НомерОтправленного, "ЧДЦ=0; ЧН=")); + Текст = СтрЗаменить(Текст, "%2", Формат(Данные.НомерПринятого, "ЧДЦ=0; ЧН=")); + + Элементы.ФормаРедактироватьНомераСообщений.Заголовок = Текст; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаВыбораУзлаОбмена() + + // Изменяем номера узлов в гиперссылке по редактированию + УстановитьЗаголовокНомеровСообщений(); + + // Обновляем дерево метаданных + ПрочитатьДеревоМетаданных(); + ЗаполнитьКоличествоРегистрацийВДереве(); + + // Обновляем активную страницу + ПоследняяАктивнаяКолонкаМетаданных = Неопределено; + ПоследняяАктивнаяСтрокаМетаданных = Неопределено; + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = Элементы.СтраницаПустая; + +КонецПроцедуры + +&НаКлиенте +Процедура СообщитьОРезультатахРегистрации(Команда, Результаты) + + Если ТипЗнч(Команда)=Тип("Булево") ТОгда + Если Команда Тогда + ЗаголовокПредупреждения = НСтр("ru='Регистрация изменений:'"); + ТекстПредупреждения = НСтр("ru='Зарегистрировано %1 изменений из %2 + |на узле ""%0""'"); + Иначе + ЗаголовокПредупреждения = НСтр("ru='Отмена регистрации:'"); + ТекстПредупреждения = НСтр("ru='Отменена регистрация %1 изменений + |на узле ""%0"".'"); + КонецЕсли; + Иначе + ЗаголовокПредупреждения = НСтр("ru='Изменение номера сообщения:'"); + ТекстПредупреждения = НСтр("ru='Номер сообщения изменен на %3 + |у %1 объекта(ов)'"); + КонецЕсли; + + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%0", УзелОбменаСсылка); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%1", Формат(Результаты.Успешно, "ЧН=")); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%2", Формат(Результаты.Всего, "ЧН=")); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%3", Команда); + + Предупреждением = Результаты.Всего<>Результаты.Успешно; + Если Предупреждением Тогда + Предупреждение(ТекстПредупреждения,,ЗаголовокПредупреждения); + Иначе + ПоказатьОповещениеПользователя(ЗаголовокПредупреждения, + ПолучитьНавигационнуюСсылку(УзелОбменаСсылка), + ТекстПредупреждения, + Элементы.СкрытаяКартинкаИнформация32.Картинка); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПолучитьФормуВыбораРезультатаЗапроса() + + ТекущийОбъект = ЭтотОбъект(); + ТекущийОбъект.ПрочитатьНастройки(); + ЭтотОбъект(ТекущийОбъект); + + Проверка = ТекущийОбъект.ПроверитьКорректностьНастроек(); + ЭтотОбъект(ТекущийОбъект); + Если Проверка.НастройкаАдресВнешнейОбработкиЗапросов<>Неопределено Тогда + Возврат Неопределено; + ИначеЕсли ПустаяСтрока(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов) Тогда + Возврат Неопределено; + ИначеЕсли НРег(Прав(СокрЛП(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов), 4))=".epf" Тогда + Обработка = ВнешниеОбработки.Создать(ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов); + ИдентификаторФормы = ".ФормаОбъекта"; + Иначе + Обработка = Обработки[ТекущийОбъект.НастройкаАдресВнешнейОбработкиЗапросов].Создать(); + ИдентификаторФормы = ".Форма"; + КонецЕсли; + + Возврат Обработка.Метаданные().ПолноеИмя() + ИдентификаторФормы; +КонецФункции + +&НаКлиенте +Процедура ДобавитьРегистрациюКонстантыВСписке() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборКонстанты"; + ТекПараметры = Новый Структура("УзелОбмена, МассивИменМетаданных, МассивПредставлений, МассивАвторегистрации", + УзелОбменаСсылка, + СтруктураИменМетаданных.Константы, + СтруктураПредставленийМетаданных.Константы, + СтруктураАвторегистрацииМетаданных.Константы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокКонстант); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюКонстантыВСписке() + + Элемент = Элементы.СписокКонстант; + + СписокПредставлений = Новый Массив; + СписокИмен = Новый Массив; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + Данные = Элемент.ДанныеСтроки(Строка); + СписокПредставлений.Добавить(Данные.Наименование); + СписокИмен.Добавить(Данные.МетаПолноеИмя); + КонецЦикла; + + Колво = СписокИмен.Количество(); + Если Колво=0 Тогда + Возврат; + ИначеЕсли Колво=1 Тогда + Текст = НСтр("ru='Отменить регистрацию ""%2"" + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru='Отменить регистрацию выбранных констант + |на узле ""%1""?'"); + КонецЕсли; + + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", СписокПредставлений[0]); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет,,,ЗаголовокВопроса); + Если Ответ=КодВозвратаДиалога.Да Тогда + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, СписокИмен)); + Элементы.СписокКонстант.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВСписокСсылок(ЭтоПодбор=Ложь) + ТекИмяФормы = ПолучитьИмяФормы(СписокСсылок) + "ФормаВыбора"; + ТекПараметры = Новый Структура("РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ВыборГруппИЭлементов", + Истина, Истина, ЭтоПодбор, ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюУдаленияОбъектаВСписокСсылок() + Ссылка = СсылкаДляУдаленияОбъекта(); + ОбработкаВыбораДанных(Элементы.СписокСсылок, Ссылка); +КонецПроцедуры + +&НаСервере +Функция СсылкаДляУдаленияОбъекта(Знач УникальныйИдентификатор=Неопределено) + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокСсылок.ОсновнаяТаблица); + Если УникальныйИдентификатор=Неопределено Тогда + Возврат Описание.Менеджер.ПолучитьСсылку(); + КонецЕсли; + Возврат Описание.Менеджер.ПолучитьСсылку(УникальныйИдентификатор); +КонецФункции + +&НаКлиенте +Процедура ДобавитьРегистрациюВСписокОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Истина, + ОсновнаяТаблицаДинамическогоСписка(СписокСсылок)); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВСпискеОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Ложь, + ОсновнаяТаблицаДинамическогоСписка(СписокСсылок)); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокСсылок); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюИзСпискаСсылок() + + Элемент = Элементы.СписокСсылок; + + СписокУдаления = Новый Массив; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + Данные = Элемент.ДанныеСтроки(Строка); + СписокУдаления.Добавить(Данные.Ссылка); + КонецЦикла; + + Колво = СписокУдаления.Количество(); + Если Колво=0 Тогда + Возврат; + ИначеЕсли Колво=1 Тогда + Текст = НСтр("ru='Отменить регистрацию ""%2"" + |на узле ""%1""?'"); + Иначе + Текст = НСтр("ru='Отменить регистрацию выбранных объектов + |на узле ""%1""?'"); + КонецЕсли; + + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", СписокУдаления[0]); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет,,,ЗаголовокВопроса); + Если Ответ=КодВозвратаДиалога.Да Тогда + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, СписокУдаления)); + Элементы.СписокСсылок.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВНаборЗаписейОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Истина, + СписокНаборовЗаписейИмяТаблицы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВНабореЗаписей() + + СтруктураДанных = ""; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + СтруктураДанных = СтруктураДанных + "," + Имя; + КонецЦикла; + СтруктураДанных = Сред(СтруктураДанных, 2); + + Данные = Новый Массив; + Элемент = Элементы.СписокНаборовЗаписей; + Для Каждого Строка Из Элемент.ВыделенныеСтроки Цикл + ТекДанные = Элемент.ДанныеСтроки(Строка); + ДанныеСтроки = Новый Структура; + Для Каждого Имя Из ИменаКлючей Цикл + ДанныеСтроки.Вставить(Имя, ТекДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + Данные.Добавить(ДанныеСтроки); + КонецЦикла; + + Если Данные.Количество()=0 Тогда + Возврат; + КонецЕсли; + + Выбор = Новый Структура("ИмяТаблицы, ДанныеВыбора, ДействиеВыбора, СтруктураПолей", + СписокНаборовЗаписейИмяТаблицы, + Данные, + Ложь, + СтруктураДанных); + + ОбработкаВыбораДанных(Элементы.СписокНаборовЗаписей, Выбор); +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВНабореЗаписейОтбор() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.ВыборОбъектовОтбором"; + ТекПараметры = Новый Структура("ДействиеВыбора, ИмяТаблицы", + Ложь, + СписокНаборовЗаписейИмяТаблицы); + ОткрытьФорму(ТекИмяФормы, ТекПараметры, Элементы.СписокНаборовЗаписей); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации=Истина) + + Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации); + Колво = Данные.МетаИмена.Количество(); + Если Колво=0 Тогда + // Текущая строка + Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации); + КонецЕсли; + + Текст = НСтр("ru='Зарегистрировать %1 для выгрузки на узле ""%2""? + | + |Изменение регистрации большого количества объектов может занять продолжительное время!'"); + + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", Данные.Описание); + Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); + Если Ответ<>КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Результат = ДобавитьРегистрациюНаСервере(БезУчетаАвторегистрации, УзелОбменаСсылка, Данные.МетаИмена); + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); + СообщитьОРезультатахРегистрации(Истина, Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьРегистрациюВыделенныхОбъектов(БезУчетаАвторегистрации=Истина) + + Данные = ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации); + Колво = Данные.МетаИмена.Количество(); + Если Колво=0 Тогда + Данные = ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации); + КонецЕсли; + + Текст = НСтр("ru='Отменить регистрацию %1 для выгрузки на узле ""%2""? + | + |Изменение регистрации большого количества объектов может занять продолжительное время!'"); + + ЗаголовокВопроса = НСтр("ru='Подтверждение'"); + + Текст = СтрЗаменить(Текст, "%1", Данные.Описание); + Текст = СтрЗаменить(Текст, "%2", УзелОбменаСсылка); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопроса); + Если Ответ<>КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + СообщитьОРезультатахРегистрации(Ложь, + УдалитьРегистрациюНаСервере(БезУчетаАвторегистрации, УзелОбменаСсылка, Данные.МетаИмена)); + ЗаполнитьКоличествоРегистрацийВДереве(); + ОбновитьСодержимоеСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбораДанных(ТаблицаФормы, ВыбранноеЗначение) + + Ссылка = Неопределено; + Тип = ТипЗнч(ВыбранноеЗначение); + + Если Тип=Тип("Структура") Тогда + ИмяТаблицы = ВыбранноеЗначение.ИмяТаблицы; + Действие = ВыбранноеЗначение.ДействиеВыбора; + Данные = ВыбранноеЗначение.ДанныеВыбора; + Иначе + ИмяТаблицы = Неопределено; + Действие = Истина; + Если Тип=Тип("Массив") Тогда + Данные = ВыбранноеЗначение; + Иначе + Данные = Новый Массив; + Данные.Добавить(ВыбранноеЗначение); + КонецЕсли; + + Если Данные.Количество()=1 Тогда + Ссылка = Данные[0]; + КонецЕсли; + КонецЕсли; + + Если Действие Тогда + Результат = ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные, ИмяТаблицы); + Иначе + Если Ссылка=Неопределено Тогда + Текст = НСтр("ru='Отменить регистрацию выбранных объектов + |на узле ""%1?'"); + Иначе + Текст = НСтр("ru='Отменить регистрацию ""%2"" + |на узле ""%1?'"); + КонецЕсли; + + Текст = СтрЗаменить(Текст, "%1", УзелОбменаСсылка); + Текст = СтрЗаменить(Текст, "%2", Ссылка); + Ответ = Вопрос(Текст, РежимДиалогаВопрос.ДаНет,,,"Подтверждение"); + Если Ответ<>КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + Результат = УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные, ИмяТаблицы); + КонецЕсли; + + ТаблицаФормы.Обновить(); + ЗаполнитьКоличествоРегистрацийВДереве(); + СообщитьОРезультатахРегистрации(Действие, Результат); + + ТаблицаФормы.ТекущаяСтрока = Ссылка; +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСодержимоеСтраницы(Страница=Неопределено) + ТекСтр = ?(Страница=Неопределено, Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница, Страница); + + Если ТекСтр=Элементы.СтраницаСписокСсылок Тогда + Элементы.СписокСсылок.Обновить(); + + ИначеЕсли ТекСтр=Элементы.СтраницаКонстанты Тогда + Элементы.СписокКонстант.Обновить(); + + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + Элементы.СписокНаборовЗаписей.Обновить(); + + ИначеЕсли ТекСтр=Элементы.СтраницаПустая Тогда + Строка = Элементы.ДеревоМетаданных.ТекущаяСтрока; + Если Строка<>Неопределено Тогда + Данные = ДеревоМетаданных.НайтиПоИдентификатору(Строка); + Если Данные<>Неопределено Тогда + НастроитьПустуюСтраницу(Данные.Наименование, Данные.МетаПолноеИмя); + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьТекущийОбъектРедактирования() + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + + Если ТекСтр=Элементы.СтраницаСписокСсылок Тогда + Данные = Элементы.СписокСсылок.ТекущиеДанные; + Если Данные<>Неопределено Тогда + Возврат Данные.Ссылка; + КонецЕсли; + + ИначеЕсли ТекСтр=Элементы.СтраницаКонстанты Тогда + Данные = Элементы.СписокКонстант.ТекущиеДанные; + Если Данные<>Неопределено Тогда + Возврат Данные.МетаПолноеИмя; + КонецЕсли; + + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + Данные = Элементы.СписокНаборовЗаписей.ТекущиеДанные; + Если Данные<>Неопределено Тогда + Результат = Новый Структура; + Измерения = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из Измерения Цикл + Результат.Вставить(Имя, Данные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + КонецЕсли; + Возврат Результат; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуНастроекОбработки() + ТекИмяФормы = ПолучитьИмяФормы() + "Форма.Настройки"; + ОткрытьФорму(ТекИмяФормы, , ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ОперацияСРезультатамиЗапроса(КомандаОперации) + + ТекИмяФормы = ПолучитьФормуВыбораРезультатаЗапроса(); + Если ТекИмяФормы<>Неопределено Тогда + // Открываем + Если КомандаОперации Тогда + Текст = НСтр("ru='Регистрация изменений результата запроса'"); + Иначе + Текст = НСтр("ru='Отмена регистрации изменений результата запроса'"); + КонецЕсли; + ОткрытьФорму(ТекИмяФормы, + Новый Структура("Заголовок, ДействиеВыбора, РежимВыбора, ЗакрыватьПриВыборе, ", + Текст, КомандаОперации, Истина, Ложь + ), ЭтаФорма); + Возврат; + КонецЕсли; + + // Не настроено или что-то поломано, предлагаем выбрать + ЗаголовокВопроса = НСтр("ru='Настройки'"); + ТекстВопроса = НСтр("ru='В настройках не указана обработка для выполнения запросов. + |Настроить сейчас?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,,ЗаголовокВопроса); + Если Ответ=КодВозвратаДиалога.Да Тогда + ОткрытьФормуНастроекОбработки(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ЗакавычитьСтроку(Строка) + Возврат СтрЗаменить(Строка, """", """"""); +КонецФункции + +&НаСервере +Функция ЭтотОбъект(ТекущийОбъект=Неопределено) + Если ТекущийОбъект=Неопределено Тогда + Возврат РеквизитФормыВЗначение("Объект"); + КонецЕсли; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ПолучитьИмяФормы(ТекущийОбъект=Неопределено) + Возврат ЭтотОбъект().ПолучитьИмяФормы(ТекущийОбъект); +КонецФункции + +&НаСервере +Функция ОсновнаяТаблицаДинамическогоСписка(РеквизитФормы) + Возврат РеквизитФормы.ОсновнаяТаблица; +КонецФункции + +&НаСервере +Процедура ИзменениеПометки(Строка) + ЭлементДанных = ДеревоМетаданных.НайтиПоИдентификатору(Строка); + ЭтотОбъект().ИзменениеПометки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьДеревоМетаданных() + Данные = ЭтотОбъект().СформироватьСтруктуруМетаданных(УзелОбменаСсылка); + + // Удаляем строки, которые нельзя редактировать + МетаДерево = Данные.Дерево; + Для Каждого ЭлементСписка Из ИменаСкрываемыхМетаданных Цикл + УдалитьСтрокиДереваЗначенийМетаданных(ЭлементСписка.Значение, МетаДерево.Строки); + КонецЦикла; + + ЗначениеВРеквизитФормы(МетаДерево, "ДеревоМетаданных"); + СтруктураАвторегистрацииМетаданных = Данные.СтруктураАвторегистрации; + СтруктураПредставленийМетаданных = Данные.СтруктураПредставлений; + СтруктураИменМетаданных = Данные.СтруктураИмен; +КонецПроцедуры + +&НаСервере +Процедура УдалитьСтрокиДереваЗначенийМетаданных(Знач МетаПолноеИмя, СтрокиДерева) + Если ПустаяСтрока(МетаПолноеИмя) Тогда + Возврат; + КонецЕсли; + + // В текущем наборе + Фильтр = Новый Структура("МетаПолноеИмя", МетаПолноеИмя); + Для Каждого СтрокаУдаления Из СтрокиДерева.НайтиСтроки(Фильтр, Ложь) Цикл + СтрокиДерева.Удалить(СтрокаУдаления); + КонецЦикла; + + // И из оставшихся иерархически + Для Каждого СтрокаДерева Из СтрокиДерева Цикл + УдалитьСтрокиДереваЗначенийМетаданных(МетаПолноеИмя, СтрокаДерева.Строки); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ФорматироватьКоличествоИзменений(Строка) + Строка.КоличествоИзмененийСтрокой = Формат(Строка.КоличествоИзменений, "ЧН=") + " / " + Формат(Строка.КоличествоНеВыгруженных, "ЧН="); +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьКоличествоРегистрацийВДереве() + + Данные = ЭтотОбъект().ПолучитьКоличествоИзменений(СтруктураИменМетаданных, УзелОбменаСсылка); + + // Проставляем в дерево + Фильтр = Новый Структура("МетаПолноеИмя, УзелОбмена", Неопределено, УзелОбменаСсылка); + Нули = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + СуммаКорень = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл + СуммаГруппа = Новый Структура("КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных", 0,0,0); + + СписокУзлов = Группа.ПолучитьЭлементы(); + Если СписокУзлов.Количество()=0 И СтруктураИменМетаданных.Свойство(Группа.МетаПолноеИмя) Тогда + // Коллекция узлов без узлов, просуммируем руками, авторегистрацию возьмем из структуры + Для Каждого МетаИмя Из СтруктураИменМетаданных[Группа.МетаПолноеИмя] Цикл + Фильтр.МетаПолноеИмя = МетаИмя; + Найдено = Данные.НайтиСтроки(Фильтр); + Если Найдено.Количество()>0 Тогда + Строка = Найдено[0]; + СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений; + СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных; + СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных; + КонецЕсли; + КонецЦикла; + + Иначе + // Считаем по каждому узлу + Для Каждого Узел Из СписокУзлов Цикл + Фильтр.МетаПолноеИмя = Узел.МетаПолноеИмя; + Найдено = Данные.НайтиСтроки(Фильтр); + Если Найдено.Количество()>0 Тогда + Строка = Найдено[0]; + ЗаполнитьЗначенияСвойств(Узел, Строка, "КоличествоИзменений, КоличествоВыгруженных, КоличествоНеВыгруженных"); + СуммаГруппа.КоличествоИзменений = СуммаГруппа.КоличествоИзменений + Строка.КоличествоИзменений; + СуммаГруппа.КоличествоВыгруженных = СуммаГруппа.КоличествоВыгруженных + Строка.КоличествоВыгруженных; + СуммаГруппа.КоличествоНеВыгруженных = СуммаГруппа.КоличествоНеВыгруженных + Строка.КоличествоНеВыгруженных; + Иначе + ЗаполнитьЗначенияСвойств(Узел, Нули); + КонецЕсли; + + ФорматироватьКоличествоИзменений(Узел); + КонецЦикла; + + КонецЕсли; + ЗаполнитьЗначенияСвойств(Группа, СуммаГруппа); + + СуммаКорень.КоличествоИзменений = СуммаКорень.КоличествоИзменений + Группа.КоличествоИзменений; + СуммаКорень.КоличествоВыгруженных = СуммаКорень.КоличествоВыгруженных + Группа.КоличествоВыгруженных; + СуммаКорень.КоличествоНеВыгруженных = СуммаКорень.КоличествоНеВыгруженных + Группа.КоличествоНеВыгруженных; + + ФорматироватьКоличествоИзменений(Группа); + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Корень, СуммаКорень); + + ФорматироватьКоличествоИзменений(Корень); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ИзменитьРегистрациюРезультатаЗапросаСервер(Команда, Адрес) + + Результат = ПолучитьИзВременногоХранилища(Адрес); + Результат= Результат[Результат.ВГраница()]; + Данные = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если Команда Тогда + Возврат ДобавитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные); + КонецЕсли; + + Возврат УдалитьРегистрациюНаСервере(Истина, УзелОбменаСсылка, Данные); +КонецФункции + +&НаСервере +Функция КонтрольСсылокДляВыбораЗапросом(Адрес) + + Результат = ?(Адрес=Неопределено, Неопределено, ПолучитьИзВременногоХранилища(Адрес)); + Если ТипЗнч(Результат)=Тип("Массив") Тогда + Результат = Результат[Результат.ВГраница()]; + Если Результат.Колонки.Найти("Ссылка")=Неопределено Тогда + Возврат НСтр("ru='В последнем результате запроса отсутствует колонка ""Ссылка""'"); + КонецЕсли; + Иначе + Возврат НСтр("ru='Ошибка получения данных результата запроса'"); + КонецЕсли; + + Возврат ""; +КонецФункции + +&НаСервере +Процедура НастроитьРедактированиеИзмененийСервер(ТекущаяСтрока) + + Данные = ДеревоМетаданных.НайтиПоИдентификатору(ТекущаяСтрока); + Если Данные=Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяТаблицы = Данные.МетаПолноеИмя; + Наименование = Данные.Наименование; + ТекущийОбъект = ЭтотОбъект(); + + Если ПустаяСтрока(ИмяТаблицы) Тогда + Мета = Неопределено; + Иначе + Мета = ТекущийОбъект.МетаданныеПоПолномуИмени(ИмяТаблицы); + КонецЕсли; + + Если Мета=Неопределено Тогда + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + + ИначеЕсли Мета=Метаданные.Константы Тогда + // Все константы системы + НастроитьСписокКонстант(); + НовСтраница = Элементы.СтраницаКонстанты; + + ИначеЕсли ТипЗнч(Мета)=Тип("КоллекцияОбъектовМетаданных") Тогда + // Все справочники, документы, и т.п. + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + + ИначеЕсли Метаданные.Константы.Содержит(Мета) Тогда + // Одиночная константа + НастроитьСписокКонстант(ИмяТаблицы, Наименование); + НовСтраница = Элементы.СтраницаКонстанты; + + ИначеЕсли Метаданные.Справочники.Содержит(Мета) + Или Метаданные.Документы.Содержит(Мета) + Или Метаданные.ПланыВидовХарактеристик.Содержит(Мета) + Или Метаданные.ПланыСчетов.Содержит(Мета) + Или Метаданные.ПланыВидовРасчета.Содержит(Мета) + Или Метаданные.БизнесПроцессы.Содержит(Мета) + Или Метаданные.Задачи.Содержит(Мета) + Тогда + // Ссылочный тип + НастроитьСписокСсылок(ИмяТаблицы, Наименование); + НовСтраница = Элементы.СтраницаСписокСсылок; + + Иначе + // Проверим на набор записей + Измерения = ТекущийОбъект.ИзмеренияНабораЗаписей(ИмяТаблицы); + Если Измерения<>Неопределено Тогда + НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование); + НовСтраница = Элементы.СтраницаНаборЗаписей; + Иначе + НастроитьПустуюСтраницу(Наименование, ИмяТаблицы); + НовСтраница = Элементы.СтраницаПустая; + КонецЕсли; + + КонецЕсли; + + Элементы.СтраницаКонстанты.Видимость = Ложь; + Элементы.СтраницаСписокСсылок.Видимость = Ложь; + Элементы.СтраницаНаборЗаписей.Видимость = Ложь; + Элементы.СтраницаПустая.Видимость = Ложь; + + Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница = НовСтраница; + НовСтраница.Видимость = Истина; + + НастроитьВидимостьКомандОбщегоМеню(); +КонецПроцедуры + +// Вывод изменений для ссылочного типа (cправочник, документ, план видов характеристик, +// план счетов, вид расчета, бизнес-процессы, задачи) +// +&НаСервере +Процедура НастроитьСписокСсылок(ИмяТаблицы, Наименование) + + СписокСсылок.ТекстЗапроса = " + |ВЫБРАТЬ + | ТаблицаИзменений.Ссылка КАК Ссылка, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось, + | + | ОсновнаяТаблица.Ссылка КАК СсылкаОбъекта + |ИЗ + | " + ИмяТаблицы + " КАК ОсновнаяТаблица + |ПРАВОЕ СОЕДИНЕНИЕ + | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ПО + | ОсновнаяТаблица.Ссылка = ТаблицаИзменений.Ссылка + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел + |"; + + СписокСсылок.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + СписокСсылок.ОсновнаяТаблица = ИмяТаблицы; + СписокСсылок.ДинамическоеСчитываниеДанных = Истина; + + // Представление объекта + Мета = ЭтотОбъект().МетаданныеПоПолномуИмени(ИмяТаблицы); + ТекЗаголовок = Мета.ПредставлениеОбъекта; + Если ПустаяСтрока(ТекЗаголовок) Тогда + ТекЗаголовок = Наименование; + КонецЕсли; + Элементы.СписокСсылокСсылкаПредставление.Заголовок = ТекЗаголовок; +КонецПроцедуры + +// Вывод изменений для констант +// +&НаСервере +Процедура НастроитьСписокКонстант(ИмяТаблицы=Неопределено, Наименование="") + + Если ИмяТаблицы=Неопределено Тогда + // Все константы + Имена = СтруктураИменМетаданных.Константы; + Представления = СтруктураПредставленийМетаданных.Константы; + Авторегистрация = СтруктураАвторегистрацииМетаданных.Константы; + Иначе + Имена = Новый Массив; + Имена.Добавить(ИмяТаблицы); + Представления = Новый Массив; + Представления.Добавить(Наименование); + Индекс = СтруктураИменМетаданных.Константы.Найти(ИмяТаблицы); + Авторегистрация = Новый Массив; + Авторегистрация.Добавить(СтруктураАвторегистрацииМетаданных.Константы[Индекс]); + КонецЕсли; + + // И помнить про ограничение на количество таблиц + Текст = ""; + Для Индекс=0 По Имена.ВГраница() Цикл + Имя = Имена[Индекс]; + Текст = Текст + ?(Текст="", "ВЫБРАТЬ", "ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ") + " + | " + Формат(Авторегистрация[Индекс], "ЧН=; ЧГ=") + " КАК ИндексКартинкиАвторегистрация, + | 2 КАК ИндексКартинки, + | + | """ + ЗакавычитьСтроку(Представления[Индекс]) + """ КАК Наименование, + | """ + Имя + """ КАК МетаПолноеИмя, + | + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось + |ИЗ + | " + Имя + ".Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел=&ВыбранныйУзел + |"; + КонецЦикла; + + СписокКонстант.ТекстЗапроса = " + |ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, МетаПолноеИмя, НеВыгружалось, + | Наименование, НомерСообщения + | + |{ВЫБРАТЬ + | ИндексКартинкиАвторегистрация, ИндексКартинки, + | Наименование, МетаПолноеИмя, + | НомерСообщения, НеВыгружалось + |} + | + |ИЗ (" + Текст + ") Данные + | + |{ГДЕ + | Наименование, НомерСообщения, НеВыгружалось + |} + |"; + + ЭлементыСписка = СписокКонстант.Порядок.Элементы; + Если ЭлементыСписка.Количество()=0 Тогда + Элемент = ЭлементыСписка.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + Элемент.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + Элемент.Использование = Истина; + КонецЕсли; + + СписокКонстант.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + СписокКонстант.ДинамическоеСчитываниеДанных = Истина; +КонецПроцедуры + +// Вывод заглушки с пустой страницей. +&НаСервере +Процедура НастроитьПустуюСтраницу(Наименование, ИмяТаблицы=Неопределено) + + Если ИмяТаблицы=Неопределено Тогда + ТекстКоличеств = ""; + Иначе + Дерево = РеквизитФормыВЗначение("ДеревоМетаданных"); + Строка = Дерево.Строки.Найти(ИмяТаблицы, "МетаПолноеИмя", Истина); + Если Строка<>НеопреДелено Тогда + ТекстКоличеств = НСтр("ru='Зарегистрировано объектов: %1 + |Выгружено объектов: %2 + |Не выгружено объектов: %3 + |'"); + + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%1", Формат(Строка.КоличествоИзменений, "ЧДЦ=0; ЧН=")); + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%2", Формат(Строка.КоличествоВыгруженных, "ЧДЦ=0; ЧН=")); + ТекстКоличеств = СтрЗаменить(ТекстКоличеств, "%3", Формат(Строка.КоличествоНевыгруженных, "ЧДЦ=0; ЧН=")); + КонецЕсли; + КонецЕсли; + + Текст = НСтр("ru='%1. + | + |%2 + |Для регистрации или отмены регистрации обмена данными на узле + |""%3"" + |выберите тип объекта слева в дереве метаданных и воспользуйтесь + |командами ""Зарегистрировать"" или ""Отменить регистрацию""'"); + + Текст = СтрЗаменить(Текст, "%1", Наименование); + Текст = СтрЗаменить(Текст, "%2", ТекстКоличеств); + Текст = СтрЗаменить(Текст, "%3", УзелОбменаСсылка); + Элементы.ДекорацияПустаяСтраница.Заголовок = Текст; +КонецПроцедуры + +// Вывод изменений для наборов записей +// +&НаСервере +Процедура НастроитьНаборЗаписей(ИмяТаблицы, Измерения, Наименование) + + ТекстВыбора = ""; + Префикс = "СписокНаборовЗаписей"; + Для Каждого Строка Из Измерения Цикл + Имя = Строка.Имя; + ТекстВыбора = ТекстВыбора + ",ТаблицаИзменений." + Имя + " КАК " + Префикс + Имя + Символы.ПС; + // Чтобы не наступить на измерение "НомерСообщения" или "НеВыгружалось" + Строка.Имя = Префикс + Имя; + КонецЦикла; + + СписокНаборовЗаписей.ТекстЗапроса = " + |ВЫБРАТЬ + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось + | + | " + ТекстВыбора + " + |ИЗ + | " + ИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &ВыбранныйУзел + |"; + СписокНаборовЗаписей.Параметры.УстановитьЗначениеПараметра("ВыбранныйУзел", УзелОбменаСсылка); + + // Добавляем в группу измерений + ЭтотОбъект().ДобавитьКолонкиВТаблицуФормы( + Элементы.СписокНаборовЗаписей, + "НомерСообщения, НеВыгружалось, + |Порядок, Отбор, Группировка, СтандартнаяКартинка, Параметры, УсловноеОформление", + Измерения, + Элементы.СписокНаборовЗаписейГруппаИзмерений); + СписокНаборовЗаписей.ДинамическоеСчитываниеДанных = Истина; + СписокНаборовЗаписейИмяТаблицы = ИмяТаблицы; +КонецПроцедуры + +// Общий отбор по полю "НомерСообщения" +// +&НаСервере +Процедура УстановитьОтборПоНомеруСообщения(ДинамоСписок, Вариант) + + Поле = Новый ПолеКомпоновкиДанных("НеВыгружалось"); + // Ищем свое поле, попутно отключаем все по нему + ЭлементыСписка = ДинамоСписок.Отбор.Элементы; + Индекс = ЭлементыСписка.Количество(); + Пока Индекс>0 Цикл + Индекс = Индекс - 1; + Элемент = ЭлементыСписка[Индекс]; + Если Элемент.ЛевоеЗначение=Поле Тогда + ЭлементыСписка.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + ЭлементОтбора = ЭлементыСписка.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Поле; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.Использование = Ложь; + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + Если Вариант=1 Тогда // Выгруженные + ЭлементОтбора.ПравоеЗначение = Ложь; + ЭлементОтбора.Использование = Истина; + + ИначеЕсли Вариант=2 Тогда // Не выгруженные + ЭлементОтбора.ПравоеЗначение = Истина; + ЭлементОтбора.Использование = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура НастроитьВидимостьКомандОбщегоМеню() + + ТекСтр = Элементы.ВариантыСпискаОбъектов.ТекущаяСтраница; + + Если ТекСтр=Элементы.СтраницаКонстанты Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + ИначеЕсли ТекСтр=Элементы.СтраницаСписокСсылок Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Истина; + + ИначеЕсли ТекСтр=Элементы.СтраницаНаборЗаписей Тогда + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Истина; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + Иначе + Элементы.ФормаДобавитьРегистрациюОдногоОбъекта.Доступность = Ложь; + Элементы.ФормаДобавитьРегистрациюОтбор.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОдногоОбъекта.Доступность = Ложь; + Элементы.ФормаУдалитьРегистрациюОтбор.Доступность = Ложь; + + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция МассивИменКлючейНабораЗаписей(ИмяТаблицы, ПрефиксИмен="") + Результат = Новый Массив; + Измерения = ЭтотОбъект().ИзмеренияНабораЗаписей(ИмяТаблицы); + Если Измерения<>Неопределено Тогда + Для Каждого Строка Из Измерения Цикл + Результат.Добавить(ПрефиксИмен + Строка.Имя); + КонецЦикла; + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаСервере +Функция МенеджерПоМетаданным(ИмяТаблицы) + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание<>Неопределено Тогда + Возврат Описание.Менеджер; + КонецЕсли; + Возврат Неопределено; +КонецФункции + +&НаСервере +Функция ТекстСериализации(Сериализация) + + Текст = Новый ТекстовыйДокумент; + + Запись = Новый ЗаписьXML; + Для Каждого Элемент Из Сериализация Цикл + Запись.УстановитьСтроку("UTF-16"); + Значение = Неопределено; + + Если Элемент.ФлагТипа=1 Тогда + // Метаданные + Менеджер = МенеджерПоМетаданным(Элемент.Данные); + Значение = Менеджер.СоздатьМенеджерЗначения(); + + ИначеЕсли Элемент.ФлагТипа=2 Тогда + // Набор данных с отбором + Менеджер = МенеджерПоМетаданным(СписокНаборовЗаписейИмяТаблицы); + Значение = Менеджер.СоздатьНаборЗаписей(); + Отбор = Значение.Отбор; + Для Каждого ИмяЗначение Из Элемент.Данные Цикл + Отбор[ИмяЗначение.Ключ].Установить(ИмяЗначение.Значение); + КонецЦикла; + Значение.Прочитать(); + + ИначеЕсли Элемент.ФлагТипа=3 Тогда + // Ссылка + Значение = Элемент.Данные.ПолучитьОбъект(); + Если Значение=Неопределено Тогда + Значение = Новый УдалениеОбъекта(Элемент.Данные); + КонецЕсли; + КонецЕсли; + + ЗаписатьXML(Запись, Значение); + Текст.ДобавитьСтроку(Запись.Закрыть()); + КонецЦикла; + + Возврат Текст; +КонецФункции + +&НаСервере +Функция УдалитьРегистрациюНаСервере(БезУчетаАвторегистрации, Узел, Удаляемые, ИмяТаблицы=Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(Ложь, БезУчетаАвторегистрации, Узел, Удаляемые, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ДобавитьРегистрациюНаСервере(БезУчетаАвторегистрации, Узел, Добавляемые, ИмяТаблицы=Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(Истина, БезУчетаАвторегистрации, Узел, Добавляемые, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ИзменитьНомерСообщенияНаСервере(Узел, НомерСообщения, Данные, ИмяТаблицы=Неопределено) + Возврат ЭтотОбъект().ИзменитьРегистрациюНаСервере(НомерСообщения, Истина, Узел, Данные, ИмяТаблицы); +КонецФункции + +&НаСервере +Функция ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаИмяГруппа=Неопределено, МетаИмяУзел=Неопределено) + + Если МетаИмяГруппа=Неопределено И МетаИмяУзел=Неопределено Тогда + // Не указано ничего + Текст = НСтр("ru='все объекты %1 по выбранной иерархии вида'"); + ИначеЕсли МетаИмяГруппа<>Неопределено И МетаИмяУзел=Неопределено Тогда + // Указана только группа, рассматриваем ее как наименование группы + Текст = НСтр("ru='%2 %1'"); + ИначеЕсли МетаИмяГруппа=Неопределено И МетаИмяУзел<>Неопределено Тогда + // Указан только узел, рассматриваем как много выделенных объектов + Текст = НСтр("ru='все объекты %1 по выбранной иерархии вида'"); + Иначе + // Указаны и группа и узел, рассматриваем как имена метаданных + Текст = НСтр("ru='все объекты типа ""%3"" %1'"); + КонецЕсли; + + Если БезУчетаАвторегистрации Тогда + ТекстФлага = НСтр("ru=''"); + Иначе + ТекстФлага = НСтр("ru='с признаком авторегистрации'"); + КонецЕсли; + + Представление = ""; + Для Каждого КлючЗначение Из СтруктураПредставленийМетаданных Цикл + Если КлючЗначение.Ключ = МетаИмяГруппа Тогда + Индекс = СтруктураИменМетаданных[МетаИмяГруппа].Найти(МетаИмяУзел); + Представление = ?(Индекс=Неопределено, "", КлючЗначение.Значение[Индекс]); + Прервать; + КонецЕсли; + КонецЦикла; + + Текст = СтрЗаменить(Текст, "%1", ТекстФлага); + Текст = СтрЗаменить(Текст, "%2", НРег(МетаИмяГруппа)); + Текст = СтрЗаменить(Текст, "%3", Представление); + + Возврат СокрЛП(Текст); +КонецФункции + +&НаСервере +Функция ПолучитьИменаМетаданныхТекущейСтроки(БезУчетаАвторегистрации) + + Строка = ДеревоМетаданных.НайтиПоИдентификатору(Элементы.ДеревоМетаданных.ТекущаяСтрока); + Если Строка=Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("МетаИмена, Описание", + Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации)); + МетаИмя = Строка.МетаПолноеИмя; + Если ПустаяСтрока(МетаИмя) Тогда + Результат.МетаИмена.Добавить(Неопределено); + Иначе + Результат.МетаИмена.Добавить(МетаИмя); + + Родитель = Строка.ПолучитьРодителя(); + МетаРодительИмя = Родитель.МетаПолноеИмя; + Если ПустаяСтрока(МетаРодительИмя) Тогда + Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Строка.Наименование); + Иначе + Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаРодительИмя, МетаИмя); + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПолучитьВыбранныеИменаМетаданных(БезУчетаАвторегистрации) + + Результат = Новый Структура("МетаИмена, Описание", + Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации)); + + Для Каждого Корень Из ДеревоМетаданных.ПолучитьЭлементы() Цикл + + Если Корень.Пометка=1 Тогда + Результат.МетаИмена.Добавить(Неопределено); + Возврат Результат; + КонецЕсли; + + КолвоЧастичных = 0; + КолвоГрупп = 0; + КолвоУзлов = 0; + Для Каждого Группа Из Корень.ПолучитьЭлементы() Цикл + + Если Группа.Пометка=0 Тогда + Продолжить; + ИначеЕсли Группа.Пометка=1 Тогда + // Весь группа целиком, смотрим откуда выбирать значения + КолвоГрупп = КолвоГрупп + 1; + ОписаниеГруппы = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.Наименование); + + Если Группа.ПолучитьЭлементы().Количество()=0 Тогда + // Пробуем из структуры имен метаданных, считаем все отмеченными + МассивПредставлений = СтруктураПредставленийМетаданных[Группа.МетаПолноеИмя]; + МассивАвто = СтруктураАвторегистрацииМетаданных[Группа.МетаПолноеИмя]; + МассивИмен = СтруктураИменМетаданных[Группа.МетаПолноеИмя]; + Для Индекс=0 По МассивИмен.ВГраница() Цикл + Если БезУчетаАвторегистрации Или МассивАвто[Индекс]=2 Тогда + Результат.МетаИмена.Добавить(МассивИмен[Индекс]); + ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, МассивИмен[Индекс]); + КонецЕсли; + КонецЦикла; + + Продолжить; + КонецЕсли; + + Иначе + КолвоЧастичных = КолвоЧастичных + 1; + КонецЕсли; + + Для Каждого Узел Из Группа.ПолучитьЭлементы() Цикл + Если Узел.Пометка=1 Тогда + // Узел.Авторегистрация=2 -> разрешена + Если БезУчетаАвторегистрации Или Узел.Авторегистрация=2 Тогда + Результат.МетаИмена.Добавить(Узел.МетаПолноеИмя); + ОписаниеУзла = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Группа.МетаПолноеИмя, Узел.МетаПолноеИмя); + КолвоУзлов = КолвоУзлов + 1; + КонецЕсли; + КонецЕсли + КонецЦикла; + + КонецЦикла; + + Если КолвоГрупп=1 И КолвоЧастичных=0 Тогда + Результат.Описание = ОписаниеГруппы; + ИначеЕсли КолвоГрупп=0 И КолвоУзлов=1 Тогда + Результат.Описание = ОписаниеУзла; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПрочитатьНомераСообщений() + РеквизитыЗапроса = "НомерОтправленного, НомерПринятого"; + Данные = ЭтотОбъект().ПолучитьПараметрыУзлаОбмена(УзелОбменаСсылка, РеквизитыЗапроса); + Если Данные=Неопределено Тогда + Возврат Новый Структура(РеквизитыЗапроса) + КонецЕсли; + Возврат Данные; +КонецФункции + +&НаСервере +Процедура ОбработатьЗапретИзмененияУзла() + ОперацииРазрешены = Не ЗапрещеноВыбиратьУзелОбмена; + + Если ОперацииРазрешены Тогда + Элементы.УзелОбменаСсылка.Видимость = Истина; + Заголовок = НСтр("ru='Регистрация изменений для обмена данными'"); + Иначе + Элементы.УзелОбменаСсылка.Видимость = Ложь; + Заголовок = СтрЗаменить(НСтр("ru='Регистрация изменений для обмена с ""%1""'"), "%1", Строка(УзелОбменаСсылка)); + КонецЕсли; + + Элементы.ФормаОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + + Элементы.СписокКонстантКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + Элементы.СписокСсылокКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; + Элементы.СписокНаборовЗаписейКонтекстноеМенюОткрытьФормуРегистрацииНаУзлах.Видимость = ОперацииРазрешены; +КонецПроцедуры + +&НаСервере +Функция ПроконтролироватьНастройки() + Результат = Истина; + + // Проверим на допустимость узла пришедшего из параметра или настроек + ТекущийОбъект = ЭтотОбъект(); + Если УзелОбменаСсылка<>Неопределено И ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзелОбменаСсылка)) Тогда + ДопустимыеУзлыОбмена = ТекущийОбъект.СформироватьДеревоУзлов(); + ИмяПлана = УзелОбменаСсылка.Метаданные().Имя; + Если ДопустимыеУзлыОбмена.Строки.Найти(ИмяПлана, "ПланОбменаИмя", Истина)=Неопределено Тогда + // Узел неверного плана обмена + УзелОбменаСсылка = Неопределено; + Результат = Ложь; + ИначеЕсли УзелОбменаСсылка=ПланыОбмена[ИмяПлана].ЭтотУзел() Тогда + // Этот узел + УзелОбменаСсылка = Неопределено; + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда + ОбработкаВыбораУзлаОбмена(); + КонецЕсли; + ОбработатьЗапретИзмененияУзла(); + + // Зависимость настроек + УстановитьОтборПоНомеруСообщения(СписокКонстант, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокСсылок, ВариантОтбораПоНомеруСообщения); + УстановитьОтборПоНомеруСообщения(СписокНаборовЗаписей, ВариантОтбораПоНомеруСообщения); + + Возврат Результат; +КонецФункции + +&НаСервере +Функция СтруктураКлючаНабораЗаписей(Знач ТекущиеДанные) + Описание = ЭтотОбъект().ХарактеристикиПоМетаданным(СписокНаборовЗаписейИмяТаблицы); + + Если Описание=Неопределено Тогда + // Неизвестный источник + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("Ключ, ИмяФормы"); + + Измерения = Новый Структура; + ИменаКлючей = МассивИменКлючейНабораЗаписей(СписокНаборовЗаписейИмяТаблицы); + Для Каждого Имя Из ИменаКлючей Цикл + Измерения.Вставить(Имя, ТекущиеДанные["СписокНаборовЗаписей" + Имя]); + КонецЦикла; + + Если Измерения.Свойство("Регистратор") Тогда + МетаРегистратора = Метаданные.НайтиПоТипу(ТипЗнч(Измерения.Регистратор)); + Если МетаРегистратора=Неопределено Тогда + Результат = Неопределено; + Иначе + Результат.ИмяФормы = МетаРегистратора.ПолноеИмя() + ".ФормаОбъекта"; + Результат.Ключ = Измерения.Регистратор; + КонецЕсли; + ИначеЕсли Измерения.Количество()=0 Тогда + // Вырожденный набор записей + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаСписка"; + Иначе + Результат.ИмяФормы = СписокНаборовЗаписейИмяТаблицы + ".ФормаЗаписи"; + Результат.Ключ = Описание.Менеджер.СоздатьКлючЗаписи(Измерения); + КонецЕсли; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl new file mode 100644 index 000000000..fd56cb5be --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -0,0 +1,1844 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// + +// Возвращает дерево значений, заполненное данными для выбора узла обмена. В дереве 2 уровня: +// план обмена->узлы обмена. Служебные узлы выброшены. +// +// Параметры: +// ОбъектДанных - Ссылка или структура со значениями измерений набор записей. Для этих данных +// которых анализируются узлы обмена. Если не указано, то для всех +// ИмяТаблицы - Если ОбъектДанных - структура, то имя таблицы для набора записей +// +// Колонки в результате: +// - Наименование - Представление плана обмена или узла обмена +// - ИндексКартинки - 1=план обмена, 2=узел , 3=помеченный для удаления узел +// - ИндексКартинкиАвторегистрация - Если не указан параметр ОбъектДанных, то Неопределено +// Иначе: 0=нет, 1=запрещена, 2=разрешена. +// Неопределено для плана обмена +// - ПланОбменаИмя - Имя плана обмена узла +// - Ссылка - Ссылка узла, Неопределено для плана обмена +// - Код - Код узла, Неопределено для плана обмена +// - НомерОтправленного - Данные узла +// - НомерПринятого - Данные узла +// - НомерСообщения - Если указан объект, то номер сообщения для него, иначе NULL +// - НеВыгружалось - Если указан объект, то флаг выгрузки, иначе NULL +// - Пометка - Если указан объект, то 0 = нет регистрации, 1 - есть, иначе всегда 0 +// - ИсходнаяПометка - Копия "Пометка" +// - ИдентификаторСтроки - Индекс добавленной строки (обход дерева сверху вниз слева направо) +// +Функция СформироватьДеревоУзлов(ОбъектДанных=Неопределено, ИмяТаблицы=Неопределено) Экспорт + + Дерево = Новый ДеревоЗначений; + Колонки = Дерево.Колонки; + Строки = Дерево.Строки; + + Колонки.Добавить("Наименование"); + Колонки.Добавить("ИндексКартинки"); + Колонки.Добавить("ИндексКартинкиАвторегистрация"); + Колонки.Добавить("ПланОбменаИмя"); + Колонки.Добавить("Ссылка"); + Колонки.Добавить("Код"); + Колонки.Добавить("НомерОтправленного"); + Колонки.Добавить("НомерПринятого"); + Колонки.Добавить("НомерСообщения"); + Колонки.Добавить("НеВыгружалось"); + Колонки.Добавить("Пометка"); + Колонки.Добавить("ИсходнаяПометка"); + Колонки.Добавить("ИдентификаторСтроки"); + + Запрос = Новый Запрос; + Если ОбъектДанных=Неопределено Тогда + МетаОбъект = Неопределено; + ТекстЗапроса = " + |ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка) КАК Наименование, + | ВЫБОР + | КОГДА ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 + | КОНЕЦ КАК ИндексКартинки, + | + | ""{0}"" КАК ПланОбменаИмя, + | Код КАК Код, + | Ссылка КАК Ссылка, + | НомерОтправленного КАК НомерОтправленного, + | НомерПринятого КАК НомерПринятого, + | NULL КАК НомерСообщения, + | NULL КАК НеВыгружалось, + | 0 КАК Пометка, + | 0 КАК ИсходнаяПометка + |ИЗ + | ПланОбмена.{0} КАК ПланОбмена + |ГДЕ + | ПланОбмена.Ссылка<>&ФильтрУзлов + |"; + + Иначе + Если ТипЗнч(ОбъектДанных)=Тип("Структура") Тогда + ТекстЗапроса = ""; + Для Каждого КлючЗначение Из ОбъектДанных Цикл + ТекИмя = КлючЗначение.Ключ; + ТекстЗапроса = ТекстЗапроса + " + |И ТаблицаИзменений." + ТекИмя + "=&" + ТекИмя; + Запрос.УстановитьПараметр(ТекИмя, ОбъектДанных[ТекИмя]); + КонецЦикла; + ТекИмяТаблицы = ИмяТаблицы; + МетаОбъект = МетаданныеПоПолномуИмени(ИмяТаблицы); + + ИначеЕсли ТипЗнч(ОбъектДанных)=Тип("Строка") Тогда + ТекстЗапроса = ""; + ТекИмяТаблицы = ОбъектДанных; + МетаОбъект = МетаданныеПоПолномуИмени(ОбъектДанных); + + Иначе + ТекстЗапроса = " + |И ТаблицаИзменений.Ссылка=&ОбъектРегистрации"; + Запрос.УстановитьПараметр("ОбъектРегистрации", ОбъектДанных); + + МетаОбъект = ОбъектДанных.Метаданные(); + ТекИмяТаблицы = МетаОбъект.ПолноеИмя(); + КонецЕсли; + + ТекстЗапроса = " + |ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕССЫЛКИ(ПланОбмена.Ссылка) КАК Наименование, + | ВЫБОР + | КОГДА ПланОбмена.Ссылка.ПометкаУдаления ТОГДА 2 ИНАЧЕ 1 + | КОНЕЦ КАК ИндексКартинки, + | + | ""{0}"" КАК ПланОбменаИмя, + | ПланОбмена.Ссылка.Код КАК Код, + | ПланОбмена.Ссылка.Ссылка КАК Ссылка, + | ПланОбмена.Ссылка.НомерОтправленного КАК НомерОтправленного, + | ПланОбмена.Ссылка.НомерПринятого КАК НомерПринятого, + | ТаблицаИзменений.НомерСообщения КАК НомерСообщения, + | ВЫБОР + | КОГДА ТаблицаИзменений.НомерСообщения ЕСТЬ NULL + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК НеВыгружалось, + | ВЫБОР + | КОГДА КОЛИЧЕСТВО(ТаблицаИзменений.Узел)>0 ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Пометка, + | ВЫБОР + | КОГДА КОЛИЧЕСТВО(ТаблицаИзменений.Узел)>0 ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ИсходнаяПометка + |ИЗ + | ПланОбмена.{0} КАК ПланОбмена + |ЛЕВОЕ СОЕДИНЕНИЕ + | " + ТекИмяТаблицы + ".Изменения КАК ТаблицаИзменений + |ПО + | ТаблицаИзменений.Узел=ПланОбмена.Ссылка + | " + ТекстЗапроса + " + |ГДЕ + | ПланОбмена.Ссылка<>&ФильтрУзлов + |СГРУППИРОВАТЬ ПО + | ПланОбмена.Ссылка, + | ТаблицаИзменений.НомерСообщения + |"; + КонецЕсли; + + ТекНомерСтроки = 0; + Для Каждого Мета Из Метаданные.ПланыОбмена Цикл + + ИмяПлана = Мета.Имя; + Попытка + ЭтотУзелПланаОбмена = ПланыОбмена[ИмяПлана].ЭтотУзел(); + Исключение + // Разделенный режим, пропускаем узел + Продолжить; + КонецПопытки; + + Авторегистрация = Неопределено; + Если МетаОбъект<>Неопределено Тогда + ЭлементСостава = Мета.Состав.Найти(МетаОбъект); + Если ЭлементСостава=Неопределено Тогда + // Не входит в текущий план обмена + Продолжить; + КонецЕсли; + Авторегистрация = ?(ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Запретить, 1, 2); + КонецЕсли; + + ИмяПлана = Мета.Имя; + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "{0}", ИмяПлана); + Запрос.УстановитьПараметр("ФильтрУзлов", ЭтотУзелПланаОбмена); + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + СтрокаПлана = Строки.Добавить(); + СтрокаПлана.Наименование = Мета.Представление(); + СтрокаПлана.ИндексКартинки = 0; + СтрокаПлана.ПланОбменаИмя = ИмяПлана; + + СтрокаПлана.ИдентификаторСтроки = ТекНомерСтроки; + ТекНомерСтроки = ТекНомерСтроки + 1; + + // Сортировка по представлению, в запросе нельзя + ВременнаяТаблица = Результат.Выгрузить(); + ВременнаяТаблица.Сортировать("Наименование"); + Для Каждого СтрокаУзла Из ВременнаяТаблица Цикл; + НоваяСтрока = СтрокаПлана.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаУзла); + + НоваяСтрока.ИндексКартинкиАвторегистрация = Авторегистрация; + + НоваяСтрока.ИдентификаторСтроки = ТекНомерСтроки; + ТекНомерСтроки = ТекНомерСтроки + 1; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат Дерево; +КонецФункции + +// Возвращает структуру, описывающую метаданные для плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Если передана строка, то она интерпретируется как имя метаданных +// плана обмена, для которого строится дерево конфигурации. +// - Если передан узел обмена, то дерево конфигурации строится для его плана обмена. +// - Если параметр неопределен, то строится дерево всей конфигурации. +// +// Возвращает структуру с полями "СтруктураИмен", "СтруктураПредставлений", "Дерево", +// описывающую метаданные. Объекты, не входящие в состав плана обмена, выбрасываются. +// +// "СтруктураИмен" - структура, где имя - группа метаданных (константы, справочники и т.п.), +// значение - массив полных имен. +// +// "СтруктураПредставлений" - структура, где имя - группа метаданных (константы, справочники +// и т.п.), значение - массив представлений. Порядок представлений в массиве совпадает с массивом +// полных имен. +// +// "СтруктураАвторегистрации" - структура, где имя - группа метаданных (константы, справочники +// и т.п.), значение - массив флагов авторегистрации на узле. Порядок данных в массиве совпадает +// с массивом полных имен. Входят только те группы, которые не входят в дерево. +// +// "Дерево" - дерево значений, 3 уровня: конфигурация->вид объекта->объект. +// Колонки дерева: +// - Наименование - Представление вида объекта метаданных +// - МетаПолноеИмя - Полное имя объекта метаданных +// - ИндексКартинки - Зависит от метаданных +// - Пометка - Неопределено +// - ИдентификаторСтроки - Индекс добавленной строки (обход дерева сверху вниз слева направо) +// - Авторегистрация - Если указан ИмяПланаОбмена, то для листьев: 1-разрешена, 2-запрещена. Иначе Неопределено +// +// - КоличествоИзменений - Неопределено, нужно для дальнейшего расчета +// - КоличествоВыгруженных - Неопределено, нужно для дальнейшего расчета +// - КоличествоНевыгруженных - Неопределено, нужно для дальнейшего расчета +// - КоличествоИзмененийСтрокой - Неопределено, нужно для дальнейшего расчета +// +Функция СформироватьСтруктуруМетаданных(ИмяПланаОбмена=Неопределено) Экспорт + + Дерево = Новый ДеревоЗначений; + Колонки = Дерево.Колонки; + Колонки.Добавить("Наименование"); + Колонки.Добавить("МетаПолноеИмя"); + Колонки.Добавить("ИндексКартинки"); + Колонки.Добавить("Пометка"); + Колонки.Добавить("ИдентификаторСтроки"); + + Колонки.Добавить("Авторегистрация"); + Колонки.Добавить("КоличествоИзменений"); + Колонки.Добавить("КоличествоВыгруженных"); + Колонки.Добавить("КоличествоНевыгруженных"); + Колонки.Добавить("КоличествоИзмененийСтрокой"); + + // Корень + СтрокаКорень = Дерево.Строки.Добавить(); + СтрокаКорень.Наименование = Метаданные.Представление(); + СтрокаКорень.ИндексКартинки = 0; + СтрокаКорень.ИдентификаторСтроки = 0; + + // Параметры + ТекПараметры = Новый Структура("СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации, Строки", + Новый Структура, Новый Структура, Новый Структура, СтрокаКорень.Строки); + + Если ИмяПланаОбмена=Неопределено Тогда + ПланОбмена = Неопределено; + ИначеЕсли ТипЗнч(ИмяПланаОбмена)=Тип("Строка") Тогда + ПланОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + Иначе + ПланОбмена = ИмяПланаОбмена.Метаданные(); + КонецЕсли; + ТекПараметры.Вставить("ПланОбмена", ПланОбмена); + + Результат = Новый Структура("Дерево, СтруктураИмен, СтруктураПредставлений, СтруктураАвторегистрации", + Дерево, ТекПараметры.СтруктураИмен, ТекПараметры.СтруктураПредставлений, ТекПараметры.СтруктураАвторегистрации); + + ТекНомерСтроки = 1; + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 1, 2, Ложь, "Константы", НСтр("ru='Константы'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 3, 4, Истина, "Справочники", НСтр("ru='Справочники'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 5, 6, Истина, "Последовательности", НСтр("ru='Последовательности'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 7, 8, Истина, "Документы", НСтр("ru='Документы'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 9, 10, Истина, "ПланыВидовХарактеристик", НСтр("ru='Планы видов характеристик'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 11, 12, Истина, "ПланыСчетов", НСтр("ru='Планы счетов'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 13, 14, Истина, "ПланыВидовРасчета", НСтр("ru='Планы видов расчета'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 15, 16, Истина, "РегистрыСведений", НСтр("ru='Регистры сведений'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 17, 18, Истина, "РегистрыНакопления", НСтр("ru='Регистры накопления'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 19, 20, Истина, "РегистрыБухгалтерии", НСтр("ru='Регистры бухгалтерии'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 21, 22, Истина, "РегистрыРасчета", НСтр("ru='Регистры расчета'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 23, 24, Истина, "БизнесПроцессы", НСтр("ru='Бизнес-процессы'")); + СформироватьУровеньМетаданных(ТекНомерСтроки, ТекПараметры, 25, 26, Истина, "Задачи", НСтр("ru='Задачи'")); + + Возврат Результат; +КонецФункции + +// Вычисляет количества изменений для объектов метаданных для узлов обмена. +// +// Параметры: +// - СписокТаблиц - Или массив или коллекция "ключ/значение" где "значение" - массивы имен +// - СписокУзлов - Узел или массив списков узлов +// +// Возвращает таблицу значений. Колонки: +// - МетаПолноеИмя - Полное имя метаданных, для которых рассчитываем количество +// - УзелОбмена - Ссылка на узел обмена, для которого рассчитываем количество +// - КоличествоИзменений - Число +// - КоличествоВыгруженных - Число +// - КоличествоНеВыгруженных - Число +// +Функция ПолучитьКоличествоИзменений(СписокТаблиц, СписокУзлов) Экспорт + + Результат = Новый ТаблицаЗначений; + Колонки = Результат.Колонки; + Колонки.Добавить("МетаПолноеИмя"); + Колонки.Добавить("УзелОбмена"); + Колонки.Добавить("КоличествоИзменений"); + Колонки.Добавить("КоличествоВыгруженных"); + Колонки.Добавить("КоличествоНеВыгруженных"); + + Результат.Индексы.Добавить("МетаПолноеИмя"); + Результат.Индексы.Добавить("УзелОбмена"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СписокУзлов", СписокУзлов); + + // На входе или массив или структура/соответствие со многими массивами + Если СписокТаблиц=Неопределено Тогда + Возврат Результат; + ИначеЕсли ТипЗнч(СписокТаблиц)=Тип("Массив") Тогда + Источник = Новый Структура("_", СписокТаблиц); + Иначе + Источник = СписокТаблиц; + КонецЕсли; + + // Пачками по 200 таблиц в запросе + Текст = ""; + Номер = 0; + Для Каждого КлючЗначение Из Источник Цикл + Если ТипЗнч(КлючЗначение.Значение)<>Тип("Массив") Тогда + Продолжить; + КонецЕсли; + + Для Каждого Элемент Из КлючЗначение.Значение Цикл + Если ПустаяСтрока(Элемент) Тогда + Продолжить; + КонецЕсли; + + Текст = Текст + ?(Текст="", "", "ОБЪЕДИНИТЬ ВСЕ") + " + |ВЫБРАТЬ + | """ + Элемент + """ КАК МетаПолноеИмя, + | Узел КАК УзелОбмена, + | КОЛИЧЕСТВО(*) КАК КоличествоИзменений, + | КОЛИЧЕСТВО(НомерСообщения) КАК КоличествоВыгруженных, + | КОЛИЧЕСТВО(*) - КОЛИЧЕСТВО(НомерСообщения) КАК КоличествоНеВыгруженных + |ИЗ + | " + Элемент + ".Изменения + |ГДЕ + | Узел В (&СписокУзлов) + |СГРУППИРОВАТЬ ПО + | Узел + |"; + + Номер = Номер + 1; + Если Номер=200 Тогда + Запрос.Текст = Текст; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка); + КонецЦикла; + Текст = ""; + Номер = 0; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + // Дочитываем хвосты + Если Текст<>"" Тогда + Запрос.Текст = Текст; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка); + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает объект метаданных по его полному имени. Пустая строка обозначает конфигурацию. +// +// Параметры: +// - ИмяМетаданных - Строка - Имя объекта метаданных, например "Справочник.Валюты" или "Константы" +// +Функция МетаданныеПоПолномуИмени(ИмяМетаданных) Экспорт + + Если ПустаяСтрока(ИмяМетаданных) Тогда + // Вся конфигурация + Возврат Метаданные; + КонецЕсли; + + Значение = Метаданные.НайтиПоПолномуИмени(ИмяМетаданных); + Если Значение=Неопределено Тогда + Значение = Метаданные[ИмяМетаданных]; + КонецЕсли; + + Возврат Значение; +КонецФункции + +// Возвращает флаг регистрации объекта на узле +// +// Параметры: +// - Узел - Узел плана обмена для которого получаем информацию, +// - ОбъектРегистрации - Объект, для которого получаем информацию. Может быть строкой - +// обрабатываем метаданные, ссылкой или структурой со значениями +// изменений набора записей +// - ИмяТаблицы - Если ОбъектРегистрации - структура, то содержит имя таблицы для набора измерений +// +Функция ОбъектЗарегистрированНаУзле(Узел, ОбъектРегистрации, ИмяТаблицы=Неопределено) Экспорт + ТипПараметра = ТипЗнч(ОбъектРегистрации); + Если ТипПараметра=Тип("Строка") Тогда + // Константа как метаданные + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации); + ТекущийОбъект = Описание.Менеджер.СоздатьМенеджерЗначения(); + + ИначеЕсли ТипПараметра=Тип("Структура") Тогда + // Набор измерений, ИмяТаблицы - чего + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + ТекущийОбъект = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из ОбъектРегистрации Цикл + ТекущийОбъект.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + + Иначе + ТекущийОбъект = ОбъектРегистрации; + КонецЕсли; + + Возврат ПланыОбмена.ИзменениеЗарегистрировано(Узел, ТекущийОбъект); +КонецФункции + +// Изменяет регистрацию переданного. +// +// Параметры: +// - Команда - Истина, если надо добавлять, Ложь, если удалять +// - БезУчетаАвторегистрации - Истина, если не надо анализировать флаг авторегистрации +// - Узел - Ссылка на узел плана обмена +// - Данные - Ссылка, строка (полное имя метаданных), структура (измерения набора) +// или массив таких данных. +// - ИмяТаблицы - Если Данные является структурой, то содержит имя таблицы +// +// Возвращает структуру с общим числом объектов и числом успешно обработанных объектов +// +Функция ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Данные, ИмяТаблицы=Неопределено) Экспорт + + ПрочитатьНастройки(); + Результат = Новый Структура("Всего, Успешно", 0, 0); + + // Только при добавлении и работе в составе БСП + НадоФильтрБСП = ТипЗнч(Команда)=Тип("Булево") И Команда И КонфигурацияПоддерживаетБСП И НастройкаКонтрольВыгрузкиОбъектов; + + Если ТипЗнч(Данные)=Тип("Массив") Тогда + ДанныеРегистрации = Данные; + Иначе + ДанныеРегистрации = Новый Массив; + ДанныеРегистрации.Добавить(Данные); + КонецЕсли; + + Для Каждого Элемент Из ДанныеРегистрации Цикл + + Тип = ТипЗнч(Элемент); + Значения = Новый Массив; + + Если Элемент=Неопределено Тогда + // Вся конфигурация + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("Константы"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("Справочники"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("Документы"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("Последовательности"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("ПланыВидовХарактеристик"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("ПланыСчетов"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("ПланыВидовРасчета"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("РегистрыСведений"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("РегистрыНакопления"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("РегистрыБухгалтерии"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("РегистрыРасчета"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("БизнесПроцессы"), БезУчетаАвторегистрации) ); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ХарактеристикиПоМетаданным("Задачи"), БезУчетаАвторегистрации) ); + Продолжить; + + ИначеЕсли Не БезУчетаАвторегистрации Тогда + // Регистрируем по группам с отсечением неподходящего + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "Константы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "Справочники", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "Документы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "Последовательности", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "ПланыВидовХарактеристик", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "ПланыСчетов", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "ПланыВидовРасчета", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "РегистрыСведений", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "РегистрыНакопления", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "РегистрыБухгалтерии", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "РегистрыРасчета", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "БизнесПроцессы", ИмяТаблицы) ); + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, Ложь, Узел, "Задачи", ИмяТаблицы) ); + Продолжить; + Иначе + // Регистрируем сразу все + Значения.Добавить(Неопределено); + КонецЕсли; + + ИначеЕсли Тип=Тип("Строка") Тогда + // Метаданные, возможно как коллекция, так и конкретный вид, на авторегистрацию смотрим + Описание = ХарактеристикиПоМетаданным(Элемент); + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, Описание, БезУчетаАвторегистрации) ); + Продолжить; + + ИначеЕсли БезУчетаАвторегистрации Тогда + Если Описание.ЭтоКоллекция Тогда + Для Каждого Мета Из Описание.Метаданные Цикл + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Мета.ПолноеИмя(), ИмяТаблицы) ); + КонецЦикла; + Продолжить; + Иначе + Мета = Описание.Метаданные; + ЭлементСостава = Узел.Метаданные().Состав.Найти(Мета); + Если ЭлементСостава=Неопределено Тогда + Продолжить; + КонецЕсли; + // Константа? + Значения.Добавить(Описание.Метаданные); + КонецЕсли; + + Иначе + // Отсеиваем неподходящие по авторегистрации + Если Описание.ЭтоКоллекция Тогда + // Регистрируем поодиночке + Для Каждого Мета Из Описание.Метаданные Цикл + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Мета.ПолноеИмя(), ИмяТаблицы) ); + КонецЦикла; + Продолжить; + Иначе + Мета = Описание.Метаданные; + ЭлементСостава = Узел.Метаданные().Состав.Найти(Мета); + Если ЭлементСостава=Неопределено Или ЭлементСостава.Авторегистрация<>АвтоРегистрацияИзменений.Разрешить Тогда + Продолжить; + КонецЕсли; + // Константа? + Значения.Добавить(Описание.Метаданные); + КонецЕсли; + КонецЕсли; + + // Смотрим опциональные варианты, Значения[0] - метаданные конкретного вида с именем "Элемент" + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + ИначеЕсли Тип=Тип("Структура") Тогда + // Это или конкретный набор записей, или результат выбора ссылочного типа отбором + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание.ЭтоСсылка Тогда + ДобавитьРезультаты(Результат, ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, Элемент.Ссылка) ); + Продолжить; + КонецЕсли; + // Конкретный набор записей, на авторегистрацию уже не смотрим + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийНабора(Узел, Элемент, Описание) ); + Продолжить; + КонецЕсли; + + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из Элемент Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Значения.Добавить(Набор); + // Смотрим опциональные варианты + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации, ИмяТаблицы) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + Иначе + // Конкретная ссылка, на авторегистрацию уже не смотрим + Если НадоФильтрБСП Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийСсылки(Узел, Элемент) ); + Продолжить; + + КонецЕсли; + Значения.Добавить(Элемент); + // Смотрим опциональные варианты + Для Каждого ТекЭлемент Из ПолучитьДополнительныеОбъектыРегистрации(Элемент, Узел, БезУчетаАвторегистрации) Цикл + Значения.Добавить(ТекЭлемент); + КонецЦикла; + + КонецЕсли; + + // Собственно регистрация, уже без фильтра + Для Каждого ТекЗначение Из Значения Цикл + ВыполнитьКомандуРегистрацииОбъекта(Команда, Узел, ТекЗначение); + Результат.Успешно = Результат.Успешно + 1; + Результат.Всего = Результат.Всего + 1; + КонецЦикла; + + КонецЦикла; // Перебор объектов в массиве данных для регистрации + + Возврат Результат; +КонецФункции + +// Возвращает начало полного имени формы для открытия по переданному объекту +// +Функция ПолучитьИмяФормы(ТекущийОбъект=Неопределено) Экспорт + + Тип = ТипЗнч(ТекущийОбъект); + Если Тип=Тип("ДинамическийСписок") Тогда + Возврат ТекущийОбъект.ОсновнаяТаблица + "."; + ИначеЕсли Тип=Тип("Строка") Тогда + Возврат ТекущийОбъект + "."; + КонецЕсли; + + Мета = ?(ТекущийОбъект=Неопределено, Метаданные(), ТекущийОбъект.Метаданные()); + Возврат Мета.ПолноеИмя() + "."; +КонецФункции + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// - ДанныеСтроки - ДанныеФормыЭлементДерева. Пометка хранится в числовой колонке "Пометка" +// +Процедура ИзменениеПометки(ДанныеСтроки) Экспорт + ДанныеСтроки.Пометка = ДанныеСтроки.Пометка % 2; + ПроставитьПометкиВниз(ДанныеСтроки); + ПроставитьПометкиВверх(ДанныеСтроки); +КонецПроцедуры + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// - ДанныеСтроки - ДанныеФормыЭлементДерева. Пометка хранится в числовой колонке "Пометка" +// +Процедура ПроставитьПометкиВниз(ДанныеСтроки) Экспорт + Значение = ДанныеСтроки.Пометка; + Для Каждого Потомок Из ДанныеСтроки.ПолучитьЭлементы() Цикл + Потомок.Пометка = Значение; + ПроставитьПометкиВниз(Потомок); + КонецЦикла; +КонецПроцедуры + +// Рекурсивное обслуживание иерархических пометок с тремя состояниями в дереве. +// +// Параметры: +// - ДанныеСтроки - ДанныеФормыЭлементДерева. Пометка хранится в числовой колонке "Пометка" +// +Процедура ПроставитьПометкиВверх(ДанныеСтроки) Экспорт + РодительСтроки = ДанныеСтроки.ПолучитьРодителя(); + Если РодительСтроки<>Неопределено Тогда + ВсеИстина = Истина; + НеВсеЛожь = Ложь; + Для Каждого Потомок Из РодительСтроки.ПолучитьЭлементы() Цикл + ВсеИстина = ВсеИстина И (Потомок.Пометка = 1); + НеВсеЛожь = НеВсеЛожь Или Булево(Потомок.Пометка); + КонецЦикла; + Если ВсеИстина Тогда + РодительСтроки.Пометка = 1; + ИначеЕсли НеВсеЛожь Тогда + РодительСтроки.Пометка = 2; + Иначе + РодительСтроки.Пометка = 0; + КонецЕсли; + ПроставитьПометкиВверх(РодительСтроки); + КонецЕсли; +КонецПроцедуры + +// Чтение реквизитов узла обмена. +// +// Параметры: +// - Ссылка - Ссылка на узел обмена +// - Данные - Список имен реквизитов для чтения через запятую +// +// Возвращает структуру с данными или Неопределено, если нет данных по переданной ссылке +// +Функция ПолучитьПараметрыУзлаОбмена(Ссылка, Данные) Экспорт + Запрос = Новый Запрос(" + |ВЫБРАТЬ " + Данные + " ИЗ " + Ссылка.Метаданные().ПолноеИмя() + " + |ГДЕ Ссылка=&Ссылка + |"); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Времянка = Запрос.Выполнить().Выгрузить(); + Если Времянка.Количество()=0 Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура(Данные); + ЗаполнитьЗначенияСвойств(Результат, Времянка[0]); + Возврат Результат; +КонецФункции + +// Запись реквизитов узла обмена. +// +// Параметры: +// - Ссылка - Ссылка на узел обмена +// - Данные - Список имен реквизитов для чтения через запятую +// +Процедура УстановитьПараметрыУзлаОбмена(Ссылка, Данные) Экспорт + + ОбъектУзла = Ссылка.ПолучитьОбъект(); + Если ОбъектУзла=Неопределено Тогда + // Ссылка на удаленный объект + Возврат; + КонецЕсли; + + Изменен = Ложь; + Для Каждого Элемент Из Данные Цикл + Если ОбъектУзла[Элемент.Ключ]<>Элемент.Значение Тогда + Изменен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Изменен Тогда + ЗаполнитьЗначенияСвойств(ОбъектУзла, Данные); + ОбъектУзла.Записать(); + КонецЕсли; +КонецПроцедуры + +// Возвращает описание данных по имени таблицы/полному имени метаданных или метаданным +// +// Параметры: +// - ИмяТаблицы - Имя таблицы, например "Справочник.Валюты" +// +Функция ХарактеристикиПоМетаданным(ИмяТаблицыМетаданных) Экспорт + + ЭтоПоследовательность = Ложь; + ЭтоКоллекция = Ложь; + ЭтоКонстанта = Ложь; + ЭтоСсылка = Ложь; + ЭтоНабор = Ложь; + Менеджер = Неопределено; + ИмяТаблицы = ""; + + Если ТипЗнч(ИмяТаблицыМетаданных)=Тип("Строка") Тогда + Мета = МетаданныеПоПолномуИмени(ИмяТаблицыМетаданных); + ИмяТаблицы = ИмяТаблицыМетаданных; + ИначеЕсли ТипЗнч(ИмяТаблицы)=Тип("Тип") Тогда + Мета = Метаданные.НайтиПоТипу(ИмяТаблицыМетаданных); + ИмяТаблицы = Мета.ПолноеИмя(); + Иначе + Мета = ИмяТаблицыМетаданных; + ИмяТаблицы = Мета.ПолноеИмя(); + КонецЕсли; + + Если Мета=Метаданные.Константы Тогда + ЭтоКоллекция = Истина; + ЭтоКонстанта = Истина; + Менеджер = Константы; + + ИначеЕсли Мета=Метаданные.Справочники Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Справочники; + + ИначеЕсли Мета=Метаданные.Документы Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Документы; + + ИначеЕсли Мета=Метаданные.Перечисления Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Перечисления; + + ИначеЕсли Мета=Метаданные.ПланыВидовХарактеристик Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = ПланыВидовХарактеристик; + + ИначеЕсли Мета=Метаданные.ПланыСчетов Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = ПланыСчетов; + + ИначеЕсли Мета=Метаданные.ПланыВидовРасчета Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = ПланыВидовРасчета; + + ИначеЕсли Мета=Метаданные.БизнесПроцессы Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = БизнесПроцессы; + + ИначеЕсли Мета=Метаданные.Задачи Тогда + ЭтоКоллекция = Истина; + ЭтоСсылка = Истина; + Менеджер = Задачи; + + ИначеЕсли Мета=Метаданные.Последовательности Тогда + ЭтоНабор = Истина; + ЭтоПоследовательность = Истина; + ЭтоКоллекция = Истина; + Менеджер = Последовательности; + + ИначеЕсли Мета=Метаданные.РегистрыСведений Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыСведений; + + ИначеЕсли Мета=Метаданные.РегистрыНакопления Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыНакопления; + + ИначеЕсли Мета=Метаданные.РегистрыБухгалтерии Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыБухгалтерии; + + ИначеЕсли Мета=Метаданные.РегистрыРасчета Тогда + ЭтоКоллекция = Истина; + ЭтоНабор = Истина; + Менеджер = РегистрыРасчета; + + ИначеЕсли Метаданные.Константы.Содержит(Мета) Тогда + ЭтоКонстанта = Истина; + Менеджер = Константы[Мета.Имя]; + + ИначеЕсли Метаданные.Справочники.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Справочники[Мета.Имя]; + + ИначеЕсли Метаданные.Документы.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Документы[Мета.Имя]; + + ИначеЕсли Метаданные.Последовательности.Содержит(Мета) Тогда + ЭтоНабор = Истина; + ЭтоПоследовательность = Истина; + Менеджер = Последовательности[Мета.Имя]; + + ИначеЕсли Метаданные.Перечисления.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Перечисления[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = ПланыВидовХарактеристик[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыСчетов.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = ПланыСчетов[Мета.Имя]; + + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = ПланыВидовРасчета[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыСведений.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыСведений[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыНакопления[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыБухгалтерии[Мета.Имя]; + + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Мета) Тогда + ЭтоНабор = Истина; + Менеджер = РегистрыРасчета[Мета.Имя]; + + ИначеЕсли Метаданные.БизнесПроцессы.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = БизнесПроцессы[Мета.Имя]; + + ИначеЕсли Метаданные.Задачи.Содержит(Мета) Тогда + ЭтоСсылка = Истина; + Менеджер = Задачи[Мета.Имя]; + + Иначе + МетаРодитель = Мета.Родитель(); + Если МетаРодитель<>Неопределено И Метаданные.РегистрыРасчета.Содержит(МетаРодитель) Тогда + // Перерасчет + ЭтоНабор = Истина; + Менеджер = РегистрыРасчета[МетаРодитель.Имя].Перерасчеты[Мета.Имя]; + КонецЕсли; + + КонецЕсли; + + Возврат Новый Структура("ИмяТаблицы, Метаданные, Менеджер, ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция", + ИмяТаблицы, Мета, Менеджер, + ЭтоНабор, ЭтоСсылка, ЭтоКонстанта, ЭтоПоследовательность, ЭтоКоллекция); + +КонецФункции + +// Возвращает таблицу, описывающую измерения для регистрации изменений набора данных +// +// Параметры: +// - ИмяТаблицы - Имя таблицы, например "РегистрСведений.КурсыВалют" +// - ВсеИзмерения - Флаг того, что для регистра сведений получаем все измерения, а не +// только основные и ведущие +// +// Возвращает таблицу с колонками: +// - Имя - Строка имени измерения +// - ТипЗначения - ОписаниеТипов +// - Заголовок - Представление для измерения +// +Функция ИзмеренияНабораЗаписей(ИмяТаблицы, ВсеИзмерения=Ложь) Экспорт + + Если ТипЗнч(ИмяТаблицы)=Тип("Строка") Тогда + Мета = МетаданныеПоПолномуИмени(ИмяТаблицы); + Иначе + Мета = ИмяТаблицы; + КонецЕсли; + + // Определяем ключевые поля + Измерения = Новый ТаблицаЗначений; + Колонки = Измерения.Колонки; + Колонки.Добавить("Имя"); + Колонки.Добавить("ТипЗначения"); + Колонки.Добавить("Заголовок"); + + Если Не ВсеИзмерения Тогда + // Что-то регистрируемое + НеУчитывать = "НомерСообщения, Узел,"; + + Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + Мета.ПолноеИмя() + ".Изменения ГДЕ ЛОЖЬ"); + ПустойРезультат = Запрос.Выполнить(); + Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл + ИмяКолонки = КолонкаРезультата.Имя; + Если Найти(НеУчитывать, ИмяКолонки + ",")=0 Тогда + Строка = Измерения.Добавить(); + Строка.Имя = ИмяКолонки; + Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; + + МетаИзм = Мета.Измерения.Найти(ИмяКолонки); + Строка.Заголовок = ?(МетаИзм=Неопределено, ИмяКолонки, МетаИзм.Представление()); + КонецЕсли; + КонецЦикла; + + Возврат Измерения; + КонецЕсли; + + // Все измерения + + ЭтоРегистрСведений = Метаданные.РегистрыСведений.Содержит(Мета); + + // Регистратор + Если Метаданные.РегистрыНакопления.Содержит(Мета) + Или Метаданные.РегистрыБухгалтерии.Содержит(Мета) + Или Метаданные.РегистрыРасчета.Содержит(Мета) + Или (ЭтоРегистрСведений И Мета.РежимЗаписи=Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору) + Или Метаданные.Последовательности.Содержит(Мета) + Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "Регистратор"; + Строка.ТипЗначения = Документы.ТипВсеСсылки(); + Строка.Заголовок = "Регистратор"; + КонецЕсли; + + // Период + Если ЭтоРегистрСведений И Мета.ОсновнойОтборПоПериоду Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "Период"; + Строка.ТипЗначения = Новый ОписаниеТипов("Дата"); + Строка.Заголовок = "Период"; + КонецЕсли; + + // Измерения + Если ЭтоРегистрСведений Тогда + Для Каждого МетаИзм Из Мета.Измерения Цикл + Строка = Измерения.Добавить(); + Строка.Имя = МетаИзм.Имя; + Строка.ТипЗначения = МетаИзм.Тип; + Строка.Заголовок = МетаИзм.Представление(); + КонецЦикла; + КонецЕсли; + + // Перерасчет + Если Метаданные.РегистрыРасчета.Содержит(Мета.Родитель()) Тогда + Строка = Измерения.Добавить(); + Строка.Имя = "ОбъектПерерасчета"; + Строка.ТипЗначения = Документы.ТипВсеСсылки(); + Строка.Заголовок = "Объект перерасчета"; + КонецЕсли; + + Возврат Измерения; +КонецФункции + +// Модифицирует таблицу формы, добавляя туда колонки +// +// Параметры: +// - ТаблицаФормы - Элемент, связанный с данными, в который будут добавлены колонки данных +// - СохранятьИмена - Список имен колонок, которые будут сохранены, через запятую. +// - Добавлять - Коллекция добавляемых колонок или перечислимое с атрибутами Имя, ТипЗначения, Заголовок +// - ГруппаКолонок - Группа колонок, в которую происходит добавление +// +Процедура ДобавитьКолонкиВТаблицуФормы(ТаблицаФормы, СохранятьИмена, Добавлять, ГруппаКолонок=Неопределено) Экспорт + + Форма = ФормаЭлементаФормы(ТаблицаФормы); + ЭлементыФормы = Форма.Элементы; + ИмяРеквизитаТаблицы = ТаблицаФормы.ПутьКДанным; + + Сохраняемые = Новый Структура(СохранятьИмена); + СохраняемыеПутиДанных = Новый Соответствие; + Для Каждого Элемент Из Сохраняемые Цикл + СохраняемыеПутиДанных.Вставить(ИмяРеквизитаТаблицы + "." + Элемент.Ключ, Истина); + КонецЦикла; + + ЭтоДинамическийСписок = Ложь; + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты() Цикл + Если Реквизит.Имя = ИмяРеквизитаТаблицы И Реквизит.ТипЗначения.СодержитТип(Тип("ДинамическийСписок")) Тогда + ЭтоДинамическийСписок = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + // Динамический пересоздает реквизиты сам + Если Не ЭтоДинамическийСписок Тогда + УдаляемыеИмена = Новый Массив; + + // Удаляем все реквизиты, которые не перечислены в СохранятьИмена + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицы) Цикл + ТекИмя = Реквизит.Имя; + Если Не Сохраняемые.Свойство(ТекИмя) Тогда + УдаляемыеИмена.Добавить(Реквизит.Путь + "." + ТекИмя); + КонецЕсли; + КонецЦикла; + + Добавляемые = Новый Массив; + Для Каждого Колонка Из Добавлять Цикл + ТекИмя = Колонка.Имя; + Если Не Сохраняемые.Свойство(ТекИмя) Тогда + Добавляемые.Добавить( Новый РеквизитФормы(ТекИмя, Колонка.ТипЗначения, ИмяРеквизитаТаблицы, Колонка.Заголовок) ); + КонецЕсли; + КонецЦикла; + + Форма.ИзменитьРеквизиты(Добавляемые, УдаляемыеИмена); + КонецЕсли; + + // Удаляем элементы + Родитель = ?(ГруппаКолонок=Неопределено, ТаблицаФормы, ГруппаКолонок); + + Удалять = Новый Массив; + Для Каждого Элемент Из Родитель.ПодчиненныеЭлементы Цикл + Удалять.Добавить(Элемент); + КонецЦикла; + Для Каждого Элемент Из Удалять Цикл + Если ТипЗнч(Элемент)<>Тип("ГруппаФормы") И СохраняемыеПутиДанных[Элемент.ПутьКДанным]=Неопределено Тогда + ЭлементыФормы.Удалить(Элемент); + КонецЕсли; + КонецЦикла; + + // Создаем элементы + Префикс = ТаблицаФормы.Имя; + Для Каждого Колонка Из Добавлять Цикл + ТекИмя = Колонка.Имя; + ЭлФормы = ЭлементыФормы.Вставить(Префикс + ТекИмя, Тип("ПолеФормы"), Родитель); + ЭлФормы.Вид = ВидПоляФормы.ПолеВвода; + ЭлФормы.ПутьКДанным = ИмяРеквизитаТаблицы + "." + ТекИмя; + ЭлФормы.Заголовок = Колонка.Заголовок; + КонецЦикла; + +КонецПроцедуры + +// Возвращает подробное представление объекта. +// +// Параметры: +// - ОбъектПредставления - Объект, представление которого получаем +// +Функция ПредставлениеСсылки(ОбъектПредставления) Экспорт + + Если ТипЗнч(ОбъектПредставления)=Тип("Строка") Тогда + // Метаданные + Мета = Метаданные.НайтиПоПолномуИмени(ОбъектПредставления); + Результат = Мета.Представление(); + Если Метаданные.Константы.Содержит(Мета) Тогда + Результат = Результат + " (константа)"; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + // Ссылка + Результат = ""; + Если Метаданные.ОбщиеМодули.Найти("ОбщегоНазначения")<>Неопределено Тогда + Попытка + Результат = Вычислить("ОбщегоНазначения.ПредметСтрокой(ОбъектПредставления)"); + Исключение + КонецПопытки; + КонецЕсли; + + Если ПустаяСтрока(Результат) И ОбъектПредставления<>Неопределено И Не ОбъектПредставления.Пустая() Тогда + Мета = ОбъектПредставления.Метаданные(); + Если Метаданные.Документы.Содержит(Мета) Тогда + Результат = Строка(ОбъектПредставления); + Иначе + Представление = Мета.ПредставлениеОбъекта; + Если ПустаяСтрока(Представление) Тогда + Представление = Мета.Представление(); + КонецЕсли; + Результат = Строка(ОбъектПредставления); + Если Не ПустаяСтрока(Представление) Тогда + Результат = Результат + " (" + Представление + ")"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Результат = НСтр("ru = 'не задано'"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг того, что работа происходит в файловой базе +// +Функция ЭтоФайловаяБаза() Экспорт + Возврат Найти(СтрокаСоединенияИнформационнойБазы(), "File=")>0; +КонецФункции + +// Читает текущие данные из динамического списка по его настройкам и возвращает в виде таблицы значений +// +// Параметры: +// - ИсточникДанных - ДинамическийСписок, реквизит формы +// +Функция ТекущиеДанныеДинамическогоСписка(ИсточникДанных) Экспорт + + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + + Источник = СхемаКомпоновки.ИсточникиДанных.Добавить(); + Источник.Имя = "Источник"; + Источник.ТипИсточникаДанных = "local"; + + Набор = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + Набор.Запрос = ИсточникДанных.ТекстЗапроса; + Набор.АвтоЗаполнениеДоступныхПолей = Истина; + Набор.ИсточникДанных = Источник.Имя; + Набор.Имя = Источник.Имя; + + ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки); + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Компоновщик.Инициализировать(ИсточникНастроек); + + ТекНастройки = Компоновщик.Настройки; + + // Выбранные поля + Для Каждого Элемент из ТекНастройки.Выбор.ДоступныеПоляВыбора.Элементы Цикл + Если Не Элемент.Папка Тогда + Поле = ТекНастройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + Поле.Использование = Истина; + Поле.Поле = Элемент.Поле; + КонецЕсли; + КонецЦикла; + Группа = ТекНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + Группа.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + // Отбор + СкопироватьОтборКомпоновкиДанных(ТекНастройки.Отбор, ИсточникДанных.Отбор); + + // Выводим + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновки, ТекНастройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Процессор = Новый ПроцессорКомпоновкиДанных; + Процессор.Инициализировать(Макет); + Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + + Результат = Новый ТаблицаЗначений; + Вывод.УстановитьОбъект(Результат); + Вывод.Вывести(Процессор); + + Возврат Результат; +КонецФункции + +// Читаем настройки из общего хранилища +// +Процедура ПрочитатьНастройки(КлючНастройки="") Экспорт + + КлючОбъекта = Метаданные().ПолноеИмя() + ".Форма.Форма"; + + ТекущиеНастройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта); + Если ТипЗнч(ТекущиеНастройки)<>Тип("Соответствие") Тогда + // Умолчания + ТекущиеНастройки = Новый Соответствие; + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияДвижений", Ложь); + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияПоследовательностей", Ложь); + ТекущиеНастройки.Вставить("НастройкаАдресВнешнейОбработкиЗапросов", ""); + ТекущиеНастройки.Вставить("НастройкаКонтрольВыгрузкиОбъектов", Истина); // Проверять через БСП + ТекущиеНастройки.Вставить("НастройкаВариантНомераСообщения", 0); // Регистрировать как новое + КонецЕсли; + + НастройкаАвторегистрацияДвижений = ТекущиеНастройки["НастройкаАвторегистрацияДвижений"]; + НастройкаАвторегистрацияПоследовательностей = ТекущиеНастройки["НастройкаАвторегистрацияПоследовательностей"]; + НастройкаАдресВнешнейОбработкиЗапросов = ТекущиеНастройки["НастройкаАдресВнешнейОбработкиЗапросов"]; + НастройкаКонтрольВыгрузкиОбъектов = ТекущиеНастройки["НастройкаКонтрольВыгрузкиОбъектов"]; + НастройкаВариантНомераСообщения = ТекущиеНастройки["НастройкаВариантНомераСообщения"]; + + ПроверитьКорректностьНастроек(КлючНастройки); +КонецПроцедуры + +// Устанавливаем флаг поддержки БСП +// +Процедура ПрочитатьПризнакПоддержкиБСП() Экспорт + КонфигурацияПоддерживаетБСП = БСП_ДоступнаТребуемаяВерсия(); +КонецПроцедуры + +// Пишем настройки в общее хранилище +// +Процедура СохранитьНастройки(КлючНастройки="") Экспорт + + КлючОбъекта = Метаданные().ПолноеИмя() + ".Форма.Форма"; + + ТекущиеНастройки = Новый Соответствие; + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияДвижений", НастройкаАвторегистрацияДвижений); + ТекущиеНастройки.Вставить("НастройкаАвторегистрацияПоследовательностей", НастройкаАвторегистрацияПоследовательностей); + ТекущиеНастройки.Вставить("НастройкаАдресВнешнейОбработкиЗапросов", НастройкаАдресВнешнейОбработкиЗапросов); + ТекущиеНастройки.Вставить("НастройкаКонтрольВыгрузкиОбъектов", НастройкаКонтрольВыгрузкиОбъектов); + ТекущиеНастройки.Вставить("НастройкаВариантНомераСообщения", НастройкаВариантНомераСообщения); + + ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, "", ТекущиеНастройки) +КонецПроцедуры + +// Проверяем настройки на корректность, сбрасываем в случае нарушения. +// Возвращает структуру с ключом - именем настройки, значением содержит описанием ошибки или Неопределено +// при отсутствии ошибки для данного параметра +// +Функция ПроверитьКорректностьНастроек(КлючНастройки="") Экспорт + + Результат = Новый Структура("ЕстьОшибки, + |НастройкаАвторегистрацияДвижений, НастройкаАвторегистрацияПоследовательностей, + |НастройкаАдресВнешнейОбработкиЗапросов, НастройкаКонтрольВыгрузкиОбъектов, + |НастройкаВариантНомераСообщения", + Ложь); + + // Доступность внешней обработки + Если ПустаяСтрока(НастройкаАдресВнешнейОбработкиЗапросов) Тогда + // Убираем возможные пробелы, вариант отключен + НастройкаАдресВнешнейОбработкиЗапросов = ""; + + ИначеЕсли НРег(Прав(СокрЛП(НастройкаАдресВнешнейОбработкиЗапросов), 4))=".epf" Тогда + // Файл обработки + Файл = Новый Файл(НастройкаАдресВнешнейОбработкиЗапросов); + Если Не Файл.Существует() Тогда + Текст = НСтр("ru='Файл ""%1"" не доступен %2'"); + + Текст = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов); + Если ЭтоФайловаяБаза() Тогда + РасположениеФайла = ""; + Иначе + РасположениеФайла = НСтр("ru='на сервере'"); + КонецЕсли; + + Текст = СтрЗаменить(Текст, "%2", РасположениеФайла); + Результат.НастройкаАдресВнешнейОбработкиЗапросов = Текст; + + Результат.ЕстьОшибки = Истина; + КонецЕсли; + + Иначе + // В составе конфигурации + Если Метаданные.Обработки.Найти(НастройкаАдресВнешнейОбработкиЗапросов)=Неопределено Тогда + Текст = НСтр("ru='Обработка ""%1"" не найдена в составе конфигурации'"); + Результат.НастройкаАдресВнешнейОбработкиЗапросов = СтрЗаменить(Текст, "%1", НастройкаАдресВнешнейОбработкиЗапросов); + + Результат.ЕстьОшибки = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Служебное для регистрации в подключаемых обработках +// +Функция СведенияОВнешнейОбработке() Экспорт + + Инфо = Новый Структура( + "Вид, Команды, БезопасныйРежим, Назначение, Наименование, Версия, Информация, ВерсияБСП", + "СозданиеСвязанныхОбъектов", Новый ТаблицаЗначений, Истина, Новый Массив); + + Инфо.Наименование = НСтр("ru='Регистрация изменений для обмена данными'"); + Инфо.Версия = "0.1"; + Инфо.ВерсияБСП = "1.2.1.4"; + Инфо.Информация = НСтр("ru='" + + "Обработка для управления регистрацией объектов на узлах обмена до формирования выгрузки. " + + "При работе в составе конфигурации с БСП версии 2.1.2.0 и старше производит контроль " + + "ограничений миграции данных для узлов обмена." + + "'"); + + Инфо.Назначение.Добавить("ПланыОбмена.*"); + Инфо.Назначение.Добавить("Константы.*"); + Инфо.Назначение.Добавить("Справочники.*"); + Инфо.Назначение.Добавить("Документы.*"); + Инфо.Назначение.Добавить("Последовательности.*"); + Инфо.Назначение.Добавить("ПланыВидовХарактеристик.*"); + Инфо.Назначение.Добавить("ПланыСчетов.*"); + Инфо.Назначение.Добавить("ПланыВидовРасчета.*"); + Инфо.Назначение.Добавить("РегистрыСведений.*"); + Инфо.Назначение.Добавить("РегистрыНакопления.*"); + Инфо.Назначение.Добавить("РегистрыБухгалтерии.*"); + Инфо.Назначение.Добавить("РегистрыРасчета.*"); + Инфо.Назначение.Добавить("БизнесПроцессы.*"); + Инфо.Назначение.Добавить("Задачи.*"); + + Колонки = Инфо.Команды.Колонки; + ТипСтрока = Новый ОписаниеТипов("Строка"); + Колонки.Добавить("Представление", ТипСтрока); + Колонки.Добавить("Идентификатор", ТипСтрока); + Колонки.Добавить("Использование", ТипСтрока); + Колонки.Добавить("Модификатор", ТипСтрока); + Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); + + // Единственная команда, что делать - определяем по типу переданного + Команда = Инфо.Команды.Добавить(); + Команда.Представление = НСтр("ru='Редактирование регистрации изменений объекта'"); + Команда.Идентификатор = "ОткрытьФормуРедактированияРегистрации"; + Команда.Использование = "ОткрытиеФормы"; + + Возврат Инфо; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// + +// +// Копирует отбор компоновки данных +// +Процедура СкопироватьОтборКомпоновкиДанных(ГруппаПриемник, ГруппаИсточник) + + КоллекцияИсточник = ГруппаИсточник.Элементы; + КоллекцияПриемник = ГруппаПриемник.Элементы; + Для Каждого Элемент Из КоллекцияИсточник Цикл + ТипЭлемента = ТипЗнч(Элемент); + НовыйЭлемент = КоллекцияПриемник.Добавить(ТипЭлемента); + + ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент); + Если ТипЭлемента=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + СкопироватьОтборКомпоновкиДанных(НовыйЭлемент, Элемент) + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Выполняет непосредственное действие с конечным объектом +// +Процедура ВыполнитьКомандуРегистрацииОбъекта(Команда, Узел, ОбъектРегистрации) + + Если ТипЗнч(Команда)=Тип("Булево") Тогда + Если Команда Тогда + // Регистрация + Если НастройкаВариантНомераСообщения=1 Тогда + // Как отправленного + Команда = 1 + Узел.НомерОтправленного; + Иначе + // Как нового + ПланыОбмена.ЗарегистрироватьИзменения(Узел, ОбъектРегистрации); + КонецЕсли; + Иначе + // Отмена регистрации + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, ОбъектРегистрации); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Команда)=Тип("Число") Тогда + // Одиночная регистрация с указанным номером сообщения + ПланыОбмена.ЗарегистрироватьИзменения(Узел, ОбъектРегистрации); + Если Команда>0 Тогда + Выборка = ПланыОбмена.ВыбратьИзменения(Узел, Команда, ОбъектРегистрации); + Пока Выборка.Следующий() Цикл + // Выбираем изменения для простановки номера сообщения обмена данными + ; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Возвращает управляемую форму, которой принадлежит элемент +// +Функция ФормаЭлементаФормы(ЭлементФормы) + Результат = ЭлементФормы; + ТипыФормы = Новый ОписаниеТипов("УправляемаяФорма"); + Пока Не ТипыФормы.СодержитТип(ТипЗнч(Результат)) Цикл + Результат = Результат.Родитель; + КонецЦикла; + Возврат Результат; +КонецФункции + +// Внутренняя для формирования группы метаданных (например справочников) в дереве метаданных +// +Процедура СформироватьУровеньМетаданных(ТекущийНомерСтроки, Параметры, ИндексКартинки, ИндексКартинкиУзлов, ДобавлятьПодчиненные, ИмяМета, ПредставлениеМета) + + ПредставленияУровня = Новый Массив; + Авторегистрации = Новый Массив; + ИменаУровня = Новый Массив; + + ВсеСтроки = Параметры.Строки; + МетаПлан = Параметры.ПланОбмена; + + СтрокаГруппа = ВсеСтроки.Добавить(); + СтрокаГруппа.ИдентификаторСтроки = ТекущийНомерСтроки; + + СтрокаГруппа.МетаПолноеИмя = ИмяМета; + СтрокаГруппа.Наименование = ПредставлениеМета; + СтрокаГруппа.ИндексКартинки = ИндексКартинки; + + Строки = СтрокаГруппа.Строки; + БылиПодчиненные = Ложь; + + Для Каждого Мета Из Метаданные[ИмяМета] Цикл + + Если МетаПлан=Неопределено Тогда + // Без учета плана обмена + БылиПодчиненные = Истина; + МетаПолноеИмя = Мета.ПолноеИмя(); + Наименование = Мета.Представление(); + Если ДобавлятьПодчиненные Тогда + НовСтрока = Строки.Добавить(); + НовСтрока.МетаПолноеИмя = МетаПолноеИмя; + НовСтрока.Наименование = Наименование ; + НовСтрока.ИндексКартинки = ИндексКартинкиУзлов; + + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + НовСтрока.ИдентификаторСтроки = ТекущийНомерСтроки; + КонецЕсли; + ИменаУровня.Добавить(МетаПолноеИмя); + ПредставленияУровня.Добавить(Наименование); + + Иначе + Элемент = МетаПлан.Состав.Найти(Мета); + Если Элемент<>Неопределено Тогда + БылиПодчиненные = Истина; + МетаПолноеИмя = Мета.ПолноеИмя(); + Наименование = Мета.Представление(); + Авторегистрация = ?(Элемент.Авторегистрация=АвтоРегистрацияИзменений.Запретить, 1, 2); + Если ДобавлятьПодчиненные Тогда + НовСтрока = Строки.Добавить(); + НовСтрока.МетаПолноеИмя = МетаПолноеИмя; + НовСтрока.Наименование = Наименование ; + НовСтрока.ИндексКартинки = ИндексКартинкиУзлов; + НовСтрока.Авторегистрация = Авторегистрация; + + ТекущийНомерСтроки = ТекущийНомерСтроки + 1; + НовСтрока.ИдентификаторСтроки = ТекущийНомерСтроки; + КонецЕсли; + ИменаУровня.Добавить(МетаПолноеИмя); + ПредставленияУровня.Добавить(Наименование); + Авторегистрации.Добавить(Авторегистрация); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если БылиПодчиненные Тогда + Строки.Сортировать("Наименование"); + Параметры.СтруктураИмен.Вставить(ИмяМета, ИменаУровня); + Параметры.СтруктураПредставлений.Вставить(ИмяМета, ПредставленияУровня); + Если Не ДобавлятьПодчиненные Тогда + Параметры.СтруктураАвторегистрации.Вставить(ИмяМета, Авторегистрации); + КонецЕсли; + Иначе + // Виды объектов без регистрации не вставляем + ВсеСтроки.Удалить(СтрокаГруппа); + КонецЕсли; + +КонецПроцедуры + +// Накапливаем результаты регистраций +// +Процедура ДобавитьРезультаты(Приемник, Источник) + Приемник.Успешно = Приемник.Успешно + Источник.Успешно; + Приемник.Всего = Приемник.Всего + Источник.Всего; +КонецПроцедуры + +// Возвращает массив дополнительно регистрируемых объектов согласно флагам +// +Функция ПолучитьДополнительныеОбъектыРегистрации(ОбъектРегистрации, УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы=Неопределено) + Результат = Новый Массив; + + // Смотрим на глобальные параметры + Если (Не НастройкаАвторегистрацияДвижений) И (Не НастройкаАвторегистрацияПоследовательностей) Тогда + Возврат Результат; + КонецЕсли; + + ТипЗначения = ТипЗнч(ОбъектРегистрации); + НаВходеИмя = ТипЗначения=Тип("Строка"); + Если НаВходеИмя Тогда + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации); + ИначеЕсли ТипЗначения=Тип("Структура") Тогда + Описание = ХарактеристикиПоМетаданным(ИмяТаблицы); + Если Описание.ЭтоПоследовательность Тогда + Возврат Результат; + КонецЕсли; + Иначе + Описание = ХарактеристикиПоМетаданным(ОбъектРегистрации.Метаданные()); + КонецЕсли; + + МетаОбъект = Описание.Метаданные; + + // Коллекцию рекурсивно + Если Описание.ЭтоКоллекция Тогда + Для Каждого Мета Из МетаОбъект Цикл + ДополнительныйНабор = ПолучитьДополнительныеОбъектыРегистрации(Мета.ПолноеИмя(), УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы); + Для Каждого Элемент Из ДополнительныйНабор Цикл + Результат.Добавить(Элемент); + КонецЦикла; + КонецЦикла; + Возврат Результат; + КонецЕсли; + + // Одиночное + СоставУзла = УзелКонтроляАвторегистрации.Метаданные().Состав; + + // Документы. Могут влиять на последовательности и движения + Если Метаданные.Документы.Содержит(МетаОбъект) Тогда + + Если НастройкаАвторегистрацияДвижений Тогда + Для Каждого Мета Из МетаОбъект.Движения Цикл + + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава<>Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить) Тогда + Если НаВходеИмя Тогда + Результат.Добавить(Мета); + Иначе + Описание = ХарактеристикиПоМетаданным(Мета); + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Набор.Отбор.Регистратор.Установить(ОбъектРегистрации); + Набор.Прочитать(); + Результат.Добавить(Набор); + // И проверим полученный набор рекурсивно + ДополнительныйНабор = ПолучитьДополнительныеОбъектыРегистрации(Набор, УзелКонтроляАвторегистрации, БезАвторегистрации, ИмяТаблицы); + Для Каждого Элемент Из ДополнительныйНабор Цикл + Результат.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + Если НастройкаАвторегистрацияПоследовательностей Тогда + Для Каждого Мета Из Метаданные.Последовательности Цикл + + Описание = ХарактеристикиПоМетаданным(Мета); + Если Мета.Документы.Содержит(МетаОбъект) Тогда + // Последовательность регистрируется для данного документа + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава<>Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить) Тогда + // Регистрируется на этом узле + Если НаВходеИмя Тогда + Результат.Добавить(Мета); + Иначе + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Набор.Отбор.Регистратор.Установить(ОбъектРегистрации); + Набор.Прочитать(); + Результат.Добавить(Набор); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Записи регистров. Могут влиять на последовательности + ИначеЕсли НастройкаАвторегистрацияПоследовательностей И ( + Метаданные.РегистрыСведений.Содержит(МетаОбъект) + Или Метаданные.РегистрыНакопления.Содержит(МетаОбъект) + Или Метаданные.РегистрыБухгалтерии.Содержит(МетаОбъект) + Или Метаданные.РегистрыРасчета.Содержит(МетаОбъект) + ) Тогда + Для Каждого Мета Из Метаданные.Последовательности Цикл + Если Мета.Движения.Содержит(МетаОбъект) Тогда + // Последовательность регистрируется для набора записей + ЭлементСостава = СоставУзла.Найти(Мета); + Если ЭлементСостава<>Неопределено И (БезАвторегистрации Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить) Тогда + Результат.Добавить(Мета); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Преобразует строку в число +// +// Параметры: +// Текст - Строка - строковое представление числа +// +// Возвращаемое значение: +// Число - преобразованная строка +// Неопределено - если строка не может быть преобразована +// +Функция СтрокаВЧисло(Знач Текст) + ТекстЧисла = СокрЛП(СтрЗаменить(Текст, Символы.НПП, "")); + Позиция = 1; + + Пока Сред(ТекстЧисла, Позиция, 1)="0" Цикл + Позиция = Позиция + 1; + КонецЦикла; + + ТекстЧисла = Сред(ТекстЧисла, Позиция); + + // Проверяем на результат по умолчанию + Если ТекстЧисла="0" Тогда + Результат = 0; + Иначе + ТипЧисло = Новый ОписаниеТипов("Число"); + Результат = ТипЧисло.ПривестиЗначение(ТекстЧисла); + Если Результат=0 Тогда + // Результат по умолчанию обработан выше, это ошибка преобразования + Результат = Неопределено; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг того, что БСП в текущей конфигурации обеспечивает функционал +// +Функция БСП_ДоступнаТребуемаяВерсия() Экспорт + + // Ищем БСП 2.1.2 и старше + Попытка + ЧастиВерсии = Вычислить("СтандартныеПодсистемыСервер.ВерсияБиблиотеки()"); + Исключение + // Отсутствует или поломан метод определения версии, считаем БСП недоступной + Возврат Ложь; + КонецПопытки; + + ЧастиВерсии = СтрЗаменить(ЧастиВерсии, ".", Символы.ПС); + + НужнаяВерсия = Новый Массив; + НужнаяВерсия.Добавить(2); + НужнаяВерсия.Добавить(1); + НужнаяВерсия.Добавить(2); + + Для Индекс=0 По НужнаяВерсия.ВГраница() Цикл + ЧастьТекущейВерсии = СтрокаВЧисло(СтрПолучитьСтроку(ЧастиВерсии, Индекс + 1)); + ЧастьНужнойВерсии = НужнаяВерсия[Индекс]; + + Если ЧастьТекущейВерсии=Неопределено Тогда + Возврат Ложь; + ИначеЕсли ЧастьТекущейВерсии>ЧастьНужнойВерсии Тогда + Возврат Истина; + ИначеЕсли ЧастьТекущейВерсии<ЧастьНужнойВерсии Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +// Возвращает флаг контроля объекта в БСП +// +Функция БСП_КонтрольВыгрузкиОбъекта(Узлы, ОбъектРегистрации) + Отправка = ОтправкаЭлементаДанных.Авто; + Выполнить("ОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узлы)"); + Возврат Отправка<>ОтправкаЭлементаДанных.Удалить; +КонецФункции + +// Проверяет ссылку на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийСсылки(Узел, Ссылка, БезУчетаАвторегистрации=Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла=Неопределено, Неопределено, СоставУзла.Найти(Ссылка.Метаданные())); + Если ЭлементСостава=Неопределено Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить Тогда + // Сам объект + Результат.Всего = 1; + ОбъектРегистрации = Ссылка.ПолучитьОбъект(); + // Для битых ссылок ОбъектРегистрации будет Неопределено + Если ОбъектРегистрации=Неопределено Или БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Ссылка); + Результат.Успешно = 1; + КонецЕсли; + ОбъектРегистрации = Неопределено; + КонецЕсли; + + // Смотрим опциональные варианты + Если Результат.Успешно>0 Тогда + Для Каждого Элемент Из ПолучитьДополнительныеОбъектыРегистрации(Ссылка, Узел, БезУчетаАвторегистрации) Цикл + Результат.Всего = Результат.Всего + 1; + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Элемент) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Элемент); + Результат.Успешно = Результат.Успешно + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет набор значений на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийНабора(Узел, СтруктураПолей, Описание, БезУчетаАвторегистрации=Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла=Неопределено, Неопределено, СоставУзла.Найти(Описание.Метаданные)); + Если ЭлементСостава=Неопределено Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить Тогда + Результат.Всего = 1; + + Набор = Описание.Менеджер.СоздатьНаборЗаписей(); + Для Каждого КлючЗначение Из СтруктураПолей Цикл + Набор.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + Набор.Прочитать(); + + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Набор) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Набор); + Результат.Успешно = 1; + КонецЕсли; + + КонецЕсли; + + // Смотрим опциональные варианты + Если Результат.Успешно>0 Тогда + Для Каждого Элемент Из ПолучитьДополнительныеОбъектыРегистрации(Набор, Узел, БезУчетаАвторегистрации) Цикл + Результат.Всего = Результат.Всего + 1; + Если БСП_КонтрольВыгрузкиОбъекта(Узел, Элемент) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, Элемент); + Результат.Успешно = Результат.Успешно + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет константу на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийКонстанты(Узел, Описание, БезУчетаАвторегистрации=Истина) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если БезУчетаАвторегистрации Тогда + СоставУзла = Неопределено; + Иначе + СоставУзла = Узел.Метаданные().Состав; + КонецЕсли; + + ЭлементСостава = ?(СоставУзла=Неопределено, Неопределено, СоставУзла.Найти(Описание.Метаданные)); + Если ЭлементСостава=Неопределено Или ЭлементСостава.Авторегистрация=АвтоРегистрацияИзменений.Разрешить Тогда + Результат.Всего = 1; + ОбъектРегистрации = Описание.Менеджер.СоздатьМенеджерЗначения(); + Если БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Тогда + ВыполнитьКомандуРегистрацииОбъекта(Истина, Узел, ОбъектРегистрации); + Результат.Успешно = 1; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет набор метаданных на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийМетаданных(Узел, Описание, БезУчетаАвторегистрации) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + Если Описание.ЭтоКоллекция Тогда + Для Каждого МетаВид Из Описание.Метаданные Цикл + ТекОписание = ХарактеристикиПоМетаданным(МетаВид); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийМетаданных(Узел, ТекОписание, БезУчетаАвторегистрации) ); + КонецЦикла; + Иначе; + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийОбъектаМетаданных(Узел, Описание, БезУчетаАвторегистрации) ); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Проверяет объект метаданных на возможность регистрации изменения в БСП. +// Возвращает структуру с полями "Всего" и "Успешно", описывающей количества регистраций +// +Функция БСП_РегистрацияИзмененийОбъектаМетаданных(Узел, Описание, БезУчетаАвторегистрации) + + Результат = Новый Структура("Всего, Успешно", 0, 0); + + ЭлементСостава = Узел.Метаданные().Состав.Найти(Описание.Метаданные); + Если ЭлементСостава=Неопределено Тогда + // Вообще не регистрируется + Возврат Результат; + КонецЕсли; + + Если (Не БезУчетаАвторегистрации) И ЭлементСостава.Авторегистрация<>АвтоРегистрацияИзменений.Разрешить Тогда + // Отсечение по авторегистрации + Возврат Результат; + КонецЕсли; + + ТекИмяТаблицы = Описание.ИмяТаблицы; + Если Описание.ЭтоКонстанта Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийКонстанты(Узел, Описание) ); + Возврат Результат; + + ИначеЕсли Описание.ЭтоСсылка Тогда + ПоляИзмерений = "Ссылка"; + + ИначеЕсли Описание.ЭтоНабор Тогда + ПоляИзмерений = ""; + Для Каждого Строка Из ИзмеренияНабораЗаписей(ТекИмяТаблицы) Цикл + ПоляИзмерений = ПоляИзмерений + "," + Строка.Имя + КонецЦикла; + ПоляИзмерений = Сред(ПоляИзмерений, 2); + + Иначе + Возврат Результат; + КонецЕсли; + + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | " + ?(ПустаяСтрока(ПоляИзмерений), "*", ПоляИзмерений) + " + |ИЗ + | " + ТекИмяТаблицы + " + |"); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если Описание.ЭтоНабор Тогда + Данные = Новый Структура(ПоляИзмерений); + ЗаполнитьЗначенияСвойств(Данные, Выборка); + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийНабора(Узел, Данные, Описание) ); + ИначеЕсли Описание.ЭтоСсылка Тогда + ДобавитьРезультаты(Результат, БСП_РегистрацияИзмененийСсылки(Узел, Выборка.Ссылка, БезУчетаАвторегистрации) ); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +#КонецЕсли diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo new file mode 100644 index 000000000..1ee1356b9 --- /dev/null +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/РегистрацияИзмененийДляОбменаДанными.mdo @@ -0,0 +1,178 @@ + + + + + + + РегистрацияИзмененийДляОбменаДанными + + ru + Регистрация изменений для обмена данными + + true + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Form.Форма + DataProcessor.РегистрацияИзмененийДляОбменаДанными.Form.СообщениеОбОбычномИнтерфейсе + + НастройкаАвторегистрацияПоследовательностей + + ru + Авторегистрация последовательностей + + + Boolean + + + ru + Авторегистрация последовательностей + + + + + + НастройкаАвторегистрацияДвижений + + ru + Авторегистрация движений + + + Boolean + + + ru + Авторегистрация движений + + + + + + НастройкаАдресВнешнейОбработкиЗапросов + + ru + Адрес внешней обработки запросов + + + String + + + + ru + Адрес внешней обработки запросов + + + + + + НастройкаВариантНомераСообщения + + ru + Настройка вариант номера сообщения + + + Number + + 10 + + + + + + + НастройкаКонтрольВыгрузкиОбъектов + + ru + Конфигурация может контролировать выгрузку объектов + + При использовании в составе БСП 2.1.2 и старше + + Boolean + + + + + + КонфигурацияПоддерживаетБСП + + ru + Конфигурация поддерживает БСП + + Вычисляется при чтении настроек, ограничивает варианты настроек + + Boolean + + + + + + ВыборУзлаПланаОбмена + + ru + Выбор узла плана обмена + + PersonalComputer + MobileDevice + + + Форма + + ru + Регистрация изменений для обмена данными + + PersonalComputer + MobileDevice + + + НомераСообщенийУзлаПланаОбмена + + ru + Номера сообщений узла плана обмена + + PersonalComputer + MobileDevice + + + СообщениеОбОбычномИнтерфейсе + + ru + Сообщение об обычном интерфейсе + + Ordinary + PersonalComputer + MobileDevice + + + ВыборКонстанты + + ru + Выбор константы + + PersonalComputer + MobileDevice + + + ВыборОбъектовОтбором + + ru + Выбор объектов отбором + + PersonalComputer + MobileDevice + + + УзлыРегистрацииОбъекта + + ru + Узлы регистрации объекта + + PersonalComputer + MobileDevice + + + Настройки + + ru + Настройки + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form index b24d142f0..647620e6c 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form @@ -737,6 +737,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel Close @@ -748,7 +752,7 @@ SaveValues Yes 75 - DontBlock + LockOwner Use true true diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl index 0e0e4b873..9c2635596 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl @@ -21,6 +21,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + ПрекратитьРаботуСистемы(Ложь); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -29,9 +36,7 @@ ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); - ОткрытьФормуМодально( - "Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", - ПараметрыФормы); + ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -48,7 +53,7 @@ &НаКлиенте Процедура ПрекратитьВыполнениеИЗавершитьСеансВыполнить() - Закрыть(); + ПрекратитьРаботуСистемы(Ложь); КонецПроцедуры @@ -64,7 +69,10 @@ Результат = ВыполнитьРегламентныеЗаданияСервер(ПараметрЗапуска); Если Результат.ПрекратитьВыполнение Тогда - Закрыть(?(Результат.Перезапустить, "Перезапустить", Неопределено)); + Если Результат = "Перезапустить" Тогда + ПрекратитьРаботуСистемы(Истина, " /C""" + ПараметрЗапуска + """"); + КонецЕсли; + ПрекратитьРаботуСистемы(Ложь); КонецЕсли; КонецЕсли; @@ -145,4 +153,3 @@ ЗначениеВРеквизитФормы(НоваяТаблицаЗаданий, "ТаблицаРегламентныхЗаданий"); КонецПроцедуры - diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html index a795fe545..c2d25d049 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl index ce9d6b4a8..7403c7b05 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl @@ -8,7 +8,7 @@ Возврат; КонецЕсли; - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если НЕ РегламентныеЗаданияСлужебный.ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий() Тогда Отказ = Истина; КонецЕсли; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index 83dedb838..162879b0f 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html @@ -1,4 +1,4 @@ - +

            В этой форме можно посмотреть и изменить различные свойства регламентного задания.

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

            1. Группа свойств "Основное".

            diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index 2cef7b885..37034e6b5 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -22,7 +22,8 @@ ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'"); КонецЕсли; - Элементы.ИмяПользователя.Доступность = НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая(); + Элементы.ИмяПользователя.Доступность = + НЕ РегламентныеЗаданияСлужебный.ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий(); Если Действие = "Добавить" Тогда diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index 07fcb7f68..37f9b35ec 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -3119,10 +3119,10 @@ - ИнформационнаяБазаФайловая + ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий <key>ru</key> - <value>Информационная база файловая</value> + <value>Информационная база файловая без менеджера фоновых заданий</value> 16 diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 27189b806..cec6faf2c 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -15,11 +15,13 @@ |выполняется только администраторами.'"); КонецЕсли; - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий = + РегламентныеЗаданияСлужебный.ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий(); + ПустойИдентификатор = Строка(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); ТекстНеОпределено = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); - Если ИнформационнаяБазаФайловая Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий Тогда Элементы.ИмяПользователя.Видимость = Ложь; Если НЕ СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда Элементы.ТаблицаРегламентныеЗаданияНастройкаВыполнения.Видимость = Истина; @@ -212,7 +214,7 @@ ПроцедураУжеВыполняется = Неопределено; ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); - Если ИнформационнаяБазаФайловая Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий Тогда МоментЗапуска = Неопределено; МоментОкончания = Неопределено; @@ -227,8 +229,7 @@ НачалоСеанса, , ОбновитьВсе, - ПроцедураУжеВыполняется - ); + ПроцедураУжеВыполняется); Если ПроцедураВыполнена Тогда ПоказатьОповещениеПользователя( @@ -248,9 +249,7 @@ | уже выполняется в сеансе %2, открытом %3.'"), ТекущиеДанные.Наименование, Строка(НомерСеанса), - Строка(НачалоСеанса) - ) - ); + Строка(НачалоСеанса))); Иначе Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить( Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); @@ -295,9 +294,7 @@ | уже выполняется в фоновом задании ""%2"", начатом %3.'"), ТекущиеДанные.Наименование, ПредставлениеФоновогоЗадания, - Строка(МоментЗапуска) - ) - ); + Строка(МоментЗапуска))); Иначе Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить( Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); @@ -312,8 +309,7 @@ ЗаголовокТекстаПроОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Задания выполнены с ошибками (%1 из %2)'"), Формат(КоличествоОшибок, "ЧГ="), - Формат(ВыделенныеСтроки.Количество(), "ЧГ=") - ); + Формат(ВыделенныеСтроки.Количество(), "ЧГ=")); ТекстВсехОшибок = Новый ТекстовыйДокумент; ТекстВсехОшибок.ДобавитьСтроку(ЗаголовокТекстаПроОшибки + ":"); @@ -356,9 +352,7 @@ ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); - ОткрытьФормуМодально( - "Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", - ПараметрыФормы); + ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -518,7 +512,7 @@ ПараметрыФормы.Вставить("Идентификатор", Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); ПараметрыФормы.Вставить("СвойстваФоновогоЗадания", ЗначенияТекущихДанных); - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.ФоновоеЗадание", ПараметрыФормы); + ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.ФоновоеЗадание", ПараметрыФормы, ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -650,7 +644,7 @@ ОбновитьВсе = Ложь, ПроцедураУжеВыполняется = Неопределено) - Если ИнформационнаяБазаФайловая Тогда + Если ИнформационнаяБазаФайловаяБезМенеджераФоновыхЗаданий Тогда МоментЗапуска = ТекущаяДатаСеанса(); КонецЕсли; @@ -708,7 +702,7 @@ ПараметрыФормы.Вставить("Идентификатор", Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор); ПараметрыФормы.Вставить("Действие", Действие); - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.РегламентноеЗадание", ПараметрыФормы); + ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.РегламентноеЗадание", ПараметрыФормы, ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -736,10 +730,33 @@ ТекущиеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); Таблица = ТаблицаРегламентныеЗадания; + ЗаданияВМоделиСервиса = Новый Соответствие; + ПодсистемаРаботаВМоделиСервиса = Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.Найти("РаботаВМоделиСервиса"); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() И ПодсистемаРаботаВМоделиСервиса <> Неопределено Тогда + Для каждого ОбъектМетаданных Из Метаданные.РегламентныеЗадания Цикл + Если ПодсистемаРаботаВМоделиСервиса.Состав.Содержит(ОбъектМетаданных) Тогда + ЗаданияВМоделиСервиса.Вставить(ОбъектМетаданных.Имя, Истина); + Продолжить; + КонецЕсли; + Для каждого Подсистема Из ПодсистемаРаботаВМоделиСервиса.Подсистемы Цикл + Если Подсистема.Состав.Содержит(ОбъектМетаданных) Тогда + ЗаданияВМоделиСервиса.Вставить(ОбъектМетаданных.Имя, Истина); + Продолжить; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + Если ИдентификаторРегламентногоЗадания = Неопределено Тогда Индекс = 0; Для каждого Задание ИЗ ТекущиеЗадания Цикл + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ЗаданияВМоделиСервиса[Задание.Метаданные.Имя] <> Неопределено Тогда + + Продолжить; + КонецЕсли; + Идентификатор = Строка(Задание.УникальныйИдентификатор); Если Индекс >= Таблица.Количество() diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html index 9983b0f26..547488046 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html @@ -1,4 +1,4 @@ - +

            В этой форме можно посмотреть различные свойства фонового задания.

            1. Группа свойств "Основное".

            diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index 4788315b6..c095b2706 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            1. Контроль выполнения регламентных заданий.
            2. Регламентные задания. @@ -10,7 +10,7 @@

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

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

              -

              2. Регламентные задания

              +

              2. Регламентные задания

            Наименование свойства
            @@ -28,7 +28,7 @@

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

            Команда Описание
            Обновить Обновляет список регламентных заданий (и список фоновых с учетом заданного отбора, т.к. списки связаны).
            Добавить
            Запустить отдельный сеанс для выполнения регламентных заданий

            Только для файловой ИБ. Запускает отдельный сеанс для выполнения регламентных заданий. Фактически, производится запуск отдельного сеанса с параметрами, такими, что сеанс открывается только для выполнения регламентных заданий, считает текущий сеанс родительским и при его завершении автоматически закрывается.

             

            -

            3. Фоновые задания

            +

            3. Фоновые задания

            diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/РегламентныеИФоновыеЗадания.mdo b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/РегламентныеИФоновыеЗадания.mdo index 14760b825..68b11464e 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/РегламентныеИФоновыеЗадания.mdo +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/РегламентныеИФоновыеЗадания.mdo @@ -11,6 +11,7 @@ trueDataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентныеИФоновыеЗадания + true ru @@ -22,7 +23,6 @@ ru Регламентные и фоновые задания - true PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html index f118abbdd..e927b27c4 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Обязательное заполнение: Путь к файлу с резервной копией. В данном поле необходимо выбрать файл, из которого будет восстановлена информационная база. Примечание: в данном помощнике при восстановлении данных можно использовать только архивы формата .zip, содержащие один файл - файл информационной базы 1cv8.cd. Лучше всего использовать архивы, созданные помощником создания резервной копии.

            Также предоставляет возможность сделать резервную копию базы перед ее восстановлением - таким образом, можно сохранить те данные, которые имеются на данный момент. Для формирования резервной копии необходимо установить флажок "Сделать резервную копию перед восстановлением данных". Кроме того, потребуется указать каталог, куда будет сохранена резервная копия.

            diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl index df178acc8..13c9e0d4f 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl @@ -3,11 +3,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'В клиент-серверном варианте работы резервное копирование следует выполнять сторонними средствами (средствами СУБД).'"); КонецЕсли; @@ -16,6 +19,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Резервное копирование программы недоступно в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + Возврат; + КонецЕсли; + + АдминистраторИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; + ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -29,20 +47,11 @@ Процедура ПриЗакрытии() ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); - ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); + ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - АдминистраторИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; - ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); - -КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -66,14 +75,14 @@ &НаКлиенте Процедура НадписьСписокДействий1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СписокПользователейНажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры @@ -87,7 +96,7 @@ &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрации1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтаФорма); КонецПроцедуры @@ -205,7 +214,7 @@ "Ошибка", Строка(ТекущаяДата) + " " + ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код ошибки regsvr32: %1. - | (Код ошибки 5 означает, что недостаточно прав доступа. Выполните командну от имени пользователя с правами администратора на локальной машине.) + | (Код ошибки 5 означает, что недостаточно прав доступа. Выполните команду от имени пользователя с правами администратора на локальной машине.) | |Текст команды: |%2'"), СтрокаФайла, ТекстКоманды)); @@ -226,7 +235,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -263,7 +271,7 @@ КонецПроцедуры -// Подключает обработкчик ожидания истечения таймаута перед принудительным стартом резервного копирования/восстановления данных. +// Подключает обработчик ожидания истечения таймаута перед принудительным стартом резервного копирования/восстановления данных. &НаКлиенте Процедура УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования() @@ -340,7 +348,7 @@ КонецЕсли; Если (Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных И ПустаяСтрока(Объект.КаталогСРезервнымиКопиями)) Тогда - ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); + ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); Попытка ТестовыйФайл = Новый ЗаписьXML; ТестовыйФайл.ОткрытьФайл(Объект.КаталогСРезервнымиКопиями + "/test.test1С"); @@ -357,7 +365,7 @@ КонецЕсли; Если Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных И НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда - ТекстСообщения = НСтр("ru = 'Выбран несуществующий каталог для резервных копий.'"); + ТекстСообщения = НСтр("ru = 'Выбран несуществующий каталог для резервных копий.'"); Возврат Ложь; КонецЕсли; @@ -596,10 +604,10 @@ Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]",ПодготовитьТекст(Объект.ФайлЗагрузкиРезервнойКопии)); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]",ПодготовитьТекст(Объект.ФайлЗагрузкиРезервнойКопии)); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ПроводитьДопРезервноеКопирование]",?(Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных,"true","false")); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(СтруктураПараметров.ИнформационнаяБазаФайловая, "false", "true")); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form index 353f4561d..329f2ed9b 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Form.form @@ -23,7 +23,7 @@ НадписьДатаПроведенияПоследнегоРезервногоКопированияРасширеннаяПодсказка - 291 + 293 Label true true @@ -62,7 +62,7 @@ ГруппаИнформацииОПоследнемРезервномКопированииРасширеннаяПодсказка - 290 + 292 Label true true @@ -93,7 +93,7 @@ НадписьПроведенияРезервногоКопированияРасширеннаяПодсказка - 292 + 294 Label true true @@ -135,7 +135,7 @@ ПереключательИнтерактивногоРезервногоКопированияРасширеннаяПодсказка - 294 + 296 Label true true @@ -200,7 +200,7 @@ ГруппаПереключателяРасширеннаяПодсказка - 293 + 295 Label true true @@ -234,7 +234,7 @@ НадписьКаталогРасширеннаяПодсказка - 297 + 299 Label true true @@ -268,7 +268,7 @@ None ПутьККаталогуАрхивовРасширеннаяПодсказка - 298 + 300 Label true true @@ -316,7 +316,7 @@ ГруппаКаталогаРасширеннаяПодсказка - 296 + 298 Label true true @@ -347,7 +347,7 @@ НадписьРекомендацииПоВыборуПутиРасширеннаяПодсказка - 300 + 302 Label true true @@ -394,7 +394,7 @@ АдминистраторИБРасширеннаяПодсказка - 304 + 306 Label true true @@ -436,7 +436,7 @@ ПарольАдминистратораИБРасширеннаяПодсказка - 306 + 308 Label true true @@ -483,7 +483,7 @@ false ГруппаАвторизацииПерваяРасширеннаяПодсказка - 303 + 305 Label true true @@ -523,7 +523,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка - 310 + 312 Label true true @@ -561,7 +561,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 309 + 311 Label true true @@ -597,7 +597,7 @@ НадписьРаботыПользователейРасширеннаяПодсказка - 312 + 314 Label true true @@ -633,7 +633,7 @@ НадписьСписокДействийРасширеннаяПодсказка - 313 + 315 Label true true @@ -676,7 +676,7 @@ ГруппаНадписейРасширеннаяПодсказка - 311 + 313 Label true true @@ -709,7 +709,7 @@ АктивныеПользователиРасширеннаяПодсказка - 308 + 310 Label true true @@ -740,7 +740,7 @@ НадписьНетАктивныхПользователейРасширеннаяПодсказка - 314 + 316 Label true true @@ -775,7 +775,7 @@ СтраницаКопированиеСейчасРасширеннаяПодсказка - 302 + 304 Label true true @@ -815,7 +815,7 @@ ПериодОтложенногоОповещенияРасширеннаяПодсказка - 318 + 320 Label true true @@ -860,7 +860,7 @@ None ЕдиницаИзмеренияПериодаОповещенияРасширеннаяПодсказка - 320 + 322 Label true true @@ -914,7 +914,7 @@ Группа3РасширеннаяПодсказка - 317 + 319 Label true true @@ -948,7 +948,7 @@ НадписьПояснениеПараметровКопированияРасширеннаяПодсказка - 323 + 325 Label true true @@ -979,7 +979,7 @@ Группа2РасширеннаяПодсказка - 322 + 324 Label true true @@ -1012,7 +1012,7 @@ Right ВыполнитьПриЗавершенииРаботыРасширеннаяПодсказка - 324 + 326 Label true true @@ -1047,7 +1047,7 @@ ГруппаПериодаОтложенногоКопированияРасширеннаяПодсказка - 316 + 318 Label true true @@ -1082,7 +1082,7 @@ АдминистраторИБ1РасширеннаяПодсказка - 327 + 329 Label true true @@ -1124,7 +1124,7 @@ ПарольАдминистратораИБ1РасширеннаяПодсказка - 329 + 331 Label true true @@ -1170,7 +1170,7 @@ false ГруппаАвторизацииВтораяРасширеннаяПодсказка - 326 + 328 Label true true @@ -1205,7 +1205,7 @@ СтраницаКопированиеПозднееРасширеннаяПодсказка - 315 + 317 Label true true @@ -1238,7 +1238,7 @@ АдминистраторИБ2РасширеннаяПодсказка - 333 + 335 Label true true @@ -1280,7 +1280,7 @@ ПарольАдминистратораИБ2РасширеннаяПодсказка - 335 + 337 Label true true @@ -1326,7 +1326,7 @@ false ГруппаАвторизацииТретьяРасширеннаяПодсказка - 332 + 334 Label true true @@ -1356,7 +1356,7 @@ Декорация4РасширеннаяПодсказка - 337 + 339 Label true true @@ -1391,7 +1391,7 @@ СтраницаПустаяРасширеннаяПодсказка - 331 + 333 Label true true @@ -1420,7 +1420,7 @@ ПараметрыИнтерактивногоРезервногоКопированияРасширеннаяПодсказка - 301 + 303 Label true true @@ -1443,7 +1443,7 @@ Декорация1РасширеннаяПодсказка - 338 + 340 Label true true @@ -1478,7 +1478,7 @@ НадписьПояснениеКИнтерактивномуКопированиюРасширеннаяПодсказка - 339 + 341 Label true true @@ -1513,7 +1513,7 @@ СтраницаВыполненияРезервногоКопированияРасширеннаяПодсказка - 289 + 291 Label true true @@ -1547,7 +1547,7 @@ НадписьПоясненияРасширеннаяПодсказка - 342 + 344 Label true true @@ -1591,7 +1591,7 @@ ГруппаПоясненияРасширеннаяПодсказка - 341 + 343 Label true true @@ -1624,7 +1624,7 @@ Декорация5РасширеннаяПодсказка - 345 + 347 Label true true @@ -1662,7 +1662,7 @@ ГруппаКартинкиАктивныхПользователейРасширеннаяПодсказка - 344 + 346 Label true true @@ -1697,7 +1697,7 @@ СписокПользователейРасширеннаяПодсказка - 347 + 349 Label true true @@ -1733,7 +1733,7 @@ КоличествоАктивныхПользователейРасширеннаяПодсказка - 348 + 350 Label true true @@ -1769,7 +1769,7 @@ ГруппаНадписиАктивныхПользователейРасширеннаяПодсказка - 346 + 348 Label true true @@ -1801,7 +1801,7 @@ ГруппаАктивныхПользователейРасширеннаяПодсказка - 343 + 345 Label true true @@ -1833,7 +1833,7 @@ НадписьОтключениеПользователейРасширеннаяПодсказка - 349 + 351 Label true true @@ -1863,7 +1863,7 @@ НадписьВремяОжиданияРезервногоКопированияРасширеннаяПодсказка - 350 + 352 Label true true @@ -1900,7 +1900,7 @@ СтраницаИнформацииИВыполненияРезервногоКопированияРасширеннаяПодсказка - 340 + 342 Label true true @@ -1925,7 +1925,7 @@ 99 <key>ru</key> - <value>Резервное копирование проведено успешно!</value> + <value>Резервное копирование проведено успешно</value> true true @@ -1934,7 +1934,7 @@ НадписьУспешногоКопированияРасширеннаяПодсказка - 353 + 355 Label true true @@ -1953,121 +1953,24 @@ true true - System.SystemFont + System.DefaultGUIFont + 10.0 + true + false + false + false Left - true - true - - true - - - <key>ru</key> - <value>Группа объявления о успешном РК</value> - - - ru - Группа объявления о успешном РК - - - ГруппаОбъявленияОУспешномРКРасширеннаяПодсказка - 352 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаБлагодарностиЗаПользование - 101 - - НадписьБлагодарность - 102 - - <key>ru</key> - <value>Спасибо, что воспользовались помощником резервного копирования базы</value> - - true - true - - true - - - НадписьБлагодарностьРасширеннаяПодсказка - 355 - Label - true - true - - Left - - - - НадписьБлагодарностьКонтекстноеМеню - 103 - true - - Label - true - true - - Left - - - - НадписьОбъясненияПутиКопирования - 207 - - <key>ru</key> - <value>Файл с резервной копией:</value> - - true - true - - true - - - НадписьОбъясненияПутиКопированияРасширеннаяПодсказка - 356 - Label - true - true - - Left - - - - НадписьОбъясненияПутиКопированияКонтекстноеМеню - 208 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - ТекстПути 260 + + <key>ru</key> + <value>Резервная копия базы сохранена на диск</value> + true true @@ -2076,10 +1979,10 @@ ТекстПути - None + Top ТекстПутиРасширеннаяПодсказка - 357 + 356 Label true true @@ -2113,6 +2016,43 @@ Normal + + НадписьИнформацияОВосстановлении + 285 + + <key>ru</key> + <value>Для восстановления данных из резервной копии можно воспользоваться командой "Восстановление из резервной копии" раздела Администрирование.</value> + + true + true + + true + + + НадписьИнформацияОВосстановленииРасширеннаяПодсказка + 358 + Label + true + true + + Left + + + + НадписьИнформацияОВосстановленииКонтекстноеМеню + 286 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true @@ -2120,14 +2060,14 @@ <key>ru</key> - <value>Группа благодарности за пользование</value> + <value>Группа объявления о успешном РК</value> ru - Группа благодарности за пользование + Группа объявления о успешном РК - ГруппаБлагодарностиЗаПользованиеРасширеннаяПодсказка + ГруппаОбъявленияОУспешномРКРасширеннаяПодсказка 354 Label true @@ -2161,7 +2101,7 @@ СтраницаУспешногоВыполненияКопированияРасширеннаяПодсказка - 351 + 353 Label true true @@ -2214,7 +2154,12 @@ true true - System.SystemFont + System.DefaultGUIFont + 10.0 + true + false + false + false Left @@ -3120,7 +3065,7 @@ СтраницыПомощникаРасширеннаяПодсказка - 288 + 290 Label true true @@ -3151,7 +3096,7 @@ НазадРасширеннаяПодсказка - 285 + 287 Label true true @@ -3181,7 +3126,7 @@ ДалееРасширеннаяПодсказка - 286 + 288 Label true true @@ -3211,7 +3156,7 @@ ОтменаРасширеннаяПодсказка - 287 + 289 Label true true diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html index 4b2db74f1..28ba2a1a4 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl index 74233a6e8..39e0c07a4 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -1,42 +1,23 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); - - АдминистраторИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; - Если ТипВызова = 1 или ТипВызова = 2 Тогда - Если ПараметрыРезервногоКопированияИБ.Свойство("ПарольАдминистратораИБ") Тогда - ПарольАдминистратораИБ = ПараметрыРезервногоКопированияИБ.ПарольАдминистратораИБ; - КонецЕсли; - КонецЕсли; - - Если Не ПустаяСтрока(ТекстПути) Тогда - ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ТекущаяСтраница, ТекстПути); - Иначе - ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ТекущаяСтраница); - КонецЕсли; - - УстановитьЗаголовокКнопкиДалее(Истина); - -КонецПроцедуры - &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Возврат; // Отказ устанавливается в ПриОткрытии(). + КонецЕсли; + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'В клиент-серверном варианте работы резервное копирование следует выполнять сторонними средствами (средствами СУБД).'"); КонецЕсли; - + НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); Объект.КодТипаРезервногоКопирования = НастройкиРезервногоКопирования.ВыборПунктаНастройки; - Объект.КодТипаИнтерактивногоРезервногоКопирования = 1; + Объект.КодТипаИнтерактивногоРезервногоКопирования = 1; Объект.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении = Истина; Объект.ПериодХраненияРезервныхКопий = 1; Объект.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий = "Месяц"; @@ -70,7 +51,7 @@ КонецЕсли; Если Параметры.ТипВызова = 2 Тогда - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницыПомощника.ПодчиненныеЭлементы[Параметры.ТекущаяСтраница]; + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницыПомощника.ПодчиненныеЭлементы[Параметры.ТекущаяСтраница]; Объект.КодТипаРезервногоКопирования = 3; КонецЕсли; @@ -78,9 +59,9 @@ Объект.КаталогСРезервнымиКопиями =НастройкиРезервногоКопирования.КаталогХраненияРезервныхКопий; Если НастройкиРезервногоКопирования.ПервыйЗапуск Тогда - ТекстЗаголовка = НСтр("ru = 'Резервное копирование еще ни разу не проводилось'"); + ТекстЗаголовка = НСтр("ru = 'Резервное копирование еще ни разу не проводилось'"); Иначе - ТекстЗаголовка = НСтр("ru = 'В последний раз резервное копирование проводилось: %1'"); + ТекстЗаголовка = НСтр("ru = 'В последний раз резервное копирование проводилось: %1'"); МассивПараметров = Новый Массив; МассивПараметров.Добавить(Формат(РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования().ДатаПоследнегоРезервногоКопирования,"ДЛФ=ДДВ")); ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(ТекстЗаголовка,МассивПараметров); @@ -97,6 +78,36 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Резервное копирование программы недоступно в клиенте под управлением ОС Linux.'"); + Предупреждение(ТекстСообщения); + Возврат; + КонецЕсли; + + ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + АдминистраторИБ = ПараметрыРаботыКлиента.ИнформацияОПользователе.Имя; + Если ТипВызова = 1 Или ТипВызова = 2 Тогда + Если ПараметрыРаботыКлиента.РезервноеКопированиеИБ.Свойство("ПарольАдминистратораИБ") Тогда + ПарольАдминистратораИБ = ПараметрыРаботыКлиента.РезервноеКопированиеИБ.ПарольАдминистратораИБ; + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(ТекстПути) Тогда + ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ТекущаяСтраница, ТекстПути); + Иначе + ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ТекущаяСтраница); + КонецЕсли; + + УстановитьЗаголовокКнопкиДалее(Истина); + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -115,33 +126,33 @@ ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); Если ПараметрыРезервногоКопированияИБ.ПроцессВыполняется Тогда - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь, ПараметрыРезервногоКопированияИБ); + ПараметрыРезервногоКопированияИБ.ПроцессВыполняется = Ложь; + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Ложь); КонецЕсли; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ &НаКлиенте Процедура НадписьСписокДействийНажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СписокПользователейНажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей", , ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НадписьЖурналРегистрацииНажатие(Элемент) - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтаФорма); КонецПроцедуры @@ -161,7 +172,7 @@ УстановитьЗаголовокКнопкиДалее(Ложь); Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ТекущаяСтраница = Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ПодчиненныеЭлементы.СтраницаПустая; Элементы.НадписьПояснениеКИнтерактивномуКопированию.Заголовок = НСтр("ru = 'Нажмите ""Готово"", чтобы закрыть помощник. Резервное копирование начнется перед закрытием программы.'"); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -178,7 +189,7 @@ &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрации1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтаФорма); КонецПроцедуры @@ -200,7 +211,7 @@ ОчиститьСообщения(); ИнформацияОбОшибке = ""; - Если Не ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) и Не ПустаяСтрока(ИнформацияОбОшибке) Тогда + Если Не ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) и Не ПустаяСтрока(ИнформацияОбОшибке) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ИнформацияОбОшибке); Возврат; КонецЕсли; @@ -209,7 +220,7 @@ Если ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаВыполненияРезервногоКопирования Тогда ОбработатьВыборРежимаИнтерактивногоКопирования(); - УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями, ПараметрыРезервногоКопированияИБ); + УстановитьПутьАрхиваСКопиями(Объект.КаталогСРезервнымиКопиями); ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки Тогда ОбработатьВыборРежимаИнтерактивногоКопирования(); @@ -253,9 +264,9 @@ // Параметры : // НоваяСтраницаПомощника - страница , которую необходимо открыть в данный момент. &НаКлиенте -Процедура ПриОткрытииНовойСтраницы(НоваяСтраница, ТекстПути = "") +Процедура ПриОткрытииНовойСтраницы(НоваяСтраница, ТекстПути = "") - ПодчиненныеСтраницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; + ПодчиненныеСтраницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; Если НоваяСтраница = ПодчиненныеСтраницы.СтраницаВыполненияРезервногоКопирования Тогда Элементы.АктивныеПользователи.Видимость = ПолучитьДоступность(); @@ -265,14 +276,15 @@ ИначеЕсли НоваяСтраница = ПодчиненныеСтраницы.СтраницаИнформацииИВыполненияРезервногоКопирования Тогда - РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Истина, ПараметрыРезервногоКопированияИБ); + ПараметрыРезервногоКопированияИБ.ПроцессВыполняется = Истина; + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ПроцессВыполняется", Истина); Элементы.Отмена.Доступность = Истина; ОбновитьКоличествоАктивныхПользователей(); УстановитьЗаголовокКнопкиДалее(Истина); Элементы.Назад.Видимость = Ложь; Элементы.Далее.Доступность = Ложь; - + ИнформацияОбОшибке = ""; Если Не ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) и Не ПустаяСтрока(ИнформацияОбОшибке) Тогда Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.СтраницаОшибокПриКопировании; @@ -319,9 +331,10 @@ ИЛИ НоваяСтраница = ПодчиненныеСтраницы.СтраницаУспешногоВыполненияКопирования Тогда Элементы.Далее.Видимость= Ложь; Элементы.Отмена.Заголовок = НСтр("ru = 'Закрыть'"); - ПараметрыРезервногоКопирования = ПолучитьНастройкиРезервногоКопирования(); - ПараметрыРезервногоКопированияИБ = ПараметрыРезервногоКопирования; - УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопирования); + Элементы.Отмена.КнопкаПоУмолчанию = Истина; + ПараметрыРезервногоКопирования = ПолучитьНастройкиРезервногоКопирования(); + РезервноеКопированиеИБКлиент.ЗаполнитьЗначенияГлобальныхПеременных(ПараметрыРезервногоКопирования); + УстановитьРезультатРезервногоКопирования(); ИначеЕсли НоваяСтраница = ПодчиненныеСтраницы.ДополнительныеНастройки Тогда Элементы.Назад.Видимость = Истина; АдминистраторИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; @@ -331,8 +344,8 @@ Иначе Элементы.ПояснениеКДалее.Заголовок = НСтр("ru = 'Нажмите ""Готово"", чтобы завершить настройку резервного копирования'"); УстановитьЗаголовокКнопкиДалее(Ложь); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; Если НоваяСтраница = Неопределено Тогда Закрыть(); @@ -343,9 +356,9 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопирования) +Процедура УстановитьРезультатРезервногоКопирования() - РезервноеКопированиеИБСервер.УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопирования); + РезервноеКопированиеИБСервер.УстановитьРезультатРезервногоКопирования(); КонецПроцедуры @@ -422,9 +435,7 @@ РезервноеКопированиеИБВызовСервера.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); - ПараметрыРезервногоКопированияИБ = ПараметрыРезервногоКопирования; - - КонецЕсли; + КонецЕсли; Возврат Результат; @@ -492,7 +503,8 @@ ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); ПериодОтложенногоКопирования = ТекущаяДата + (Объект.ПериодОтложенногоОповещения*ПолучитьПериодОтложенногоКопирования()); ДатаОтложенногоРезервногоКопирования = ПериодОтложенногоКопирования; - РезервноеКопированиеИБКлиент.ПодключитьОжиданиеРезервногоКопирования(); + ПараметрыРезервногоКопированияИБ.ОтложенноеРезервноеКопирование = Истина; + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина); ОповещениеПользователю(НСтр("ru ='Резервное копирование будет проведено через указанный срок.'")); ИначеЕсли КодПереключателя = 3 Тогда @@ -603,7 +615,7 @@ &НаКлиенте Процедура НачатьРезервноеКопирование() - ПриИзмененииВремениОповещения(0, 0, ПараметрыРезервногоКопированияИБ); + ПриИзмененииВремениОповещения(0, 0); ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), @@ -637,6 +649,7 @@ КонецЕсли; КонецЕсли; + Возврат Истина; КонецФункции @@ -650,7 +663,7 @@ // Возвращает страницу, которая должна быть показана пользователю при открытии окна помощника. // Если ПолныеПрава - тогда попадаем на функциональную страницу. -// Если нет - тогда на информационную страницу с просьбой обратиться к сис. администратору. +// Если нет - тогда на информационную страницу с просьбой обратиться к системному администратору. // Состав элементов функциональной страницы зависит от архитектуры информационной базы. &НаСервере Функция ОпределитьСтраницуПоПравамИАрхитектуре() @@ -669,7 +682,7 @@ КонецФункции &НаСервереБезКонтекста -Процедура ПриИзмененииВремениОповещения(ПараметрКоличества, ПараметрТипа, ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура ПриИзмененииВремениОповещения(ПараметрКоличества, ПараметрТипа) ПараметрыОповещенияОРезервномКопировании = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); @@ -685,8 +698,7 @@ РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(ПараметрТипа)); КонецЕсли; ПараметрыОповещенияОРезервномКопировании.НастроеноПользователем = Истина; - ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); Конецпроцедуры @@ -701,11 +713,10 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьПутьАрхиваСКопиями(Путь, ПараметрыРезервногоКопированияИБНаКлиенте) +Процедура УстановитьПутьАрхиваСКопиями(Путь) НастройкиПути = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); НастройкиПути.КаталогХраненияРезервныхКопий = Путь; - ПараметрыРезервногоКопированияИБНаКлиенте = НастройкиПути; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиПути); КонецПроцедуры @@ -736,7 +747,7 @@ СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); СтруктураПараметров.Вставить("ПараметрыСкрипта" , ПолучитьПараметрыАутентификацииАдминистратораОбновления()); - ИменаМакетов = "ДопФайлРезервногоКопирования"; + ИменаМакетов = "ДопФайлРезервногоКопирования"; ИменаМакетов = ИменаМакетов + ",ЗаставкаРезервногоКопирования"; ТекстыМакетов = ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации); @@ -871,7 +882,7 @@ Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(СтруктураПараметров.ИнформационнаяБазаФайловая, "false", "true")); Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 4661ee4d7..090a4ec0d 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -240,7 +240,6 @@ function finalize(success) { allowConnections(false); // Разрешение подключений } - write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации setResult(success); @@ -359,28 +358,28 @@ function writeEventLog(success) function backupDB() { try - { - - var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName,false); - - NewTextFile.Write(String.fromCharCode(80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); - NewTextFile.Close(); - - var ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileName); - var dFolder = oShellApplication.NameSpace(ZIPFile); - var file = oFileSystemObject.GetAbsolutePathName(BaseFileName); - var FolderNameSpace = oFileSystemObject.GetParentFolderName(file); - var Folder = oShellApplication.Namespace(FolderNameSpace); - var FolderItemNameSpace = oFileSystemObject.GetFileName(file); - var FolderItem = Folder.ParseName(FolderItemNameSpace); - - if (!createBackup) - return 0; + { + + var NewTextFile = oFileSystemObject.CreateTextFile(backupFileName,false); - dFolder.CopyHere(file); - - ret = 0; - log(format("Попытка создания резервной копии", ret), ret != 0); + 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 ZIPFile = oFileSystemObject.GetAbsolutePathName(backupFileName); + var dFolder = oShellApplication.NameSpace(ZIPFile); + var file = oFileSystemObject.GetAbsolutePathName(BaseFileName); + var FolderNameSpace = oFileSystemObject.GetParentFolderName(file); + var Folder = oShellApplication.Namespace(FolderNameSpace); + var FolderItemNameSpace = oFileSystemObject.GetFileName(file); + var FolderItem = Folder.ParseName(FolderItemNameSpace); + + if (!createBackup) + return 0; + + dFolder.CopyHere(file); + + ret = 0; + log(format("Попытка создания резервной копии", ret), ret != 0); } catch(e) { @@ -395,13 +394,22 @@ function backupDB() return ret; } +// Ожидать создания файла резервной копии, начатое в backupDB() function WaitUntilFinish() { var FileArchiveObject = new ActiveXObject("Scripting.FileSystemObject"); - FileArchive = FileArchiveObject.GetFile(backupFileName); - + try + { + FileArchive = FileArchiveObject.GetFile(backupFileName); + } + catch(e) + { + // файл резервной копии не найден, ожидаем далее + return -1; + } FileSize = FileArchive.size / 1024; + // файл все еще не начал создаваться, возможно выполняется интерактив, ожидаем далее if (FileSize < 5) return -1; @@ -417,20 +425,18 @@ function doAllowConnections(updateAndFillDB) var connection = createConnection(); if (connection == null) return (useComConnector ? 1 : 0); - - - try - { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - connectionsDenied = false; - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); - return 3; - } + try + { + connection.СоединенияИБ.РазрешитьРаботуПользователей(); + connectionsDenied = false; + } + catch(e) + { + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); + return 3; + } return 0; } diff --git a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl index 940fd92f0..0b256ae38 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Forms/ОсновнаяФорма/Module.bsl @@ -7,6 +7,10 @@ Возврат; КонецЕсли; + Если НЕ Параметры.Свойство("ОткрытаПоСценарию") Тогда + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + КонецЕсли; + Если НЕ УправлениеИтогамиИАгрегатамиСлужебный.НадоСдвинутьГраницуИтогов() Тогда Отказ = Истина; // Период уже был установлен в сеансе другого пользователя. Возврат; diff --git a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html index 743d171ef..83c742003 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html +++ b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            diff --git a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/СдвигГраницыИтоговПриЗавершенииРаботы.mdo b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/СдвигГраницыИтоговПриЗавершенииРаботы.mdo index 4b7a3de37..cbc69ec82 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/СдвигГраницыИтоговПриЗавершенииРаботы.mdo +++ b/SSL/src/DataProcessors/СдвигГраницыИтоговПриЗавершенииРаботы/СдвигГраницыИтоговПриЗавершенииРаботы.mdo @@ -9,7 +9,6 @@ ru Сдвиг границы итогов при завершении работы - true DataProcessor.СдвигГраницыИтоговПриЗавершенииРаботы.Form.ОсновнаяФорма diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl index 12260f1b0..89178771c 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl @@ -27,6 +27,11 @@ ВариантПечатиСогласия = "ВыводитьБланк"; КонецЕсли; + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда + Элементы.ФормаПечатьMSWord.Видимость = Ложь; + Элементы.ФормаПечатьOOWritter.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form index c017ac56a..96073e40c 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Form.form @@ -363,7 +363,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl index 6427df813..6e839d17f 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl @@ -35,14 +35,14 @@ &НаКлиенте Процедура ВыполнитьСопоставление(Команда) - ЭтаФорма.Закрыть(СписокПолейСопоставления.Скопировать()); + ОповеститьОВыборе(СписокПолейСопоставления.Скопировать()); КонецПроцедуры &НаКлиенте Процедура Отмена(Команда) - ЭтаФорма.Закрыть(Неопределено); + ОповеститьОВыборе(Неопределено); КонецПроцедуры @@ -65,4 +65,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form index ae700d0d0..a1da6f0d3 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Form.form @@ -305,7 +305,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl index 59a70b63c..d4de52e4a 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl @@ -30,13 +30,13 @@ КонецЕсли; - ЭтаФорма.Закрыть(СписокПолей.Скопировать()); + ОповеститьОВыборе(СписокПолей.Скопировать()); КонецПроцедуры &НаКлиенте Процедура Отмена(Команда) - ЭтаФорма.Закрыть(Неопределено); + ОповеститьОВыборе(Неопределено); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form index dd80fb56a..5793d4c62 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Form.form @@ -411,7 +411,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl index 31df17681..5bcf7e898 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl @@ -39,7 +39,7 @@ Если Не Отказ Тогда - ЭтаФорма.Закрыть(СписокПолей.Скопировать()); + ОповеститьОВыборе(СписокПолей.Скопировать()); КонецЕсли; @@ -48,7 +48,7 @@ &НаКлиенте Процедура Отмена(Команда) - ЭтаФорма.Закрыть(Неопределено); + ОповеститьОВыборе(Неопределено); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form index 44b67e040..d4a708713 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Form.form @@ -375,7 +375,7 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl index 1cedc2b92..09d7e56cc 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl @@ -18,13 +18,13 @@ &НаКлиенте Процедура Применить(Команда) - ЭтаФорма.Закрыть(ТаблицаСортировки); + ОповеститьОВыборе(ТаблицаСортировки); КонецПроцедуры &НаКлиенте Процедура Отменить(Команда) - ЭтаФорма.Закрыть(Неопределено); + ОповеститьОВыборе(Неопределено); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form index 2143dee9a..e20e5babe 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form @@ -1,20 +1,937 @@ - КоманднаяПанельТаблицы - 69 - - УстановитьПометки - 70 + ПанельОсновная + 76 + + СопоставлениеОбъектов + 77 + + КоманднаяПанельТаблицы + 69 + + УстановитьПометки + 70 + true + true + + true + + false + + УстановитьПометкиРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Form.Command.УстановитьПометки + Normal + Auto + true + true + UserCmds + Auto + + + СнятьПометки + 68 + true + true + + true + + false + + СнятьПометкиРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.СнятьПометки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель таблицы</value> + + + ru + Командная панель таблицы + + + КоманднаяПанельТаблицыРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + CommandBar + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектов + 31 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов + + false + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + ТаблицаАвтоматическиСопоставленныхОбъектовПометка + 36 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Пометка + + + ТаблицаАвтоматическиСопоставленныхОбъектовПометкаРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПометкаКонтекстноеМеню + 37 + true + + CheckBoxField + Auto + true + Left + true + + + + ПоляПриемника + 66 + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинки + 72 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникИндексКартинки + + true + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинкиРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинкиКонтекстноеМеню + 73 + true + + PictureField + true + Auto + Left + + true + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1 + 46 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле1 + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1РасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1КонтекстноеМеню + 47 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2 + 48 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле2 + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2РасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2КонтекстноеМеню + 49 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3 + 50 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле3 + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3РасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3КонтекстноеМеню + 51 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4 + 52 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле4 + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4РасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4КонтекстноеМеню + 53 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5 + 54 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле5 + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5РасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5КонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля приемника</value> + + + ru + Поля приемника + + true + + ПоляПриемникаРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ПоляИсточника + 67 + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинки + 74 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникИндексКартинки + + None + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинкиРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинкиКонтекстноеМеню + 75 + true + + PictureField + true + Auto + Left + + true + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1 + 56 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле1 + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1РасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1КонтекстноеМеню + 57 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2 + 58 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле2 + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2РасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2КонтекстноеМеню + 59 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3 + 60 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле3 + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3РасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3КонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4 + 62 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле4 + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4РасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4КонтекстноеМеню + 63 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5 + 64 + true + true + + true + + + Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле5 + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5РасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5КонтекстноеМеню + 65 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля источника</value> + + + ru + Поля приемника + + true + + ПоляИсточникаРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + ТаблицаАвтоматическиСопоставленныхОбъектовКоманднаяПанель + 33 + Left + + + ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоиска + 157 + + ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоискаРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоискаКонтекстноеМеню + 158 + true + + ТаблицаАвтоматическиСопоставленныхОбъектов + + true + + + + ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотра + 160 + + ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотраРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотраКонтекстноеМеню + 161 + true + + ViewStatusAddition + ТаблицаАвтоматическиСопоставленныхОбъектов + + true + + + + ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоиском + 163 + + ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоискомРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоискомКонтекстноеМеню + 164 + true + + SearchControlAddition + ТаблицаАвтоматическиСопоставленныхОбъектов + + true + + + + ТаблицаАвтоматическиСопоставленныхОбъектовРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + ТаблицаАвтоматическиСопоставленныхОбъектовКонтекстноеМеню + 32 + true + + HierarchicalList + true + true + true + MultiRow + Row +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + + КоманднаяПанельФормы + 71 + + Применить + 14 + true + true + + true + + false + + ПрименитьРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Form.Command.Применить + Auto + true + true + true + UserCmds + Auto + + + Отмена + 30 + true + true + + true + + false + + ОтменаРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанельФормыРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + CommandBar + + Right + + true true true - false + + <key>ru</key> + <value>Сопоставление объектов</value> + + + ru + Сопоставление объектов + + true - УстановитьПометкиРасширеннаяПодсказка - 77 + СопоставлениеОбъектовРасширеннаяПодсказка + 152 Label true true @@ -22,26 +939,243 @@ Left
            - Form.Command.УстановитьПометки - Normal - Auto - true - true - UserCmds - Auto + Page + + Vertical + auto +
            - - СнятьПометки - 68 + + ОжиданиеСопоставленияОбъектов + 119 + + Рамка + 120 + + ГруппировкаСообщения + 121 + + ГруппаКартинки + 122 + + Декорация14 + 123 + true + true + + true + + + Декорация14РасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 124 + true + + 8 + true + 3 + true + false + + + CommonPicture.СинхронизацияДанныхАнализДанных48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинкиРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения + 125 + + Декорация15 + 126 + + <key>ru</key> + <value>Поиск одинаковых данных...</value> + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 127 + true + + Label + true + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщенияРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщенияРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка</value> + + true + true + true + + РамкаРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + true true true - false + + <key>ru</key> + <value>Ожидание сопоставления объектов</value> + + + ru + Ожидание сопоставления объектов + + true - СнятьПометкиРасширеннаяПодсказка - 78 + ОжиданиеСопоставленияОбъектовРасширеннаяПодсказка + 205 Label true true @@ -49,13 +1183,600 @@ Left - Form.Command.СнятьПометки - Normal - Auto - true - true - UserCmds - Auto + Page + + Vertical + auto + + + + ОшибкаСопоставленияОбъектов + 128 + + Рамка1 + 129 + + ГруппировкаСообщения1 + 130 + + ГруппаКартинки1 + 131 + + Декорация3 + 132 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 216 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 133 + true + + 8 + true + 3 + true + false + + + CommonPicture.Предупреждение32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки1РасширеннаяПодсказка + 215 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения1 + 134 + + Декорация4 + 135 + + <key>ru</key> + <value>Не удалось выполнить поиск одинаковых данных.</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 218 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 136 + true + + Label + true + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения1РасширеннаяПодсказка + 217 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения1РасширеннаяПодсказка + 214 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка</value> + + true + true + true + + Рамка1РасширеннаяПодсказка + 213 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + + + КоманднаяПанельФормы2 + 148 + + Закрыть1 + 150 + true + true + + true + + + Закрыть1РасширеннаяПодсказка + 220 + Label + true + true + + Left + + + Form.Command.Закрыть + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанельФормы2РасширеннаяПодсказка + 219 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Ошибка сопоставления объектов</value> + + + ru + Ошибка сопоставления объектов + + true + + ОшибкаСопоставленияОбъектовРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПустойРезультатСопоставленияОбъектов + 137 + + Рамка2 + 138 + + ГруппировкаСообщения2 + 139 + + ГруппаКартинки2 + 140 + + Декорация5 + 141 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 142 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки2РасширеннаяПодсказка + 224 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения2 + 143 + + Декорация6 + 144 + + <key>ru</key> + <value>Одинаковые данные не найдены. +Попробуйте задать другие условия поиска.</value> + + true + true + + true + + + Декорация6РасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 145 + true + + Label + true + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения2РасширеннаяПодсказка + 226 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения2РасширеннаяПодсказка + 223 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка</value> + + true + true + true + + Рамка2РасширеннаяПодсказка + 222 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + + + КоманднаяПанельФормы1 + 146 + + Закрыть + 149 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + Form.Command.Закрыть + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанельФормы1РасширеннаяПодсказка + 228 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Пустой результат сопоставления объектов</value> + + + ru + Ошибка сопоставления объектов + + true + + ПустойРезультатСопоставленияОбъектовРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Page + + Vertical + auto + true true @@ -64,839 +1785,12 @@ <key>ru</key> - <value>Командная панель таблицы</value> + <value>Панель основная</value> - - ru - Командная панель таблицы - - - КоманднаяПанельТаблицыРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - CommandBar - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектов - 31 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов - - false - None - Add - CancelSearch - Change - Copy - CopyToClipboard - Delete - EndEdit - Find - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - ТаблицаАвтоматическиСопоставленныхОбъектовПометка - 36 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Пометка - - - ТаблицаАвтоматическиСопоставленныхОбъектовПометкаРасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПометкаКонтекстноеМеню - 37 - true - - CheckBoxField - Auto - true - Left - true - - - - ПоляПриемника - 66 - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинки - 72 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникИндексКартинки - - true - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинкиРасширеннаяПодсказка - 92 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникИндексКартинкиКонтекстноеМеню - 73 - true - - PictureField - true - Auto - Left - - true - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1 - 46 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле1 - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1РасширеннаяПодсказка - 94 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле1КонтекстноеМеню - 47 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2 - 48 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле2 - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2РасширеннаяПодсказка - 96 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле2КонтекстноеМеню - 49 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3 - 50 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле3 - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3РасширеннаяПодсказка - 98 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле3КонтекстноеМеню - 51 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4 - 52 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле4 - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4РасширеннаяПодсказка - 100 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле4КонтекстноеМеню - 53 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5 - 54 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ПриемникПоле5 - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5РасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовПриемникПоле5КонтекстноеМеню - 55 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Поля приемника</value> - - - ru - Поля приемника - - true - - ПоляПриемникаРасширеннаяПодсказка - 91 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ПоляИсточника - 67 - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинки - 74 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникИндексКартинки - - None - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинкиРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникИндексКартинкиКонтекстноеМеню - 75 - true - - PictureField - true - Auto - Left - - true - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1 - 56 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле1 - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1РасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле1КонтекстноеМеню - 57 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2 - 58 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле2 - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2РасширеннаяПодсказка - 109 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле2КонтекстноеМеню - 59 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3 - 60 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле3 - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3РасширеннаяПодсказка - 111 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле3КонтекстноеМеню - 61 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4 - 62 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле4 - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4РасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле4КонтекстноеМеню - 63 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5 - 64 - true - true - - true - - - Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.ИсточникПоле5 - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5РасширеннаяПодсказка - 115 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовИсточникПоле5КонтекстноеМеню - 65 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Поля источника</value> - - - ru - Поля приемника - - true - - ПоляИсточникаРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - None - - ТаблицаАвтоматическиСопоставленныхОбъектовКоманднаяПанель - 33 - Left - - - ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоиска - 80 - - ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоискаРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовСтрокаПоискаКонтекстноеМеню - 81 - true - - ТаблицаАвтоматическиСопоставленныхОбъектов - - true - - - - ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотра - 83 - - ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотраРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовСостояниеПросмотраКонтекстноеМеню - 84 - true - - ViewStatusAddition - ТаблицаАвтоматическиСопоставленныхОбъектов - - true - - - - ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоиском - 86 - - ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоискомРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовУправлениеПоискомКонтекстноеМеню - 87 - true - - SearchControlAddition - ТаблицаАвтоматическиСопоставленныхОбъектов - - true - - - - ТаблицаАвтоматическиСопоставленныхОбъектовРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - - ТаблицаАвтоматическиСопоставленныхОбъектовКонтекстноеМеню - 32 - true - - HierarchicalList - true - true - true - MultiRow - Row -
            true
            - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - None - None - None - true - -
            - - КоманднаяПанельФормы - 71 - - Применить - 14 - true - true - - true - - false - - ПрименитьРасширеннаяПодсказка - 126 - Label - true - true - - Left - - - Form.Command.Применить - Auto - true - true - true - UserCmds - Auto - - - Отмена - 30 - true - true - - true - - false - - ОтменаРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - Form.Command.Отмена - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - true - КоманднаяПанельФормыРасширеннаяПодсказка - 125 + ПанельОсновнаяРасширеннаяПодсказка + 151 Label true true @@ -904,9 +1798,9 @@ Left - CommandBar - - Right + Pages + + Auto None @@ -928,12 +1822,11 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + LockOwner true true Vertical true - true true UseIfNecessary auto @@ -953,10 +1846,10 @@
            true
            - ТаблицаАвтоматическиСопоставленныхОбъектовПустая + ПустойРезультат <key>ru</key> - <value>Таблица автоматически сопоставленных объектов пустая</value> + <value>Пустой результат</value> 2 @@ -969,6 +1862,390 @@ 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 + + Number + + 3 + true + + + + true + + + true + + + + АдресВременногоХранилища + + <key>ru</key> + <value>Адрес временного хранилища</value> + + 5 + + String + + + + 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 + + + true + + + true + + + + МаксимальноеКоличествоПользовательскихПолей + + <key>ru</key> + <value>Максимальное количество пользовательских полей</value> + + 9 + + Number + + 10 + + + + true + + + true + + + + СписокИспользуемыхПолей + + <key>ru</key> + <value>Список используемых полей</value> + + 10 + + ValueList + + + true + + + true + + + + + + + СписокПолейТаблицы + + <key>ru</key> + <value>Список полей таблицы</value> + + 11 + + ValueList + + + true + + + true + + + + + + + АдресВременногоХранилищаТаблицыНеутвержденныхСвязей + + <key>ru</key> + <value>Адрес временного хранилища таблицы неутвержденных связей</value> + + 12 + + String + + + + true + + + true + + + + СписокПолейСопоставления + + <key>ru</key> + <value>Список полей сопоставления</value> + + 13 + + ValueList + + + true + + + true + + + + + + + ВыдаватьПредупреждениеПриЗакрытииФормы + + <key>ru</key> + <value>Выдавать предупреждение при закрытии формы</value> + + 14 + + Boolean + + + true + + + true + + Применить @@ -1065,6 +2342,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Закрыть</name> + <title> + <key>ru</key> + <value>Закрыть</value> + + 5 + + ru + Закрыть + + + true + + + + ЗакрытьФорму + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 10e26b192..c5addf5aa 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -1,5 +1,3 @@ -&НаКлиенте -Перем мВыдаватьПредупреждениеПриЗакрытииФормы; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -11,7 +9,7 @@ Возврат; КонецЕсли; - мВыдаватьПредупреждениеПриЗакрытииФормы = Истина; + ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; // проверка, что форма открыта программно Если Не Параметры.Свойство("ИмяФайлаСообщенияОбмена") Тогда @@ -25,47 +23,26 @@ // инициализируем обработку переданными параметрами ЗаполнитьЗначенияСвойств(Объект, Параметры,, "СписокИспользуемыхПолей, СписокПолейТаблицы"); - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МаксимальноеКоличествоПользовательскихПолей = Параметры.МаксимальноеКоличествоПользовательскихПолей; + АдресВременногоХранилищаТаблицыНеутвержденныхСвязей = Параметры.АдресВременногоХранилищаТаблицыНеутвержденныхСвязей; + СписокИспользуемыхПолей = Параметры.СписокИспользуемыхПолей; + СписокПолейТаблицы = Параметры.СписокПолейТаблицы; + СписокПолейСопоставления = Параметры.СписокПолейСопоставления; - // определяем свойство "СписокИспользуемыхПолей" - ОбработкаОбъект.СписокИспользуемыхПолей.Очистить(); - ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.СписокИспользуемыхПолей, ОбработкаОбъект.СписокИспользуемыхПолей); - - // определяем свойство "СписокПолейТаблицы" - ОбработкаОбъект.СписокПолейТаблицы.Очистить(); - ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.СписокПолейТаблицы, ОбработкаОбъект.СписокПолейТаблицы); - - // загружаем таблицу неутвержденных связей - ТаблицаНеутвержденныхСвязей = ПолучитьИзВременногоХранилища(Параметры.АдресВременногоХранилищаТаблицыНеутвержденныхСвязей); - УдалитьИзВременногоХранилища(Параметры.АдресВременногоХранилищаТаблицыНеутвержденныхСвязей); - ОбработкаОбъект.ТаблицаНеутвержденныхСвязей.Загрузить(ТаблицаНеутвержденныхСвязей); - - // получаем таблицу автоматического сопоставления объектов - ОбработкаОбъект.ВыполнитьАвтоматическоеСопоставлениеОбъектов(Отказ, Параметры.СписокПолейСопоставления); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - // устанавливаем заголовки и видимость полей таблицы на форме - УстановитьВидимостьПолейТаблицы("ТаблицаАвтоматическиСопоставленныхОбъектов", Параметры.МаксимальноеКоличествоПользовательскихПолей); - - // установка заголока формы + // установка заголовка формы Заголовок = Параметры.Заголовок; - ТаблицаАвтоматическиСопоставленныхОбъектовПустая = (Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Количество() = 0); + СценарийАвтоматическогоСопоставленияОбъектов(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ТаблицаАвтоматическиСопоставленныхОбъектовПустая Тогда - - Отказ = Истина; - - Предупреждение(НСтр("ru = 'Одинаковые данные не найдены. - |Попробуйте задать другие условия сопоставления.'") - ); - КонецЕсли; + ПорядковыйНомерПерехода = 0; + + // Позиционируемся на втором шаге помощника + УстановитьПорядковыйНомерПерехода(2); КонецПроцедуры @@ -73,7 +50,7 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Количество() > 0 - И мВыдаватьПредупреждениеПриЗакрытииФормы = Истина Тогда + И ВыдаватьПредупреждениеПриЗакрытииФормы = Истина Тогда Предупреждение(НСтр("ru = 'Форма содержит данные автоматического сопоставления. Действие отменено.'")); @@ -89,19 +66,19 @@ &НаКлиенте Процедура Применить(Команда) - мВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; + ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; // контекстный вызов сервера - Закрыть(ПоместитьТаблицуАвтоматическиСопоставленныхОбъектовВоВременноеХранилище()); + ОповеститьОВыборе(ПоместитьТаблицуАвтоматическиСопоставленныхОбъектовВоВременноеХранилище()); КонецПроцедуры &НаКлиенте Процедура Отмена(Команда) - мВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; + ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; - Закрыть(Неопределено); + ОповеститьОВыборе(Неопределено); КонецПроцедуры @@ -119,6 +96,268 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + + ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; + + ОповеститьОВыборе(Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (Поставляемая часть) + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 0 Тогда + + ПорядковыйНомерПерехода = 0; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 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); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, + ИмяОсновнойСтраницы, + ИмяСтраницыНавигации = "", + ИмяСтраницыДекорации = "", + ИмяОбработчикаПриОткрытии = "", + ИмяОбработчикаПриПереходеДалее = "", + ИмяОбработчикаПриПереходеНазад = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "") + НоваяСтрока = ТаблицаПереходов.Добавить(); + + НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + + НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; + НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -130,13 +369,13 @@ КонецФункции &НаСервере -Процедура УстановитьВидимостьПолейТаблицы(Знач ИмяТаблицыФормы, Знач МаксимальноеКоличествоПользовательскихПолей) +Процедура УстановитьВидимостьПолейТаблицы(Знач ИмяТаблицыФормы, Знач МаксКоличествоПользовательскихПолей) ИмяПоляИсточника = СтрЗаменить("#ИмяТаблицыФормы#ИсточникПолеNN","#ИмяТаблицыФормы#", ИмяТаблицыФормы); ИмяПоляПриемника = СтрЗаменить("#ИмяТаблицыФормы#ПриемникПолеNN","#ИмяТаблицыФормы#", ИмяТаблицыФормы); // снимаем видимость всех полей таблицы сопоставления - Для НомерПоля = 1 По МаксимальноеКоличествоПользовательскихПолей Цикл + Для НомерПоля = 1 По МаксКоличествоПользовательскихПолей Цикл ПолеИсточника = СтрЗаменить(ИмяПоляИсточника, "NN", Строка(НомерПоля)); ПолеПриемника = СтрЗаменить(ИмяПоляПриемника, "NN", Строка(НомерПоля)); @@ -176,3 +415,243 @@ Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Загрузить(ТаблицаЗначений); КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиДалее() + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНазад() + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикОжиданияФоновогоЗадания() + + ДлительнаяОперацияЗавершена = Ложь; + + Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); + + Если Состояние = "Активно" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + + ИначеЕсли Состояние = "Завершено" Тогда + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + + ПерейтиДалее(); + + Иначе // ЗавершеноАварийно + + ДлительнаяОперация = Ложь; + + ПерейтиНазад(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий переходов + +// Страница 0: Ошибка автоматического сопоставления +// +&НаКлиенте +Функция Подключаемый_ОшибкаСопоставленияОбъектов_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.Закрыть1.КнопкаПоУмолчанию = Истина; + +КонецФункции + + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектов_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ВыполнитьСопоставлениеОбъектов(Отказ); + +КонецФункции + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектовДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + + КонецЕсли; + +КонецФункции + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектовДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + ВыполнитьСопоставлениеОбъектовОкончание(Отказ); + + КонецЕсли; + +КонецФункции + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ВыполнитьСопоставлениеОбъектов(Отказ) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторЗадания = Неопределено; + АдресВременногоХранилища = ""; + + Попытка + + РеквизитыФормы = Новый Структура; + РеквизитыФормы.Вставить("СписокИспользуемыхПолей", СписокИспользуемыхПолей); + РеквизитыФормы.Вставить("СписокПолейТаблицы", СписокПолейТаблицы); + РеквизитыФормы.Вставить("СписокПолейСопоставления", СписокПолейСопоставления); + + ПараметрыМетода = Новый Структура; + ПараметрыМетода.Вставить("КонтекстОбъекта", ОбменДаннымиСервер.ПолучитьКонтекстОбъекта(РеквизитФормыВЗначение("Объект"))); + ПараметрыМетода.Вставить("РеквизитыФормы", РеквизитыФормы); + ПараметрыМетода.Вставить("ТаблицаНеутвержденныхСвязей", ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТаблицыНеутвержденныхСвязей)); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + РезультатСопоставления = Обработки.СопоставлениеОбъектовИнформационныхБаз.РезультатАвтоматическогоСопоставленияОбъектов(ПараметрыМетода); + ПослеСопоставленияОбъектов(РезультатСопоставления); + + Иначе + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.СопоставлениеОбъектовИнформационныхБаз.ВыполнитьАвтоматическоеСопоставлениеОбъектов", + ПараметрыМетода, + НСтр("ru = 'Автоматическое сопоставление объектов'") + ); + + Если Результат.ЗаданиеВыполнено Тогда + + ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(Результат.АдресХранилища)); + + Иначе + + ДлительнаяОперация = Истина; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + АдресВременногоХранилища = Результат.АдресХранилища; + + КонецЕсли; + + КонецЕсли; + + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ВыполнитьСопоставлениеОбъектовОкончание(Отказ) + + Попытка + ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(АдресВременногоХранилища)); + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Автоматическое сопоставление'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ПослеСопоставленияОбъектов(Знач РезультатСопоставления) + + ОбработкаОбъект = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); + ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(РезультатСопоставления.КонтекстОбъекта, ОбработкаОбъект); + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + ПустойРезультат = РезультатСопоставления.ПустойРезультат; + + Если Не ПустойРезультат Тогда + + Модифицированность = Истина; + + // устанавливаем заголовки и видимость полей таблицы на форме + УстановитьВидимостьПолейТаблицы("ТаблицаАвтоматическиСопоставленныхОбъектов", МаксимальноеКоличествоПользовательскихПолей); + + КонецЕсли; + +КонецПроцедуры + + +// Страница 2: Работа с результатом автоматического сопоставления +// +&НаКлиенте +Функция Подключаемый_СопоставлениеОбъектов_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.Применить.КнопкаПоУмолчанию = Истина; + + Если ПустойРезультат Тогда + ПропуститьСтраницу = Истина; + КонецЕсли; + +КонецФункции + + +// Страница 3: Пустой результат автоматического сопоставления +// +&НаКлиенте +Функция Подключаемый_ПустойРезультатСопоставленияОбъектовПустойРезультатСопоставленияОбъектов_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.Закрыть.КнопкаПоУмолчанию = Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Инициализация переходов помощника + +&НаСервере +Процедура СценарийАвтоматическогоСопоставленияОбъектов() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ОшибкаСопоставленияОбъектов",,, "ОшибкаСопоставленияОбъектов_ПриОткрытии"); + + // Ожидание сопоставления объектов + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектов_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектовДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектовДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Работа с результатом автоматического сопоставления + ТаблицаПереходовНоваяСтрока(5, "СопоставлениеОбъектов",,, "СопоставлениеОбъектов_ПриОткрытии"); + + ТаблицаПереходовНоваяСтрока(6, "ПустойРезультатСопоставленияОбъектов",,, "ПустойРезультатСопоставленияОбъектовПустойРезультатСопоставленияОбъектов_ПриОткрытии"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index f6feb4003..8e1e9d557 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -19,7 +19,7 @@ ПояснениеРасширеннаяПодсказка - 319 + 339 Label true true @@ -63,7 +63,7 @@ ОтборПоСтатусуСопоставленияРасширеннаяПодсказка - 321 + 341 Label true true @@ -108,7 +108,7 @@ ГруппаЗаголовкаТаблицыРасширеннаяПодсказка - 320 + 340 Label true true @@ -142,7 +142,7 @@ true ЗаписатьИЗакрытьРасширеннаяПодсказка - 325 + 345 Label true true @@ -169,7 +169,7 @@ true ЗаписатьОбновитьРасширеннаяПодсказка - 326 + 346 Label true true @@ -199,7 +199,7 @@ true ВыполнитьАвтоматическоеСопоставлениеРасширеннаяПодсказка - 328 + 348 Label true true @@ -226,7 +226,7 @@ true ДобавитьСопоставлениеРасширеннаяПодсказка - 329 + 349 Label true true @@ -253,7 +253,7 @@ true ОтменитьСопоставлениеРасширеннаяПодсказка - 330 + 350 Label true true @@ -284,7 +284,7 @@ ГруппаСвязиРасширеннаяПодсказка - 327 + 347 Label true true @@ -305,7 +305,7 @@ true ОбновитьРасширеннаяПодсказка - 331 + 351 Label true true @@ -335,7 +335,7 @@ НайтиРасширеннаяПодсказка - 333 + 353 Label true true @@ -362,7 +362,7 @@ ОтменитьПоискРасширеннаяПодсказка - 334 + 354 Label true true @@ -390,7 +390,7 @@ true СортировкаРасширеннаяПодсказка - 335 + 355 Label true true @@ -422,7 +422,7 @@ ГруппаНайтиРасширеннаяПодсказка - 332 + 352 Label true true @@ -443,7 +443,7 @@ true ВыполнитьЗагрузкуДанныхРасширеннаяПодсказка - 336 + 356 Label true true @@ -474,7 +474,7 @@ true ИзменитьСписокПолейТаблицыРасширеннаяПодсказка - 338 + 358 Label true true @@ -506,7 +506,7 @@ ПодменюНастройкиРасширеннаяПодсказка - 337 + 357 Label true true @@ -529,7 +529,7 @@ ФормаВывестиСписокРасширеннаяПодсказка - 340 + 360 Label true true @@ -556,7 +556,7 @@ ФормаКопироватьВБуферОбменаРасширеннаяПодсказка - 341 + 361 Label true true @@ -588,7 +588,7 @@ ФормаГруппаВывестиСписокРасширеннаяПодсказка - 339 + 359 Label true true @@ -609,7 +609,7 @@ КоманднаяПанельРасширеннаяПодсказка - 324 + 344 Label true true @@ -638,7 +638,7 @@ КнопкиТаблицыРасширеннаяПодсказка - 323 + 343 Label true true @@ -655,379 +655,704 @@ Auto - - ТаблицаСопоставления - 22 - - Style.ПоясняющийТекст - - true - true - - true - - - ТаблицаСопоставления - - true - false - None - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - SelectAll - SortListAsc - SortListDesc + + ПанельОсновная + 318 - ДанныеЭтойПрограммы - 306 - - ПоляПриемника - 69 - - ТаблицаСопоставленияПриемникИндексКартинки - 285 - true - true - - true - - - ТаблицаСопоставления.ПриемникИндексКартинки - - true - None - - ТаблицаСопоставленияПриемникИндексКартинкиРасширеннаяПодсказка - 364 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникИндексКартинкиКонтекстноеМеню - 286 - true - - PictureField - true - DontShow - Auto - Left - - true - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - - ТаблицаСопоставленияПриемникПоле1 - 48 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле1 - - - ТаблицаСопоставленияПриемникПоле1РасширеннаяПодсказка - 366 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле1КонтекстноеМеню - 49 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле2 - 50 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле2 - - - ТаблицаСопоставленияПриемникПоле2РасширеннаяПодсказка - 368 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле2КонтекстноеМеню - 51 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле3 - 52 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле3 - - - ТаблицаСопоставленияПриемникПоле3РасширеннаяПодсказка - 370 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле3КонтекстноеМеню - 53 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле4 - 54 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле4 - - - ТаблицаСопоставленияПриемникПоле4РасширеннаяПодсказка - 372 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле4КонтекстноеМеню - 55 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияПриемникПоле5 - 56 - true - true - - true - - - ТаблицаСопоставления.ПриемникПоле5 - - - ТаблицаСопоставленияПриемникПоле5РасширеннаяПодсказка - 374 - Label - true - true - - Left - - - - ТаблицаСопоставленияПриемникПоле5КонтекстноеМеню - 57 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - + СопоставлениеОбъектов + 321 + + ТаблицаСопоставления + 22 + + Style.ПоясняющийТекст + true true true - - <key>ru</key> - <value>Поля приемника</value> - - - ru - Поля источника - - - ПоляПриемникаРасширеннаяПодсказка - 363 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - true - true - - true - - - <key>ru</key> - <value><Эта программа></value> - - - System.DefaultGUIFont - true - false - false - false - - - ru - Данные этой программы - - - ДанныеЭтойПрограммыРасширеннаяПодсказка - 362 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - true - - - - ДанныеВторойПрограммы - 307 - - ПоляИсточника - 68 - - ТаблицаСопоставленияИсточникИндексКартинки - 283 + + ТаблицаСопоставления + + false + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SelectAll + SortListAsc + SortListDesc + + ДанныеЭтойПрограммы + 306 + + ПоляПриемника + 69 + + ТаблицаСопоставленияПриемникИндексКартинки + 285 + true + true + + true + + + ТаблицаСопоставления.ПриемникИндексКартинки + + true + None + + ТаблицаСопоставленияПриемникИндексКартинкиРасширеннаяПодсказка + 386 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникИндексКартинкиКонтекстноеМеню + 286 + true + + PictureField + true + DontShow + Auto + Left + + true + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаСопоставленияПриемникПоле1 + 48 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле1 + + + ТаблицаСопоставленияПриемникПоле1РасширеннаяПодсказка + 388 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле1КонтекстноеМеню + 49 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле2 + 50 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле2 + + + ТаблицаСопоставленияПриемникПоле2РасширеннаяПодсказка + 390 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле2КонтекстноеМеню + 51 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле3 + 52 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле3 + + + ТаблицаСопоставленияПриемникПоле3РасширеннаяПодсказка + 392 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле3КонтекстноеМеню + 53 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле4 + 54 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле4 + + + ТаблицаСопоставленияПриемникПоле4РасширеннаяПодсказка + 394 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле4КонтекстноеМеню + 55 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияПриемникПоле5 + 56 + true + true + + true + + + ТаблицаСопоставления.ПриемникПоле5 + + + ТаблицаСопоставленияПриемникПоле5РасширеннаяПодсказка + 396 + Label + true + true + + Left + + + + ТаблицаСопоставленияПриемникПоле5КонтекстноеМеню + 57 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля приемника</value> + + + ru + Поля источника + + + ПоляПриемникаРасширеннаяПодсказка + 385 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + true true true - - ТаблицаСопоставления.ИсточникИндексКартинки - + + <key>ru</key> + <value><Эта программа></value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Данные этой программы + - ТаблицаСопоставленияИсточникИндексКартинкиРасширеннаяПодсказка - 378 + ДанныеЭтойПрограммыРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + true + + + + ДанныеВторойПрограммы + 307 + + ПоляИсточника + 68 + + ТаблицаСопоставленияИсточникИндексКартинки + 283 + true + true + + true + + + ТаблицаСопоставления.ИсточникИндексКартинки + + + ТаблицаСопоставленияИсточникИндексКартинкиРасширеннаяПодсказка + 400 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникИндексКартинкиКонтекстноеМеню + 284 + true + + PictureField + true + Auto + Left + + true + true + true + true + + CommonPicture.КоллекцияКартинокСопоставлениеОбъектов + + + + 1 + + + + + ТаблицаСопоставленияИсточникПоле1 + 58 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле1 + + + ТаблицаСопоставленияИсточникПоле1РасширеннаяПодсказка + 402 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле1КонтекстноеМеню + 59 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле2 + 60 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле2 + + + ТаблицаСопоставленияИсточникПоле2РасширеннаяПодсказка + 404 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле2КонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле3 + 62 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле3 + + + ТаблицаСопоставленияИсточникПоле3РасширеннаяПодсказка + 406 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле3КонтекстноеМеню + 63 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле4 + 64 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле4 + + + ТаблицаСопоставленияИсточникПоле4РасширеннаяПодсказка + 408 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле4КонтекстноеМеню + 65 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаСопоставленияИсточникПоле5 + 66 + true + true + + true + + + ТаблицаСопоставления.ИсточникПоле5 + + + ТаблицаСопоставленияИсточникПоле5РасширеннаяПодсказка + 410 + Label + true + true + + Left + + + + ТаблицаСопоставленияИсточникПоле5КонтекстноеМеню + 67 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Поля источника</value> + + + ru + Поля источника + + + ПоляИсточникаРасширеннаяПодсказка + 399 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + true + true + + true + + + <key>ru</key> + <value><Вторая программа></value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Данные второй программы + + + ДанныеВторойПрограммыРасширеннаяПодсказка + 398 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + true + + + None + + ТаблицаСопоставленияКоманднаяПанель + 24 + Left + true + + + Selection + ТаблицаСопоставленияВыбор + + + ТаблицаСопоставленияСтрокаПоиска + 375 + + ТаблицаСопоставленияСтрокаПоискаРасширеннаяПодсказка + 377 Label true true @@ -1036,41 +1361,20 @@ - ТаблицаСопоставленияИсточникИндексКартинкиКонтекстноеМеню - 284 + ТаблицаСопоставленияСтрокаПоискаКонтекстноеМеню + 376 true - PictureField - true - Auto - Left - + ТаблицаСопоставления + true - true - true - true - - CommonPicture.КоллекцияКартинокСопоставлениеОбъектов - - - - 1 - - - - ТаблицаСопоставленияИсточникПоле1 - 58 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле1 - + + + ТаблицаСопоставленияСостояниеПросмотра + 378 - ТаблицаСопоставленияИсточникПоле1РасширеннаяПодсказка + ТаблицаСопоставленияСостояниеПросмотраРасширеннаяПодсказка 380 Label true @@ -1080,80 +1384,544 @@ - ТаблицаСопоставленияИсточникПоле1КонтекстноеМеню - 59 + ТаблицаСопоставленияСостояниеПросмотраКонтекстноеМеню + 379 true - InputField - Auto - true - Left - true - + ViewStatusAddition + ТаблицаСопоставления + + true + + + + ТаблицаСопоставленияУправлениеПоиском + 381 + + ТаблицаСопоставленияУправлениеПоискомРасширеннаяПодсказка + 383 + Label true true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле2 - 60 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле2 - - - ТаблицаСопоставленияИсточникПоле2РасширеннаяПодсказка + + Left + + + + ТаблицаСопоставленияУправлениеПоискомКонтекстноеМеню 382 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле2КонтекстноеМеню - 61 true - InputField - Auto - true - Left - true - + SearchControlAddition + ТаблицаСопоставления + + true + + + + ТаблицаСопоставленияРасширеннаяПодсказка + 374 + Label + true + true + + Left + + + + ТаблицаСопоставленияКонтекстноеМеню + 23 + + ТаблицаСопоставленияКонтекстноеМенюГруппаСвязи + 296 + + КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставление + 279 + true + true + + true + + false + + КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставлениеРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + Form.Command.ДобавитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставление + 280 + true + true + + true + + false + + КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставлениеРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + Form.Command.ОтменитьСопоставление + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица сопоставления контекстное меню группа связи</value> + + + ru + Таблица сопоставления контекстное меню группа связи + + + ТаблицаСопоставленияКонтекстноеМенюГруппаСвязиРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + + + + ТаблицаСопоставленияКонтекстноеМенюГруппаНайти + 297 + + ТаблицаСопоставленияКонтекстноеМенюНайти + 289 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюНайтиРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаСопоставленияКонтекстноеМенюОтменитьПоиск + 290 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица сопоставления контекстное меню группа найти</value> + + + ru + Таблица сопоставления контекстное меню группа найти + + + ТаблицаСопоставленияКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + + + + ТаблицаСопоставленияКонтекстноеМенюСортировка + 291 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюСортировкаРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + Form.Command.Сортировка + Normal + Auto true true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле3 - 62 + UserCmds + Auto + + + ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписок + 311 + + ТаблицаСопоставленияКонтекстноеМенюВывестиСписок + 312 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбмена + 313 + true + true + + true + + + ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 373 + Label + true + true + + Left + + + Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица сопоставления контекстное меню группа вывести список</value> + + + ru + Таблица сопоставления контекстное меню группа вывести список + + + ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписокРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + + + true + true + true + true + true + true + MultiRow + Row +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + None + None + None + true + + + true + true + + true + + + <key>ru</key> + <value>Сопоставление объектов</value> + + + ru + Сопоставление объектов + + true + + СопоставлениеОбъектовРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОжиданиеСопоставленияОбъектов + 320 + + Рамка + 336 + + ГруппировкаСообщения + 329 + + ГруппаКартинки + 330 + + Декорация14 + 331 + true + true + + true + + + Декорация14РасширеннаяПодсказка + 424 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 332 + true + + 8 + true + 3 + true + false + + + CommonPicture.СинхронизацияДанныхАнализДанных48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинкиРасширеннаяПодсказка + 423 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения + 333 + + Декорация15 + 334 + + <key>ru</key> + <value>Выполняется анализ данных...</value> + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 426 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 335 + true + + Label + true + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщенияРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true - - ТаблицаСопоставления.ИсточникПоле3 - + + ru + Группировка сообщения + - ТаблицаСопоставленияИсточникПоле3РасширеннаяПодсказка - 384 + ГруппировкаСообщенияРасширеннаяПодсказка + 422 Label true true @@ -1161,106 +1929,14 @@ Left - - ТаблицаСопоставленияИсточникПоле3КонтекстноеМеню - 63 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле4 - 64 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле4 - - - ТаблицаСопоставленияИсточникПоле4РасширеннаяПодсказка - 386 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле4КонтекстноеМеню - 65 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТаблицаСопоставленияИсточникПоле5 - 66 - true - true - - true - - - ТаблицаСопоставления.ИсточникПоле5 - - - ТаблицаСопоставленияИсточникПоле5РасширеннаяПодсказка - 388 - Label - true - true - - Left - - - - ТаблицаСопоставленияИсточникПоле5КонтекстноеМеню - 67 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto true @@ -1270,15 +1946,14 @@ <key>ru</key> - <value>Поля источника</value> + <value>Рамка</value> - - ru - Поля источника - + true + true + true - ПоляИсточникаРасширеннаяПодсказка - 377 + РамкаРасширеннаяПодсказка + 421 Label true true @@ -1286,11 +1961,15 @@ Left - ColumnGroup - - InCell - auto - true + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto true @@ -1300,22 +1979,16 @@ <key>ru</key> - <value><Вторая программа></value> + <value>Ожидание сопоставления объектов</value> - - System.DefaultGUIFont - true - false - false - false - ru - Данные второй программы + Ожидание сопоставления объектов + true - ДанныеВторойПрограммыРасширеннаяПодсказка - 376 + ОжиданиеСопоставленияОбъектовРасширеннаяПодсказка + 420 Label true true @@ -1323,31 +1996,243 @@ Left - ColumnGroup - + Page + Vertical auto - true - true - None - - ТаблицаСопоставленияКоманднаяПанель - 24 - Left - true - - - Selection - ТаблицаСопоставленияВыбор - - - ТаблицаСопоставленияСтрокаПоиска - 353 + + ОшибкаСопоставленияОбъектов + 319 + + Рамка1 + 337 + + ГруппировкаСообщения1 + 322 + + ГруппаКартинки1 + 323 + + Декорация3 + 324 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 431 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 325 + true + + 8 + true + 3 + true + false + + + CommonPicture.Предупреждение32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки1РасширеннаяПодсказка + 430 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения1 + 326 + + Декорация4 + 327 + + <key>ru</key> + <value>Не удалось выполнить анализ данных.</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 433 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 328 + true + + Label + true + 3 + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения1РасширеннаяПодсказка + 432 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения1РасширеннаяПодсказка + 429 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка</value> + + true + true + true + + Рамка1РасширеннаяПодсказка + 428 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ошибка сопоставления объектов</value> + + + ru + Ошибка сопоставления объектов + + true - ТаблицаСопоставленияСтрокаПоискаРасширеннаяПодсказка - 355 + ОшибкаСопоставленияОбъектовРасширеннаяПодсказка + 427 Label true true @@ -1355,67 +2240,25 @@ Left - - ТаблицаСопоставленияСтрокаПоискаКонтекстноеМеню - 354 - true - - ТаблицаСопоставления - - true + Page + + Vertical + auto - - - ТаблицаСопоставленияСостояниеПросмотра - 356 - - ТаблицаСопоставленияСостояниеПросмотраРасширеннаяПодсказка - 358 - Label - true - true - - Left - - - - ТаблицаСопоставленияСостояниеПросмотраКонтекстноеМеню - 357 - true - - ViewStatusAddition - ТаблицаСопоставления - - true - - - - ТаблицаСопоставленияУправлениеПоиском - 359 - - ТаблицаСопоставленияУправлениеПоискомРасширеннаяПодсказка - 361 - Label - true - true - - Left - - - - ТаблицаСопоставленияУправлениеПоискомКонтекстноеМеню - 360 - true - - SearchControlAddition - ТаблицаСопоставления - - true - - + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + true - ТаблицаСопоставленияРасширеннаяПодсказка - 352 + ПанельОсновнаяРасширеннаяПодсказка + 362 Label true true @@ -1423,305 +2266,10 @@ Left - - ТаблицаСопоставленияКонтекстноеМеню - 23 - - ТаблицаСопоставленияКонтекстноеМенюГруппаСвязи - 296 - - КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставление - 279 - true - true - - true - - false - - КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставлениеРасширеннаяПодсказка - 343 - Label - true - true - - Left - - - Form.Command.ДобавитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - - КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставление - 280 - true - true - - true - - false - - КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставлениеРасширеннаяПодсказка - 344 - Label - true - true - - Left - - - Form.Command.ОтменитьСопоставление - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа связи</value> - - - ru - Таблица сопоставления контекстное меню группа связи - - - ТаблицаСопоставленияКонтекстноеМенюГруппаСвязиРасширеннаяПодсказка - 342 - Label - true - true - - Left - - - - - - ТаблицаСопоставленияКонтекстноеМенюГруппаНайти - 297 - - ТаблицаСопоставленияКонтекстноеМенюНайти - 289 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюНайтиРасширеннаяПодсказка - 346 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаСопоставленияКонтекстноеМенюОтменитьПоиск - 290 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 347 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа найти</value> - - - ru - Таблица сопоставления контекстное меню группа найти - - - ТаблицаСопоставленияКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка - 345 - Label - true - true - - Left - - - - - - ТаблицаСопоставленияКонтекстноеМенюСортировка - 291 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюСортировкаРасширеннаяПодсказка - 348 - Label - true - true - - Left - - - Form.Command.Сортировка - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписок - 311 - - ТаблицаСопоставленияКонтекстноеМенюВывестиСписок - 312 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 350 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбмена - 313 - true - true - - true - - - ТаблицаСопоставленияКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 351 - Label - true - true - - Left - - - Form.Item.ТаблицаСопоставления.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Таблица сопоставления контекстное меню группа вывести список</value> - - - ru - Таблица сопоставления контекстное меню группа вывести список - - - ТаблицаСопоставленияКонтекстноеМенюГруппаВывестиСписокРасширеннаяПодсказка - 349 - Label - true - true - - Left - - - - - - true - true - true - true - true - true - MultiRow - Row -
            true
            - 1 - 1 - AutoUse - AutoUse - true - true - true - Auto - Auto - true - true - true - true - None - None - None - true - + Pages + + Auto + ИнформацияДайджестаСопоставления @@ -1740,7 +2288,7 @@ КартинкаИнформацияОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка - 399 + 435 Label true true @@ -1777,7 +2325,7 @@ КоличествоОбъектовСопоставленныхРасширеннаяПодсказка - 400 + 436 Label true true @@ -1827,7 +2375,7 @@ НадписьШтРасширеннаяПодсказка - 402 + 438 Label true true @@ -1860,7 +2408,7 @@ КоличествоОбъектовНесопоставленныхРасширеннаяПодсказка - 403 + 439 Label true true @@ -1910,7 +2458,7 @@ НадписьШт1РасширеннаяПодсказка - 405 + 441 Label true true @@ -1945,7 +2493,7 @@ ИнформацияДайджестаСопоставленияРасширеннаяПодсказка - 398 + 434 Label true true @@ -1977,7 +2525,7 @@ СтраницаСопоставленияРасширеннаяПодсказка - 318 + 338 Label true true @@ -2003,6 +2551,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -2034,7 +2586,6 @@ true Vertical true - true true UseIfNecessary auto @@ -2703,6 +3254,361 @@ 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> + + 13 + + Number + + 3 + true + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 14 + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 15 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 16 + + Boolean + + + true + + + true + + + + АдресВременногоХранилища + + <key>ru</key> + <value>Адрес временного хранилища</value> + + 17 + + String + + + + true + + + true + + + + ПрименитьТаблицуНеутвержденныхЗаписей + + <key>ru</key> + <value>Применить таблицу неутвержденных записей</value> + + 18 + + Boolean + + + true + + + true + + + + ПрименитьРезультатАвтоматическогоСопоставления + + <key>ru</key> + <value>Применить результат автоматического сопоставления</value> + + 19 + + Boolean + + + true + + + true + + + + АдресТаблицыАвтоматическиСопоставленныхОбъектов + + <key>ru</key> + <value>Адрес таблицы автоматически сопоставленных объектов</value> + + 20 + + String + + + + true + + + true + + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 21 + + Boolean + + + true + + + true + + + + ВыдаватьПредупреждениеПриЗакрытииФормы + + <key>ru</key> + <value>Выдавать предупреждение при закрытии формы</value> + + 22 + + Boolean + + + true + + + true + + ДобавитьСопоставление diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index d7322672e..4f8c1dc13 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,5 +1,3 @@ -&НаКлиенте -Перем ВыдаватьПредупреждениеПриЗакрытииФормы; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -17,11 +15,7 @@ // проверка, что форма открыта программно Если Не Параметры.Свойство("ИмяФайлаСообщенияОбмена") Тогда - - НСтрока = НСтр("ru = 'Форма обработки не может быть открыта интерактивно.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); - Возврат; - + ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; ВыполнятьСопоставлениеДанных = Истина; @@ -55,7 +49,7 @@ // установка отбора по умолчанию ОтборПоСтатусуСопоставления = "НесопоставленныеОбъекты"; - // установка заголока формы + // установка заголовка формы ПредставлениеДанных = Строка(Метаданные.НайтиПоТипу(Тип(Объект.ТипПриемникаСтрокой))); Заголовок = НСтр("ru = 'Сопоставление данных ""[ПредставлениеДанных]""'"); Заголовок = СтрЗаменить(Заголовок, "[ПредставлениеДанных]", ПредставлениеДанных); @@ -84,6 +78,14 @@ НаименованиеЭтойПрограммы, НаименованиеВторойПрограммы ); + + СценарийВыполненияСопоставленияОбъектов(); + + ПрименитьТаблицуНеутвержденныхЗаписей = Ложь; + ПрименитьРезультатАвтоматическогоСопоставления = Ложь; + АдресТаблицыАвтоматическиСопоставленныхОбъектов = ""; + ЗаписатьИЗакрыть = Ложь; + КонецПроцедуры &НаКлиенте @@ -91,16 +93,20 @@ ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; - Обновить(Неопределено); - // устанавливает флаг модифицированности формы ПодключитьОбработчикОжидания("УстановитьМодифицированностьФормы", 2); + ОбновитьТаблицуСопоставления() + КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если ЗаписатьИЗакрыть Тогда + Возврат; + КонецЕсли; + Если Объект.ТаблицаНеутвержденныхСвязей.Количество() > 0 Тогда Если ВыдаватьПредупреждениеПриЗакрытииФормы = Истина Тогда @@ -129,14 +135,11 @@ ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; - // применяем таблицу неутвержденных связей - ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); + ЗаписатьИЗакрыть = Истина; - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Возникли ошибки.'")); - - КонецЕсли; + ОбновитьТаблицуСопоставления(); + + Отказ = Истина; КонецЕсли; @@ -153,6 +156,115 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаАвтоматическогоСопоставления") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + // выполняем автоматическое сопоставление объектов + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяТаблицыПриемника", Объект.ИмяТаблицыПриемника); + ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", Объект.ИмяТипаОбъектаТаблицыИсточника); + ПараметрыФормы.Вставить("ТипИсточникаСтрокой", Объект.ТипИсточникаСтрокой); + ПараметрыФормы.Вставить("ТипПриемникаСтрокой", Объект.ТипПриемникаСтрокой); + ПараметрыФормы.Вставить("ПоляТаблицыПриемника", Объект.ПоляТаблицыПриемника); + ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", Объект.ПоляПоискаТаблицыПриемника); + ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыФормы.Вставить("СписокПолейТаблицы", Объект.СписокПолейТаблицы.Скопировать()); + ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); + ПараметрыФормы.Вставить("СписокПолейСопоставления", ВыбранноеЗначение.Скопировать()); + ПараметрыФормы.Вставить("МаксимальноеКоличествоПользовательскихПолей", МаксимальноеКоличествоПользовательскихПолей()); + ПараметрыФормы.Вставить("Заголовок", Заголовок); + + ПараметрыФормы.Вставить("АдресВременногоХранилищаТаблицыНеутвержденныхСвязей", ПоместитьТаблицуНеутвержденныхСвязейВоВременноеХранилище()); + + // открываем форму выполнения автоматического сопоставления объектов + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.РезультатАвтоматическогоСопоставления", ПараметрыФормы, ЭтаФорма); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.РезультатАвтоматическогоСопоставления") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") + И Не ПустаяСтрока(ВыбранноеЗначение) Тогда + + ПрименитьРезультатАвтоматическогоСопоставления = Истина; + АдресТаблицыАвтоматическиСопоставленныхОбъектов = ВыбранноеЗначение; + + ОбновитьТаблицуСопоставления(); + + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицы") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Объект.СписокИспользуемыхПолей = ВыбранноеЗначение.Скопировать(); + УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); // Видимость и заголовки полей таблицы сопоставления. + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицыСопоставления") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Объект.СписокПолейТаблицы = ВыбранноеЗначение.Скопировать(); + + ЗаполнитьСписокОтмеченнымиЭлементами(Объект.СписокПолейТаблицы, Объект.СписокИспользуемыхПолей); + + // формируем Таблицу сортировки + ЗаполнитьТаблицуСортировки(Объект.СписокИспользуемыхПолей); + + // обновляем таблицу сопоставления с учетом новых полей таблицы + ОбновитьТаблицуСопоставления(); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаСортировки") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("ДанныеФормыКоллекция") Тогда + Возврат; + КонецЕсли; + + Объект.ТаблицаСортировки.Очистить(); + + // заполняем коллекцию формы полученными настройками + Для Каждого СтрокаТаблицы ИЗ ВыбранноеЗначение Цикл + ЗаполнитьЗначенияСвойств(Объект.ТаблицаСортировки.Добавить(), СтрокаТаблицы); + КонецЦикла; + + // сортируем таблицу сопоставления + ВыполнитьСортировкуТаблицы(); + + // обновляем отбор в таблицах + УстановитьОтборТабличныхЧастей(); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.ФормаВыбораСвязиСопоставления") Тогда + + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; // отказались от выбора связи для сопоставления + КонецЕсли; + + ИдентификаторСтрокиНачала = Элементы.ТаблицаСопоставления.ТекущаяСтрока; + + // вызов сервера + НайденныеСтроки = ТаблицаСопоставления.НайтиСтроки(Новый Структура("НомерПоПорядку", ВыбранноеЗначение)); + + ИдентификаторСтрокиОкончания = НайденныеСтроки[0].ПолучитьИдентификатор(); + + // обрабатываем полученное сопоставление + ДобавитьНеутвержденноеСопоставлениеНаКлиенте(ИдентификаторСтрокиНачала, ИдентификаторСтрокиОкончания); + + // переводим фокус ввода на таблицу сопоставления + ТекущийЭлемент = Элементы.ТаблицаСопоставления; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -181,31 +293,7 @@ &НаКлиенте Процедура Обновить(Команда) - Отказ = Ложь; - - // проверка на количество пользовательских полей для отображения - ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // оповещение состояния - Состояние(НСтр("ru = 'Выполняется сопоставление объектов. Пожалуйста, подождите...'")); - - ВыполнитьОбновлениеНаСервере(Отказ); - - // устанавливаем текущий отбор в табличной части сопоставления - УстановитьОтборТабличныхЧастей(); - - // устанавливаем видимость и заголовки полей таблицы сопоставления - УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'При выполнении операции сопоставления возникли ошибки.'")); - - КонецЕсли; + ОбновитьТаблицуСопоставления(); КонецПроцедуры @@ -222,56 +310,10 @@ КонецЕсли; // получаем список полей сопоставления от пользователя - ПараметрыДляФормы = Новый Структура("СписокПолейСопоставления", Объект.СписокПолейТаблицы.Скопировать()); - - СписокПолейСопоставления = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаАвтоматическогоСопоставления", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейСопоставления) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - // выполняем автоматическое сопоставление объектов ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИмяТаблицыПриемника", Объект.ИмяТаблицыПриемника); - ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", Объект.ИмяТипаОбъектаТаблицыИсточника); - ПараметрыФормы.Вставить("ТипИсточникаСтрокой", Объект.ТипИсточникаСтрокой); - ПараметрыФормы.Вставить("ТипПриемникаСтрокой", Объект.ТипПриемникаСтрокой); - ПараметрыФормы.Вставить("ПоляТаблицыПриемника", Объект.ПоляТаблицыПриемника); - ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", Объект.ПоляПоискаТаблицыПриемника); - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("СписокПолейТаблицы", Объект.СписокПолейТаблицы.Скопировать()); - ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); - ПараметрыФормы.Вставить("СписокПолейСопоставления", СписокПолейСопоставления.Скопировать()); - ПараметрыФормы.Вставить("МаксимальноеКоличествоПользовательскихПолей", МаксимальноеКоличествоПользовательскихПолей()); - ПараметрыФормы.Вставить("Заголовок", Заголовок); + ПараметрыФормы.Вставить("СписокПолейСопоставления", Объект.СписокПолейТаблицы.Скопировать()); - ПараметрыФормы.Вставить("АдресВременногоХранилищаТаблицыНеутвержденныхСвязей", ПоместитьТаблицуНеутвержденныхСвязейВоВременноеХранилище()); - - Состояние(НСтр("ru = 'Выполняется автоматическое сопоставление. Пожалуйста, подождите...'")); - - // открываем форму выполнения автоматического сопоставления объектов - АдресВременногоХранилища = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.РезультатАвтоматическогоСопоставления", ПараметрыФормы, ЭтаФорма); - - Если ТипЗнч(АдресВременногоХранилища) = Тип("Строка") Тогда - - // Применяем результат и обновляем таблицу сопоставления с учетом полученного сопоставления объектов - ПрименитьРезультатАвтоматическогоСопоставленияОбъектовИОбновить(Отказ, АдресВременногоХранилища); - - Если Не Отказ Тогда - - // устанавливаем текущий отбор - УстановитьОтборТабличныхЧастей(); - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Во время выполнения автоматического сопоставления возникли ошибки.'")); - - КонецЕсли; + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаАвтоматическогоСопоставления", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -280,7 +322,7 @@ Отказ = Ложь; - НСтрока = НСтр("ru = 'Выполнить загрузку данных в информационную базу?'"); + НСтрока = НСтр("ru = 'Получить данные в информационную базу?'"); Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Да); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; @@ -288,7 +330,7 @@ Если Объект.ДанныеУспешноЗагружены Тогда - НСтрока = НСтр("ru = 'Данные уже были успешно загружены. Выполнить загрузку данных повторно?'"); + НСтрока = НСтр("ru = 'Данные уже были получены. Выполнить получение данных повторно?'"); Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; @@ -297,17 +339,14 @@ КонецЕсли; // оповещение состояния - Состояние(НСтр("ru = 'Выполняется загрузка данных. Пожалуйста, подождите...'")); + Состояние(НСтр("ru = 'Выполняется получение данных. Пожалуйста, подождите...'")); // выполняем загрузку данных на сервере ВыполнитьЗагрузкуДанныхНаСервере(Отказ); - // обновляем данные в таблице сопоставления - Обновить(Команда); - Если Отказ Тогда - НСтрока = НСтр("ru = 'При загрузке данных возникли ошибки. + НСтрока = НСтр("ru = 'При получении данных возникли ошибки. |Перейти в журнал регистрации?'"); // Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); @@ -316,83 +355,41 @@ ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(Объект.УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); КонецЕсли; - + Возврат; КонецЕсли; + // обновляем данные в таблице сопоставления + ОбновитьТаблицуСопоставления(); + КонецПроцедуры &НаКлиенте Процедура ИзменитьПоляТаблицы(Команда) - ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокИспользуемыхПолей.Скопировать()); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СписокПолей", Объект.СписокИспользуемыхПолей.Скопировать()); - СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицы", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда - - Возврат; - - КонецЕсли; - - Объект.СписокИспользуемыхПолей = СписокПолейФормыНастройки.Скопировать(); - - // устанавливаем видимость и заголовки полей таблицы сопоставления - УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицы", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НастройкаСпискаПолейТаблицы(Команда) - Отказ = Ложь; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СписокПолей", Объект.СписокПолейТаблицы.Скопировать()); - ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокПолейТаблицы.Скопировать()); - - СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицыСопоставления", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Объект.СписокПолейТаблицы = СписокПолейФормыНастройки.Скопировать(); - - ЗаполнитьСписокОтмеченнымиЭлементами(Объект.СписокПолейТаблицы, Объект.СписокИспользуемыхПолей); - - // формируем Таблицу сортировки - ЗаполнитьТаблицуСортировки(Объект.СписокИспользуемыхПолей); - - // обновляем таблицу сопоставления с учетом новых полей таблицы - Обновить(Команда); + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицыСопоставления", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура Сортировка(Команда) - ПараметрыДляФормы = Новый Структура("ТаблицаСортировки", Объект.ТаблицаСортировки); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТаблицаСортировки", Объект.ТаблицаСортировки); - ТаблицаСортировкиРезультат = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаСортировки", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(ТаблицаСортировкиРезультат) <> Тип("ДанныеФормыКоллекция") Тогда - - Возврат; - - КонецЕсли; - - Объект.ТаблицаСортировки.Очистить(); - - // заполняем коллекцию формы полученными настройками - Для Каждого СтрокаТаблицы ИЗ ТаблицаСортировкиРезультат Цикл - - ЗаполнитьЗначенияСвойств(Объект.ТаблицаСортировки.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - // сортируем таблицу сопоставления - ВыполнитьСортировкуТаблицы(); - - // обновляем отбор в таблицах - УстановитьОтборТабличныхЧастей(); + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаСортировки", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -418,19 +415,9 @@ &НаКлиенте Процедура ЗаписатьОбновить(Команда) - Отказ = Ложь; + ПрименитьТаблицуНеутвержденныхЗаписей = Истина; - // применяем таблицу неутвержденных связей - ПрименитьТаблицуНеутвержденныхЗаписейИОбновить(Отказ); - - // устанавливаем текущий отбор в табличной части сопоставления - УстановитьОтборТабличныхЧастей(); - - Если Отказ Тогда - Предупреждение(НСтр("ru = 'Возникли ошибки.'")); - Иначе - Модифицированность = Ложь; - КонецЕсли; + ОбновитьТаблицуСопоставления(); КонецПроцедуры @@ -442,122 +429,273 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (Поставляемая часть) + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 0 Тогда + + ПорядковыйНомерПерехода = 0; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 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); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, + ИмяОсновнойСтраницы, + ИмяСтраницыНавигации = "", + ИмяСтраницыДекорации = "", + ИмяОбработчикаПриОткрытии = "", + ИмяОбработчикаПриПереходеДалее = "", + ИмяОбработчикаПриПереходеНазад = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "") + НоваяСтрока = ТаблицаПереходов.Добавить(); + + НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + + НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; + НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ВыполнитьОбновлениеНаСервере(Отказ) +&НаКлиенте +Процедура ПерейтиДалее() - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // выполняем сопоставление объектов - ОбработкаОбъект.ВыполнитьСопоставлениеОбъектов(Отказ); - - // {Дайджест сопоставления} - КоличествоОбъектовВИсточнике = ОбработкаОбъект.КоличествоОбъектовВИсточнике(); - КоличествоОбъектовВПриемнике = ОбработкаОбъект.КоличествоОбъектовВПриемнике(); - КоличествоОбъектовСопоставленных = ОбработкаОбъект.КоличествоОбъектовСопоставленных(); - КоличествоОбъектовНесопоставленных = ОбработкаОбъект.КоличествоОбъектовНесопоставленных(); - ПроцентСопоставленияОбъектов = ОбработкаОбъект.ПроцентСопоставленияОбъектов(); - ИндексКартинки = ОбменДаннымиСервер.ИндексКартинкиТаблицыИнформацииСтатистики(КоличествоОбъектовНесопоставленных, Объект.ДанныеУспешноЗагружены); - - Если Не Отказ Тогда - - ТаблицаСопоставления.Загрузить(ОбработкаОбъект.ТаблицаСопоставления()); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - КонецЕсли; + ИзменитьПорядковыйНомерПерехода(+1); КонецПроцедуры -&НаСервере -Процедура ПрименитьРезультатАвтоматическогоСопоставленияОбъектовИОбновить(Отказ, Знач АдресВременногоХранилища) +&НаКлиенте +Процедура ПерейтиНазад() - Если ЭтоАдресВременногоХранилища(АдресВременногоХранилища) Тогда - - ТаблицаАвтоматическиСопоставленныхОбъектовПользователя = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); - - УдалитьИзВременногоХранилища(АдресВременногоХранилища); - - Если ТаблицаАвтоматическиСопоставленныхОбъектовПользователя.Количество() = 0 Тогда - Возврат; // таблица пустая; выходим - КонецЕсли; - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // дополняем таблицу неутвержденных связей - Для Каждого СтрокаТаблицы ИЗ ТаблицаАвтоматическиСопоставленныхОбъектовПользователя Цикл - - ЗаполнитьЗначенияСвойств(ОбработкаОбъект.ТаблицаНеутвержденныхСвязей.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - // получаем таблицу сопоставления с учетом обновления таблицы неутвержденных связей - ОбработкаОбъект.ВыполнитьСопоставлениеОбъектов(Отказ); - - // {Дайджест сопоставления} - КоличествоОбъектовВИсточнике = ОбработкаОбъект.КоличествоОбъектовВИсточнике(); - КоличествоОбъектовВПриемнике = ОбработкаОбъект.КоличествоОбъектовВПриемнике(); - КоличествоОбъектовСопоставленных = ОбработкаОбъект.КоличествоОбъектовСопоставленных(); - КоличествоОбъектовНесопоставленных = ОбработкаОбъект.КоличествоОбъектовНесопоставленных(); - ПроцентСопоставленияОбъектов = ОбработкаОбъект.ПроцентСопоставленияОбъектов(); - ИндексКартинки = ОбменДаннымиСервер.ИндексКартинкиТаблицыИнформацииСтатистики(КоличествоОбъектовНесопоставленных, Объект.ДанныеУспешноЗагружены); - - Если Не Отказ Тогда - - ТаблицаСопоставления.Загрузить(ОбработкаОбъект.ТаблицаСопоставления()); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПрименитьТаблицуНеутвержденныхЗаписейИОбновить(Отказ) - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // применяем таблицу неутвержденных связей к базе данных - ОбработкаОбъект.ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); - - Если Не Отказ Тогда - - // получаем таблицу сопоставления с учетом обновления таблицы неутвержденных связей - ОбработкаОбъект.ВыполнитьСопоставлениеОбъектов(Отказ); - - // {Дайджест сопоставления} - КоличествоОбъектовВИсточнике = ОбработкаОбъект.КоличествоОбъектовВИсточнике(); - КоличествоОбъектовВПриемнике = ОбработкаОбъект.КоличествоОбъектовВПриемнике(); - КоличествоОбъектовСопоставленных = ОбработкаОбъект.КоличествоОбъектовСопоставленных(); - КоличествоОбъектовНесопоставленных = ОбработкаОбъект.КоличествоОбъектовНесопоставленных(); - ПроцентСопоставленияОбъектов = ОбработкаОбъект.ПроцентСопоставленияОбъектов(); - ИндексКартинки = ОбменДаннымиСервер.ИндексКартинкиТаблицыИнформацииСтатистики(КоличествоОбъектовНесопоставленных, Объект.ДанныеУспешноЗагружены); - - КонецЕсли; - - Если Не Отказ Тогда - - ТаблицаСопоставления.Загрузить(ОбработкаОбъект.ТаблицаСопоставления()); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПрименитьТаблицуНеутвержденныхЗаписей(Отказ) - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // применяем таблицу неутвержденных связей к базе данных - ОбработкаОбъект.ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + ИзменитьПорядковыйНомерПерехода(-1); КонецПроцедуры @@ -682,7 +820,7 @@ &НаСервере Функция ПоместитьТаблицуНеутвержденныхСвязейВоВременноеХранилище() - Возврат ПоместитьВоВременноеХранилище(Объект.ТаблицаНеутвержденныхСвязей.Выгрузить()); + Возврат ПоместитьВоВременноеХранилище(Объект.ТаблицаНеутвержденныхСвязей.Выгрузить(), УникальныйИдентификатор); КонецФункции @@ -702,6 +840,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьТаблицуСопоставления() + + Элементы.КнопкиТаблицы.Доступность = Ложь; + Элементы.ГруппаЗаголовкаТаблицы.Доступность = Ложь; + + ПорядковыйНомерПерехода = 0; + + // Позиционируемся на втором шаге помощника + УстановитьПорядковыйНомерПерехода(2); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прикладные @@ -845,7 +996,7 @@ ПараметрыОтбора = Новый Структура("СтатусСопоставления", ?(ТекущиеДанные.СтатусСопоставления = -1, 1, -1)); // вызов сервера - ПараметрыФормы = Новый Структура(); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("АдресВременногоХранилища", ПолучитьАдресВременногоХранилищаТаблицыВыбораСвязи(ПараметрыОтбора)); ПараметрыФормы.Вставить("НомерПоПорядкуСтрокиНачала", ТекущиеДанные.НомерПоПорядку); ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); @@ -854,24 +1005,7 @@ ПараметрыФормы.Вставить("Программа1", ?(ТекущиеДанные.СтатусСопоставления = -1, НаименованиеВторойПрограммы, НаименованиеЭтойПрограммы)); ПараметрыФормы.Вставить("Программа2", ?(ТекущиеДанные.СтатусСопоставления = -1, НаименованиеЭтойПрограммы, НаименованиеВторойПрограммы)); - // вызов сервера - НомерПоПорядкуСтрокиОкончания = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.ФормаВыбораСвязиСопоставления", ПараметрыФормы, ЭтаФорма); - - Если НомерПоПорядкуСтрокиОкончания = Неопределено Тогда - Возврат; // отказались от выбора связи для сопоставления - КонецЕсли; - - // вызов сервера - НайденныеСтроки = ТаблицаСопоставления.НайтиСтроки(Новый Структура("НомерПоПорядку", НомерПоПорядкуСтрокиОкончания)); - - ИдентификаторСтрокиОкончания = НайденныеСтроки[0].ПолучитьИдентификатор(); - - // обрабатываем полученное сопоставление - ДобавитьНеутвержденноеСопоставлениеНаКлиенте(ИдентификаторСтрокиНачала, ИдентификаторСтрокиОкончания); - - // переводим фокус ввода на таблицу сопоставления - ТекущийЭлемент = Элементы.ТаблицаСопоставления; - + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.ФормаВыбораСвязиСопоставления", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -1046,3 +1180,244 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикОжиданияФоновогоЗадания() + + ДлительнаяОперацияЗавершена = Ложь; + + Состояние = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); + + Если Состояние = "Активно" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + + ИначеЕсли Состояние = "Завершено" Тогда + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + + ПерейтиДалее(); + + Иначе // ЗавершеноАварийно + + ДлительнаяОперация = Ложь; + + ПерейтиНазад(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий переходов + +// Страница 0: Ошибка сопоставления объектов +// +&НаКлиенте +Функция Подключаемый_ОшибкаСопоставленияОбъектов_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ПрименитьТаблицуНеутвержденныхЗаписей = Ложь; + ПрименитьРезультатАвтоматическогоСопоставления = Ложь; + АдресТаблицыАвтоматическиСопоставленныхОбъектов = ""; + ЗаписатьИЗакрыть = Ложь; + + Элементы.КнопкиТаблицы.Доступность = Истина; + Элементы.ГруппаЗаголовкаТаблицы.Доступность = Истина; + +КонецФункции + + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектов_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + // проверка на количество пользовательских полей для отображения + ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); + + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; + + ВыполнитьСопоставлениеОбъектов(Отказ); + +КонецФункции + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектовДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияФоновогоЗадания", 5, Истина); + + КонецЕсли; + +КонецФункции + +// Страница 1 (ожидание): Сопоставление объектов +// +&НаКлиенте +Функция Подключаемый_ОжиданиеСопоставленияОбъектовДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ЗаписатьИЗакрыть Тогда + ПерейтиДалее = Ложь; + Закрыть(); + Возврат Неопределено; + КонецЕсли; + + Если ДлительнаяОперацияЗавершена Тогда + + ВыполнитьСопоставлениеОбъектовОкончание(Отказ); + + КонецЕсли; + + Элементы.КнопкиТаблицы.Доступность = Истина; + Элементы.ГруппаЗаголовкаТаблицы.Доступность = Истина; + + // устанавливаем текущий отбор в табличной части сопоставления + УстановитьОтборТабличныхЧастей(); + + // устанавливаем видимость и заголовки полей таблицы сопоставления + УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); + +КонецФункции + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ВыполнитьСопоставлениеОбъектов(Отказ) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторЗадания = Неопределено; + АдресВременногоХранилища = ""; + + Попытка + + РеквизитыФормы = Новый Структура; + РеквизитыФормы.Вставить("ТолькоПрименитьТаблицуНеутвержденныхЗаписей", ЗаписатьИЗакрыть); + РеквизитыФормы.Вставить("ПрименитьТаблицуНеутвержденныхЗаписей", ПрименитьТаблицуНеутвержденныхЗаписей); + РеквизитыФормы.Вставить("ПрименитьРезультатАвтоматическогоСопоставления", ПрименитьРезультатАвтоматическогоСопоставления); + + ПараметрыМетода = Новый Структура; + ПараметрыМетода.Вставить("КонтекстОбъекта", ОбменДаннымиСервер.ПолучитьКонтекстОбъекта(РеквизитФормыВЗначение("Объект"))); + ПараметрыМетода.Вставить("РеквизитыФормы", РеквизитыФормы); + + Если ПрименитьРезультатАвтоматическогоСопоставления Тогда + ПараметрыМетода.Вставить("ТаблицаАвтоматическиСопоставленныхОбъектов", ПолучитьИзВременногоХранилища(АдресТаблицыАвтоматическиСопоставленныхОбъектов)); + КонецЕсли; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + РезультатСопоставления = Обработки.СопоставлениеОбъектовИнформационныхБаз.РезультатСопоставленияОбъектов(ПараметрыМетода); + ПослеСопоставленияОбъектов(РезультатСопоставления); + + Иначе + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.СопоставлениеОбъектовИнформационныхБаз.ВыполнитьСопоставлениеОбъектов", + ПараметрыМетода, + НСтр("ru = 'Сопоставление объектов'") + ); + + Если Результат.ЗаданиеВыполнено Тогда + + ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(Результат.АдресХранилища)); + + Иначе + + ДлительнаяОперация = Истина; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + АдресВременногоХранилища = Результат.АдресХранилища; + + КонецЕсли; + + КонецЕсли; + + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ВыполнитьСопоставлениеОбъектовОкончание(Отказ) + + Попытка + ПослеСопоставленияОбъектов(ПолучитьИзВременногоХранилища(АдресВременногоХранилища)); + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Помощник сопоставления объектов.Анализ данных'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Страница 1: Сопоставление объектов +// +&НаСервере +Процедура ПослеСопоставленияОбъектов(Знач РезультатСопоставления) + + Если ЗаписатьИЗакрыть Тогда + Возврат; + КонецЕсли; + + // {Дайджест сопоставления} + КоличествоОбъектовВИсточнике = РезультатСопоставления.КоличествоОбъектовВИсточнике; + КоличествоОбъектовВПриемнике = РезультатСопоставления.КоличествоОбъектовВПриемнике; + КоличествоОбъектовСопоставленных = РезультатСопоставления.КоличествоОбъектовСопоставленных; + КоличествоОбъектовНесопоставленных = РезультатСопоставления.КоличествоОбъектовНесопоставленных; + ПроцентСопоставленияОбъектов = РезультатСопоставления.ПроцентСопоставленияОбъектов; + ИндексКартинки = ОбменДаннымиСервер.ИндексКартинкиТаблицыИнформацииСтатистики(КоличествоОбъектовНесопоставленных, Объект.ДанныеУспешноЗагружены); + + ТаблицаСопоставления.Загрузить(РезультатСопоставления.ТаблицаСопоставления); + + ОбработкаОбъект = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); + ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(РезультатСопоставления.КонтекстОбъекта, ОбработкаОбъект); + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + Если ПрименитьТаблицуНеутвержденныхЗаписей Тогда + Модифицированность = Ложь; + КонецЕсли; + + ПрименитьТаблицуНеутвержденныхЗаписей = Ложь; + ПрименитьРезультатАвтоматическогоСопоставления = Ложь; + АдресТаблицыАвтоматическиСопоставленныхОбъектов = ""; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Инициализация переходов помощника + +&НаСервере +Процедура СценарийВыполненияСопоставленияОбъектов() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ОшибкаСопоставленияОбъектов",,, "ОшибкаСопоставленияОбъектов_ПриОткрытии"); + + // Ожидание сопоставления объектов + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектов_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектовДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСопоставленияОбъектов",,,,,, Истина, "ОжиданиеСопоставленияОбъектовДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Работа с таблицей сопоставления объектов + ТаблицаПереходовНоваяСтрока(5, "СопоставлениеОбъектов"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form index afec8014f..b1a371cf6 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form @@ -972,7 +972,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl index 87d80eb7c..cd4e5211c 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl @@ -48,7 +48,7 @@ Возврат; КонецЕсли; - ЭтаФорма.Закрыть(ТекущиеДанные.НомерПоПорядку); + ОповеститьОВыборе(ТекущиеДанные.НомерПоПорядку); КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index cb4a07318..f12df74a2 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Помощник интерактивного обмена данными предназначен для выполнения выгрузки и загрузки данных с возможностью предварительного просмотра и сопоставления загружаемых данных. По команде <strong>Автоматическое сопоставление (по умолчанию)</strong> выполняется процесс сопоставления объектов. По команде <strong>Выполнить сопоставление</strong> открывается форма для предварительно просмотра загружаемых данных и выполнения сопоставления объектов вручную. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующего обмена, сопоставляются автоматически. При использовании интерактивного режима загрузки, рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически.</p> <p>Режим интерактивного обмена данными следует использовать в случае, когда до начала обмена один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим обмена следует выбирать при первом обмене данными между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную. </p> <h3>Порядок сопоставления объектов</h3> diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl index e69de29bb..b54447cd0 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl @@ -0,0 +1,111 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +Процедура ВыполнитьСопоставлениеОбъектов(Параметры, АдресВременногоХранилища) Экспорт + + ПоместитьВоВременноеХранилище(РезультатСопоставленияОбъектов(Параметры), АдресВременногоХранилища); + +КонецПроцедуры + +Функция РезультатСопоставленияОбъектов(Параметры) Экспорт + + СопоставлениеОбъектов = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); + ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(Параметры.КонтекстОбъекта, СопоставлениеОбъектов); + + Отказ = Ложь; + + // Применяем таблицу неутвержденных связей к базе данных + Если Параметры.РеквизитыФормы.ТолькоПрименитьТаблицуНеутвержденныхЗаписей Тогда + + СопоставлениеОбъектов.ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки в процессе сопоставления объектов.'"); + КонецЕсли; + + Возврат Неопределено; + КонецЕсли; + + // Применяем результаты автоматического сопоставления объектов, полученные пользователем + Если Параметры.РеквизитыФормы.ПрименитьРезультатАвтоматическогоСопоставления Тогда + + // дополняем таблицу неутвержденных связей + Для Каждого СтрокаТаблицы ИЗ Параметры.ТаблицаАвтоматическиСопоставленныхОбъектов Цикл + + ЗаполнитьЗначенияСвойств(СопоставлениеОбъектов.ТаблицаНеутвержденныхСвязей.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + КонецЕсли; + + // Применяем таблицу неутвержденных связей к базе данных + Если Параметры.РеквизитыФормы.ПрименитьТаблицуНеутвержденныхЗаписей Тогда + + СопоставлениеОбъектов.ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки в процессе сопоставления объектов.'"); + КонецЕсли; + + КонецЕсли; + + // Получаем таблицу сопоставления + СопоставлениеОбъектов.ВыполнитьСопоставлениеОбъектов(Отказ); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки в процессе сопоставления объектов.'"); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("КоличествоОбъектовВИсточнике", СопоставлениеОбъектов.КоличествоОбъектовВИсточнике()); + Результат.Вставить("КоличествоОбъектовВПриемнике", СопоставлениеОбъектов.КоличествоОбъектовВПриемнике()); + Результат.Вставить("КоличествоОбъектовСопоставленных", СопоставлениеОбъектов.КоличествоОбъектовСопоставленных()); + Результат.Вставить("КоличествоОбъектовНесопоставленных", СопоставлениеОбъектов.КоличествоОбъектовНесопоставленных()); + Результат.Вставить("ПроцентСопоставленияОбъектов", СопоставлениеОбъектов.ПроцентСопоставленияОбъектов()); + Результат.Вставить("ТаблицаСопоставления", СопоставлениеОбъектов.ТаблицаСопоставления()); + + Результат.Вставить("КонтекстОбъекта", ОбменДаннымиСервер.ПолучитьКонтекстОбъекта(СопоставлениеОбъектов)); + + Возврат Результат; +КонецФункции + +// + +Процедура ВыполнитьАвтоматическоеСопоставлениеОбъектов(Параметры, АдресВременногоХранилища) Экспорт + + ПоместитьВоВременноеХранилище(РезультатАвтоматическогоСопоставленияОбъектов(Параметры), АдресВременногоХранилища); + +КонецПроцедуры + +Функция РезультатАвтоматическогоСопоставленияОбъектов(Параметры) Экспорт + + СопоставлениеОбъектов = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); + ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(Параметры.КонтекстОбъекта, СопоставлениеОбъектов); + + // определяем свойство "СписокИспользуемыхПолей" + СопоставлениеОбъектов.СписокИспользуемыхПолей.Очистить(); + ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.РеквизитыФормы.СписокИспользуемыхПолей, СопоставлениеОбъектов.СписокИспользуемыхПолей); + + // определяем свойство "СписокПолейТаблицы" + СопоставлениеОбъектов.СписокПолейТаблицы.Очистить(); + ОбщегоНазначенияКлиентСервер.ЗаполнитьКоллекциюСвойств(Параметры.РеквизитыФормы.СписокПолейТаблицы, СопоставлениеОбъектов.СписокПолейТаблицы); + + // загружаем таблицу неутвержденных связей + СопоставлениеОбъектов.ТаблицаНеутвержденныхСвязей.Загрузить(Параметры.ТаблицаНеутвержденныхСвязей); + + Отказ = Ложь; + + // получаем таблицу автоматического сопоставления объектов + СопоставлениеОбъектов.ВыполнитьАвтоматическоеСопоставлениеОбъектов(Отказ, Параметры.РеквизитыФормы.СписокПолейСопоставления); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки в процессе автоматического сопоставления объектов.'"); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ПустойРезультат", СопоставлениеОбъектов.ТаблицаАвтоматическиСопоставленныхОбъектов.Количество() = 0); + Результат.Вставить("КонтекстОбъекта", ОбменДаннымиСервер.ПолучитьКонтекстОбъекта(СопоставлениеОбъектов)); + + Возврат Результат; +КонецФункции + +#КонецЕсли diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index f4a5323a7..e412f3240 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -96,16 +96,16 @@ КонецЦикла; + ЗафиксироватьТранзакцию(); Исключение - + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); Отказ = Истина; ОтменитьТранзакцию(); Возврат; - КонецПопытки; - ЗафиксироватьТранзакцию(); - ТаблицаНеутвержденныхСвязей.Очистить(); КонецПроцедуры @@ -1829,8 +1829,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для объекта метаданных ""%1"" не определен реквизит с именем ""%2""'"), ОбъектМетаданных.ПолноеИмя(), - Строка(Элемент.Значение) - ); + Строка(Элемент.Значение)); КонецЕсли; Представление = ""; @@ -1839,8 +1838,7 @@ Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2", ?(ПустаяСтрока(Реквизит.Синоним), Реквизит.Имя, СокрЛП(Реквизит.Синоним)), - ОбменДаннымиСервер.СтрокаНеограниченнойДлины() - ); + ОбменДаннымиСервер.СтрокаНеограниченнойДлины()); Иначе Представление = СокрЛП(Реквизит.Синоним); @@ -1889,4 +1887,4 @@ КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl index a2553f5a6..d13e9e26d 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl @@ -7,6 +7,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если ТипЗнч(ТекущийПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form new file mode 100644 index 000000000..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Form.form @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form"> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <windowOpeningMode>DontBlock</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Объект</name> + <id>1</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> +</form:Form> diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index f455da241..8c900c2de 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -254,17 +254,17 @@ Функция СоздатьВременныйКаталогСообщенийОбмена() - ВременныйКаталогСообщенийОбмена = Новый Файл(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), ОбменДаннымиСервер.ИмяВременногоКаталогаСообщенийОбмена())); - // создаем временный каталог для сообщений обмена Попытка - СоздатьКаталог(ИмяКаталогаСообщенияОбмена()); + ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(); Исключение ПолучитьСообщениеОбОшибке(4); ДополнитьСообщениеОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; + ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); + ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".xml"); ВременныйФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщения); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo index c8012a8cb..a989d3bb0 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Транспорт сообщения обмена через E-mail</value> </synonym> + <defaultForm>DataProcessor.ТранспортСообщенийОбменаEMAIL.Form.Форма</defaultForm> <attributes uuid="ab178a93-8570-43b6-ae42-f34a7cc4f359"> <name>EMAILМаксимальныйДопустимыйРазмерСообщения</name> <synonym> @@ -96,4 +97,13 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <forms uuid="14e20d48-635e-4c52-9099-e743323fc190"> + <name>Форма</name> + <synonym> + <key>ru</key> + <value>Форма</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form new file mode 100644 index 000000000..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Form.form @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form"> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <windowOpeningMode>DontBlock</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Объект</name> + <id>1</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> +</form:Form> diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 89af94569..c0597f54b 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -252,19 +252,17 @@ Если ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений Тогда - ИмяВременногоКаталога = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), ОбменДаннымиСервер.ИмяВременногоКаталогаСообщенийОбмена()); - - ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); - // создаем временный каталог для сообщений обмена Попытка - СоздатьКаталог(ИмяКаталогаСообщенияОбмена()); + ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(); Исключение ПолучитьСообщениеОбОшибке(6); ДополнитьСообщениеОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; + ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); + Иначе ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяКаталогаОбменаИнформацией()); @@ -492,8 +490,7 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаИсточника, ИмяФайлаПриемника, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); УстановитьСтрокуСообщенияОбОшибке(СтрокаСообщения); Возврат Ложь @@ -581,4 +578,4 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo index 0bca87199..b49840326 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Транспорт сообщений обмена через общий сетевой ресурс</value> </synonym> + <defaultForm>DataProcessor.ТранспортСообщенийОбменаFILE.Form.Форма</defaultForm> <attributes uuid="8f44ebad-1160-474e-a566-fb9da55ffcba"> <name>FILEКаталогОбменаИнформацией</name> <synonym> @@ -73,4 +74,13 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <forms uuid="64484611-b32c-4155-a063-7df5a3f924dd"> + <name>Форма</name> + <synonym> + <key>ru</key> + <value>Форма</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form new file mode 100644 index 000000000..643681dc9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Form.form @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form"> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <windowOpeningMode>DontBlock</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoTitle>true</autoTitle> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <autoFillCheck>true</autoFillCheck> + <allowFormCustomize>true</allowFormCustomize> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>Объект</name> + <id>1</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + <main>true</main> + </attributes> + <commandInterface> + <navigationPanel/> + <commandBar/> + </commandInterface> +</form:Form> diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl new file mode 100644 index 000000000..60eabfdab --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/Форма/Module.bsl @@ -0,0 +1,11 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru='Обработка не предназначена для непосредственного использования.'"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 186f903e1..d86a13eea 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -259,23 +259,22 @@ Функция СоздатьВременныйКаталогСообщенийОбмена() - ВременныйКаталогСообщенийОбмена = Новый Файл(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), ОбменДаннымиСервер.ИмяВременногоКаталогаСообщенийОбмена())); - // создаем временный каталог для сообщений обмена Попытка - СоздатьКаталог(ИмяКаталогаСообщенияОбмена()); + ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(); Исключение ПолучитьСообщениеОбОшибке(4); ДополнитьСообщениеОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; + ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); + ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".xml"); ВременныйФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщения); Возврат Истина; - КонецФункции Функция УдалитьВременныйКаталогСообщенийОбмена() diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo index d4958c870..6d4dc5c3c 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Транспорт сообщений обмена через FTP</value> </synonym> + <defaultForm>DataProcessor.ТранспортСообщенийОбменаFTP.Form.Форма</defaultForm> <attributes uuid="821b93bd-f0dd-4468-972a-d9b2b4de72f1"> <name>FTPСжиматьФайлИсходящегоСообщения</name> <synonym> @@ -149,4 +150,13 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <forms uuid="e4ea640f-e3a4-44ad-b17d-51f32136372e"> + <name>Форма</name> + <synonym> + <key>ru</key> + <value>Форма</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index f1e053f50..a82d0deb3 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -228,9 +228,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", ОписаниеЗначения.Значение); - ОткрытьФормуМодально( - ОписаниеЗначения.Представление + ".ФормаЗаписи", - ПараметрыФормы); + ОткрытьФорму(ОписаниеЗначения.Представление + ".ФормаЗаписи", ПараметрыФормы, ЭтаФорма); Иначе ОткрытьЗначение(Значение); КонецЕсли; @@ -306,7 +304,7 @@ КонецПроцедуры -// Возвращает веть дерева в ветви СтрокиДерева по значению Значение. +// Возвращает ветвь дерева в ветви СтрокиДерева по значению Значение. // Если ветвь не найдена - создается новая. &НаСервере Функция НайтиИлиДобавитьВетвьДерева(СтрокиДерева, Значение, Представление, Пометка) diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 9da49816d..791eef6e5 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Удаление помеченных объектов доступно пользователю с административными правами. Удаление выполняется с контролем целостности информационной базы. Это значит, что если на тот или иной объект системы (документ, элемент справочника и т.д.) ссылаются другие объекты то удаление объекта не будет выполнено. Тем не менее, следует помнить, что удаление объектов - необратимая операция. </p> <p>Удаление помеченных ранее объектов можно выполнить двумя способами:</p> <ul><li>"<strong>Автоматическое удаление всех объектов</strong>" - производится попытка автоматического удаления всех объектов, помеченных на удаление. diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 78e917593..6750506d9 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -109,8 +109,7 @@ Исключение РезультатУдаления.Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось установить монопольный режим (%1)'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат РезультатУдаления; КонецПопытки; @@ -322,4 +321,4 @@ Возврат РезультатУдаления; КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form index 25af06b0e..70fc442bc 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -30,7 +30,7 @@ </handlers> <extendedTooltip> <name>ИмяФайлаПравилРасширеннаяПодсказка</name> - <id>225</id> + <id>242</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -83,7 +83,7 @@ </userVisible> <extendedTooltip> <name>ФормаЗагрузитьПравилаРасширеннаяПодсказка</name> - <id>227</id> + <id>244</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -115,7 +115,7 @@ </toolTip> <extendedTooltip> <name>ГруппаФайлаПравилРасширеннаяПодсказка</name> - <id>224</id> + <id>241</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -150,7 +150,7 @@ </handlers> <extendedTooltip> <name>ПрямаяВыгрузкаРасширеннаяПодсказка</name> - <id>228</id> + <id>245</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -217,7 +217,7 @@ </handlers> <extendedTooltip> <name>ИмяФайлаДанныхРасширеннаяПодсказка</name> - <id>232</id> + <id>249</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -278,7 +278,7 @@ </handlers> <extendedTooltip> <name>АрхивироватьФайлРасширеннаяПодсказка</name> - <id>234</id> + <id>251</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -311,7 +311,7 @@ </dataPath> <extendedTooltip> <name>ПарольДляСжатияФайлаОбменаРасширеннаяПодсказка</name> - <id>236</id> + <id>253</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -353,7 +353,7 @@ </toolTip> <extendedTooltip> <name>ВыгрузкаВФайлРасширеннаяПодсказка</name> - <id>231</id> + <id>248</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -394,7 +394,7 @@ </handlers> <extendedTooltip> <name>ТипИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>240</id> + <id>257</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -465,7 +465,7 @@ </handlers> <extendedTooltip> <name>ВерсияПлатформыИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>242</id> + <id>259</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -532,7 +532,7 @@ <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>ТипПлатформаРасширеннаяПодсказка</name> - <id>239</id> + <id>256</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -568,7 +568,7 @@ </dataPath> <extendedTooltip> <name>КаталогИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>246</id> + <id>263</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -621,7 +621,7 @@ </toolTip> <extendedTooltip> <name>ФайловаяБазаРасширеннаяПодсказка</name> - <id>245</id> + <id>262</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -654,7 +654,7 @@ </dataPath> <extendedTooltip> <name>ИмяСервераИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>249</id> + <id>266</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -699,7 +699,7 @@ </dataPath> <extendedTooltip> <name>ИмяИнформационнойБазыНаСервереДляПодключенияРасширеннаяПодсказка</name> - <id>251</id> + <id>268</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -738,7 +738,7 @@ </toolTip> <extendedTooltip> <name>БазаНаСервереРасширеннаяПодсказка</name> - <id>248</id> + <id>265</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -766,7 +766,7 @@ </toolTip> <extendedTooltip> <name>ТипБазыРасширеннаяПодсказка</name> - <id>244</id> + <id>261</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -804,7 +804,7 @@ </handlers> <extendedTooltip> <name>АутентификацияWindowsИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>254</id> + <id>271</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -834,7 +834,7 @@ </userVisible> <extendedTooltip> <name>ТестПодключенияРасширеннаяПодсказка</name> - <id>256</id> + <id>273</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -862,7 +862,7 @@ </toolTip> <extendedTooltip> <name>АутентификацияТестРасширеннаяПодсказка</name> - <id>253</id> + <id>270</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -899,7 +899,7 @@ </dataPath> <extendedTooltip> <name>ПользовательИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>258</id> + <id>275</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -945,7 +945,7 @@ </dataPath> <extendedTooltip> <name>ПарольИнформационнойБазыДляПодключенияРасширеннаяПодсказка</name> - <id>260</id> + <id>277</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -986,7 +986,7 @@ </toolTip> <extendedTooltip> <name>ПользовательПарольРасширеннаяПодсказка</name> - <id>257</id> + <id>274</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1010,7 +1010,7 @@ </userVisible> <extendedTooltip> <name>ВыгрузкаВИБПриемникРасширеннаяПодсказка</name> - <id>238</id> + <id>255</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1039,7 +1039,7 @@ </toolTip> <extendedTooltip> <name>ПараметрыВыгрузкиРасширеннаяПодсказка</name> - <id>230</id> + <id>247</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1052,21 +1052,87 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:Button"> - <name>ФормаВыполнитьВыгрузку</name> - <id>191</id> - <title> - <key>ru</key> - <value>Выгрузить данные</value> - + + ГруппаКомандыВыгрузки + 216 + + ФормаВыполнитьВыгрузку + 191 + + <key>ru</key> + <value>Выгрузить данные</value> + + true + false + + true + + + ФормаВыполнитьВыгрузкуРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьВыгрузку + Normal + Auto + true + true + UserCmds + Auto + + + НадписьПояснениеВыгрузки + 217 + + <key>ru</key> + <value>Для выгрузки данных необходимо прочитать правила обмена</value> + + true + true + + true + + + НадписьПояснениеВыгрузкиРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + НадписьПояснениеВыгрузкиКонтекстноеМеню + 218 + true + + Label + true + true + + 69 + 81 + 133 + + + Left + + true true true - ФормаВыполнитьВыгрузкуРасширеннаяПодсказка - 262 + ГруппаКомандыВыгрузкиРасширеннаяПодсказка + 279 Label true true @@ -1074,14 +1140,14 @@ Left - UsualButton - Form.Command.ВыполнитьВыгрузку - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + true + true + Auto + Auto + ПанельВыгрузки @@ -1109,7 +1175,7 @@ ПериодВыгрузкиРасширеннаяПодсказка - 266 + 285 Label true true @@ -1152,7 +1218,7 @@ ГруппаПериодаВыгрузкиРасширеннаяПодсказка - 265 + 284 Label true true @@ -1198,7 +1264,7 @@ None ПометкаРасширеннаяПодсказка - 284 + 303 Label true true @@ -1231,7 +1297,7 @@ ПВДРасширеннаяПодсказка - 286 + 305 Label true true @@ -1267,7 +1333,7 @@ ГруппаПометкиРасширеннаяПодсказка - 283 + 302 Label true true @@ -1299,7 +1365,7 @@ СсылкаНаУзелОбменаРасширеннаяПодсказка - 288 + 307 Label true true @@ -1340,7 +1406,7 @@ ТаблицаПравилВыгрузкиЭтоГруппаРасширеннаяПодсказка - 290 + 309 Label true true @@ -1373,7 +1439,7 @@ ТаблицаПравилВыгрузкиВыгрузкаОтметитьВсеРасширеннаяПодсказка - 268 + 287 Label true true @@ -1399,7 +1465,7 @@ ТаблицаПравилВыгрузкиВыгрузкаОтменитьВсеРасширеннаяПодсказка - 269 + 288 Label true true @@ -1428,7 +1494,7 @@ ТаблицаПравилВыгрузкиВыгрузкаОчиститьУзлыОбменаРасширеннаяПодсказка - 271 + 290 Label true true @@ -1454,7 +1520,7 @@ ТаблицаПравилВыгрузкиВыгрузкаУстановитьУзелОбменаРасширеннаяПодсказка - 272 + 291 Label true true @@ -1485,7 +1551,7 @@ УзлыОбменаРасширеннаяПодсказка - 270 + 289 Label true true @@ -1511,10 +1577,10 @@ ТаблицаПравилВыгрузкиСтрокаПоиска - 274 + 293 ТаблицаПравилВыгрузкиСтрокаПоискаРасширеннаяПодсказка - 276 + 295 Label true true @@ -1524,7 +1590,7 @@ ТаблицаПравилВыгрузкиСтрокаПоискаКонтекстноеМеню - 275 + 294 true ТаблицаПравилВыгрузки @@ -1534,10 +1600,10 @@ ТаблицаПравилВыгрузкиСостояниеПросмотра - 277 + 296 ТаблицаПравилВыгрузкиСостояниеПросмотраРасширеннаяПодсказка - 279 + 298 Label true true @@ -1547,7 +1613,7 @@ ТаблицаПравилВыгрузкиСостояниеПросмотраКонтекстноеМеню - 278 + 297 true ViewStatusAddition @@ -1558,10 +1624,10 @@ ТаблицаПравилВыгрузкиУправлениеПоиском - 280 + 299 ТаблицаПравилВыгрузкиУправлениеПоискомРасширеннаяПодсказка - 282 + 301 Label true true @@ -1571,7 +1637,7 @@ ТаблицаПравилВыгрузкиУправлениеПоискомКонтекстноеМеню - 281 + 300 true SearchControlAddition @@ -1582,7 +1648,7 @@ ТаблицаПравилВыгрузкиРасширеннаяПодсказка - 273 + 292 Label true true @@ -1635,7 +1701,7 @@ ВыгружаемыеДанныеРасширеннаяПодсказка - 264 + 283 Label true true @@ -1677,7 +1743,7 @@ ТаблицаНастройкиПараметровНаименованиеРасширеннаяПодсказка - 313 + 332 Label true true @@ -1718,7 +1784,7 @@ ТаблицаНастройкиПараметровЗначениеРасширеннаяПодсказка - 315 + 334 Label true true @@ -1758,7 +1824,7 @@ ТаблицаНастройкиПараметровВосстановитьПараметрыРасширеннаяПодсказка - 301 + 320 Label true true @@ -1784,7 +1850,7 @@ ТаблицаНастройкиПараметровСохранитьПараметрыРасширеннаяПодсказка - 302 + 321 Label true true @@ -1804,10 +1870,10 @@ ТаблицаНастройкиПараметровСтрокаПоиска - 304 + 323 ТаблицаНастройкиПараметровСтрокаПоискаРасширеннаяПодсказка - 306 + 325 Label true true @@ -1817,7 +1883,7 @@ ТаблицаНастройкиПараметровСтрокаПоискаКонтекстноеМеню - 305 + 324 true ТаблицаНастройкиПараметров @@ -1827,10 +1893,10 @@ ТаблицаНастройкиПараметровСостояниеПросмотра - 307 + 326 ТаблицаНастройкиПараметровСостояниеПросмотраРасширеннаяПодсказка - 309 + 328 Label true true @@ -1840,7 +1906,7 @@ ТаблицаНастройкиПараметровСостояниеПросмотраКонтекстноеМеню - 308 + 327 true ViewStatusAddition @@ -1851,10 +1917,10 @@ ТаблицаНастройкиПараметровУправлениеПоиском - 310 + 329 ТаблицаНастройкиПараметровУправлениеПоискомРасширеннаяПодсказка - 312 + 331 Label true true @@ -1864,7 +1930,7 @@ ТаблицаНастройкиПараметровУправлениеПоискомКонтекстноеМеню - 311 + 330 true SearchControlAddition @@ -1875,7 +1941,7 @@ ТаблицаНастройкиПараметровРасширеннаяПодсказка - 303 + 322 Label true true @@ -1929,7 +1995,7 @@ ПараметрыРасширеннаяПодсказка - 300 + 319 Label true true @@ -1960,7 +2026,7 @@ None КомментарийРасширеннаяПодсказка - 326 + 345 Label true true @@ -2004,7 +2070,7 @@ ЗакладкаКомментарийРасширеннаяПодсказка - 325 + 344 Label true true @@ -2033,7 +2099,7 @@ ПанельВыгрузкиРасширеннаяПодсказка - 263 + 282 Label true true @@ -2050,79 +2116,6 @@ ОтладкаВыгрузки 57 - - ФлагРежимОтладкиОбработчиковВыгрузки - 54 - - <key>ru</key> - <value>Режим отладки обработчиков выгрузки</value> - - true - true - - true - - - Объект.ФлагРежимОтладкиОбработчиков - - Right - - OnChange - ФлагРежимОтладкиОбработчиковВыгрузкиПриИзменении - - - ФлагРежимОтладкиОбработчиковВыгрузкиРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - - ФлагРежимОтладкиОбработчиковВыгрузкиКонтекстноеМеню - 55 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкаОтладкиВыгрузки - 56 - - <key>ru</key> - <value>Настройка отладки выгрузки...</value> - - true - true - - true - - - НастройкаОтладкиВыгрузкиРасширеннаяПодсказка - 331 - Label - true - true - - Left - - - UsualButton - Form.Command.НастройкаОтладкиВыгрузки - Normal - Auto - true - true - UserCmds - Auto - true true @@ -2134,7 +2127,7 @@ ОтладкаВыгрузкиРасширеннаяПодсказка - 328 + 347 Label true true @@ -2151,6 +2144,216 @@ Auto + + СтраницыОтладкиВыгрузки + 221 + + ГруппаВыгрузкаОтладкаДоступна + 222 + + ФлагРежимОтладкиОбработчиковВыгрузки + 54 + + <key>ru</key> + <value>Режим отладки обработчиков выгрузки</value> + + true + true + + true + + + Объект.ФлагРежимОтладкиОбработчиков + + Right + + OnChange + ФлагРежимОтладкиОбработчиковВыгрузкиПриИзменении + + + ФлагРежимОтладкиОбработчиковВыгрузкиРасширеннаяПодсказка + 350 + Label + true + true + + Left + + + + ФлагРежимОтладкиОбработчиковВыгрузкиКонтекстноеМеню + 55 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаОтладкиВыгрузки + 56 + + <key>ru</key> + <value>Настройка отладки выгрузки...</value> + + true + true + + true + + + НастройкаОтладкиВыгрузкиРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаОтладкиВыгрузки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаВыгрузкаОтладкаДоступнаРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + Page + + auto + + + + ГруппаВыгрузкаВебКлиент + 223 + + ДекорацияИнформацияВыгрузка + 224 + true + true + + true + + + ДекорацияИнформацияВыгрузкаРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + + ДекорацияИнформацияВыгрузкаКонтекстноеМеню + 225 + true + + 2 + true + 1 + true + + + + + + ДекорацияОтладкаВыгрузки + 219 + + <key>ru</key> + <value>Возможности отладки недоступны при использовании веб-клиента</value> + + true + true + + true + + + ДекорацияОтладкаВыгрузкиРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ДекорацияОтладкаВыгрузкиКонтекстноеМеню + 220 + true + + Label + true + true + + 69 + 81 + 133 + + + Left + + + true + true + + true + + + ГруппаВыгрузкаВебКлиентРасширеннаяПодсказка + 353 + Label + true + true + + Left + + + Page + + + true + true + + true + + + СтраницыОтладкиВыгрузкиРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + Pages + + Auto + + true true @@ -2166,7 +2369,7 @@ ВыгрузкаРасширеннаяПодсказка - 223 + 240 Label true true @@ -2197,7 +2400,7 @@ ФормаВыполнитьЗагрузкуРасширеннаяПодсказка - 333 + 357 Label true true @@ -2235,7 +2438,7 @@ ИмяФайлаОбменаРасширеннаяПодсказка - 334 + 358 Label true true @@ -2291,7 +2494,7 @@ ПарольДляРаспаковкиФайлаОбменаРасширеннаяПодсказка - 336 + 360 Label true true @@ -2340,7 +2543,7 @@ ИспользоватьТранзакцииРасширеннаяПодсказка - 338 + 362 Label true true @@ -2377,7 +2580,7 @@ КоличествоОбъектовНаТранзакциюРасширеннаяПодсказка - 340 + 364 Label true true @@ -2419,7 +2622,7 @@ Right ЗагружатьДанныеВРежимеОбменаРасширеннаяПодсказка - 342 + 366 Label true true @@ -2453,7 +2656,7 @@ Right ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъектыРасширеннаяПодсказка - 344 + 368 Label true true @@ -2487,7 +2690,7 @@ Right ОбъектыПоСсылкеЗагружатьБезПометкиУдаленияРасширеннаяПодсказка - 346 + 370 Label true true @@ -2521,7 +2724,7 @@ Right ОптимизированнаяЗаписьОбъектовРасширеннаяПодсказка - 348 + 372 Label true true @@ -2555,7 +2758,7 @@ Right ЗаписыватьРегистрыНаборамиЗаписейРасширеннаяПодсказка - 350 + 374 Label true true @@ -2589,7 +2792,7 @@ Right ОбрезатьСтрокиСправаРасширеннаяПодсказка - 352 + 376 Label true true @@ -2626,7 +2829,7 @@ НастройкаАвтоматическойЗагрузкиДанныхРасширеннаяПодсказка - 354 + 378 Label true true @@ -2694,7 +2897,7 @@ ВерсияПравилОбменаРасширеннаяПодсказка - 358 + 382 Label true true @@ -2731,7 +2934,7 @@ ПолучитьИнформациюОФайлеОбменаРасширеннаяПодсказка - 360 + 384 Label true true @@ -2759,7 +2962,7 @@ ВерсияПравилГруппаРасширеннаяПодсказка - 357 + 381 Label true true @@ -2789,7 +2992,7 @@ ДатаВыгрузкиДанныхРасширеннаяПодсказка - 361 + 385 Label true true @@ -2829,7 +3032,7 @@ ПериодВыгрузкиДанныхРасширеннаяПодсказка - 363 + 387 Label true true @@ -2867,7 +3070,7 @@ Left КомментарийЗагрузкиРасширеннаяПодсказка - 365 + 389 Label true true @@ -2911,7 +3114,7 @@ ИнформацияОФайлеОбменаРасширеннаяПодсказка - 356 + 380 Label true true @@ -2932,31 +3135,92 @@ - ОтладкаЗагрузки - 92 - - ФлагРежимОтладкиОбработчиковЗагрузки - 90 - - <key>ru</key> - <value>Режим отладки обработчиков загрузки</value> - + СтраницыОтладкиЗагрузки + 226 + + ГруппаЗагрузкаОтладкаДоступна + 227 + + ФлагРежимОтладкиОбработчиковЗагрузки + 90 + + <key>ru</key> + <value>Режим отладки обработчиков загрузки</value> + + true + true + + true + + + Объект.ФлагРежимОтладкиОбработчиков + + Right + + OnChange + ФлагРежимОтладкиОбработчиковЗагрузкиПриИзменении + + + ФлагРежимОтладкиОбработчиковЗагрузкиРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + + ФлагРежимОтладкиОбработчиковЗагрузкиКонтекстноеМеню + 91 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаОтладкиЗагрузки + 93 + + <key>ru</key> + <value>Настройка отладки загрузки...</value> + + true + true + + true + + + НастройкаОтладкиЗагрузкиРасширеннаяПодсказка + 395 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаОтладкиЗагрузки + Normal + Auto + true + true + UserCmds + Auto + true true true - - Объект.ФлагРежимОтладкиОбработчиков - - Right - - OnChange - ФлагРежимОтладкиОбработчиковЗагрузкиПриИзменении - - ФлагРежимОтладкиОбработчиковЗагрузкиРасширеннаяПодсказка - 368 + ГруппаЗагрузкаОтладкаДоступнаРасширеннаяПодсказка + 392 Label true true @@ -2964,33 +3228,86 @@ Left - - ФлагРежимОтладкиОбработчиковЗагрузкиКонтекстноеМеню - 91 - true - - CheckBoxField - Enter - true - Left - true - + Page + - - НастройкаОтладкиЗагрузки - 93 - - <key>ru</key> - <value>Настройка отладки загрузки...</value> - + + ГруппаЗагрузкаВебКлиент + 228 + + ДекорацияИнформацияЗагрузка + 229 + true + true + + true + + + ДекорацияИнформацияЗагрузкаРасширеннаяПодсказка + 397 + Label + true + true + + Left + + + + ДекорацияИнформацияЗагрузкаКонтекстноеМеню + 230 + true + + 2 + true + 1 + true + false + + + + + + ДекорацияОтладкаЗагрузки + 231 + + <key>ru</key> + <value>Возможности отладки недоступны при использовании веб-клиента</value> + + true + true + + true + + + ДекорацияОтладкаЗагрузкиРасширеннаяПодсказка + 398 + Label + true + true + + Left + + + + ДекорацияОтладкаЗагрузкиКонтекстноеМеню + 232 + true + + Label + true + true + + Left + + true true true - НастройкаОтладкиЗагрузкиРасширеннаяПодсказка - 370 + ГруппаЗагрузкаВебКлиентРасширеннаяПодсказка + 396 Label true true @@ -2998,27 +3315,17 @@ Left - UsualButton - Form.Command.НастройкаОтладкиЗагрузки - Normal - Auto - true - true - UserCmds - Auto + Page + true true true - - ru - Отладка загрузки - - ОтладкаЗагрузкиРасширеннаяПодсказка - 367 + СтраницыОтладкиЗагрузкиРасширеннаяПодсказка + 391 Label true true @@ -3026,12 +3333,8 @@ Left - UsualGroup - - Auto - true - true - Auto + Pages + Auto @@ -3050,7 +3353,7 @@ ЗагрузкаРасширеннаяПодсказка - 332 + 356 Label true true @@ -3085,7 +3388,7 @@ ФлагРежимОтладкиРасширеннаяПодсказка - 372 + 400 Label true true @@ -3119,7 +3422,7 @@ Right ВыводВОкноСообщенийИнформационныхСообщенийРасширеннаяПодсказка - 374 + 402 Label true true @@ -3156,7 +3459,7 @@ КоличествоОбработанныхОбъектовДляОбновленияСтатусаРасширеннаяПодсказка - 376 + 404 Label true true @@ -3205,7 +3508,7 @@ Right ВыполнитьОбменДаннымиВОптимизированномФорматеРасширеннаяПодсказка - 379 + 407 Label true true @@ -3239,7 +3542,7 @@ Right ИспользоватьТранзакцииПриВыгрузкеДляПлановОбменаРасширеннаяПодсказка - 381 + 409 Label true true @@ -3276,7 +3579,7 @@ КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбменаРасширеннаяПодсказка - 383 + 411 Label true true @@ -3322,7 +3625,7 @@ Right ВыгружатьТолькоРазрешенныеРасширеннаяПодсказка - 385 + 413 Label true true @@ -3360,7 +3663,7 @@ Right ВестиДополнительныйКонтрольЗаписиВXMLРасширеннаяПодсказка - 387 + 415 Label true true @@ -3401,7 +3704,7 @@ ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиРасширеннаяПодсказка - 389 + 417 Label true true @@ -3473,7 +3776,7 @@ НастройкиВыгрузкиДанныхРасширеннаяПодсказка - 378 + 406 Label true true @@ -3513,7 +3816,7 @@ ИмяФайлаПротоколаОбменаРасширеннаяПодсказка - 392 + 420 Label true true @@ -3568,7 +3871,7 @@ ИмяФайлаПротоколаОбменаЗагрузкаРасширеннаяПодсказка - 394 + 422 Label true true @@ -3620,7 +3923,7 @@ Right ДописыватьДанныеВПротоколОбменаРасширеннаяПодсказка - 396 + 424 Label true true @@ -3654,7 +3957,7 @@ Right ВыводВПротоколИнформационныхСообщенийРасширеннаяПодсказка - 398 + 426 Label true true @@ -3688,7 +3991,7 @@ Right ОткрыватьПротоколыОбменаПослеВыполненияОперацийРасширеннаяПодсказка - 400 + 428 Label true true @@ -3723,7 +4026,7 @@ ПротоколОбменаРасширеннаяПодсказка - 391 + 419 Label true true @@ -3758,7 +4061,7 @@ НастройкиОбменаДаннымиРасширеннаяПодсказка - 371 + 399 Label true true @@ -3789,7 +4092,7 @@ НадписьПредупреждениеПользователяРасширеннаяПодсказка - 403 + 431 Label true true @@ -3830,7 +4133,7 @@ Right УдалятьОбъектыНаКоторыеЕстьПраваДоступаРасширеннаяПодсказка - 404 + 432 Label true true @@ -3871,7 +4174,7 @@ ПериодУдаленияРасширеннаяПодсказка - 406 + 434 Label true true @@ -3928,7 +4231,7 @@ None МетаданныеДляУдаленияПометкаРасширеннаяПодсказка - 422 + 450 Label true true @@ -3965,7 +4268,7 @@ МетаданныеДляУдаленияПредставлениеРасширеннаяПодсказка - 424 + 452 Label true true @@ -4009,7 +4312,7 @@ ГруппаМетаданныхРасширеннаяПодсказка - 421 + 449 Label true true @@ -4037,7 +4340,7 @@ УдаляемыеДанныеУдалениеОтметитьВсеРасширеннаяПодсказка - 408 + 436 Label true true @@ -4063,7 +4366,7 @@ УдаляемыеДанныеУдалениеОтменитьВсеРасширеннаяПодсказка - 409 + 437 Label true true @@ -4089,7 +4392,7 @@ УдаляемыеДанныеУдалениеУдалитьРасширеннаяПодсказка - 410 + 438 Label true true @@ -4113,10 +4416,10 @@ УдаляемыеДанныеСтрокаПоиска - 412 + 440 УдаляемыеДанныеСтрокаПоискаРасширеннаяПодсказка - 414 + 442 Label true true @@ -4126,7 +4429,7 @@ УдаляемыеДанныеСтрокаПоискаКонтекстноеМеню - 413 + 441 true УдаляемыеДанные @@ -4136,10 +4439,10 @@ УдаляемыеДанныеСостояниеПросмотра - 415 + 443 УдаляемыеДанныеСостояниеПросмотраРасширеннаяПодсказка - 417 + 445 Label true true @@ -4149,7 +4452,7 @@ УдаляемыеДанныеСостояниеПросмотраКонтекстноеМеню - 416 + 444 true ViewStatusAddition @@ -4160,10 +4463,10 @@ УдаляемыеДанныеУправлениеПоиском - 418 + 446 УдаляемыеДанныеУправлениеПоискомРасширеннаяПодсказка - 420 + 448 Label true true @@ -4173,7 +4476,7 @@ УдаляемыеДанныеУправлениеПоискомКонтекстноеМеню - 419 + 447 true SearchControlAddition @@ -4184,7 +4487,7 @@ УдаляемыеДанныеРасширеннаяПодсказка - 411 + 439 Label true true @@ -4237,7 +4540,7 @@ НастройкаУдалениеДанныхРасширеннаяПодсказка - 402 + 430 Label true true @@ -4266,7 +4569,7 @@ ГлавнаяПанельФормыРасширеннаяПодсказка - 222 + 239 Label true true @@ -4297,7 +4600,7 @@ ФормаВосстановитьРасширеннаяПодсказка - 216 + 233 Label true true @@ -4324,7 +4627,7 @@ ФормаСохранитьРасширеннаяПодсказка - 217 + 234 Label true true @@ -4354,7 +4657,7 @@ ФормаНаКлиентеРасширеннаяПодсказка - 219 + 236 Label true true @@ -4380,7 +4683,7 @@ ФормаНаСервереРасширеннаяПодсказка - 220 + 237 Label true true @@ -4411,7 +4714,7 @@ РежимОбработкиРасширеннаяПодсказка - 218 + 235 Label true true @@ -4435,7 +4738,7 @@ ФормаСправкаРасширеннаяПодсказка - 221 + 238 Label true true @@ -5152,19 +5455,6 @@ ПериодВыгрузки - - Реквизит1 - 16 - - ValueTable - - - true - - - true - - ПрочитатьПравилаОбмена @@ -5191,7 +5481,7 @@ <name>ТестПодключения</name> <title> <key>ru</key> - <value>Тест подключения...</value> + <value>Проверить подключение</value> 2 @@ -5201,9 +5491,6 @@ true - - CommonPicture.ЗаполнитьФорму - ТестПодключения @@ -5506,7 +5793,7 @@ 17 ru - Выполнить выгрузку + Выполнить выгрузку данных в файл или в базу приемник true diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияВыгрузка/Picture.png b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияВыгрузка/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..24fea125422918574eaa7c328593afa7b801be3a GIT binary patch literal 831 zcmV-F1Hk-=P)mlz^bYV1R@u!Jwc6J=05d z)6?avVlW=8MW-={pCp2mMxoN$eEUPS;QL)%NTW_Wb|3;npF;4lcc31cOd z4H~q_kw5TZ{o2llVK_nOdjy|{Aq1Ho1i^7}Ct)gD*P2x7I^n`V5OPVbs|v~*liK0- z=kd(e+AtA~Q0^L8=)UiZ;#xY)##@sKr}7j`mxJYfykA(B1eY$HMQKDsydj0SY9x17 z=U-6%Il4tg^*j%ZvAfaw_Jmc|jGxvac5NTCZ|3pv#$`Od*^5_m3(_ZIesu>bo4cA_ z*S+t!E>z~aRYWk#YufRfk}|dj)A8X4d7O-CQ0NBYTlhpwyMvk z(o7a0>jtpA5N^QHcDf5!A3TvyIFssu!#r?ZfzDM#RUM+{`{tK^ome_z)a`(J!MwbL zPXv40UokU&T@nmFdWM>YMkp0!V9>xKA$8V(W7}Xjx7oHh|psU%yp0r7>Z&B ze61J}Gn#6*tBU0Yeo6G2*~Ekl^x zUtdIREP|?1YEZEbLswBzYCu(i2z?8mh>4u-<=3F!I7vSsBc1>niaSel>ERwlOC(xS zvN&fRO?gLM9BLS#zTA+-*^LFfn|;1T!*@$eqB1x%1Uc7X*h#ZJ)qSxy*>e60Tpq!v z%^#8^QC)_ncmx~sGx+c}y+Xw!l)okPpXO+ND4%8vO>YVo$oXF>i}go<0RS}a5_tA7h|K^1002ov JPDHLkV1o8AavuNy literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияЗагрузка/Picture.png b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Items/ДекорацияИнформацияЗагрузка/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..24fea125422918574eaa7c328593afa7b801be3a GIT binary patch literal 831 zcmV-F1Hk-=P)mlz^bYV1R@u!Jwc6J=05d z)6?avVlW=8MW-={pCp2mMxoN$eEUPS;QL)%NTW_Wb|3;npF;4lcc31cOd z4H~q_kw5TZ{o2llVK_nOdjy|{Aq1Ho1i^7}Ct)gD*P2x7I^n`V5OPVbs|v~*liK0- z=kd(e+AtA~Q0^L8=)UiZ;#xY)##@sKr}7j`mxJYfykA(B1eY$HMQKDsydj0SY9x17 z=U-6%Il4tg^*j%ZvAfaw_Jmc|jGxvac5NTCZ|3pv#$`Od*^5_m3(_ZIesu>bo4cA_ z*S+t!E>z~aRYWk#YufRfk}|dj)A8X4d7O-CQ0NBYTlhpwyMvk z(o7a0>jtpA5N^QHcDf5!A3TvyIFssu!#r?ZfzDM#RUM+{`{tK^ome_z)a`(J!MwbL zPXv40UokU&T@nmFdWM>YMkp0!V9>xKA$8V(W7}Xjx7oHh|psU%yp0r7>Z&B ze61J}Gn#6*tBU0Yeo6G2*~Ekl^x zUtdIREP|?1YEZEbLswBzYCu(i2z?8mh>4u-<=3F!I7vSsBc1>niaSel>ERwlOC(xS zvN&fRO?gLM9BLS#zTA+-*^LFfn|;1T!*@$eqB1x%1Uc7X*h#ZJ)qSxy*>e60Tpq!v z%^#8^QC)_ncmx~sGx+c}y+Xw!l)okPpXO+ND4%8vO>YVo$oXF>i}go<0RS}a5_tA7h|K^1002ov JPDHLkV1o8AavuNy literal 0 HcmV?d00001 diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 589743ba9..160821c93 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -76,9 +76,14 @@ КонецЕсли; - //Установить видимость реквизитов формы - УстановитьДоступность(); - + УстановитьДоступностьКомандОтладки(); + + #Если ВебКлиент Тогда + Элементы.СтраницыОтладкиВыгрузки.ТекущаяСтраница = Элементы.СтраницыОтладкиВыгрузки.ПодчиненныеЭлементы.ГруппаВыгрузкаВебКлиент; + Элементы.СтраницыОтладкиЗагрузки.ТекущаяСтраница = Элементы.СтраницыОтладкиЗагрузки.ПодчиненныеЭлементы.ГруппаЗагрузкаВебКлиент; + Объект.ФлагРежимОтладкиОбработчиков = Ложь; + #КонецЕсли + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -182,7 +187,7 @@ ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор каталога информационной базы'"); + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите каталог информационной базы'"); ДиалогВыбораФайла.Каталог = Объект.КаталогИнформационнойБазыДляПодключения; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; @@ -226,13 +231,14 @@ &НаКлиенте Процедура ИмяФайлаПравилПриИзменении(Элемент) - Если ПустаяСтрока(ИмяФайлаПравил) Тогда + Файл = Новый Файл(ИмяФайлаПравил); + Если ПустаяСтрока(ИмяФайлаПравил) Или Не Файл.Существует() Тогда + СообщитьПользователю(НСтр("ru = 'Не найден файл правил обмена'"), "ИмяФайлаПравил"); Возврат; КонецЕсли; - Файл = Новый Файл(ИмяФайлаПравил); - Если Не Файл.Существует() Тогда - Возврат; + Если ИменаФайловПравилИОбменаСовпадают() Тогда + Возврат; КонецЕсли; ОтветПользователя = Вопрос(НСтр("ru = 'Загрузить правила обмена данными?'"), РежимДиалогаВопрос.ДаНет, 15, КодВозвратаДиалога.Да); @@ -244,7 +250,7 @@ Иначе - ПравилаЗагружены = Ложь; + УстановитьПризнакЗагрузкиПравил(Ложь); КонецЕсли; @@ -274,14 +280,14 @@ &НаКлиенте Процедура ФлагРежимОтладкиОбработчиковЗагрузкиПриИзменении(Элемент) - УстановитьДоступность(); + УстановитьДоступностьКомандОтладки(); КонецПроцедуры &НаКлиенте Процедура ФлагРежимОтладкиОбработчиковВыгрузкиПриИзменении(Элемент) - УстановитьДоступность(); + УстановитьДоступностьКомандОтладки(); КонецПроцедуры @@ -295,13 +301,13 @@ &НаКлиенте Процедура ИмяФайлаДанныхПриИзменении(Элемент) - Если Не ПустаяСтрока(Объект.ИмяФайлаПравилОбмена) - И Врег(СокрЛП(Объект.ИмяФайлаПравилОбмена)) = Врег(СокрЛП(Объект.ИмяФайлаОбмена)) Тогда - - Предупреждение(НСтр("ru = 'Файл правил обмена не может совпадать с файлом данных. Выберите другой файл для выгрузки данных.'")); - + Если ПустоеЗначениеРеквизита(ИмяФайлаДанных, "ИмяФайлаДанных", Элементы.ИмяФайлаДанных.Заголовок) + Или ИменаФайловПравилИОбменаСовпадают() Тогда + Возврат; КонецЕсли; + Объект.ИмяФайлаОбмена = ИмяФайлаДанных; + Файл = Новый Файл(Объект.ИмяФайлаОбмена); АрхивироватьФайл = (ВРЕГ(Файл.Расширение) = ВРЕГ(".zip")); @@ -314,8 +320,7 @@ ТипБазы.ТекущаяСтраница = ?(Объект.ТипИнформационнойБазыДляПодключения, ТипБазы.ПодчиненныеЭлементы.ФайловаяБаза, - ТипБазы.ПодчиненныеЭлементы.БазаНаСервере - ); + ТипБазы.ПодчиненныеЭлементы.БазаНаСервере); КонецПроцедуры @@ -416,14 +421,8 @@ &НаКлиенте Процедура ТестПодключения(Команда) - РезультатПодключения = ВыполнитьПодключениеКИБПриемникуНаСервере(); + ВыполнитьПодключениеКИБПриемникуНаСервере(); - Если РезультатПодключения <> Неопределено Тогда - - Предупреждение(НСтр("ru = 'Подключение к информационной базе приемнику произошло успешно.'")); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -437,16 +436,6 @@ Возврат; КонецЕсли; - Иначе - - Файл = Новый Файл(Объект.ИмяФайлаОбмена); - - Если Не Файл.Существует() Тогда - - ОчиститьДанныеОФайлеДляЗагрузкиДанных(); - - КонецЕсли; - КонецЕсли; Попытка @@ -456,6 +445,7 @@ Исключение + СообщитьПользователю(НСтр("ru = 'Не удалось прочитать файл обмена.'")); ОчиститьДанныеОФайлеДляЗагрузкиДанных(); КонецПопытки; @@ -553,21 +543,7 @@ &НаКлиенте Процедура НастройкаОтладкиВыгрузки(Команда) - #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Возможности отладки недоступны при использовании Веб-клиента'")); - Возврат; - #КонецЕсли - - Если Не ПравилаЗагружены Тогда - - Предупреждение(НСтр("ru = 'Необходимо прочитать правила обмена'")); - Возврат; - - Иначе - - Объект.ИмяФайлаПравилОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаПравил, АдресФайлаПравилВХранилище); - - КонецЕсли; + Объект.ИмяФайлаПравилОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаПравил, АдресФайлаПравилВХранилище); ОткрытьФормуНастройкиОтладкиОбработчиков(Истина); @@ -608,25 +584,18 @@ &НаКлиенте Процедура НастройкаОтладкиЗагрузки(Команда) - #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Возможности отладки недоступны при использовании Веб-клиента'")); - Возврат; - #КонецЕсли - АдресФайлаОбменаВХранилище = ""; ИмяФайлаДляРасширения = ""; Если ЭтоКлиент Тогда - Предупреждение(НСтр("ru = 'Выберите файл обмена данными.'")); Если Не ПоместитьФайл(АдресФайлаОбменаВХранилище, "Файл обмена",ИмяФайлаДляРасширения,,УникальныйИдентификатор) Тогда Возврат; КонецЕсли; Иначе - Если ПустаяСтрока(ИмяФайлаОбмена) Тогда - Предупреждение(НСтр("ru = 'Не задан файл обмена данными.'")); + Если ПустоеЗначениеРеквизита(ИмяФайлаОбмена, "ИмяФайлаОбмена", Элементы.ИмяФайлаОбмена.Заголовок) Тогда Возврат; КонецЕсли; @@ -661,7 +630,6 @@ &НаКлиенте Процедура ПрочитатьПравилаОбмена(Команда) - АдресФайлаПравилВХранилище = ""; ИмяФайлаДляРасширения = ""; Если ЭтоКлиент Тогда @@ -672,25 +640,23 @@ Иначе - Если ПустаяСтрока(Объект.ИмяФайлаПравилОбмена) Тогда - Предупреждение(НСтр("ru = 'Выберите файл правил обмена.'")); + АдресФайлаПравилВХранилище = ""; + Если ПустоеЗначениеРеквизита(Объект.ИмяФайлаПравилОбмена, "ИмяФайлаПравил", Элементы.ИмяФайлаПравил.Заголовок) Тогда Возврат; КонецЕсли; КонецЕсли; - Объект.ФлагОшибки = Ложь; - Состояние(НСтр("ru = 'Выполняется чтение правил обмена. Пожалуйста, подождите...'")); ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище, ИмяфайлаДляРасширения); - Если Не Объект.ФлагОшибки Тогда + Если Объект.ФлагОшибки Тогда - ПравилаЗагружены = Истина; + УстановитьПризнакЗагрузкиПравил(Ложь); Иначе - ПравилаЗагружены = Ложь; + УстановитьПризнакЗагрузкиПравил(Истина); КонецЕсли; @@ -737,15 +703,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступность() - - //Доступность кнопок настройки отладки обработчиков - Элементы.НастройкаОтладкиВыгрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; - Элементы.НастройкаОтладкиЗагрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; - -КонецПроцедуры - &НаКлиенте Процедура АрхивироватьФайлПриИзмененииЗначения() @@ -778,6 +735,23 @@ КонецПроцедуры +&НаКлиенте +Функция ИменаФайловПравилИОбменаСовпадают() + + Если Врег(СокрЛП(Объект.ИмяФайлаПравилОбмена)) = Врег(СокрЛП(ИмяФайлаДанных)) Тогда + + СообщитьПользователю(НСтр("ru = 'Файл правил обмена не может совпадать с файлом данных. + |Выберите другой файл для выгрузки данных.'")); + Возврат Истина; + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + // Заполняет дерево метаданных, доступных для удаления. &НаСервере Процедура ЗаполнитьСписокТиповДоступныхДляУдаления() @@ -868,15 +842,14 @@ ЗагрузитьПравилаОбменаИПараметрыНаСервере(АдресФайлаПравилВХранилище, ИмяФайлаДляРасширения); - Если Не Объект.ФлагОшибки Тогда + Если Объект.ФлагОшибки Тогда - ПравилаЗагружены = Истина; - - РазвернутьСтрокиДерева(Объект.ТаблицаПравилВыгрузки, Элементы.ТаблицаПравилВыгрузки, "Включить"); + УстановитьПризнакЗагрузкиПравил(Ложь); Иначе - ПравилаЗагружены = Ложь; + УстановитьПризнакЗагрузкиПравил(Истина); + РазвернутьСтрокиДерева(Объект.ТаблицаПравилВыгрузки, Элементы.ТаблицаПравилВыгрузки, "Включить"); КонецЕсли; @@ -952,6 +925,7 @@ ОбъектДляСервера.ЗагрузитьПравилаОбмена(); ОбъектДляСервера.ИнициализироватьПервоначальныеЗначенияПараметров(); ОбъектДляСервера.Параметры.Очистить(); + Объект.ФлагОшибки = ОбъектДляСервера.ФлагОшибки; Если ЭтоКлиент Тогда @@ -1039,7 +1013,7 @@ Если РезультатПодключения <> Неопределено Тогда - Сообщить(НСтр("ru = 'Подключение к информационной базе приемнику произошло успешно.'")); + СообщитьПользователю(НСтр("ru = 'Подключение успешно установлено.'")); КонецЕсли; @@ -1136,7 +1110,7 @@ Если Не ФайлНаСервере.Существует() Тогда - Сообщить(НСтр("ru = 'Не найден файл обмена на сервере.'")); + СообщитьПользователю(НСтр("ru = 'Не найден файл обмена на сервере.'"), "ИмяФайлаОбмена"); Возврат; КонецЕсли; @@ -1256,15 +1230,13 @@ Если ЭтоКлиент Тогда - Предупреждение(НСтр("ru = 'Выберите файл обмена данными.'")); Если Не ПоместитьФайл(АдресФайла, "Файл обмена", ИмяФайлаДляРасширения,,УникальныйИдентификатор) Тогда Возврат; КонецЕсли; Иначе - Если ПустаяСтрока(ИмяФайлаОбмена) Тогда - Предупреждение(НСтр("ru = 'Выберите файл обмена данными на сервере.'")); + Если ПустоеЗначениеРеквизита(ИмяФайлаОбмена, "ИмяФайлаОбмена", Элементы.ИмяФайлаОбмена.Заголовок) Тогда Возврат; КонецЕсли; @@ -1310,13 +1282,15 @@ ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект"); ПравилаЗагружены = Ложь; + Элементы.ФормаВыполнитьВыгрузку.Доступность = Ложь; + Элементы.НадписьПояснениеВыгрузки.Видимость = Истина; + Элементы.ГруппаВыгрузкаОтладкаДоступна.Доступность = Ложь; КонецПроцедуры &НаСервере Функция ИмяФайлаНаСервереИлиКлиенте(ИмяРеквизита ,Знач АдресФайла = "", Знач ИмяФайлаДляРасширения = ".xml", - СоздатьНовый = Ложь, ПроверятьСуществование = Истина - ) + СоздатьНовый = Ложь, ПроверятьСуществование = Истина) ИмяФайла = Неопределено; @@ -1333,7 +1307,7 @@ Иначе Расширение = РасширениеФайла(ИмяФайлаДляРасширения); - ДвоичныеДанные = ПолучитьИзВременногоХранилища (АдресФайла); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла); АдресНаСервере = ПолучитьИмяВременногоФайла(Расширение); ДвоичныеДанные.Записать(АдресНаСервере); ИмяФайла = АдресНаСервере; @@ -1346,7 +1320,7 @@ Если Не ФайлНаСервере.Существует() И ПроверятьСуществование Тогда - Сообщить(НСтр("ru = 'Указанный файл не существует.'")); + СообщитьПользователю(НСтр("ru = 'Указанный файл не существует.'")); Иначе @@ -1393,23 +1367,13 @@ &НаКлиенте Процедура ВыполнитьВыгрузкуИзФормы() - Если Не ПравилаЗагружены Тогда - - Предупреждение(НСтр("ru = 'Необходимо прочитать правила обмена'")); - Возврат; - - КонецЕсли; - // запомним файл правил и файл выгрузки ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаПравил.СписокВыбора, ИмяФайлаПравил, ПравилаОбмена); Если НЕ Объект.НепосредственноеЧтениеВИБПриемнике и Не ЭтоКлиент Тогда - Если Врег(СокрЛП(Объект.ИмяФайлаПравилОбмена)) = Врег(СокрЛП(Объект.ИмяФайлаОбмена)) Тогда - - Предупреждение(НСтр("ru = 'Файл правил обмена не может совпадать с файлом данных. Выберите другой файл для выгрузки данных.'")); + Если ИменаФайловПравилИОбменаСовпадают() Тогда Возврат; - КонецЕсли; ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаДанных.СписокВыбора, ИмяФайлаДанных, ВыгрузкаДанныхВФайл); @@ -1449,7 +1413,7 @@ Если ИмяВременногоФайлаДанных = Неопределено Тогда Возврат Неопределено; - Сообщить(НСтр("ru = 'Не определен файл данных'")); + СообщитьПользователю(НСтр("ru = 'Не определен файл данных'")); Иначе @@ -1473,7 +1437,7 @@ Если Не Файл.Существует() Тогда - Сообщить(НСтр("ru = 'Файл внешней обработки отладчиков событий не существует на сервере'")); + СообщитьПользователю(НСтр("ru = 'Файл внешней обработки отладчиков событий не существует на сервере'")); Возврат Неопределено; КонецЕсли; @@ -1482,7 +1446,7 @@ Если Отказ Тогда - Сообщить(НСтр("ru = 'Не удалось выгрузить обработчики событий'")); + СообщитьПользователю(НСтр("ru = 'Не удалось выгрузить обработчики событий'")); Возврат ""; КонецЕсли; @@ -1524,6 +1488,14 @@ КонецФункции +&НаКлиенте +Процедура УстановитьДоступностьКомандОтладки(); + + Элементы.НастройкаОтладкиЗагрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; + Элементы.НастройкаОтладкиВыгрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; + +КонецПроцедуры + // Изменяет дерево ПВД в соответствии с деревом на форме. // &НаСервере @@ -1564,8 +1536,7 @@ ПараметрыВыгрузки.ТекущаяСтраница = ?(ПрямаяВыгрузка = 0, ПараметрыВыгрузки.ПодчиненныеЭлементы.ВыгрузкаВФайл, - ПараметрыВыгрузки.ПодчиненныеЭлементы.ВыгрузкаВИБПриемник - ); + ПараметрыВыгрузки.ПодчиненныеЭлементы.ВыгрузкаВИБПриемник); Объект.НепосредственноеЧтениеВИБПриемнике = ?(ПрямаяВыгрузка = 1, Истина, Ложь); @@ -1624,7 +1595,7 @@ Элементы.ИмяФайлаДанных.Видимость = Не ЭтоКлиент; Элементы.ИмяФайлаОбмена.Видимость = Не ЭтоКлиент; - ПравилаЗагружены = Ложь; + УстановитьПризнакЗагрузкиПравил(Ложь); КонецПроцедуры @@ -1680,5 +1651,42 @@ КонецФункции +&НаКлиенте +Функция ПустоеЗначениеРеквизита(Реквизит, ПутьКДанным, Заголовок) + + Если ПустаяСтрока(Реквизит) Тогда + + ТекстСообщения = Нстр("ru = 'Поле ""%1"" не заполнено'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Заголовок); + + СообщитьПользователю(ТекстСообщения, ПутьКДанным); + + Возврат Истина; + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции +&НаКлиенте +Процедура УстановитьПризнакЗагрузкиПравил(Признак) + + ПравилаЗагружены = Признак; + Элементы.ФормаВыполнитьВыгрузку.Доступность = Признак; + Элементы.НадписьПояснениеВыгрузки.Видимость = Не Признак; + Элементы.ГруппаВыгрузкаОтладкаДоступна.Доступность = Признак; + +КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Процедура СообщитьПользователю(Текст, ПутьКДанным = "") + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = Текст; + Сообщение.ПутьКДанным = ПутьКДанным; + Сообщение.Сообщить(); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform index c073912086c0277b219737407cb2c8e25046ee76..76beb039e52a053d1bf354b480d4b2dffc698f36 100644 GIT binary patch delta 2733 zcma)8U2Gjk70&K$Vr=9(mSWd&9OBxmRK}iq{&z;fu^g(PR7q<{T9+0#%&)6R5VeYm zL?eVir4T|KG->wVLTNef|AKG>8NWSAAM>dxR^T8c`<-s2=6v`*sKilBVvH%r zR5dS*a?a`t`TqN+mGz!`ihRi};=~watT%{~5QP+_)Y?~gD_bovb<7$YkToSmJX((o zHv-YXnk8ImJxQ1PPN$i^r75AyfTJ|X#~2Yer9f5)fn;P+zycaqZ*65Hy*f0Wmix!j zZ-yr7<^Jb)7K{iTu#$+%W}>nT>8K16SZL*)vDW%(b1R##Umcp=RY)cXmZe0V=n_GB z0x3&83eE@4oQPIyNa~G(3$2+W24PDC;x3esz0$}AExeO13dJCBHT`Pz@XX-AOLC5u ziUV*CX-yy#f<4mMK^@o_9!k%M7Td@uDQGNxi5P7n4U5P~r4X?tRPK$YJT{R}rC+~> z530FVxjgy6`Jz<{H}7O9eRtnO>Cv%~=@y5SUcdHWb!Mb9m^Q{Oq+w<-ss)kBkAV&nL@XrW^eriYr}xRr)K^?>x9|f z|#Qg}A7gaNafiJ)YK2 z%~qFh<VKYgS)qBoC_4Zis3YW&n(4DEJ^s!z7c2{HKm|Y4sE7uN#x;@~KbOmsSsD1&6(9pawbYB1_xYo4~7$t?UHgyqJEuGM+A-ezg9@$^%)tZCI;gO2q!WXt9l{ zKeEGF(FWl3k)24({(G(9O<8!Y-2wM30IwZP_s5Y|&_iis)#Q!5KRp*;YzO*Xp&f5U z(0YCCX5Yt`){dS!N#`+0rap4^!p^ZzFFpC#aXWwV*co^9@w1OT^}@Lq=vwpj#<@3l zReyUgo9Z;9=Uy_MkM&|s~kk?TC!Poj4t?loHeDDp?xhuS(dh}bP_Xg@ak6$utUfbVfEo;A z#3AUUq!AUQ=OROlE2nXY)C;kl)M7ndZS3jHq?hYsy_fpr=J{+|7#g&U1d+f%l{_e< zDYRLvICq%Y2%2s*Q!myFd8_Tx8`pj`(_-1XwhKKZ{i)uQ-oG}I7OxI}^ZMJ}>u+Z( z6aB}IJb}->2*=(1`+M2pPGJ?;uni2lErn7ISeo^cBc>S((B?T@IJ#h?U>PN#0o@yX z)@vwA!CgiX%1|tsrGSq%3^%B(b~pZzeIYBHb38Ckk<$ts+BrDdl5*6TeTjuEwTn&s zeE0h8?8{m8#oO7=!UF?J!5xYLZX}#Y2X+|2LK#e97EG>G_gXxkYmij}JIpCU0Bo2hS?oSu;>CaWmqn&--zpUp2>qFT2$r5gT&2JK#B=CvpM;1 D+>0#E delta 2588 zcma)8OKcWZ6n3W2l44tpJo=#c+m0AwuiWR{djnSSk@!N<1YbzxK5H;i7rIc0H4;;U z8XprKT^KdGk&Ts6XI0UJC5gt6NKmXAU6B~vxN+l|-x74?%;Nv={Qo`Yo^!tMJLi6U zc;L19fmgTo?z}d=sJQl%?E~om{`S|?FK$mS>V6ly(~)%|3f{pOQ)V1%7L0^Is>A8{ zibOFTHHounP3#yRdqH0A7>#E6xM6Kar^1XdhtWjGjddfxrYEK)Co zlM=<;D8w}-$Z&}fgP1LKI_Hd3R}4Pbn>kOIV>v@a<`9Wf5@`!bS`MBag{uAAFO-7V zCP^PP_$5s>9H$5p&vU{&CJI9}_7q>Poql~i&06ihcm2V3={>%bpyI``tBTu(*Iun# zpg1+qe?U!56y)egd1AC@pja55Z-?koJz93&P8*A{;+>J$4qgawytrv}$L2Qm?*>;K z8(dp_J-V+Q4qg9GkL}1*8~&Uf`zp(wXCVSiN*MxV@g5nSJ0z)z#9{b>sOp;yA5Iht za~GG3CzJKn7uTI#QEZ!Eemi&5(?gjIMq*+jqMmWYsba_~>5&x75T^pol?J+QDem0+ zP`U9Klem!^-}k}gWoBgr9f97Rjg5#%K-ybibMC!1H2Uboavryo)4!$t#n7(aYH`nEGU>1uOezX| z55Rm8EHc7j@xqe_ddr2A$(m~V;O#xt!rWymnm?;Q4^8w`+vefpxx<@! zsuM4d^ljl&WQsOI&!;F%2cWe@o;GdU0V%Y$3i_^c0IH1G<`)_`iI#Y8H1d)~V70)= zMhq(~aRe;}&doAYHcCA)gj$B`sG_&vo?oRm%sh&a7IKbS|6$3O5Yp9YKi^#)r66590 z)5%DA|EUDm=5&%J8RiPwW%S4g4viFME;7_c`#j0 zpW{t@s?9m&_>al+t&(qct}oC0n9R0I7l<^|D(?EPrDWHRl;!n3D1GXE4xfH&CD<}(;1r1(D<-kFQRBry!2ueN6WG^>7nSC{W)r_aG58# zf^ww{BlNY?W=h~(5eZHU0~`ws${Grm(bCa88)_!}^Zwm-+_=nAB8(u6Yj9R#;F*(P zav{J8&5Ty1HQe9BMMpSdY!v~@xk^X50-f6o6f0FpXl9)>De<3e2&a49C4YkH?n0ib zg-W;l$6(FBV%u7z&k?y^Xl0m_r>4I;==#a=MtC2s*ZggN^Z$wAt^Zi83N8{k{6i8q P!u;l}i8314!*}fmc|&ft delta 385 zcma)&KT88a6vWRpqzE3S7QsM*5Xm#|Zuf5Y@DJviE9`6o!rtE7FJW(?pptFutWroS zS^N&^gp}5jBA>w0Lo2(RW~%wkFpDKyEZNgZ`!NrKRsJ>!S%|Bz&-)1re%(!3e+Mz{ zVJ)Q-^mlA?)F(|wR#pQ?V?l5dphQZLp|ysHCy8}e$Jd9-R9s?JK`giiVG{y{Q3^yN zD~Sth(s&fPj{*4Y@!8fe?A)Xy#kG_|Mo=1AhqSVwY9wS-ic+L#1X}kDGk1aUuu(&e zRkQJ)d&jEL^wa2e&}4;QN3UJiE)M>m=Hp^s>}I9uN&BZ>*m3%N>Noj*%da0UyDU+j IzkIiT0MfR0*#H0l diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform index b9ff198c924ab3d9a328ab840da36ae494a609cf..0522c4d7911d4f65a97bda1bd0c374e3131a484e 100644 GIT binary patch delta 127 zcmaE;_fT(x9~19|{Hdz*9GMuv^yFwJBUF*ivzW@*R7{giEzArp%yrY!Qq6Tu3@uW1 hEsYG#b(2g|Q&NnK4bzg7%qE*~o+V1*W>qd5UI3{3CnNv> delta 127 zcmaE;_fT(x9}{nYYR#=~MYTuFeTO4!aT_&(b(8;M1& diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html index 54157d8b2..fbb75cb50 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Режим работы

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

            diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 92cb30d5d..1df1a8a9c 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -6016,8 +6016,7 @@ НппСсылки = 0, ИзвестнаяСсылкаУникальногоИдентификатора = Неопределено, ПараметрыОбъекта = Неопределено, - ИмяПКО = "" - ) + ИмяПКО = "") ПоискПоДатеНаРавенство = Ложь; @@ -6612,7 +6611,7 @@ Если Движения.Количество()=0 Тогда Движения.Прочитать(); КонецЕсли; - + Если Очистить И Движения.Количество() <> 0 Тогда @@ -8311,10 +8310,7 @@ // // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий // (поддержка интерфейса процедуры-обертки обработчика). - Перем ТипПриемника; - Перем Пусто; - Перем Выражение; - Перем НеЗамещать; + Перем ТипПриемника, Пусто, Выражение, НеЗамещать, УзелСвойства, ПКОСвойств; // Инициализация значения Значение = Неопределено; @@ -8918,7 +8914,7 @@ // Обработчик ПередВыгрузкой - Если ПКС.ЕстьОбработчикПередВыгрузкой Тогда + Если ПКС.ЕстьОбработчикПередВыгрузкой Тогда Отказ = Ложь; @@ -9361,7 +9357,7 @@ // Обработчик ПередВыгрузкой - Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда + Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда Попытка @@ -9386,8 +9382,8 @@ КонецЕсли; - // Возможно такие данные уже выгружались - Если Не ВсеОбъектыВыгружены Тогда + // Возможно такие данные уже выгружались + Если Не ВсеОбъектыВыгружены Тогда Нпп = 0; @@ -9459,12 +9455,12 @@ Если СтруктураСвойств <> Неопределено И КоличествоЭлементовСоответствияЗначений > 0 И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда - - Попытка + + Если ЭтоПлатформа83БезРежимаСовместимости() Тогда + ИмяПредопределенногоИсточник = ИмяПредопределенного(Источник); + Иначе ИмяПредопределенногоИсточник = СтруктураСвойств.Менеджер.ПолучитьИмяПредопределенного(Источник); - Исключение - ИмяПредопределенногоИсточник = ""; - КонецПопытки; + КонецЕсли; Иначе @@ -9513,7 +9509,7 @@ КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -9601,7 +9597,7 @@ КонецЕсли; - Если Приемник = Неопределено Тогда + Если Приемник = Неопределено Тогда Приемник = СоздатьУзел("Объект"); @@ -9849,7 +9845,7 @@ // Глобальный обработчик ПередВыгрузкойОбъекта - Если ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта Тогда + Если ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта Тогда Попытка @@ -10490,7 +10486,7 @@ Выборка = ПолучитьВыборкуДляВыгрузкиПоПроизвольномуАлгоритму(ВыборкаДанных); - Если Выборка <> Неопределено Тогда + Если Выборка <> Неопределено Тогда Пока Выборка.Следующий() Цикл @@ -11956,7 +11952,7 @@ // Выход ИначеЕсли (ИмяУзла = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда - Если РежимОбмена <> "Загрузка" Тогда + Если РежимОбмена <> "Загрузка" Тогда ПравилаОбмена.Закрыть(); КонецЕсли; Прервать; @@ -12549,19 +12545,19 @@ #КонецЕсли ИмяИсходногоФайлаОбмена = ИмяФайлаОбмена; - Если АрхивироватьФайл Тогда + Если АрхивироватьФайл Тогда ИмяФайлаОбмена = СтрЗаменить(ИмяФайлаОбмена, ".xml", ".zip"); КонецЕсли; Архиватор = Новый ЗаписьZipФайла(ИмяФайлаОбмена, ПарольДляСжатияФайлаОбмена, "Файл обмена данными"); Архиватор.Добавить(ИмяИсходногоФайлаОбмена); - Архиватор.Записать(); + Архиватор.Записать(); УдалитьФайлы(ИмяИсходногоФайлаОбмена); - Исключение + Исключение - КонецПопытки; + КонецПопытки; КонецПроцедуры @@ -12683,7 +12679,7 @@ УзелПараметра = СоздатьУзел("ЗначениеПараметра"); УстановитьАтрибут(УзелПараметра, "Имя", Имя); - УстановитьАтрибут(УзелПараметра, "Тип", Строка(ТипЗнч(ИсходноеЗначениеПараметра))); + УстановитьАтрибут(УзелПараметра, "Тип", одТипЗначенияСтрокой(ИсходноеЗначениеПараметра)); ЭтоNULL = Ложь; Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); @@ -14216,6 +14212,42 @@ КонецФункции + +// Возвращает Истина, если конфигурация запущена под управлением платформы 1С:Предприятие 8.3 без использования режима совместимости +// с версией 8.3.2 или более ранней. +// +Функция ЭтоПлатформа83БезРежимаСовместимости() + + Информация = Новый СистемнаяИнформация; + Возврат Лев(Информация.ВерсияПриложения, 3) = "8.3" + И (Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать + Или (Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_1 + И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_13 + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_2_16") + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_1") + И Вычислить("Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.Версия8_3_2"))); + +КонецФункции + +Функция ИмяПредопределенного(Ссылка) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ + | ИмяПредопределенныхДанных Как ИмяПредопределенныхДанных + |ИЗ + | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы + |ГДЕ + | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка + |"; + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ИмяПредопределенныхДанных; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ @@ -14224,4 +14256,4 @@ ИнициализацияСтруктурыИменОбработчиков(); -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index 5feaa6fc0..cfa12fd22 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -17,7 +17,7 @@ ГруппаУстановкаПериодаРассчитанныхИтогов 278 - УстановитьПериодРасчитанныхИтогов + УстановитьПериодРассчитанныхИтогов 219 true true @@ -26,7 +26,7 @@ false - УстановитьПериодРасчитанныхИтоговРасширеннаяПодсказка + УстановитьПериодРассчитанныхИтоговРасширеннаяПодсказка 334 Label true @@ -36,7 +36,7 @@ UsualButton - Form.Command.УстановитьПериодРасчитанныхИтогов + Form.Command.УстановитьПериодРассчитанныхИтогов Normal Auto 25 @@ -3153,6 +3153,10 @@ Right true + + ChoiceProcessing + ОбработкаВыбора + OnLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -4349,7 +4353,7 @@ Auto
            - УстановитьПериодРасчитанныхИтогов + УстановитьПериодРассчитанныхИтогов <key>ru</key> <value>Установить период рассчитанных итогов</value> @@ -4364,7 +4368,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>УстановитьПериодРасчитанныхИтогов</name> + <name>УстановитьПериодРассчитанныхИтогов</name> </handler> </action> <currentRowUse>Auto</currentRowUse> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 0ac53f066..2d7f7b3de 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем КонтекстВыбора; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -27,7 +30,7 @@ Если СписокИтогов.Количество() = 0 Тогда Элементы.ГруппаИтогов.Доступность = Ложь; - Элементы.УстановитьПериодРасчитанныхИтогов.Доступность = Ложь; + Элементы.УстановитьПериодРассчитанныхИтогов.Доступность = Ложь; Элементы.ВключитьИспользованиеИтогов.Доступность = Ложь; КонецЕсли; @@ -46,8 +49,7 @@ Элементы.ОписаниеУстановкиПериода.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Элементы.ОписаниеУстановкиПериода.Заголовок, Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"), - Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D") - ); + Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D")); КонецПроцедуры @@ -56,6 +58,77 @@ УстановитьРасширенныйРежим(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); + ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ПериодДляРегистровНакопления); + ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.ПериодДляРегистровБухгалтерии); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка установки периода рассчитанных итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Если КонтекстВыбора = "ПерестроитьАгрегаты" Тогда + + ОтносительныйРазмер = ВыбранноеЗначение.ОтносительныйРазмер; + МинимальныйЭффект = ВыбранноеЗначение.МинимальныйЭффект; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ОтносительныйРазмер); + ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.МинимальныйЭффект); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка перестроения агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + + ИначеЕсли КонтекстВыбора = "АгрегатыОптимальные" Тогда + + ОптимальныйОтносительныйРазмер = ВыбранноеЗначение.ОтносительныйРазмер; + ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); + + Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Получение списка оптимальных агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Получение списка оптимальных агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПолучитьОптимальныеАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ОтносительныйРазмер); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка получения списка оптимальных агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -196,23 +269,7 @@ ПараметрыФормы.РегБухгалтерии = ПараметрыФормы.РегБухгалтерии ИЛИ ИнформацияПоРегистру.Тип = 1; КонецЦикла; - Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода", ПараметрыФормы); - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); - ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); - ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); - ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); - ПараметрыИтогов.Вставить("Значение1", Результат.ПериодДляРегНакоп); - ПараметрыИтогов.Вставить("Значение2", Результат.ПериодДляРегБухг); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка установки периода рассчитанных итогов.'")); - - УправлениеИтогами(ПараметрыИтогов); + ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -352,23 +409,14 @@ &НаКлиенте Процедура ПерестроитьАгрегаты(Команда) - Результат = ПолучитьПараметрыПерестроения(Истина); + КонтекстВыбора = "ПерестроитьАгрегаты"; - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОтносительныйРазмер", ОтносительныйРазмер); + ПараметрыФормы.Вставить("МинимальныйЭффект", МинимальныйЭффект); + ПараметрыФормы.Вставить("РежимПерестроения", Истина); - ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); - ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); - ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); - ПараметрыИтогов.Вставить("Поле", "Наименование"); - ПараметрыИтогов.Вставить("Значение1", Результат.ОтносительныйРазмер); - ПараметрыИтогов.Вставить("Значение2", Результат.МинимальныйЭффект); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка перестроения агрегатов.'")); - - УправлениеАгрегатом(ПараметрыИтогов); + ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -418,34 +466,19 @@ &НаКлиенте Процедура АгрегатыОптимальные(Команда) - Результат = ПолучитьПараметрыПерестроения(Ложь); + КонтекстВыбора = "АгрегатыОптимальные"; - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОтносительныйРазмер", ОптимальныйОтносительныйРазмер); + ПараметрыФормы.Вставить("МинимальныйЭффект", 0); + ПараметрыФормы.Вставить("РежимПерестроения", Ложь); - ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); - - Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда - Возврат; - КонецЕсли; - - ПараметрыИтогов = Новый Структура; - ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Получение списка оптимальных агрегатов ...'")); - ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Получение списка оптимальных агрегатов завершено'")); - ПараметрыИтогов.Вставить("Действие", "ПолучитьОптимальныеАгрегаты"); - ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); - ПараметрыИтогов.Вставить("Поле", "Наименование"); - ПараметрыИтогов.Вставить("Значение1", Результат.ОтносительныйРазмер); - ПараметрыИтогов.Вставить("Значение2", Неопределено); - ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка получения списка оптимальных агрегатов.'")); - - УправлениеАгрегатом(ПараметрыИтогов); + ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура УстановитьПериодРасчитанныхИтогов(Команда) +Процедура УстановитьПериодРассчитанныхИтогов(Команда) Результат = Истина; ОчиститьСообщения(); @@ -737,7 +770,7 @@ Если СтрокаТаблицы.ОборотныйРег Тогда СтрокаТаблицы.ИспользоватьТекущиеИтоги = Регистр.ПолучитьИспользованиеТекущихИтогов(); - СтрокаТаблицы.ПериодИтогов = Регистр.ПолучитьПериодРассчитанныхИтогов(); + СтрокаТаблицы.ПериодИтогов = УправлениеИтогамиИАгрегатамиСлужебный.ПолучитьПериодРассчитанныхИтогов(Регистр); СтрокаТаблицы.АгрегатыИтоги = 2; Иначе @@ -847,7 +880,7 @@ Дата = Значение2; КонецЕсли; - Менеджер.УстановитьПериодРассчитанныхИтогов(Дата); + УправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(Менеджер, Дата); ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда Менеджер.ПересчитатьИтоги(); @@ -938,7 +971,7 @@ ОптимальныеАгрегаты = МенеджерРегистра.ОпределитьОптимальныеАгрегаты(ЗначениеДействия1); ЗначениеДействия1 = Ложь; - НайденыеАгрегаты = Новый Соответствие; + НайденныеАгрегаты = Новый Соответствие; МетаданныеАгрегаты = МетаданныеРегистра.Агрегаты; Для Индекс1=0 По ОптимальныеАгрегаты.Агрегаты.ВГраница() Цикл @@ -948,11 +981,11 @@ Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность = МетаданныеАгрегаты[Индекс2].Периодичность - И НайденыеАгрегаты[Индекс2] = Неопределено + И НайденныеАгрегаты[Индекс2] = Неопределено И ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], МетаданныеАгрегаты[Индекс2]) Тогда - НайденыеАгрегаты.Вставить(Индекс2, Истина); + НайденныеАгрегаты.Вставить(Индекс2, Истина); ЗначениеДействия1 = Истина; Прервать; КонецЕсли; @@ -967,11 +1000,11 @@ Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность = ПериодичностьАгрегатаРегистраНакопления.Авто - И НайденыеАгрегаты[Индекс2] = Неопределено + И НайденныеАгрегаты[Индекс2] = Неопределено И ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], МетаданныеАгрегаты[Индекс2]) Тогда - НайденыеАгрегаты.Вставить(Индекс2, Истина); + НайденныеАгрегаты.Вставить(Индекс2, Истина); ЗначениеДействия1 = Истина; Прервать; КонецЕсли; @@ -1231,31 +1264,6 @@ КонецПроцедуры -&НаКлиенте -Функция ПолучитьПараметрыПерестроения(Знач РежимПерестроения) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОтносительныйРазмер", ?(РежимПерестроения, ОтносительныйРазмер, ОптимальныйОтносительныйРазмер)); - ПараметрыФормы.Вставить("МинимальныйЭффект", ?(РежимПерестроения, МинимальныйЭффект, 0)); - ПараметрыФормы.Вставить("РежимПерестроения", РежимПерестроения); - - Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Если РежимПерестроения Тогда - ОтносительныйРазмер = Результат.ОтносительныйРазмер; - МинимальныйЭффект = Результат.МинимальныйЭффект; - Иначе - ОптимальныйОтносительныйРазмер = Результат.ОтносительныйРазмер; - КонецЕсли; - - Возврат Результат; - Иначе - Возврат Результат; - КонецЕсли; - -КонецФункции - &НаКлиенте Функция СохранитьОптимальныеНастройкиАгрегатов(Знач ИмяМетаданного, Знач АдресФайлаВоВременномХранилище, Знач Поле) @@ -1328,4 +1336,3 @@ Возврат Каталог; КонецФункции - diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form index b9e978084..81435127e 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> <items xsi:type="form:FormField"> - <name>ПериодДляРегНакоп</name> + <name>ПериодДляРегистровНакопления</name> <id>10</id> <visible>true</visible> <enabled>true</enabled> @@ -9,14 +9,14 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ПериодДляРегНакоп</segments> + <segments>ПериодДляРегистровНакопления</segments> </dataPath> <handlers> <event>OnChange</event> - <name>ПериодДляРегНакопПриИзменении</name> + <name>ПериодДляРегистровНакопленияПриИзменении</name> </handlers> <extendedTooltip> - <name>ПериодДляРегНакопРасширеннаяПодсказка</name> + <name>ПериодДляРегистровНакопленияРасширеннаяПодсказка</name> <id>15</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -26,7 +26,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПериодДляРегНакопКонтекстноеМеню</name> + <name>ПериодДляРегистровНакопленияКонтекстноеМеню</name> <id>11</id> <autoFill>true</autoFill> </contextMenu> @@ -45,7 +45,7 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>ПериодДляРегБухг</name> + <name>ПериодДляРегистровБухгалтерии</name> <id>8</id> <visible>true</visible> <enabled>true</enabled> @@ -53,14 +53,14 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ПериодДляРегБухг</segments> + <segments>ПериодДляРегистровБухгалтерии</segments> </dataPath> <handlers> <event>OnChange</event> - <name>ПериодДляРегБухгПриИзменении</name> + <name>ПериодДляРегистровБухгалтерииПриИзменении</name> </handlers> <extendedTooltip> - <name>ПериодДляРегБухгРасширеннаяПодсказка</name> + <name>ПериодДляРегистровБухгалтерииРасширеннаяПодсказка</name> <id>17</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -70,7 +70,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПериодДляРегБухгКонтекстноеМеню</name> + <name>ПериодДляРегистровБухгалтерииКонтекстноеМеню</name> <id>9</id> <autoFill>true</autoFill> </contextMenu> @@ -181,7 +181,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> @@ -192,7 +192,7 @@ <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> <attributes> - <name>ПериодДляРегНакоп</name> + <name>ПериодДляРегистровНакопления</name> <title> <key>ru</key> <value>Период итогов для регистров накопления</value> @@ -212,7 +212,7 @@ </edit> </attributes> <attributes> - <name>ПериодДляРегБухг</name> + <name>ПериодДляРегистровБухгалтерии</name> <title> <key>ru</key> <value>Период итогов для регистров бухгалтерии</value> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html index 3aa02d4eb..555b60978 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В данном диалоге можно ввести границы периода рассчитанных итогов для регистров накопления или бухгалтерии.</p> <p>По умолчанию предлагаются следующие даты для установки границы рассчитанных итогов:</p> <ul><li> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl index acd3ff2e7..f51064046 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl @@ -8,11 +8,11 @@ Возврат; КонецЕсли; - ПериодДляРегНакоп = КонецПериода(ДобавитьМесяц(ТекущаяДатаСеанса(), -1)); - ПериодДляРегБухг = КонецПериода(ТекущаяДатаСеанса()); + ПериодДляРегистровНакопления = КонецПериода(ДобавитьМесяц(ТекущаяДатаСеанса(), -1)); + ПериодДляРегистровБухгалтерии = КонецПериода(ТекущаяДатаСеанса()); - Элементы.ПериодДляРегБухг.Доступность = Параметры.РегБухгалтерии; - Элементы.ПериодДляРегНакоп.Доступность = Параметры.РегНакопления; + Элементы.ПериодДляРегистровБухгалтерии.Доступность = Параметры.РегБухгалтерии; + Элементы.ПериодДляРегистровНакопления.Доступность = Параметры.РегНакопления; КонецПроцедуры @@ -20,16 +20,16 @@ // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура ПериодДляРегНакопПриИзменении(Элемент) +Процедура ПериодДляРегистровНакопленияПриИзменении(Элемент) - ПериодДляРегНакоп = КонецПериода(ПериодДляРегНакоп); + ПериодДляРегистровНакопления = КонецПериода(ПериодДляРегистровНакопления); КонецПроцедуры &НаКлиенте -Процедура ПериодДляРегБухгПриИзменении(Элемент) +Процедура ПериодДляРегистровБухгалтерииПриИзменении(Элемент) - ПериодДляРегБухг = КонецПериода(ПериодДляРегБухг); + ПериодДляРегистровБухгалтерии = КонецПериода(ПериодДляРегистровБухгалтерии); КонецПроцедуры @@ -39,12 +39,10 @@ &НаКлиенте Процедура ОК(Команда) - Результат = Новый Структура("ПериодДляРегНакоп, ПериодДляРегБухг"); + РезультатВыбора = Новый Структура("ПериодДляРегистровНакопления, ПериодДляРегистровБухгалтерии"); + ЗаполнитьЗначенияСвойств(РезультатВыбора, ЭтаФорма); - Результат.ПериодДляРегНакоп = ПериодДляРегНакоп; - Результат.ПериодДляРегБухг = ПериодДляРегБухг; - - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form index 708ad26fd..b6335efff 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Form.form @@ -152,7 +152,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html index 348a7c802..fa74305d1 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В данной форме задаются параметры перестроения использования агрегатов и получения списка оптимальных агрегатов.</p> <ul><li> <div><strong>Максимальный относительный размер</strong> - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если не указан или равен нулю, то нет ограничения размера агрегатов.</div> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl index 739cc7a04..0daad9e7e 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl @@ -23,10 +23,9 @@ &НаКлиенте Процедура ОК(Команда) - Результат = Новый Структура("ОтносительныйРазмер, МинимальныйЭффект"); - Результат.ОтносительныйРазмер = ОтносительныйРазмер; - Результат.МинимальныйЭффект = МинимальныйЭффект; + РезультатВыбора = Новый Структура("ОтносительныйРазмер, МинимальныйЭффект"); + ЗаполнитьЗначенияСвойств(РезультатВыбора, ЭтаФорма); - Закрыть(Результат); + ОповеститьОВыборе(РезультатВыбора); КонецПроцедуры diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html index 743d171ef..83c742003 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Управление итогами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:</p> <ul><li><strong><a href="#Simple">Частно используемые возможности</a></strong> - позволяют "одним нажатием" выполнить наиболее частые действия, возникающие при обслуживании системы. </li><li><strong><a href="#Full">Полные возможности</a></strong> - позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.</li></ul><p>Для переключения режимов служит гиперссылка в правом нижнем углу формы. Форма запоминает режим открытия.</p> diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl index ee7f2998e..f157ccf34 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl @@ -19,8 +19,7 @@ Процедура ОбновитьИндекс(Команда) Состояние( НСтр("ru = 'Идет обновление полнотекстового индекса... - |Пожалуйста, подождите.'") - ); + |Пожалуйста, подождите.'")); ОбновитьИндексСервер(); @@ -31,8 +30,7 @@ Процедура ОчиститьИндекс(Команда) Состояние( НСтр("ru = 'Идет очистка полнотекстового индекса... - |Пожалуйста, подождите.'") - ); + |Пожалуйста, подождите.'")); ОчиститьИндексСервер(); diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html index bd5e89d55..a064b6ccb 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Данная обработка позволяет управлять индексом полнотекстового поиска, обновлять и очищать его.<br>В клиент-серверном варианте обновление полнотекстового индекса выполняется автоматически.</p> <h2><a name="Команды">Команды:</a></h2> <p></p> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl index b39b74553..6d4b5190a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl @@ -19,7 +19,6 @@ ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Источник.КлючУникальности, - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl index 2b6fd2ba0..e50886b51 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl @@ -35,7 +35,6 @@ ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Источник.КлючУникальности, - ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречу/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречу/CommandModule.bsl index fb1747ad7..f482daec4 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречу/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ЗапланироватьВстречу/CommandModule.bsl @@ -3,7 +3,6 @@ Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ВзаимодействияКлиент.СоздатьВзаимодействиеИлиПредмет( - "Документ.Встреча.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник - ); + "Документ.Встреча.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMS/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMS/CommandModule.bsl new file mode 100644 index 000000000..a5a7201e0 --- /dev/null +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/НаписатьSMS/CommandModule.bsl @@ -0,0 +1,8 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ВзаимодействияКлиент.СоздатьВзаимодействиеИлиПредмет( + "Документ.СообщениеSMS.ФормаОбъекта", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); + +КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form index eb286d0d3..cecedfb49 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Form.form @@ -519,7 +519,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> <group>Vertical</group> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl index 6c14e3982..2c8291b22 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl @@ -3,12 +3,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ЗаполнитьРеквзитыФормыИзПараметров(Параметры); + ЗаполнитьРеквизитыФормыИзПараметров(Параметры); УправлениеДоступностью(); КонецПроцедуры @@ -33,14 +32,22 @@ КонецЕсли; Если ТипПисьма = "ЭлектронноеПисьмоИсходящее" И ОтправленоПолучено = Дата(1,1,1) И Модифицированность Тогда - Закрыть(Новый Структура("УведомитьОДоставке, УведомитьОПрочтении, ВключатьТелоИсходногоПисьма,Папка", - УведомитьОДоставке, - УведомитьОПрочтении, - ВключатьТелоИсходногоПисьма)); + + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("УведомитьОДоставке", УведомитьОДоставке); + РезультатВыбора.Вставить("УведомитьОПрочтении", УведомитьОПрочтении); + РезультатВыбора.Вставить("ВключатьТелоИсходногоПисьма", ВключатьТелоИсходногоПисьма); + РезультатВыбора.Вставить("Папка", Неопределено); + + Иначе - Закрыть(); + + РезультатВыбора = Неопределено; + КонецЕсли; + ОповеститьОВыборе(РезультатВыбора); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -58,7 +65,7 @@ КонецПроцедуры &НаСервере -Процедура ЗаполнитьРеквзитыФормыИзПараметров(Параметры) +Процедура ЗаполнитьРеквизитыФормыИзПараметров(Параметры) ЗаполнитьРеквизитФормыИзПараметра(Параметры,"ВнутреннийНомер"); ЗаполнитьРеквизитФормыИзПараметра(Параметры,"ЗаголовкиИнтернета"); diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 0e8c6830b..7db8d4f46 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -25,7 +25,7 @@ </handlers> <extendedTooltip> <name>ТипВзаимодействияРасширеннаяПодсказка</name> - <id>416</id> + <id>417</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -102,6 +102,15 @@ <value>ЗапланированныеВзаимодействия</value> </value> </choiceList> + <choiceList> + <presentation> + <key>ru</key> + <value>Сообщения SMS</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>СообщенияSMS</value> + </value> + </choiceList> <choiceList> <presentation> <key>ru</key> @@ -185,7 +194,7 @@ </handlers> <extendedTooltip> <name>СтатусРасширеннаяПодсказка</name> - <id>418</id> + <id>419</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -274,7 +283,7 @@ </handlers> <extendedTooltip> <name>ПользовательРасширеннаяПодсказка</name> - <id>420</id> + <id>421</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -313,7 +322,7 @@ </userVisible> <extendedTooltip> <name>ОтступРасширеннаяПодсказка</name> - <id>422</id> + <id>423</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -355,7 +364,7 @@ </handlers> <extendedTooltip> <name>СтрокаПоискаРасширеннаяПодсказка</name> - <id>423</id> + <id>424</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -401,7 +410,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>ГруппаФильтрыРасширеннаяПодсказка</name> - <id>415</id> + <id>416</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -440,7 +449,7 @@ </userVisible> <extendedTooltip> <name>УстановитьВариантНавигацииПоПредметуРасширеннаяПодсказка</name> - <id>429</id> + <id>430</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -466,7 +475,7 @@ </userVisible> <extendedTooltip> <name>УстановитьВариантНавигацииПоКонтактуРасширеннаяПодсказка</name> - <id>430</id> + <id>431</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -492,7 +501,7 @@ </userVisible> <extendedTooltip> <name>УстановитьВариантНавигацииПоЗакладкамРасширеннаяПодсказка</name> - <id>431</id> + <id>432</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -518,7 +527,7 @@ </userVisible> <extendedTooltip> <name>УстановитьВариантНавигацииПоПапкамРасширеннаяПодсказка</name> - <id>432</id> + <id>433</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -549,7 +558,7 @@ </toolTip> <extendedTooltip> <name>ВыборВариантаНавигацииРасширеннаяПодсказка</name> - <id>428</id> + <id>429</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -581,7 +590,7 @@ </toolTip> <extendedTooltip> <name>КоманднаяПанельВариантаНавигацииРасширеннаяПодсказка</name> - <id>427</id> + <id>428</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -641,7 +650,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>КонтактыПредставлениеРасширеннаяПодсказка</name> - <id>457</id> + <id>458</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -689,7 +698,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>КонтактыНомерКартинкиРасширеннаяПодсказка</name> - <id>459</id> + <id>460</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -731,7 +740,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>КонтактыГруппаРасширеннаяПодсказка</name> - <id>456</id> + <id>457</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -768,10 +777,10 @@ </handlers> <searchStringAddition> <name>КонтактыСтрокаПоиска</name> - <id>447</id> + <id>448</id> <extendedTooltip> <name>КонтактыСтрокаПоискаРасширеннаяПодсказка</name> - <id>449</id> + <id>450</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -781,7 +790,7 @@ </extendedTooltip> <contextMenu> <name>КонтактыСтрокаПоискаКонтекстноеМеню</name> - <id>448</id> + <id>449</id> <autoFill>true</autoFill> </contextMenu> <source>Контакты</source> @@ -791,10 +800,10 @@ </searchStringAddition> <viewStatusAddition> <name>КонтактыСостояниеПросмотра</name> - <id>450</id> + <id>451</id> <extendedTooltip> <name>КонтактыСостояниеПросмотраРасширеннаяПодсказка</name> - <id>452</id> + <id>453</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -804,7 +813,7 @@ </extendedTooltip> <contextMenu> <name>КонтактыСостояниеПросмотраКонтекстноеМеню</name> - <id>451</id> + <id>452</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -815,10 +824,10 @@ </viewStatusAddition> <searchControlAddition> <name>КонтактыУправлениеПоиском</name> - <id>453</id> + <id>454</id> <extendedTooltip> <name>КонтактыУправлениеПоискомРасширеннаяПодсказка</name> - <id>455</id> + <id>456</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -828,7 +837,7 @@ </extendedTooltip> <contextMenu> <name>КонтактыУправлениеПоискомКонтекстноеМеню</name> - <id>454</id> + <id>455</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -839,7 +848,7 @@ </searchControlAddition> <extendedTooltip> <name>КонтактыРасширеннаяПодсказка</name> - <id>446</id> + <id>447</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -863,7 +872,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>436</id> + <id>437</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -889,7 +898,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>437</id> + <id>438</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -915,7 +924,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюОтветственныйРасширеннаяПодсказка</name> - <id>438</id> + <id>439</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -941,7 +950,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюПредметРасширеннаяПодсказка</name> - <id>439</id> + <id>440</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -972,7 +981,7 @@ </toolTip> <extendedTooltip> <name>КонтактыКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>435</id> + <id>436</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -992,7 +1001,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>440</id> + <id>441</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1018,7 +1027,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка</name> - <id>441</id> + <id>442</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1047,7 +1056,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>443</id> + <id>444</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1073,7 +1082,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>444</id> + <id>445</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1099,7 +1108,7 @@ </userVisible> <extendedTooltip> <name>КонтактыКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>445</id> + <id>446</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1130,7 +1139,7 @@ </toolTip> <extendedTooltip> <name>КонтактыКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>442</id> + <id>443</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1192,7 +1201,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>СтраницаКонтактРасширеннаяПодсказка</name> - <id>434</id> + <id>435</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1250,7 +1259,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПредметыПредставлениеРасширеннаяПодсказка</name> - <id>492</id> + <id>493</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1292,7 +1301,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПредметыНомерКартинкиРасширеннаяПодсказка</name> - <id>494</id> + <id>495</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1339,7 +1348,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>ПредметыГруппаКолонокРасширеннаяПодсказка</name> - <id>491</id> + <id>492</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1385,10 +1394,10 @@ </handlers> <searchStringAddition> <name>ПредметыСтрокаПоиска</name> - <id>482</id> + <id>483</id> <extendedTooltip> <name>ПредметыСтрокаПоискаРасширеннаяПодсказка</name> - <id>484</id> + <id>485</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1398,7 +1407,7 @@ </extendedTooltip> <contextMenu> <name>ПредметыСтрокаПоискаКонтекстноеМеню</name> - <id>483</id> + <id>484</id> <autoFill>true</autoFill> </contextMenu> <source>Предметы</source> @@ -1408,10 +1417,10 @@ </searchStringAddition> <viewStatusAddition> <name>ПредметыСостояниеПросмотра</name> - <id>485</id> + <id>486</id> <extendedTooltip> <name>ПредметыСостояниеПросмотраРасширеннаяПодсказка</name> - <id>487</id> + <id>488</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1421,7 +1430,7 @@ </extendedTooltip> <contextMenu> <name>ПредметыСостояниеПросмотраКонтекстноеМеню</name> - <id>486</id> + <id>487</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1432,10 +1441,10 @@ </viewStatusAddition> <searchControlAddition> <name>ПредметыУправлениеПоиском</name> - <id>488</id> + <id>489</id> <extendedTooltip> <name>ПредметыУправлениеПоискомРасширеннаяПодсказка</name> - <id>490</id> + <id>491</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1445,7 +1454,7 @@ </extendedTooltip> <contextMenu> <name>ПредметыУправлениеПоискомКонтекстноеМеню</name> - <id>489</id> + <id>490</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1456,7 +1465,7 @@ </searchControlAddition> <extendedTooltip> <name>ПредметыРасширеннаяПодсказка</name> - <id>481</id> + <id>482</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1480,7 +1489,7 @@ </userVisible> <extendedTooltip> <name>ПредметыРассмотреноРасширеннаяПодсказка</name> - <id>471</id> + <id>472</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1506,7 +1515,7 @@ </userVisible> <extendedTooltip> <name>ПредметыОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>472</id> + <id>473</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1532,7 +1541,7 @@ </userVisible> <extendedTooltip> <name>ПредметыОтветственныйРасширеннаяПодсказка</name> - <id>473</id> + <id>474</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1558,7 +1567,7 @@ </userVisible> <extendedTooltip> <name>ПредметыПредметРасширеннаяПодсказка</name> - <id>474</id> + <id>475</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1589,7 +1598,7 @@ </toolTip> <extendedTooltip> <name>ПредметыКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>470</id> + <id>471</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1609,7 +1618,7 @@ </userVisible> <extendedTooltip> <name>ПредметыКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>475</id> + <id>476</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1635,7 +1644,7 @@ </userVisible> <extendedTooltip> <name>ПредметыКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка</name> - <id>476</id> + <id>477</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1664,7 +1673,7 @@ </userVisible> <extendedTooltip> <name>ПредметыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>478</id> + <id>479</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1690,7 +1699,7 @@ </userVisible> <extendedTooltip> <name>ПредметыКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>479</id> + <id>480</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1716,7 +1725,7 @@ </userVisible> <extendedTooltip> <name>ПредметыКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>480</id> + <id>481</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1747,7 +1756,7 @@ </toolTip> <extendedTooltip> <name>ПредметыКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>477</id> + <id>478</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1811,7 +1820,7 @@ </handlers> <extendedTooltip> <name>ПоказыватьВсеАктивныеПредметыРасширеннаяПодсказка</name> - <id>504</id> + <id>505</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1846,7 +1855,7 @@ </toolTip> <extendedTooltip> <name>СтраницаПредметРасширеннаяПодсказка</name> - <id>469</id> + <id>470</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1896,7 +1905,7 @@ </dataPath> <extendedTooltip> <name>ЗакладкиНаименованиеРасширеннаяПодсказка</name> - <id>524</id> + <id>525</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1929,10 +1938,10 @@ </handlers> <searchStringAddition> <name>ЗакладкиСтрокаПоиска</name> - <id>515</id> + <id>516</id> <extendedTooltip> <name>ЗакладкиСтрокаПоискаРасширеннаяПодсказка</name> - <id>517</id> + <id>518</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1942,7 +1951,7 @@ </extendedTooltip> <contextMenu> <name>ЗакладкиСтрокаПоискаКонтекстноеМеню</name> - <id>516</id> + <id>517</id> <autoFill>true</autoFill> </contextMenu> <source>Закладки</source> @@ -1952,10 +1961,10 @@ </searchStringAddition> <viewStatusAddition> <name>ЗакладкиСостояниеПросмотра</name> - <id>518</id> + <id>519</id> <extendedTooltip> <name>ЗакладкиСостояниеПросмотраРасширеннаяПодсказка</name> - <id>520</id> + <id>521</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1965,7 +1974,7 @@ </extendedTooltip> <contextMenu> <name>ЗакладкиСостояниеПросмотраКонтекстноеМеню</name> - <id>519</id> + <id>520</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1976,10 +1985,10 @@ </viewStatusAddition> <searchControlAddition> <name>ЗакладкиУправлениеПоиском</name> - <id>521</id> + <id>522</id> <extendedTooltip> <name>ЗакладкиУправлениеПоискомРасширеннаяПодсказка</name> - <id>523</id> + <id>524</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1989,7 +1998,7 @@ </extendedTooltip> <contextMenu> <name>ЗакладкиУправлениеПоискомКонтекстноеМеню</name> - <id>522</id> + <id>523</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -2000,7 +2009,7 @@ </searchControlAddition> <extendedTooltip> <name>ЗакладкиРасширеннаяПодсказка</name> - <id>514</id> + <id>515</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2021,7 +2030,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>507</id> + <id>508</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2047,7 +2056,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>508</id> + <id>509</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2073,7 +2082,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиОтветственныйРасширеннаяПодсказка</name> - <id>509</id> + <id>510</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2099,7 +2108,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиКонтекстноеМенюПредметРасширеннаяПодсказка</name> - <id>510</id> + <id>511</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2128,7 +2137,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиОбновитьРасширеннаяПодсказка</name> - <id>512</id> + <id>513</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2154,7 +2163,7 @@ </userVisible> <extendedTooltip> <name>ЗакладкиВывестиСписокРасширеннаяПодсказка</name> - <id>513</id> + <id>514</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2185,7 +2194,7 @@ </toolTip> <extendedTooltip> <name>ЗакладкиКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка</name> - <id>511</id> + <id>512</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2252,7 +2261,7 @@ </toolTip> <extendedTooltip> <name>СтраницаЗакладкиРасширеннаяПодсказка</name> - <id>506</id> + <id>507</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2310,7 +2319,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>СвойстваПредставлениеРасширеннаяПодсказка</name> - <id>556</id> + <id>557</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2350,7 +2359,7 @@ </dataPath> <extendedTooltip> <name>СвойстваНомерКартинкиРасширеннаяПодсказка</name> - <id>558</id> + <id>559</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2395,7 +2404,7 @@ </toolTip> <extendedTooltip> <name>СвойстваГруппаКолонокРасширеннаяПодсказка</name> - <id>555</id> + <id>556</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2429,10 +2438,10 @@ </handlers> <searchStringAddition> <name>СвойстваСтрокаПоиска</name> - <id>546</id> + <id>547</id> <extendedTooltip> <name>СвойстваСтрокаПоискаРасширеннаяПодсказка</name> - <id>548</id> + <id>549</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2442,7 +2451,7 @@ </extendedTooltip> <contextMenu> <name>СвойстваСтрокаПоискаКонтекстноеМеню</name> - <id>547</id> + <id>548</id> <autoFill>true</autoFill> </contextMenu> <source>Свойства</source> @@ -2452,10 +2461,10 @@ </searchStringAddition> <viewStatusAddition> <name>СвойстваСостояниеПросмотра</name> - <id>549</id> + <id>550</id> <extendedTooltip> <name>СвойстваСостояниеПросмотраРасширеннаяПодсказка</name> - <id>551</id> + <id>552</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2465,7 +2474,7 @@ </extendedTooltip> <contextMenu> <name>СвойстваСостояниеПросмотраКонтекстноеМеню</name> - <id>550</id> + <id>551</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -2476,10 +2485,10 @@ </viewStatusAddition> <searchControlAddition> <name>СвойстваУправлениеПоиском</name> - <id>552</id> + <id>553</id> <extendedTooltip> <name>СвойстваУправлениеПоискомРасширеннаяПодсказка</name> - <id>554</id> + <id>555</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2489,7 +2498,7 @@ </extendedTooltip> <contextMenu> <name>СвойстваУправлениеПоискомКонтекстноеМеню</name> - <id>553</id> + <id>554</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -2500,7 +2509,7 @@ </searchControlAddition> <extendedTooltip> <name>СвойстваРасширеннаяПодсказка</name> - <id>545</id> + <id>546</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2524,7 +2533,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>536</id> + <id>537</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2550,7 +2559,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>537</id> + <id>538</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2576,7 +2585,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюОтветственныйРасширеннаяПодсказка</name> - <id>538</id> + <id>539</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2602,7 +2611,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюПредметРасширеннаяПодсказка</name> - <id>539</id> + <id>540</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2633,7 +2642,7 @@ </toolTip> <extendedTooltip> <name>СвойстваКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>535</id> + <id>536</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2653,7 +2662,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>540</id> + <id>541</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2682,7 +2691,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>542</id> + <id>543</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2708,7 +2717,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>543</id> + <id>544</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2734,7 +2743,7 @@ </userVisible> <extendedTooltip> <name>СвойстваКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>544</id> + <id>545</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2765,7 +2774,7 @@ </toolTip> <extendedTooltip> <name>СвойстваКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>541</id> + <id>542</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2825,7 +2834,7 @@ </toolTip> <extendedTooltip> <name>СтраницаСвойстваРасширеннаяПодсказка</name> - <id>534</id> + <id>535</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2883,7 +2892,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>РеквизитыПредметаНомерКартинкиРасширеннаяПодсказка</name> - <id>591</id> + <id>592</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2926,7 +2935,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>РеквизитыПредметаПредставлениеРасширеннаяПодсказка</name> - <id>593</id> + <id>594</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2970,7 +2979,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>РеквизитыПредметаГруппаКолонокРасширеннаяПодсказка</name> - <id>590</id> + <id>591</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3020,10 +3029,10 @@ </handlers> <searchStringAddition> <name>РеквизитыПредметаСтрокаПоиска</name> - <id>581</id> + <id>582</id> <extendedTooltip> <name>РеквизитыПредметаСтрокаПоискаРасширеннаяПодсказка</name> - <id>583</id> + <id>584</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3033,7 +3042,7 @@ </extendedTooltip> <contextMenu> <name>РеквизитыПредметаСтрокаПоискаКонтекстноеМеню</name> - <id>582</id> + <id>583</id> <autoFill>true</autoFill> </contextMenu> <source>РеквизитыПредмета</source> @@ -3043,10 +3052,10 @@ </searchStringAddition> <viewStatusAddition> <name>РеквизитыПредметаСостояниеПросмотра</name> - <id>584</id> + <id>585</id> <extendedTooltip> <name>РеквизитыПредметаСостояниеПросмотраРасширеннаяПодсказка</name> - <id>586</id> + <id>587</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3056,7 +3065,7 @@ </extendedTooltip> <contextMenu> <name>РеквизитыПредметаСостояниеПросмотраКонтекстноеМеню</name> - <id>585</id> + <id>586</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -3067,10 +3076,10 @@ </viewStatusAddition> <searchControlAddition> <name>РеквизитыПредметаУправлениеПоиском</name> - <id>587</id> + <id>588</id> <extendedTooltip> <name>РеквизитыПредметаУправлениеПоискомРасширеннаяПодсказка</name> - <id>589</id> + <id>590</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3080,7 +3089,7 @@ </extendedTooltip> <contextMenu> <name>РеквизитыПредметаУправлениеПоискомКонтекстноеМеню</name> - <id>588</id> + <id>589</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -3091,7 +3100,7 @@ </searchControlAddition> <extendedTooltip> <name>РеквизитыПредметаРасширеннаяПодсказка</name> - <id>580</id> + <id>581</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3115,7 +3124,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>570</id> + <id>571</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3141,7 +3150,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>571</id> + <id>572</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3167,7 +3176,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюОтветственныйРасширеннаяПодсказка</name> - <id>572</id> + <id>573</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3193,7 +3202,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюПредметРасширеннаяПодсказка</name> - <id>573</id> + <id>574</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3224,7 +3233,7 @@ </toolTip> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>569</id> + <id>570</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3244,7 +3253,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>574</id> + <id>575</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3270,7 +3279,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка</name> - <id>575</id> + <id>576</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3299,7 +3308,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>577</id> + <id>578</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3325,7 +3334,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>578</id> + <id>579</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3351,7 +3360,7 @@ </userVisible> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>579</id> + <id>580</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3382,7 +3391,7 @@ </toolTip> <extendedTooltip> <name>РеквизитыПредметаКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>576</id> + <id>577</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3444,7 +3453,7 @@ </handlers> <extendedTooltip> <name>ПоказыватьВсеАктивныеПредметыРеквизитыПредметаРасширеннаяПодсказка</name> - <id>603</id> + <id>604</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3479,7 +3488,7 @@ </toolTip> <extendedTooltip> <name>СтраницаРеквизитыПредметаРасширеннаяПодсказка</name> - <id>568</id> + <id>569</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3535,7 +3544,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПапкиНомерКартинкиРасширеннаяПодсказка</name> - <id>632</id> + <id>633</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3578,7 +3587,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПапкиПредставлениеРасширеннаяПодсказка</name> - <id>634</id> + <id>635</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3622,7 +3631,7 @@ <enableContentChange>true</enableContentChange> <extendedTooltip> <name>ПапкиГруппаКолонокРасширеннаяПодсказка</name> - <id>631</id> + <id>632</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3680,10 +3689,10 @@ </handlers> <searchStringAddition> <name>ПапкиСтрокаПоиска</name> - <id>622</id> + <id>623</id> <extendedTooltip> <name>ПапкиСтрокаПоискаРасширеннаяПодсказка</name> - <id>624</id> + <id>625</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3693,7 +3702,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиСтрокаПоискаКонтекстноеМеню</name> - <id>623</id> + <id>624</id> <autoFill>true</autoFill> </contextMenu> <source>Папки</source> @@ -3703,10 +3712,10 @@ </searchStringAddition> <viewStatusAddition> <name>ПапкиСостояниеПросмотра</name> - <id>625</id> + <id>626</id> <extendedTooltip> <name>ПапкиСостояниеПросмотраРасширеннаяПодсказка</name> - <id>627</id> + <id>628</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3716,7 +3725,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиСостояниеПросмотраКонтекстноеМеню</name> - <id>626</id> + <id>627</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -3727,10 +3736,10 @@ </viewStatusAddition> <searchControlAddition> <name>ПапкиУправлениеПоиском</name> - <id>628</id> + <id>629</id> <extendedTooltip> <name>ПапкиУправлениеПоискомРасширеннаяПодсказка</name> - <id>630</id> + <id>631</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3740,7 +3749,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиУправлениеПоискомКонтекстноеМеню</name> - <id>629</id> + <id>630</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -3751,7 +3760,7 @@ </searchControlAddition> <extendedTooltip> <name>ПапкиРасширеннаяПодсказка</name> - <id>621</id> + <id>622</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3775,7 +3784,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>607</id> + <id>608</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3801,7 +3810,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>608</id> + <id>609</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3827,7 +3836,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюОтветственныйРасширеннаяПодсказка</name> - <id>609</id> + <id>610</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3858,7 +3867,7 @@ </toolTip> <extendedTooltip> <name>ПапкиКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>606</id> + <id>607</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3878,7 +3887,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>610</id> + <id>611</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3904,7 +3913,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюПрименитьПравилаОбработкиРасширеннаяПодсказка</name> - <id>611</id> + <id>612</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3930,7 +3939,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка</name> - <id>612</id> + <id>613</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3963,7 +3972,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюДобавитьРасширеннаяПодсказка</name> - <id>614</id> + <id>615</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3989,7 +3998,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка</name> - <id>615</id> + <id>616</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4015,7 +4024,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюУдалитьРасширеннаяПодсказка</name> - <id>616</id> + <id>617</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4046,7 +4055,7 @@ </toolTip> <extendedTooltip> <name>ПапкиКонтекстноеМенюГруппаИзменитьРасширеннаяПодсказка</name> - <id>613</id> + <id>614</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4069,7 +4078,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>618</id> + <id>619</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4095,7 +4104,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>619</id> + <id>620</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4121,7 +4130,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>620</id> + <id>621</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4152,7 +4161,7 @@ </toolTip> <extendedTooltip> <name>ПапкиКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>617</id> + <id>618</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4212,7 +4221,7 @@ </toolTip> <extendedTooltip> <name>СтраницаПапкиРасширеннаяПодсказка</name> - <id>605</id> + <id>606</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4269,7 +4278,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>КатегорииНомерКартинкиРасширеннаяПодсказка</name> - <id>666</id> + <id>667</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4315,7 +4324,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>КатегорииПредставлениеРасширеннаяПодсказка</name> - <id>668</id> + <id>669</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4352,7 +4361,7 @@ <readOnly>true</readOnly> <extendedTooltip> <name>КатегорииГруппаКолонокРасширеннаяПодсказка</name> - <id>665</id> + <id>666</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4378,10 +4387,10 @@ </handlers> <searchStringAddition> <name>КатегорииСтрокаПоиска</name> - <id>656</id> + <id>657</id> <extendedTooltip> <name>КатегорииСтрокаПоискаРасширеннаяПодсказка</name> - <id>658</id> + <id>659</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4391,7 +4400,7 @@ </extendedTooltip> <contextMenu> <name>КатегорииСтрокаПоискаКонтекстноеМеню</name> - <id>657</id> + <id>658</id> <autoFill>true</autoFill> </contextMenu> <source>Категории</source> @@ -4401,10 +4410,10 @@ </searchStringAddition> <viewStatusAddition> <name>КатегорииСостояниеПросмотра</name> - <id>659</id> + <id>660</id> <extendedTooltip> <name>КатегорииСостояниеПросмотраРасширеннаяПодсказка</name> - <id>661</id> + <id>662</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4414,7 +4423,7 @@ </extendedTooltip> <contextMenu> <name>КатегорииСостояниеПросмотраКонтекстноеМеню</name> - <id>660</id> + <id>661</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -4425,10 +4434,10 @@ </viewStatusAddition> <searchControlAddition> <name>КатегорииУправлениеПоиском</name> - <id>662</id> + <id>663</id> <extendedTooltip> <name>КатегорииУправлениеПоискомРасширеннаяПодсказка</name> - <id>664</id> + <id>665</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4438,7 +4447,7 @@ </extendedTooltip> <contextMenu> <name>КатегорииУправлениеПоискомКонтекстноеМеню</name> - <id>663</id> + <id>664</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -4449,7 +4458,7 @@ </searchControlAddition> <extendedTooltip> <name>КатегорииРасширеннаяПодсказка</name> - <id>655</id> + <id>656</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4473,7 +4482,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюРассмотреноРасширеннаяПодсказка</name> - <id>646</id> + <id>647</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4499,7 +4508,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>647</id> + <id>648</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4525,7 +4534,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюОтветственныйРасширеннаяПодсказка</name> - <id>648</id> + <id>649</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4551,7 +4560,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюПредметРасширеннаяПодсказка</name> - <id>649</id> + <id>650</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4582,7 +4591,7 @@ </toolTip> <extendedTooltip> <name>КатегорииКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка</name> - <id>645</id> + <id>646</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4602,7 +4611,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>650</id> + <id>651</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4631,7 +4640,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>652</id> + <id>653</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4657,7 +4666,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюОбновитьРасширеннаяПодсказка</name> - <id>653</id> + <id>654</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4683,7 +4692,7 @@ </userVisible> <extendedTooltip> <name>КатегорииКонтекстноеМенюВывестиСписокРасширеннаяПодсказка</name> - <id>654</id> + <id>655</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4714,7 +4723,7 @@ </toolTip> <extendedTooltip> <name>КатегорииКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка</name> - <id>651</id> + <id>652</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4774,7 +4783,7 @@ </toolTip> <extendedTooltip> <name>СтраницаКатегорииРасширеннаяПодсказка</name> - <id>644</id> + <id>645</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4803,7 +4812,7 @@ </toolTip> <extendedTooltip> <name>СтраницыПанелиНавигацииРасширеннаяПодсказка</name> - <id>433</id> + <id>434</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4831,7 +4840,7 @@ </toolTip> <extendedTooltip> <name>ГруппаПанельНавигацииРасширеннаяПодсказка</name> - <id>426</id> + <id>427</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4884,7 +4893,7 @@ </dataPath> <extendedTooltip> <name>ВажностьНомерКартинкиРасширеннаяПодсказка</name> - <id>730</id> + <id>732</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4934,7 +4943,7 @@ </toolTip> <extendedTooltip> <name>ЕстьВложенияРасширеннаяПодсказка</name> - <id>732</id> + <id>734</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -4981,7 +4990,7 @@ </dataPath> <extendedTooltip> <name>НомерКартинкиРасширеннаяПодсказка</name> - <id>734</id> + <id>736</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5027,7 +5036,7 @@ </dataPath> <extendedTooltip> <name>ДатаРасширеннаяПодсказка</name> - <id>736</id> + <id>738</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5062,7 +5071,7 @@ </dataPath> <extendedTooltip> <name>УчастникиРасширеннаяПодсказка</name> - <id>738</id> + <id>740</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5098,7 +5107,7 @@ </dataPath> <extendedTooltip> <name>ТемаРасширеннаяПодсказка</name> - <id>740</id> + <id>742</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5137,7 +5146,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьВстречуРасширеннаяПодсказка</name> - <id>693</id> + <id>694</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5163,7 +5172,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьЗапланированноеВзаимодействиеРасширеннаяПодсказка</name> - <id>694</id> + <id>695</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5189,7 +5198,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьТелефонныйЗвонокРасширеннаяПодсказка</name> - <id>695</id> + <id>696</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5205,6 +5214,35 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>СписокСоздатьСообщениеSMS</name> + <id>415</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>СписокСоздатьСообщениеSMSРасширеннаяПодсказка</name> + <id>697</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.СоздатьСообщениеSMS</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.CreateListItem</picture> + </picture> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <items xsi:type="form:Button"> <name>СписокСоздатьЭлектронноеПисьмо</name> <id>47</id> @@ -5215,7 +5253,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьЭлектронноеПисьмоРасширеннаяПодсказка</name> - <id>696</id> + <id>698</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5246,7 +5284,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСоздатьРасширеннаяПодсказка</name> - <id>692</id> + <id>693</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5277,7 +5315,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаРасширеннаяПодсказка</name> - <id>697</id> + <id>699</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5306,7 +5344,7 @@ </userVisible> <extendedTooltip> <name>СписокОтправитьПолучитьПочтуРасширеннаяПодсказка</name> - <id>698</id> + <id>700</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5335,7 +5373,7 @@ </userVisible> <extendedTooltip> <name>СписокРассмотреноРасширеннаяПодсказка</name> - <id>700</id> + <id>702</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5361,7 +5399,7 @@ </userVisible> <extendedTooltip> <name>СписокОтложитьРассмотрениеРасширеннаяПодсказка</name> - <id>701</id> + <id>703</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5387,7 +5425,7 @@ </userVisible> <extendedTooltip> <name>СписокНеРассмотреноРасширеннаяПодсказка</name> - <id>702</id> + <id>704</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5414,7 +5452,7 @@ </userVisible> <extendedTooltip> <name>СписокОтветственныйРасширеннаяПодсказка</name> - <id>703</id> + <id>705</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5440,7 +5478,7 @@ </userVisible> <extendedTooltip> <name>СписокПредметРасширеннаяПодсказка</name> - <id>704</id> + <id>706</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5471,7 +5509,7 @@ </toolTip> <extendedTooltip> <name>ГруппаРассмотреноРасширеннаяПодсказка</name> - <id>699</id> + <id>701</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5494,7 +5532,7 @@ </userVisible> <extendedTooltip> <name>ИзменитьРасширеннаяПодсказка</name> - <id>706</id> + <id>708</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5520,7 +5558,7 @@ </userVisible> <extendedTooltip> <name>СкопироватьРасширеннаяПодсказка</name> - <id>707</id> + <id>709</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5550,7 +5588,7 @@ </userVisible> <extendedTooltip> <name>УстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>709</id> + <id>711</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5582,7 +5620,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСписокУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>708</id> + <id>710</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5605,7 +5643,7 @@ </userVisible> <extendedTooltip> <name>НайтиРасширеннаяПодсказка</name> - <id>711</id> + <id>713</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5632,7 +5670,7 @@ </userVisible> <extendedTooltip> <name>ОтменитьПоискРасширеннаяПодсказка</name> - <id>712</id> + <id>714</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5659,7 +5697,7 @@ </userVisible> <extendedTooltip> <name>УстановитьИнтервалДатРасширеннаяПодсказка</name> - <id>713</id> + <id>715</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5690,7 +5728,7 @@ </toolTip> <extendedTooltip> <name>ГруппаНайтиРасширеннаяПодсказка</name> - <id>710</id> + <id>712</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5715,7 +5753,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандыСпискаРасширеннаяПодсказка</name> - <id>705</id> + <id>707</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5735,7 +5773,7 @@ </userVisible> <extendedTooltip> <name>СписокОбновитьРасширеннаяПодсказка</name> - <id>714</id> + <id>716</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5762,7 +5800,7 @@ </userVisible> <extendedTooltip> <name>СписокНастройкаСпискаРасширеннаяПодсказка</name> - <id>715</id> + <id>717</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5788,7 +5826,7 @@ </userVisible> <extendedTooltip> <name>СписокВывестиСписокРасширеннаяПодсказка</name> - <id>716</id> + <id>718</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5814,7 +5852,7 @@ </userVisible> <extendedTooltip> <name>СписокСправкаРасширеннаяПодсказка</name> - <id>717</id> + <id>719</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5840,7 +5878,7 @@ </userVisible> <extendedTooltip> <name>СписокИзменитьФормуРасширеннаяПодсказка</name> - <id>718</id> + <id>720</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5866,7 +5904,7 @@ </userVisible> <extendedTooltip> <name>ФормаПерсональныеНастройкиРасширеннаяПодсказка</name> - <id>719</id> + <id>721</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5907,10 +5945,10 @@ </handlers> <searchStringAddition> <name>СписокСтрокаПоиска</name> - <id>721</id> + <id>723</id> <extendedTooltip> <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> - <id>723</id> + <id>725</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5920,7 +5958,7 @@ </extendedTooltip> <contextMenu> <name>СписокСтрокаПоискаКонтекстноеМеню</name> - <id>722</id> + <id>724</id> <autoFill>true</autoFill> </contextMenu> <source>Список</source> @@ -5930,10 +5968,10 @@ </searchStringAddition> <viewStatusAddition> <name>СписокСостояниеПросмотра</name> - <id>724</id> + <id>726</id> <extendedTooltip> <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> - <id>726</id> + <id>728</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5943,7 +5981,7 @@ </extendedTooltip> <contextMenu> <name>СписокСостояниеПросмотраКонтекстноеМеню</name> - <id>725</id> + <id>727</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -5954,10 +5992,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокУправлениеПоиском</name> - <id>727</id> + <id>729</id> <extendedTooltip> <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> - <id>729</id> + <id>731</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -5967,7 +6005,7 @@ </extendedTooltip> <contextMenu> <name>СписокУправлениеПоискомКонтекстноеМеню</name> - <id>728</id> + <id>730</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -5978,7 +6016,7 @@ </searchControlAddition> <extendedTooltip> <name>СписокРасширеннаяПодсказка</name> - <id>720</id> + <id>722</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6002,7 +6040,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка</name> - <id>682</id> + <id>683</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6028,7 +6066,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка</name> - <id>683</id> + <id>684</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6054,7 +6092,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюПредметСписокРасширеннаяПодсказка</name> - <id>684</id> + <id>685</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6085,7 +6123,7 @@ </toolTip> <extendedTooltip> <name>СписокКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка</name> - <id>681</id> + <id>682</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6105,7 +6143,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>685</id> + <id>686</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6131,7 +6169,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка</name> - <id>686</id> + <id>687</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6157,7 +6195,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка</name> - <id>687</id> + <id>688</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6183,7 +6221,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка</name> - <id>688</id> + <id>689</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6212,7 +6250,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>690</id> + <id>691</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6238,7 +6276,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка</name> - <id>691</id> + <id>692</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6269,7 +6307,7 @@ </toolTip> <extendedTooltip> <name>СписокКонтекстноеМенюГруппаУдалитьКопироватьРасширеннаяПодсказка</name> - <id>689</id> + <id>690</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6332,7 +6370,7 @@ </toolTip> <extendedTooltip> <name>СтраницаСписокОбычнаяРасширеннаяПодсказка</name> - <id>680</id> + <id>681</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6376,7 +6414,7 @@ </dataPath> <extendedTooltip> <name>ВажностьНомерКартинкиВходящиеРасширеннаяПодсказка</name> - <id>800</id> + <id>802</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6426,7 +6464,7 @@ </toolTip> <extendedTooltip> <name>ЕстьВложенияВходящиеРасширеннаяПодсказка</name> - <id>802</id> + <id>804</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6473,7 +6511,7 @@ </dataPath> <extendedTooltip> <name>НомерКартинкиВходящиеРасширеннаяПодсказка</name> - <id>804</id> + <id>806</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6523,7 +6561,7 @@ </dataPath> <extendedTooltip> <name>УчастникиВходящиеРасширеннаяПодсказка</name> - <id>806</id> + <id>808</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6560,7 +6598,7 @@ </dataPath> <extendedTooltip> <name>ТемаВходящиеРасширеннаяПодсказка</name> - <id>808</id> + <id>810</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6600,7 +6638,7 @@ </dataPath> <extendedTooltip> <name>ПолученоОтправленоРасширеннаяПодсказка</name> - <id>810</id> + <id>812</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6644,7 +6682,7 @@ </dataPath> <extendedTooltip> <name>РазмерВходящиеРасширеннаяПодсказка</name> - <id>812</id> + <id>814</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6684,7 +6722,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьЭлектронноеПисьмоВходящиеРасширеннаяПодсказка</name> - <id>764</id> + <id>766</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6713,7 +6751,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеОтветитьРасширеннаяПодсказка</name> - <id>765</id> + <id>767</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6742,7 +6780,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеОтветитьВсемРасширеннаяПодсказка</name> - <id>766</id> + <id>768</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6768,7 +6806,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеПереслатьРасширеннаяПодсказка</name> - <id>767</id> + <id>769</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6794,7 +6832,7 @@ </userVisible> <extendedTooltip> <name>СписокОтправитьПолучитьПочтуВходящиеРасширеннаяПодсказка</name> - <id>768</id> + <id>770</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6823,7 +6861,7 @@ </userVisible> <extendedTooltip> <name>СписокРассмотреноВходящиеРасширеннаяПодсказка</name> - <id>770</id> + <id>772</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6849,7 +6887,7 @@ </userVisible> <extendedTooltip> <name>СписокОтложитьРассмотрениеВходящиеРасширеннаяПодсказка</name> - <id>771</id> + <id>773</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6875,7 +6913,7 @@ </userVisible> <extendedTooltip> <name>СписокНеРассмотреноВходящиеРасширеннаяПодсказка</name> - <id>772</id> + <id>774</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6902,7 +6940,7 @@ </userVisible> <extendedTooltip> <name>СписокОтветственныйВходящиеРасширеннаяПодсказка</name> - <id>773</id> + <id>775</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6928,7 +6966,7 @@ </userVisible> <extendedTooltip> <name>СписокПредметВходящиеРасширеннаяПодсказка</name> - <id>774</id> + <id>776</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6959,7 +6997,7 @@ </toolTip> <extendedTooltip> <name>СписокВходящиеГруппаРассмотреноРасширеннаяПодсказка</name> - <id>769</id> + <id>771</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -6982,7 +7020,7 @@ </userVisible> <extendedTooltip> <name>ИзменитьВходящиеРасширеннаяПодсказка</name> - <id>776</id> + <id>778</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7008,7 +7046,7 @@ </userVisible> <extendedTooltip> <name>СкопироватьВходящиеРасширеннаяПодсказка</name> - <id>777</id> + <id>779</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7037,7 +7075,7 @@ </userVisible> <extendedTooltip> <name>УстановитьПометкуУдаленияВходящиеРасширеннаяПодсказка</name> - <id>779</id> + <id>781</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7069,7 +7107,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСписокУстановитьПометкуУдаленияВходящиеРасширеннаяПодсказка</name> - <id>778</id> + <id>780</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7092,7 +7130,7 @@ </userVisible> <extendedTooltip> <name>НайтиВходящиеРасширеннаяПодсказка</name> - <id>781</id> + <id>783</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7119,7 +7157,7 @@ </userVisible> <extendedTooltip> <name>ОтменитьПоискВходящиеРасширеннаяПодсказка</name> - <id>782</id> + <id>784</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7146,7 +7184,7 @@ </userVisible> <extendedTooltip> <name>УстановитьИнтервалДатВходящиеРасширеннаяПодсказка</name> - <id>783</id> + <id>785</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7177,7 +7215,7 @@ </toolTip> <extendedTooltip> <name>ГруппаНайтиВходящиеРасширеннаяПодсказка</name> - <id>780</id> + <id>782</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7205,7 +7243,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОтменитьПоискВходящиеРасширеннаяПодсказка</name> - <id>784</id> + <id>786</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7230,7 +7268,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандыСпискаВходящиеРасширеннаяПодсказка</name> - <id>775</id> + <id>777</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7250,7 +7288,7 @@ </userVisible> <extendedTooltip> <name>СписокОбновитьВходящиеРасширеннаяПодсказка</name> - <id>785</id> + <id>787</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7277,7 +7315,7 @@ </userVisible> <extendedTooltip> <name>СписокНастройкаСпискаВходящиеРасширеннаяПодсказка</name> - <id>786</id> + <id>788</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7303,7 +7341,7 @@ </userVisible> <extendedTooltip> <name>СписокВывестиСписокВходящиеРасширеннаяПодсказка</name> - <id>787</id> + <id>789</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7329,7 +7367,7 @@ </userVisible> <extendedTooltip> <name>СписокСправкаВходящиеРасширеннаяПодсказка</name> - <id>788</id> + <id>790</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7355,7 +7393,7 @@ </userVisible> <extendedTooltip> <name>ФормаПерсональныеНастройкиВходящиеРасширеннаяПодсказка</name> - <id>789</id> + <id>791</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7396,10 +7434,10 @@ </handlers> <searchStringAddition> <name>СписокВходящиеСтрокаПоиска</name> - <id>791</id> + <id>793</id> <extendedTooltip> <name>СписокВходящиеСтрокаПоискаРасширеннаяПодсказка</name> - <id>793</id> + <id>795</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7409,7 +7447,7 @@ </extendedTooltip> <contextMenu> <name>СписокВходящиеСтрокаПоискаКонтекстноеМеню</name> - <id>792</id> + <id>794</id> <autoFill>true</autoFill> </contextMenu> <source>СписокВходящие</source> @@ -7419,10 +7457,10 @@ </searchStringAddition> <viewStatusAddition> <name>СписокВходящиеСостояниеПросмотра</name> - <id>794</id> + <id>796</id> <extendedTooltip> <name>СписокВходящиеСостояниеПросмотраРасширеннаяПодсказка</name> - <id>796</id> + <id>798</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7432,7 +7470,7 @@ </extendedTooltip> <contextMenu> <name>СписокВходящиеСостояниеПросмотраКонтекстноеМеню</name> - <id>795</id> + <id>797</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -7443,10 +7481,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокВходящиеУправлениеПоиском</name> - <id>797</id> + <id>799</id> <extendedTooltip> <name>СписокВходящиеУправлениеПоискомРасширеннаяПодсказка</name> - <id>799</id> + <id>801</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7456,7 +7494,7 @@ </extendedTooltip> <contextMenu> <name>СписокВходящиеУправлениеПоискомКонтекстноеМеню</name> - <id>798</id> + <id>800</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -7467,7 +7505,7 @@ </searchControlAddition> <extendedTooltip> <name>СписокВходящиеРасширеннаяПодсказка</name> - <id>790</id> + <id>792</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7488,7 +7526,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюОтветитьРасширеннаяПодсказка</name> - <id>751</id> + <id>753</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7514,7 +7552,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюОтветитьВсемРасширеннаяПодсказка</name> - <id>752</id> + <id>754</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7540,7 +7578,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюПереслатьРасширеннаяПодсказка</name> - <id>753</id> + <id>755</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7566,7 +7604,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюИзменитьРасширеннаяПодсказка</name> - <id>754</id> + <id>756</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7595,7 +7633,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка</name> - <id>756</id> + <id>758</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7621,7 +7659,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка</name> - <id>757</id> + <id>759</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7647,7 +7685,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюПредметСписокРасширеннаяПодсказка</name> - <id>758</id> + <id>760</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7678,7 +7716,7 @@ </toolTip> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка</name> - <id>755</id> + <id>757</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7698,7 +7736,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюДобавитьВЗакладкиВходящиеРасширеннаяПодсказка</name> - <id>759</id> + <id>761</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7724,7 +7762,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюПеренестиВПапкуВходящиеРасширеннаяПодсказка</name> - <id>760</id> + <id>762</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7750,7 +7788,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка</name> - <id>761</id> + <id>763</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7779,7 +7817,7 @@ </userVisible> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>763</id> + <id>765</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7810,7 +7848,7 @@ </toolTip> <extendedTooltip> <name>СписокВходящиеКонтекстноеМенюГруппаКопироватьУдалитьРасширеннаяПодсказка</name> - <id>762</id> + <id>764</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7872,7 +7910,7 @@ </toolTip> <extendedTooltip> <name>СтраницаСписокВходящиеРасширеннаяПодсказка</name> - <id>750</id> + <id>752</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7916,7 +7954,7 @@ </dataPath> <extendedTooltip> <name>ВажностьНомерКартинкиИсходящиеРасширеннаяПодсказка</name> - <id>869</id> + <id>871</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -7966,7 +8004,7 @@ </toolTip> <extendedTooltip> <name>ЕстьВложенияИсходящиеРасширеннаяПодсказка</name> - <id>871</id> + <id>873</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8013,7 +8051,7 @@ </dataPath> <extendedTooltip> <name>НомерКартинкиИсходящиеРасширеннаяПодсказка</name> - <id>873</id> + <id>875</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8063,7 +8101,7 @@ </dataPath> <extendedTooltip> <name>УчастникиИсходящиеРасширеннаяПодсказка</name> - <id>875</id> + <id>877</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8099,7 +8137,7 @@ </dataPath> <extendedTooltip> <name>ТемаИсходящиеРасширеннаяПодсказка</name> - <id>877</id> + <id>879</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8139,7 +8177,7 @@ </dataPath> <extendedTooltip> <name>ПолученоОтправленоИсходящиеРасширеннаяПодсказка</name> - <id>879</id> + <id>881</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8183,7 +8221,7 @@ </dataPath> <extendedTooltip> <name>РазмерИсходящиеРасширеннаяПодсказка</name> - <id>881</id> + <id>883</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8223,7 +8261,7 @@ </userVisible> <extendedTooltip> <name>СписокСоздатьЭлектронноеПисьмоИсходящиеРасширеннаяПодсказка</name> - <id>836</id> + <id>838</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8252,7 +8290,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеПереслатьРасширеннаяПодсказка</name> - <id>837</id> + <id>839</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8278,7 +8316,7 @@ </userVisible> <extendedTooltip> <name>СписокОтправитьПолучитьПочтуИсходящиеРасширеннаяПодсказка</name> - <id>838</id> + <id>840</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8307,7 +8345,7 @@ </userVisible> <extendedTooltip> <name>СписокРассмотреноИсходящиеРасширеннаяПодсказка</name> - <id>840</id> + <id>842</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8333,7 +8371,7 @@ </userVisible> <extendedTooltip> <name>СписокОтложитьРассмотрениеИсходящиеРасширеннаяПодсказка</name> - <id>841</id> + <id>843</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8359,7 +8397,7 @@ </userVisible> <extendedTooltip> <name>СписокНеРассмотреноИсходящиеРасширеннаяПодсказка</name> - <id>842</id> + <id>844</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8386,7 +8424,7 @@ </userVisible> <extendedTooltip> <name>СписокОтветственныйИсходящиеРасширеннаяПодсказка</name> - <id>843</id> + <id>845</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8412,7 +8450,7 @@ </userVisible> <extendedTooltip> <name>СписокПредметИсходящиеРасширеннаяПодсказка</name> - <id>844</id> + <id>846</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8443,7 +8481,7 @@ </toolTip> <extendedTooltip> <name>СписокИсходящиеРассмотреноРасширеннаяПодсказка</name> - <id>839</id> + <id>841</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8466,7 +8504,7 @@ </userVisible> <extendedTooltip> <name>ИзменитьИсходящиеРасширеннаяПодсказка</name> - <id>846</id> + <id>848</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8492,7 +8530,7 @@ </userVisible> <extendedTooltip> <name>СкопироватьИсходящиеРасширеннаяПодсказка</name> - <id>847</id> + <id>849</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8521,7 +8559,7 @@ </userVisible> <extendedTooltip> <name>УстановитьПометкуУдаленияИсходящиеРасширеннаяПодсказка</name> - <id>849</id> + <id>851</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8553,7 +8591,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСписокУстановитьПометкуУдаленияИсходящиеРасширеннаяПодсказка</name> - <id>848</id> + <id>850</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8576,7 +8614,7 @@ </userVisible> <extendedTooltip> <name>НайтиИсходящиеРасширеннаяПодсказка</name> - <id>851</id> + <id>853</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8603,7 +8641,7 @@ </userVisible> <extendedTooltip> <name>ОтменитьПоискИсходящиеРасширеннаяПодсказка</name> - <id>852</id> + <id>854</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8630,7 +8668,7 @@ </userVisible> <extendedTooltip> <name>УстановитьИнтервалДатИсходящиеРасширеннаяПодсказка</name> - <id>853</id> + <id>855</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8661,7 +8699,7 @@ </toolTip> <extendedTooltip> <name>ГруппаНайтиИсходящиеРасширеннаяПодсказка</name> - <id>850</id> + <id>852</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8686,7 +8724,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандыСпискаИсходящиеРасширеннаяПодсказка</name> - <id>845</id> + <id>847</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8706,7 +8744,7 @@ </userVisible> <extendedTooltip> <name>СписокОбновитьИсходящиеРасширеннаяПодсказка</name> - <id>854</id> + <id>856</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8733,7 +8771,7 @@ </userVisible> <extendedTooltip> <name>СписокНастройкаСпискаИсходящиеРасширеннаяПодсказка</name> - <id>855</id> + <id>857</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8759,7 +8797,7 @@ </userVisible> <extendedTooltip> <name>СписокВывестиСписокИсходящиеРасширеннаяПодсказка</name> - <id>856</id> + <id>858</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8785,7 +8823,7 @@ </userVisible> <extendedTooltip> <name>СписокСправкаИсходящиеРасширеннаяПодсказка</name> - <id>857</id> + <id>859</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8811,7 +8849,7 @@ </userVisible> <extendedTooltip> <name>ФормаПерсональныеНастройкиИсходящиеРасширеннаяПодсказка</name> - <id>858</id> + <id>860</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8852,10 +8890,10 @@ </handlers> <searchStringAddition> <name>СписокИсходящиеСтрокаПоиска</name> - <id>860</id> + <id>862</id> <extendedTooltip> <name>СписокИсходящиеСтрокаПоискаРасширеннаяПодсказка</name> - <id>862</id> + <id>864</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8865,7 +8903,7 @@ </extendedTooltip> <contextMenu> <name>СписокИсходящиеСтрокаПоискаКонтекстноеМеню</name> - <id>861</id> + <id>863</id> <autoFill>true</autoFill> </contextMenu> <source>СписокИсходящие</source> @@ -8875,10 +8913,10 @@ </searchStringAddition> <viewStatusAddition> <name>СписокИсходящиеСостояниеПросмотра</name> - <id>863</id> + <id>865</id> <extendedTooltip> <name>СписокИсходящиеСостояниеПросмотраРасширеннаяПодсказка</name> - <id>865</id> + <id>867</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8888,7 +8926,7 @@ </extendedTooltip> <contextMenu> <name>СписокИсходящиеСостояниеПросмотраКонтекстноеМеню</name> - <id>864</id> + <id>866</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -8899,10 +8937,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокИсходящиеУправлениеПоиском</name> - <id>866</id> + <id>868</id> <extendedTooltip> <name>СписокИсходящиеУправлениеПоискомРасширеннаяПодсказка</name> - <id>868</id> + <id>870</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8912,7 +8950,7 @@ </extendedTooltip> <contextMenu> <name>СписокИсходящиеУправлениеПоискомКонтекстноеМеню</name> - <id>867</id> + <id>869</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -8923,7 +8961,7 @@ </searchControlAddition> <extendedTooltip> <name>СписокИсходящиеРасширеннаяПодсказка</name> - <id>859</id> + <id>861</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8944,7 +8982,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюПереслатьРасширеннаяПодсказка</name> - <id>823</id> + <id>825</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8970,7 +9008,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюИзменитьРасширеннаяПодсказка</name> - <id>824</id> + <id>826</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -8996,7 +9034,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюДобавитьВЗакладкиИсходящиеРасширеннаяПодсказка</name> - <id>825</id> + <id>827</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9022,7 +9060,7 @@ </userVisible> <extendedTooltip> <name>СписокКонтекстноеМенюПеренестиВПапкуИсходящиеРасширеннаяПодсказка</name> - <id>826</id> + <id>828</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9051,7 +9089,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка</name> - <id>828</id> + <id>830</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9077,7 +9115,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка</name> - <id>829</id> + <id>831</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9103,7 +9141,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюПредметСписокРасширеннаяПодсказка</name> - <id>830</id> + <id>832</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9134,7 +9172,7 @@ </toolTip> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка</name> - <id>827</id> + <id>829</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9154,7 +9192,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка</name> - <id>831</id> + <id>833</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9180,7 +9218,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка</name> - <id>832</id> + <id>834</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9206,7 +9244,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка</name> - <id>833</id> + <id>835</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9235,7 +9273,7 @@ </userVisible> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка</name> - <id>835</id> + <id>837</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9266,7 +9304,7 @@ </toolTip> <extendedTooltip> <name>СписокИсходящиеКонтекстноеМенюГруппаУдалитьРасширеннаяПодсказка</name> - <id>834</id> + <id>836</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9328,7 +9366,7 @@ </toolTip> <extendedTooltip> <name>СтраницаСписокИсходящиеРасширеннаяПодсказка</name> - <id>822</id> + <id>824</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9357,7 +9395,7 @@ </toolTip> <extendedTooltip> <name>СтраницыСписокРасширеннаяПодсказка</name> - <id>679</id> + <id>680</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9390,7 +9428,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПредпросмотрОбычныйТекстРасширеннаяПодсказка</name> - <id>893</id> + <id>895</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9433,7 +9471,7 @@ <readOnly>true</readOnly> <extendedTooltip> <name>СтраницаПредпросмотрОбычныйТекстРасширеннаяПодсказка</name> - <id>892</id> + <id>894</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9464,7 +9502,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПредпросмотрHTMLРасширеннаяПодсказка</name> - <id>896</id> + <id>898</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9510,7 +9548,7 @@ </toolTip> <extendedTooltip> <name>СтраницаПредпросмотрHTMLРасширеннаяПодсказка</name> - <id>895</id> + <id>897</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9539,7 +9577,7 @@ </toolTip> <extendedTooltip> <name>СтраницыПредпросмотрРасширеннаяПодсказка</name> - <id>891</id> + <id>893</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9566,7 +9604,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ОписаниеНайденоППРасширеннаяПодсказка</name> - <id>898</id> + <id>900</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9607,7 +9645,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСписокРасширеннаяПодсказка</name> - <id>678</id> + <id>679</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9640,7 +9678,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОсновноеРасширеннаяПодсказка</name> - <id>425</id> + <id>426</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -9663,6 +9701,10 @@ <id>-1</id> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> @@ -9741,22 +9783,61 @@ <queryText>ВЫБРАТЬ ВЫБОР КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.Встреча - ТОГДА 0 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 10 + ИНАЧЕ 0 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие - ТОГДА 1 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 11 + ИНАЧЕ 1 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок - ТОГДА 2 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 12 + ИНАЧЕ 2 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - ТОГДА 3 - ИНАЧЕ 4 - КОНЕЦ + ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления - ТОГДА 10 - ИНАЧЕ ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.Рассмотрено - ТОГДА 5 - ИНАЧЕ 0 - КОНЕЦ + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 13 + ИНАЧЕ 3 + КОНЕЦ + КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 14 + ИНАЧЕ ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + ТОГДА 15 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + ТОГДА 16 + ИНАЧЕ 4 + КОНЕЦ + КОНЕЦ + КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.СообщениеSMS + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 22 + ИНАЧЕ ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) + ТОГДА 17 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) + ТОГДА 18 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) + ТОГДА 19 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) + ТОГДА 21 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) + ТОГДА 23 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) + ТОГДА 24 + ИНАЧЕ 17 + КОНЕЦ + КОНЕЦ КОНЕЦ КАК НомерКартинки, ЖурналДокументовВзаимодействия.Ссылка, ЖурналДокументовВзаимодействия.Дата, @@ -9780,8 +9861,10 @@ ВЫРАЗИТЬ(ЖурналДокументовВзаимодействия.Размер / 1024 КАК ЧИСЛО(10, 2)) КАК Размер, ЖурналДокументовВзаимодействия.Важность, ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Высокая) ТОГДА 2 - КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Низкая) ТОГДА 0 + КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Высокая) + ТОГДА 2 + КОГДА ЖурналДокументовВзаимодействия.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиВзаимодействия.Низкая) + ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ВажностьНомерКартинки ИЗ @@ -9828,6 +9911,7 @@ <types>DocumentRef.ТелефонныйЗвонок</types> <types>DocumentRef.Встреча</types> <types>String</types> + <types>DocumentRef.СообщениеSMS</types> <types>TypeDescription</types> <stringQualifiers/> </valueType> @@ -11999,6 +12083,29 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СоздатьСообщениеSMS</name> + <title> + <key>ru</key> + <value>Сообщение SMS</value> + + 29 + + ru + Создать сообщение SMS + + + true + + + + СоздатьСообщениеSMS + + + FunctionalOption.ИспользоватьПрочиеВзаимодействия + Auto + Auto + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 9c1b1d8e2..797d97300 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем КонтекстВыбора; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -7,6 +10,14 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("РежимВыбора") И Параметры.РежимВыбора = Истина Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + КонецЕсли; ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); @@ -21,7 +32,7 @@ Для Каждого ТипПредмета Из Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Предмет.Тип.Типы() Цикл Если ТолькоПочта И (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ - ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")) Тогда + ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") ИЛИ ТипПредмета = Тип("ДокументСсылка.СообщениеSMS")) Тогда Продолжить; КонецЕсли; СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета)); @@ -124,6 +135,65 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если КонтекстВыбора = "ОтветственныйВыполнить" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + УстановитьОтветственного(ВыбранноеЗначение, Неопределено); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + ИначеЕсли КонтекстВыбора = "ОтветственныйСписок" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + УстановитьОтветственного(ВыбранноеЗначение, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + ИначеЕсли КонтекстВыбора = "ПредметВыполнить" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + УстановитьПредмет(ВыбранноеЗначение, Неопределено); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + ИначеЕсли КонтекстВыбора = "ПредметСписок" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + УстановитьПредмет(ВыбранноеЗначение, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + ИначеЕсли КонтекстВыбора = "ПеренестиВПапку" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные; + + Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда + ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбранноеЗначение); + Иначе + УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбранноеЗначение); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + КонецЕсли; + + КонецЕсли; + + КонтекстВыбора = Неопределено; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -302,7 +372,8 @@ СтруктураПараметры.Вставить("Родитель", ТекущиеДанные.Значение); КонецЕсли; - ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта",Новый Структура("ЗначенияЗаполнения",СтруктураПараметры), ЭтаФорма); + ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтруктураПараметры); + ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -703,7 +774,8 @@ КонецЕсли; - ОткрытьФормуМодально("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", Новый Структура("Вложения",СписокИменФайлов), ЭтаФорма); + ПараметрыФормы = Новый Структура("Вложения", СписокИменФайлов); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -856,15 +928,12 @@ &НаКлиенте Процедура ОтветственныйВыполнить(Команда) - ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", - Новый Структура("РежимВыбора",Истина)); - Если ВыбранныйОтветственный <> Неопределено Тогда - - УстановитьОтветственного(ВыбранныйОтветственный,Неопределено); - - КонецЕсли; + КонтекстВыбора = "ОтветственныйВыполнить"; - ВосстановитьРаскрытыеУзлыДерева(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора",Истина); + + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -876,15 +945,12 @@ Возврат; КонецЕсли; - ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", - Новый Структура("РежимВыбора",Истина)); - Если ВыбранныйОтветственный <> Неопределено Тогда - - УстановитьОтветственного(ВыбранныйОтветственный,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); - - КонецЕсли; + КонтекстВыбора = "ОтветственныйСписок"; - ВосстановитьРаскрытыеУзлыДерева(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора",Истина); + + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -977,12 +1043,12 @@ Возврат; КонецЕсли; - Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); - Если Предмет <> Неопределено Тогда - УстановитьПредмет(Предмет,Неопределено); - КонецЕсли; + КонтекстВыбора = "ПредметВыполнить"; - ВосстановитьРаскрытыеУзлыДерева(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму(ВыбранныйТипПредмета.Значение + ".ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -999,12 +1065,12 @@ Возврат; КонецЕсли; - Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); - Если Предмет <> Неопределено Тогда - УстановитьПредмет(Предмет,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); - КонецЕсли; + КонтекстВыбора = "ПредметСписок"; - ВосстановитьРаскрытыеУзлыДерева(); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму(ВыбранныйТипПредмета.Значение + ".ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -1062,7 +1128,7 @@ КонецЕсли; ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда + Если ВвестиДату(ДатаОтработки, "Отработать после", ЧастиДаты.ДатаВремя) Тогда ОтложитьРассмотрение(ДатаОтработки,Неопределено); КонецЕсли; @@ -1079,7 +1145,7 @@ КонецЕсли; ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда + Если ВвестиДату(ДатаОтработки, "Отработать после", ЧастиДаты.ДатаВремя) Тогда ОтложитьРассмотрение(ДатаОтработки, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); КонецЕсли; @@ -1115,6 +1181,13 @@ КонецПроцедуры +&НаКлиенте +Процедура СоздатьСообщениеSMS(Команда) + + СоздатьНовоеВзаимодействие("СообщениеSMS"); + +КонецПроцедуры + &НаКлиенте Процедура ПрименитьПравилаОбработки(Команда) @@ -1160,19 +1233,13 @@ КонецЕсли; КонецЕсли; - ВыбраннаяПапка = ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", - Новый Структура("Отбор",Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись))); - Если ВыбраннаяПапка <> Неопределено Тогда - - Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда - ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбраннаяПапка); - Иначе - УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбраннаяПапка); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - - КонецЕсли; + КонтекстВыбора = "ПеренестиВПапку"; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись)); + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -1312,8 +1379,9 @@ Если НЕ ТекущиеДанные.ЭтоГруппа Тогда ИзменитьОтборСписок("Закладки",Новый Структура("Значение", ТекущиеДанные.Ссылка), ИмяТекущейСтраницы); Иначе - ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(Список.Отбор.Элементы, - "Отбор панели навигации", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, + "Отбор панели навигации", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); КонецЕсли; КонецЕсли; ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда @@ -1361,8 +1429,10 @@ &НаСервере Функция СоздатьГруппуОтбораПанелиНавигации() - Возврат ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(Список.Отбор.Элементы,"Отбор панели навигации", - ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Возврат ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, + "Отбор панели навигации", + ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); КонецФункции @@ -1412,7 +1482,7 @@ КонецФункции &НаСервере -Процедура УправлениеВидиомстьюСписков(ТекущаяСтраницаСписок) +Процедура УправлениеВидимостьюСписков(ТекущаяСтраницаСписок) Элементы.Список.Видимость = (ТекущаяСтраницаСписок = Элементы.СтраницаСписокОбычная); Элементы.СписокИсходящие.Видимость = (ТекущаяСтраницаСписок = Элементы.СтраницаСписокИсходящие); @@ -1428,7 +1498,7 @@ Если ДанныеДляОбработки.Значение = Нстр("ru = 'Все'") Тогда - Список.Отбор.Элементы.Удалить(ГруппаОтбора); + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы.Удалить(ГруппаОтбора); Возврат; КонецЕсли; @@ -1436,7 +1506,7 @@ Если ИмяТаблицы <> "Папки" И Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокОбычная Тогда ИмяСтраницыСписка = Элементы.СтраницаСписокОбычная.Имя; Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная; - УправлениеВидиомстьюСписков(Элементы.СтраницаСписокОбычная); + УправлениеВидимостьюСписков(Элементы.СтраницаСписокОбычная); КонецЕсли; Если ИмяТаблицы = "Предметы" Тогда @@ -1468,6 +1538,7 @@ СписокТипов.Добавить(Тип("ДокументСсылка.ТелефонныйЗвонок")); СписокТипов.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")); СписокТипов.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")); + СписокТипов.Добавить(Тип("ДокументСсылка.СообщениеSMS")); ПравоеЗначение = СписокТипов; @@ -1582,7 +1653,7 @@ СтраницаСписок = ОпределитьСтраницуСпискаДляПапки(ДанныеДляОбработки.Значение); Если Элементы.СтраницыСписок.ТекущаяСтраница <> СтраницаСписок Тогда Элементы.СтраницыСписок.ТекущаяСтраница = СтраницаСписок; - УправлениеВидиомстьюСписков(СтраницаСписок); + УправлениеВидимостьюСписков(СтраницаСписок); КонецЕсли; Иначе @@ -1593,7 +1664,7 @@ Если Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокОбычная Тогда Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная; - УправлениеВидиомстьюСписков(Элементы.СтраницаСписокОбычная); + УправлениеВидимостьюСписков(Элементы.СтраницаСписокОбычная); КонецЕсли; КонецЕсли; @@ -1824,7 +1895,11 @@ Иначе ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрОбычныйТекст.Имя; - Предпросмотр = СсылкаДокументВзаимодействий.Описание; + Если ТипЗнч(СсылкаДокументВзаимодействий) = Тип("ДокументСсылка.СообщениеSMS") Тогда + Предпросмотр = СсылкаДокументВзаимодействий.ТекстСообщения; + Иначе + Предпросмотр = СсылкаДокументВзаимодействий.Описание; + КонецЕсли; ПредпросмотрHTML = ""; КонецЕсли; @@ -1880,15 +1955,16 @@ Элементы.СписокСоздатьВстречу.Видимость = НЕ ЭтоПапки; Элементы.СписокСоздатьЗапланированноеВзаимодействие.Видимость = НЕ ЭтоПапки; Элементы.СписокСоздатьТелефонныйЗвонок.Видимость = НЕ ЭтоПапки; + Элементы.СписокСоздатьСообщениеSMS.Видимость = НЕ ЭтоПапки; КонецПроцедуры &НаСервере Процедура УстановитьЗаголовокВидаПанелиНавигации() - Для каждого ПодчиченныйЭлемент Из Элементы.ВыборВариантаНавигации.ПодчиненныеЭлементы Цикл - Если ТипЗнч(ПодчиченныйЭлемент) = Тип("КнопкаФормы") Тогда - ПодчиченныйЭлемент.Пометка = Ложь; + Для каждого ПодчиненныйЭлемент Из Элементы.ВыборВариантаНавигации.ПодчиненныеЭлементы Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("КнопкаФормы") Тогда + ПодчиненныйЭлемент.Пометка = Ложь; КонецЕсли; КонецЦикла; @@ -2232,6 +2308,7 @@ | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ТелефонныйЗвонок) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоВходящее) + | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.СообщениеSMS) | ТОГДА &СтрокаПредметНеУказан | ИНАЧЕ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) | КОНЕЦ @@ -2260,6 +2337,7 @@ | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ТелефонныйЗвонок) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоВходящее) + | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.СообщениеSMS) | ТОГДА &СтрокаПредметНеУказан | ИНАЧЕ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) | КОНЕЦ @@ -2281,7 +2359,8 @@ | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.ЗапланированноеВзаимодействие | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.ТелефонныйЗвонок | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее) + | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + | ИЛИ ПредметыНеРассмотрено.Значение ССЫЛКА Документ.СообщениеSMS) | |ОБЪЕДИНИТЬ ВСЕ | @@ -2312,6 +2391,7 @@ | КОГДА ТИПЗНАЧЕНИЯ(ПредметыРассмотрено.Значение) = ТИП(Документ.ТелефонныйЗвонок) ТОГДА 3 | КОГДА ТИПЗНАЧЕНИЯ(ПредметыРассмотрено.Значение) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) ТОГДА 5 | КОГДА ТИПЗНАЧЕНИЯ(ПредметыРассмотрено.Значение) = ТИП(Документ.ЭлектронноеПисьмоВходящее) ТОГДА 4 + | КОГДА ТИПЗНАЧЕНИЯ(ПредметыРассмотрено.Значение) = ТИП(Документ.СообщениеSMS) ТОГДА 9 | ИНАЧЕ 7 | КОНЕЦ | КОНЕЦ КАК НомерКартинки @@ -3047,6 +3127,7 @@ | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ТелефонныйЗвонок) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоВходящее) + | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.СообщениеSMS) | ТОГДА &ПрочиеВопросы | ИНАЧЕ &ПрочиеПредметы | КОНЕЦ @@ -3074,6 +3155,7 @@ | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ТелефонныйЗвонок) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.ЭлектронноеПисьмоВходящее) + | ИЛИ ТИПЗНАЧЕНИЯ(ПредметыВзаимодействий.Предмет) = ТИП(Документ.СообщениеSMS) | ТОГДА &ПрочиеВопросы | ИНАЧЕ &ПрочиеПредметы | КОНЕЦ @@ -3107,7 +3189,7 @@ | РеквизитыПредмета.Значение, | РеквизитыПредмета.НеРассмотрено, | РеквизитыПредмета.РеквизитДопУпорядочивания - |ПОМЕСТИТЬ РеквзитыПредметаСоединения + |ПОМЕСТИТЬ РеквизитыПредметаСоединения |ИЗ |РеквизитыПредмета КАК РеквизитыПредмета | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия @@ -3117,7 +3199,8 @@ | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.ЗапланированноеВзаимодействие | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.ТелефонныйЗвонок | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее) + | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + | ИЛИ РеквизитыПредмета.Значение ССЫЛКА Документ.СообщениеSMS) | |ОБЪЕДИНИТЬ ВСЕ | @@ -3146,10 +3229,11 @@ | КОГДА ТИПЗНАЧЕНИЯ(РеквизитыПредмета.Значение) = ТИП(Документ.ТелефонныйЗвонок) ТОГДА 3 | КОГДА ТИПЗНАЧЕНИЯ(РеквизитыПредмета.Значение) = ТИП(Документ.ЭлектронноеПисьмоИсходящее) ТОГДА 5 | КОГДА ТИПЗНАЧЕНИЯ(РеквизитыПредмета.Значение) = ТИП(Документ.ЭлектронноеПисьмоВходящее) ТОГДА 4 + | КОГДА ТИПЗНАЧЕНИЯ(РеквизитыПредмета.Значение) = ТИП(Документ.СообщениеSMS) ТОГДА 9 | ИНАЧЕ 7 | КОНЕЦ КАК НомерКартинки |ИЗ - | РеквзитыПредметаСоединения КАК РеквизитыПредмета + | РеквизитыПредметаСоединения КАК РеквизитыПредмета | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия | ПО РеквизитыПредмета.Значение = Взаимодействия.Ссылка | @@ -3238,7 +3322,7 @@ &НаСервере Функция ПолучитьТекстЗапросаПоОтборуСписка(Запрос) - Если Список.Отбор.Элементы.Количество() > 0 Тогда + Если ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы.Количество() > 0 Тогда СхемаОтборВзаимодействия = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия"); @@ -3247,7 +3331,7 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОтборВзаимодействия)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаОтборВзаимодействия.НастройкиПоУмолчанию); - СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор,Список.Отбор,,, Истина); + СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список),,, Истина); Если ЗначениеЗаполнено(Элементы.Список.Период.ДатаНачала) ИЛИ ЗначениеЗаполнено(Элементы.Список.Период.ДатаОкончания) Тогда КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Интервал", Элементы.Список.Период); @@ -3845,8 +3929,9 @@ Возврат Результат; КонецЕсли; - ГруппаОтбораПоПанелиНавигации = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению(Список.Отбор.Элементы, - "Отбор панели навигации"); + ГруппаОтбораПоПанелиНавигации = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению( + ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, + "Отбор панели навигации"); Если ГруппаОтбораПоПанелиНавигации = Неопределено Тогда Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'"); Возврат Результат; @@ -4106,9 +4191,9 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОтбора)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаОтбора.НастройкиПоУмолчанию); - СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, Список.Отбор); + СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список)); - //Добавим отбор с видом сравнения НЕ для групповых комманд + //Добавим отбор с видом сравнения НЕ для групповых команд Если ЗначениеРеквизитаДопОтбора <> Неопределено Тогда ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяРеквизитаДопОтбора); @@ -4170,7 +4255,7 @@ КонецПроцедуры -// Обновить индекс полнотектового поиска. +// Обновить индекс полнотекстового поиска. &НаСервереБезКонтекста Процедура ОбновитьИндексППД() @@ -4219,8 +4304,7 @@ РасширенныйПоиск = Истина; ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Найдено %1 %2.'"), ?(ТолькоПочта,НСтр("ru = 'писем'"), НСтр("ru = 'взаимодействий'")) + ": ", - Строка(КоличествоЭлементовНайдено) - ); + Строка(КоличествоЭлементовНайдено)); ПоказатьОповещениеПользователя(ТекстОповещения); ТекущиеДанные = ТекущийЭлементСписок().ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда @@ -4269,8 +4353,7 @@ Список, "Поиск", Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(), - ВидСравненияКомпоновкиДанных.Равно,, Истина - ); + ВидСравненияКомпоновкиДанных.Равно,, Истина); Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон; Возврат НСтр("ru = 'Слишком много результатов, уточните запрос.'"); КонецЕсли; @@ -4281,8 +4364,7 @@ Список, "Поиск", Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(), - ВидСравненияКомпоновкиДанных.Равно,, Истина - ); + ВидСравненияКомпоновкиДанных.Равно,, Истина); Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон; Возврат НСтр("ru = 'Ничего не найдено'"); КонецЕсли; @@ -4324,8 +4406,7 @@ Список, "Поиск", Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(), - ВидСравненияКомпоновкиДанных.Равно,, Истина - ); + ВидСравненияКомпоновкиДанных.Равно,, Истина); Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон; Возврат НСтр("ru = 'Ничего не найдено.'"); КонецЕсли; @@ -4345,15 +4426,13 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ИсторияПоискаВзаимодействия", , - Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения() - ); + Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения()); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Поиск", ОписанияНайденоПП.Выгрузить(,"Взаимодействие").ВыгрузитьКолонку("Взаимодействие"), - ВидСравненияКомпоновкиДанных.ВСписке,, Истина - ); + ВидСравненияКомпоновкиДанных.ВСписке,, Истина); Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ЦветФонаПоля; Возврат Неопределено; @@ -4554,4 +4633,3 @@ КонецЦикла; КонецПроцедуры - diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 9878e0e61..62ed300d0 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -17,7 +17,7 @@ ПереключитьРежимПросмотраРасширеннаяПодсказка - 147 + 148 Label true true @@ -53,7 +53,7 @@ ТипВзаимодействияРасширеннаяПодсказка - 148 + 149 Label true true @@ -192,6 +192,15 @@ ВходящиеЗвонки + + + ru + Сообщения SMS + + + СообщенияSMS + + Normal
            @@ -212,7 +221,7 @@ СтатусРасширеннаяПодсказка - 150 + 151 Label true true @@ -300,7 +309,7 @@ ОтветственныйРасширеннаяПодсказка - 152 + 153 Label true true @@ -319,8 +328,10 @@ Left true + 35 true true + false true true true @@ -340,7 +351,7 @@ true ГруппаФильтрыРасширеннаяПодсказка - 146 + 147 Label true true @@ -391,7 +402,7 @@ ДатаРасширеннаяПодсказка - 197 + 199 Label true true @@ -436,7 +447,7 @@ УчастникиРасширеннаяПодсказка - 199 + 201 Label true true @@ -480,7 +491,7 @@ ТемаРасширеннаяПодсказка - 201 + 203 Label true true @@ -524,7 +535,7 @@ СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаРасширеннаяПодсказка - 160 + 161 Label true true @@ -556,7 +567,7 @@ СписокСоздатьВстречуРасширеннаяПодсказка - 162 + 163 Label true true @@ -582,7 +593,7 @@ СписокСоздатьЗапланированноеВзаимодействиеРасширеннаяПодсказка - 163 + 164 Label true true @@ -598,6 +609,32 @@ UserCmds Auto
            + + СписокСоздатьСообщениеSMS + 146 + true + true + + true + + + СписокСоздатьСообщениеSMSРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Form.Command.СоздатьСообщениеSMS + Normal + Auto + true + true + UserCmds + Auto + СписокСоздатьТелефонныйЗвонок 94 @@ -608,7 +645,7 @@ СписокСоздатьТелефонныйЗвонокРасширеннаяПодсказка - 164 + 166 Label true true @@ -634,7 +671,7 @@ СписокСоздатьЭлектронноеПисьмоРасширеннаяПодсказка - 165 + 167 Label true true @@ -665,7 +702,7 @@ ГруппаСоздатьРасширеннаяПодсказка - 161 + 162 Label true true @@ -696,7 +733,7 @@ false КомандаРассмотреноРасширеннаяПодсказка - 167 + 169 Label true true @@ -722,7 +759,7 @@ СписокНеРассмотреноРасширеннаяПодсказка - 168 + 170 Label true true @@ -750,7 +787,7 @@ false ОтложитьРассмотрениеРасширеннаяПодсказка - 169 + 171 Label true true @@ -777,7 +814,7 @@ false КомандаОтветственныйРасширеннаяПодсказка - 170 + 172 Label true true @@ -804,7 +841,7 @@ false КомандаПредметРасширеннаяПодсказка - 171 + 173 Label true true @@ -835,7 +872,7 @@ ГруппаКомандыВзаимодействийРасширеннаяПодсказка - 166 + 168 Label true true @@ -861,7 +898,7 @@ НайтиРасширеннаяПодсказка - 174 + 176 Label true true @@ -887,7 +924,7 @@ ОтменитьПоискРасширеннаяПодсказка - 175 + 177 Label true true @@ -913,7 +950,7 @@ УстановитьИнтервалДатРасширеннаяПодсказка - 176 + 178 Label true true @@ -944,7 +981,7 @@ ГруппаНайтиРасширеннаяПодсказка - 173 + 175 Label true true @@ -964,7 +1001,7 @@ ИзменитьРасширеннаяПодсказка - 177 + 179 Label true true @@ -990,7 +1027,7 @@ СкопироватьРасширеннаяПодсказка - 178 + 180 Label true true @@ -1020,7 +1057,7 @@ УстановитьПометкуУдаленияРасширеннаяПодсказка - 180 + 182 Label true true @@ -1052,7 +1089,7 @@ ГруппаСписокУстановитьПометкуУдаленияРасширеннаяПодсказка - 179 + 181 Label true true @@ -1077,7 +1114,7 @@ ГруппаКомандыСпискаРасширеннаяПодсказка - 172 + 174 Label true true @@ -1097,7 +1134,7 @@ СписокОбновитьРасширеннаяПодсказка - 181 + 183 Label true true @@ -1123,7 +1160,7 @@ СписокПереключитьРежимПросмотраРасширеннаяПодсказка - 182 + 184 Label true true @@ -1150,7 +1187,7 @@ СписокНастройкаСпискаРасширеннаяПодсказка - 183 + 185 Label true true @@ -1176,7 +1213,7 @@ СписокВывестиСписокРасширеннаяПодсказка - 184 + 186 Label true true @@ -1202,7 +1239,7 @@ СписокСправкаРасширеннаяПодсказка - 185 + 187 Label true true @@ -1228,7 +1265,7 @@ СписокИзменитьФормуРасширеннаяПодсказка - 186 + 188 Label true true @@ -1252,10 +1289,10 @@ СписокСтрокаПоиска - 188 + 190 СписокСтрокаПоискаРасширеннаяПодсказка - 190 + 192 Label true true @@ -1265,7 +1302,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 189 + 191 true Список @@ -1275,10 +1312,10 @@ СписокСостояниеПросмотра - 191 + 193 СписокСостояниеПросмотраРасширеннаяПодсказка - 193 + 195 Label true true @@ -1288,7 +1325,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 192 + 194 true ViewStatusAddition @@ -1299,10 +1336,10 @@ СписокУправлениеПоиском - 194 + 196 СписокУправлениеПоискомРасширеннаяПодсказка - 196 + 198 Label true true @@ -1312,7 +1349,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 195 + 197 true SearchControlAddition @@ -1323,7 +1360,7 @@ СписокРасширеннаяПодсказка - 187 + 189 Label true true @@ -1345,7 +1382,7 @@ false ОтложитьРасширеннаяПодсказка - 156 + 157 Label true true @@ -1372,7 +1409,7 @@ false УстановитьРассмотреноРасширеннаяПодсказка - 157 + 158 Label true true @@ -1399,7 +1436,7 @@ false УстановитьОтветственногоРасширеннаяПодсказка - 158 + 159 Label true true @@ -1426,7 +1463,7 @@ false УстановитьПредметРасширеннаяПодсказка - 159 + 160 Label true true @@ -1497,7 +1534,7 @@ СтраницаСписокРасширеннаяПодсказка - 155 + 156 Label true true @@ -1553,7 +1590,7 @@ None ДеревоВзаимодействийНомерКартинкиРасширеннаяПодсказка - 242 + 244 Label true true @@ -1598,7 +1635,7 @@ ДеревоВзаимодействийДатаРасширеннаяПодсказка - 244 + 246 Label true true @@ -1643,7 +1680,7 @@ ДатаКартинкаРасширеннаяПодсказка - 241 + 243 Label true true @@ -1671,7 +1708,7 @@ ДеревоВзаимодействийУчастникиРасширеннаяПодсказка - 246 + 248 Label true true @@ -1714,7 +1751,7 @@ ДеревоВзаимодействийТемаРасширеннаяПодсказка - 248 + 250 Label true true @@ -1763,7 +1800,7 @@ СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДеревоРасширеннаяПодсказка - 212 + 214 Label true true @@ -1795,7 +1832,7 @@ СписокСоздатьВстречуДеревоРасширеннаяПодсказка - 214 + 216 Label true true @@ -1821,7 +1858,7 @@ СписокСоздатьЗапланированноеВзаимодействиеДеревоРасширеннаяПодсказка - 215 + 217 Label true true @@ -1847,7 +1884,7 @@ СписокСоздатьТелефонныйЗвонокДеревоРасширеннаяПодсказка - 216 + 218 Label true true @@ -1873,7 +1910,7 @@ СписокСоздатьЭлектронноеПисьмоДеревоРасширеннаяПодсказка - 217 + 219 Label true true @@ -1904,7 +1941,7 @@ ГруппаСоздатьДеревоРасширеннаяПодсказка - 213 + 215 Label true true @@ -1935,7 +1972,7 @@ false КомандаРассмотреноДеревоРасширеннаяПодсказка - 219 + 221 Label true true @@ -1961,7 +1998,7 @@ ДеревоВзаимодействийНеРассмотреноРасширеннаяПодсказка - 220 + 222 Label true true @@ -1989,7 +2026,7 @@ false ОтложитьРассмотрениеДеревоРасширеннаяПодсказка - 221 + 223 Label true true @@ -2016,7 +2053,7 @@ false КомандаОтветственныйДеревоРасширеннаяПодсказка - 222 + 224 Label true true @@ -2043,7 +2080,7 @@ false КомандаПредметДеревоРасширеннаяПодсказка - 223 + 225 Label true true @@ -2074,7 +2111,7 @@ ГруппаКомандыВзаимодействийДеревоРасширеннаяПодсказка - 218 + 220 Label true true @@ -2094,7 +2131,7 @@ ДеревоВзаимодействийУстановитьИнтервалРасширеннаяПодсказка - 224 + 226 Label true true @@ -2123,7 +2160,7 @@ ДеревоВзаимодействийИзменитьРасширеннаяПодсказка - 226 + 228 Label true true @@ -2149,7 +2186,7 @@ ДеревоВзаимодействийСкопироватьРасширеннаяПодсказка - 227 + 229 Label true true @@ -2180,7 +2217,7 @@ ДеревоВзаимодействийУдалитьРасширеннаяПодсказка - 228 + 230 Label true true @@ -2215,7 +2252,7 @@ ГруппаСтандартныеКомандыДеревоРасширеннаяПодсказка - 225 + 227 Label true true @@ -2235,7 +2272,7 @@ ДеревоВзаимодействийПереключитьРежимПросмотраРасширеннаяПодсказка - 229 + 231 Label true true @@ -2266,7 +2303,7 @@ ОбновитьДеревоРасширеннаяПодсказка - 230 + 232 Label true true @@ -2306,10 +2343,10 @@ ДеревоВзаимодействийСтрокаПоиска - 232 + 234 ДеревоВзаимодействийСтрокаПоискаРасширеннаяПодсказка - 234 + 236 Label true true @@ -2319,7 +2356,7 @@ ДеревоВзаимодействийСтрокаПоискаКонтекстноеМеню - 233 + 235 true ДеревоВзаимодействий @@ -2329,10 +2366,10 @@ ДеревоВзаимодействийСостояниеПросмотра - 235 + 237 ДеревоВзаимодействийСостояниеПросмотраРасширеннаяПодсказка - 237 + 239 Label true true @@ -2342,7 +2379,7 @@ ДеревоВзаимодействийСостояниеПросмотраКонтекстноеМеню - 236 + 238 true ViewStatusAddition @@ -2353,10 +2390,10 @@ ДеревоВзаимодействийУправлениеПоиском - 238 + 240 ДеревоВзаимодействийУправлениеПоискомРасширеннаяПодсказка - 240 + 242 Label true true @@ -2366,7 +2403,7 @@ ДеревоВзаимодействийУправлениеПоискомКонтекстноеМеню - 239 + 241 true SearchControlAddition @@ -2377,7 +2414,7 @@ ДеревоВзаимодействийРасширеннаяПодсказка - 231 + 233 Label true true @@ -2440,7 +2477,7 @@ СтраницаДеревоРасширеннаяПодсказка - 211 + 213 Label true true @@ -2469,7 +2506,7 @@ СтраницыСписокДеревоРасширеннаяПодсказка - 154 + 155 Label true true @@ -2487,6 +2524,10 @@ -1 Left + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения @@ -2551,22 +2592,61 @@ ВЫБРАТЬ ВЫБОР КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.Встреча - ТОГДА 0 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 10 + ИНАЧЕ 0 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие - ТОГДА 1 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 11 + ИНАЧЕ 1 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок - ТОГДА 2 + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 12 + ИНАЧЕ 2 + КОНЕЦ КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - ТОГДА 3 - ИНАЧЕ 4 - КОНЕЦ + ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления - ТОГДА 10 - ИНАЧЕ ВЫБОР - КОГДА ЖурналДокументовВзаимодействия.Рассмотрено - ТОГДА 5 - ИНАЧЕ 0 - КОНЕЦ + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 13 + ИНАЧЕ 3 + КОНЕЦ + КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 14 + ИНАЧЕ ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + ТОГДА 15 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + ТОГДА 16 + ИНАЧЕ 4 + КОНЕЦ + КОНЕЦ + КОГДА ЖурналДокументовВзаимодействия.Ссылка ССЫЛКА Документ.СообщениеSMS + ТОГДА ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.ПометкаУдаления + ТОГДА 22 + ИНАЧЕ ВЫБОР + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) + ТОГДА 17 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) + ТОГДА 18 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) + ТОГДА 19 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) + ТОГДА 21 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) + ТОГДА 23 + КОГДА ЖурналДокументовВзаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) + ТОГДА 24 + ИНАЧЕ 17 + КОНЕЦ + КОНЕЦ КОНЕЦ КАК НомерКартинки, ЖурналДокументовВзаимодействия.Ссылка, ЖурналДокументовВзаимодействия.Дата, @@ -2689,6 +2769,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS true @@ -2746,6 +2827,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS true @@ -3316,6 +3398,32 @@ Auto Auto + + СоздатьСообщениеSMS + + <key>ru</key> + <value>Сообщение SMS</value> + + 13 + + ru + Создать сообщение SMS + + + true + + + StdPicture.CreateListItem + + + + СоздатьСообщениеSMS + + + FunctionalOption.ИспользоватьПрочиеВзаимодействия + Auto + Auto + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index c3da142db..d36a23d8f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1,3 +1,5 @@ +&НаКлиенте +Перем КонтекстВыбора; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -32,9 +34,8 @@ КонецЕсли; КонецЕсли; - ОтборПоПредмету = Истина; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Предмет", - ПредметДляОтбора,ВидСравненияКомпоновкиДанных.Равно,,Истина); + Параметры.Отбор.Удалить("Предмет"); + УстановитьОтборПоПредмету(); ИначеЕсли Параметры.Отбор.Свойство("Контакт") Тогда @@ -67,7 +68,13 @@ Статус = "Все"; КонецЕсли; Ответственный = Настройки.Получить("Ответственный"); + Если Ответственный <> Неопределено Тогда + Настройки.Удалить("Ответственный"); + КонецЕсли; ВВидеДерева = Настройки.Получить("ВВидеДерева"); + Если ВВидеДерева <> Неопределено Тогда + Настройки.Удалить("ВВидеДерева"); + КонецЕсли; Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); @@ -82,12 +89,65 @@ Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаДерево Тогда ЗаполнитьДеревоВзаимодействийКлиент(); Иначе - УстановитьОтборПоКонтакту(); + Если ОтборПоПредмету Тогда + УстановитьОтборПоПредмету(); + Иначе + УстановитьОтборПоКонтакту(); + КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Пользователи.Форма.ФормаСписка") Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + + ВыполненаЗамена = Ложь; + УстановитьОтветственного(ВыбранноеЗначение, ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + Иначе + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + ИначеЕсли КонтекстВыбора = "ПредметВыполнить" Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + + Если ОтборПоПредмету И ПредметДляОтбора = ВыбранноеЗначение Тогда + Возврат; + КонецЕсли; + + ВыполненаЗамена = Ложь; + УстановитьПредмет(ВыбранноеЗначение, ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + Иначе + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -196,17 +256,17 @@ ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда - ОткрытьФормуМодально("Документ.Встреча.ФормаОбъекта", + ОткрытьФорму("Документ.Встреча.ФормаОбъекта", Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда - ОткрытьФормуМодально("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", + ОткрытьФорму("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда - ОткрытьФормуМодально("Документ.ТелефонныйЗвонок.ФормаОбъекта", + ОткрытьФорму("Документ.ТелефонныйЗвонок.ФормаОбъекта", Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтаФорма); КонецЕсли; @@ -272,30 +332,13 @@ Если НЕ ВыборКорректен() Тогда Возврат; КонецЕсли; - - ВыбранныйОтветственный = - ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", Новый Структура("РежимВыбора",Истина)); - Если ВыбранныйОтветственный <> Неопределено Тогда - - ВыполненаЗамена = Ложь; - УстановитьОтветственного(ВыбранныйОтветственный,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; + КонтекстВыбора = Неопределено; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -313,33 +356,12 @@ Возврат; КонецЕсли; - ВыбранныйПредмет = - ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); + КонтекстВыбора = "ПредметВыполнить"; - Если ВыбранныйПредмет <> Неопределено Тогда - - Если ОтборПоПредмету И ПредметДляОтбора = ВыбранныйПредмет Тогда - Возврат; - КонецЕсли; - - ВыполненаЗамена = Ложь; - УстановитьПредмет(ВыбранныйПредмет,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + + ОткрытьФорму(ВыбранныйТипПредмета.Значение + ".ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -424,6 +446,13 @@ КонецПроцедуры +&НаКлиенте +Процедура СоздатьСообщениеSMS(Команда) + + СоздатьНовоеВзаимодействие("СообщениеSMS"); + +КонецПроцедуры + &НаКлиенте Процедура ПереключитьРежимПросмотра(Команда) @@ -833,6 +862,11 @@ ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, "Входящий",ВидСравненияКомпоновкиДанных.Равно,Истина); + ИначеЕсли ТипВзаимодействия = "СообщенияSMS" Тогда + + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, + "Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.СообщениеSMS")); + КонецЕсли; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОтбора, КомпоновщикНастроек.ПолучитьНастройки(),,, @@ -983,6 +1017,15 @@ |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ + | СообщениеSMSАдресаты.Ссылка + |ИЗ + | Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты + |ГДЕ + | СообщениеSMSАдресаты.Контакт В(&Контакт) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ | ТелефонныйЗвонок.Ссылка |ИЗ | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок @@ -1016,7 +1059,6 @@ |ГДЕ | ЗапланированноеВзаимодействиеУчастники.Контакт В(&Контакт)"); - МассивПараметрКонтакт = ПолучитьПараметрКонтактВЗависимостиОтТипа(Контакт); Если МассивПараметрКонтакт.Количество() = 0 Тогда МассивПараметрКонтакт.Добавить(Контакт); @@ -1026,9 +1068,17 @@ СписокОтбора = Новый СписокЗначений; СписокОтбора.ЗагрузитьЗначения( - Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка") - ); + Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка",СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,,Истина); КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборПоПредмету() + + ОтборПоПредмету = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Предмет", + ПредметДляОтбора,ВидСравненияКомпоновкиДанных.Равно,,Истина); + +КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs index fc6256dc4..24f57c35a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs +++ b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs @@ -74,6 +74,19 @@ ВстречаУчастники.Контакт В(&Контакт) {ГДЕ (Встреча.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)} + +ОБЪЕДИНИТЬ ВСЕ + +ВЫБРАТЬ + СообщениеSMSАдресаты.Ссылка КАК Ссылка +ИЗ + Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты + ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СообщениеSMS КАК СообщениеSMS + ПО СообщениеSMSАдресаты.Ссылка = СообщениеSMS.Ссылка +ГДЕ + СообщениеSMSАдресаты.Контакт В(&Контакт) +{ГДЕ + (СообщениеSMS.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)} ОБЪЕДИНИТЬ ВСЕ @@ -149,22 +162,61 @@ ВЫБРАТЬ ВЫБОР КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.Встреча - ТОГДА 0 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 10 + ИНАЧЕ 0 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие - ТОГДА 1 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 11 + ИНАЧЕ 1 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок - ТОГДА 2 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 12 + ИНАЧЕ 2 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - ТОГДА 3 - ИНАЧЕ 4 - КОНЕЦ + ВЫБОР - КОГДА Взаимодействия.ПометкаУдаления - ТОГДА 10 - ИНАЧЕ ВЫБОР - КОГДА Взаимодействия.Рассмотрено - ТОГДА 5 - ИНАЧЕ 0 - КОНЕЦ + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 13 + ИНАЧЕ 3 + КОНЕЦ + КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 14 + ИНАЧЕ ВЫБОР + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + ТОГДА 15 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + ТОГДА 16 + ИНАЧЕ 4 + КОНЕЦ + КОНЕЦ + КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.СообщениеSMS + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 22 + ИНАЧЕ ВЫБОР + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) + ТОГДА 17 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) + ТОГДА 18 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) + ТОГДА 19 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) + ТОГДА 21 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) + ТОГДА 23 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) + ТОГДА 24 + ИНАЧЕ 17 + КОНЕЦ + КОНЕЦ КОНЕЦ КАК НомерКартинки, Взаимодействия.Ссылка КАК Ссылка, Взаимодействия.Ответственный КАК Ответственный, diff --git a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs index ff90019e1..1dba64940 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs +++ b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийПредмет/Template.dcs @@ -86,22 +86,61 @@ ВЫБРАТЬ ВЫБОР КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.Встреча - ТОГДА 0 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 10 + ИНАЧЕ 0 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЗапланированноеВзаимодействие - ТОГДА 1 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 11 + ИНАЧЕ 1 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ТелефонныйЗвонок - ТОГДА 2 + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 12 + ИНАЧЕ 2 + КОНЕЦ КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - ТОГДА 3 - ИНАЧЕ 4 - КОНЕЦ + ВЫБОР - КОГДА Взаимодействия.ПометкаУдаления - ТОГДА 10 - ИНАЧЕ ВЫБОР - КОГДА Взаимодействия.Рассмотрено - ТОГДА 5 - ИНАЧЕ 0 - КОНЕЦ + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 13 + ИНАЧЕ 3 + КОНЕЦ + КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 14 + ИНАЧЕ ВЫБОР + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик) + ТОГДА 15 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + ТОГДА 16 + ИНАЧЕ 4 + КОНЕЦ + КОНЕЦ + КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.СообщениеSMS + ТОГДА ВЫБОР + КОГДА Взаимодействия.ПометкаУдаления + ТОГДА 22 + ИНАЧЕ ВЫБОР + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Черновик) + ТОГДА 17 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Исходящее) + ТОГДА 18 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставляется) + ТОГДА 19 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.ЧастичноДоставлено) + ТОГДА 21 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.НеДоставлено) + ТОГДА 23 + КОГДА Взаимодействия.СтатусИсходящегоПисьма = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументаСообщениеSMS.Доставлено) + ТОГДА 24 + ИНАЧЕ 17 + КОНЕЦ + КОНЕЦ КОНЕЦ КАК НомерКартинки, Взаимодействия.Ссылка КАК Ссылка, Взаимодействия.Ответственный КАК Ответственный, diff --git a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo index e334b283c..2f23998f3 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo @@ -17,6 +17,7 @@ Document.ЭлектронноеПисьмоВходящее Document.ЭлектронноеПисьмоИсходящее Document.ЗапланированноеВзаимодействие + Document.СообщениеSMS Use Type @@ -79,6 +80,7 @@ Document.ТелефонныйЗвонок.Attribute.Автор Document.ЗапланированноеВзаимодействие.Attribute.Автор Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + Document.СообщениеSMS.Attribute.Автор Входящий @@ -99,6 +101,7 @@ Document.Встреча.Attribute.Тема Document.ЗапланированноеВзаимодействие.Attribute.Тема Document.ТелефонныйЗвонок.Attribute.Тема + Document.СообщениеSMS.Attribute.Тема Ответственный @@ -112,6 +115,7 @@ Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + Document.СообщениеSMS.Attribute.Ответственный Рассмотрено @@ -125,6 +129,7 @@ Document.ЭлектронноеПисьмоВходящее.Attribute.Рассмотрено Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено Document.ЗапланированноеВзаимодействие.Attribute.Рассмотрено + Document.СообщениеSMS.Attribute.Рассмотрено РассмотретьПосле @@ -137,6 +142,7 @@ Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле Document.ЗапланированноеВзаимодействие.Attribute.РассмотретьПосле Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + Document.СообщениеSMS.Attribute.РассмотретьПосле Участники @@ -149,6 +155,7 @@ Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + Document.СообщениеSMS.Attribute.СписокУчастников СтатусИсходящегоПисьма @@ -157,6 +164,7 @@ Статус исходящего письма Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + Document.СообщениеSMS.Attribute.Состояние УчетнаяЗапись @@ -188,6 +196,7 @@ Document.ТелефонныйЗвонок.Attribute.ВзаимодействиеОснование Document.ЭлектронноеПисьмоВходящее.Attribute.ВзаимодействиеОснование Document.ЭлектронноеПисьмоИсходящее.Attribute.ВзаимодействиеОснование + Document.СообщениеSMS.Attribute.ВзаимодействиеОснование ПолученоОтправлено @@ -218,6 +227,7 @@ Document.ТелефонныйЗвонок.Attribute.Важность Document.ЭлектронноеПисьмоВходящее.Attribute.Важность Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + Document.СообщениеSMS.Attribute.Важность ФормаСписка @@ -312,7 +322,7 @@ ВзаимодействияПоКонтакту ru - Взаимодействия по контакту + Взаимодействия FormNavigationPanelGoTo @@ -408,7 +418,7 @@ ВзаимодействияПоПредмету ru - Взаимодействия по предмету + Взаимодействия FormNavigationPanelGoTo @@ -424,4 +434,25 @@ Перейти к просмотру списка взаимодействий + + НаписатьSMS + + ru + Написать SMS + + CommandGroup.Взаимодействия + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + DocumentRef.СообщениеSMS + CatalogRef.Пользователи + + Auto + + CommonPicture.НаписатьSMS + + diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html index 37cae2a49..e6755cec2 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html @@ -1,4 +1,4 @@ - +

             

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

             

            diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index c9cd940a1..2ca5bc05e 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -315,7 +315,7 @@ // // Параметры // ВопросШаблона - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // ДеревоАнкетыСервер - ДеревоЗначений - дерево значений, содержащее шаблон анкеты @@ -339,7 +339,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -357,10 +357,10 @@ ПараметрыОтвета = НайтиОтветВМассиве(ВыборкаВопрос.Ответ,ВариантыОтветовНаВопрос); Если ПараметрыОтвета <> Неопределено Тогда - ЭтаФорма[ИмяВопроса + "_Реквизит_" + ПараметрыОтвета.ПорядковыйНомерРеквзита] = Истина; + ЭтаФорма[ИмяВопроса + "_Реквизит_" + ПараметрыОтвета.ПорядковыйНомерРеквизита] = Истина; Если ПараметрыОтвета.ТребуетОткрытогоОтвета Тогда - ЭтаФорма[ИмяВопроса + "_Комментарий_" + ПараметрыОтвета.ПорядковыйНомерРеквзита] = ВыборкаВопрос.ОткрытыйОтвет; + ЭтаФорма[ИмяВопроса + "_Комментарий_" + ПараметрыОтвета.ПорядковыйНомерРеквизита] = ВыборкаВопрос.ОткрытыйОтвет; КонецЕсли; КонецЕсли; @@ -395,7 +395,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -426,7 +426,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -460,7 +460,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -491,7 +491,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -525,7 +525,7 @@ // // Параметры // Вопрос - СправочникСсылка.ВопросыШаблонаАнкет - вопрос шаблона анкеты, -// для которого устанавливаются значения реквзитов +// для которого устанавливаются значения реквизитов // ВыборкаВопрос - ВыборкаИзРезультатаЗапроса - выборка, содержащая значения ответов // на вопрос шаблона анкеты // СтрокаДерева - СтрокаДереваЗначений - строка дерева значений, содержащая данные вопроса шаблона анкеты @@ -578,7 +578,7 @@ КонецФункции -// Преобразовает данные в форме заполнения ответы в данные табличной части +// Преобразовывает данные в форме заполнения ответы в данные табличной части // &НаСервере Процедура ПреобразоватьРезультатыЗаполненияРазделаВТабличнуюЧасть() @@ -742,7 +742,7 @@ КонецПроцедуры //Получает ответы, данные респондентом на табличный вопрос с предопределенными ответами в строках и колонках и -// аккумулирует их в общейтаблице ответов. +// аккумулирует их в общей таблице ответов. // // Параметры // СтрокаДерева - СтрокаДереваЗначений - строка дерева шаблона анкеты @@ -793,7 +793,7 @@ КонецПроцедуры //Получает ответы, данные респондентом на табличный вопрос с предопределенными ответами в колонках и -// аккамулирует их в общей таблице ответов. +// аккумулирует их в общей таблице ответов. // // Параметры // СтрокаДерева - СтрокаДереваЗначений - строка дерева шаблона анкеты @@ -841,7 +841,7 @@ КонецПроцедуры //Получает ответы, данные респондентом на простой вопрос и -// аккамулирует их в общей таблице ответов. +// аккумулирует их в общей таблице ответов. // // Параметры // СтрокаДерева - СтрокаДереваЗначений - строка дерева шаблона анкеты @@ -929,7 +929,7 @@ // Добавляет пустые элементы в Коллекцию // // Параметры -// Таблица - Коллекция - коллеция в которую добавляются строки +// Таблица - Коллекция - коллекция в которую добавляются строки // ЧислоСтрок - Число - число добавляемых строк // &НаСервереБезКонтекста @@ -1083,7 +1083,7 @@ // // Параметры // Ответ - Характеристика.ВопросыДляАнкетирования - ответ, который ищем. -// МассивОтветов - Массив - масссив строк таблицы значений +// МассивОтветов - Массив - массив строк таблицы значений. // // Возвращаемое значение: // Структура - в структуре содержатся номер реквизита и признак необходимости открытого ответа. @@ -1097,7 +1097,7 @@ Если МассивОтветов[инд - 1].Ответ = Ответ Тогда - СтруктураВозврата.Вставить("ПорядковыйНомерРеквзита",инд); + СтруктураВозврата.Вставить("ПорядковыйНомерРеквизита",инд); СтруктураВозврата.Вставить("ТребуетОткрытогоОтвета",МассивОтветов[инд - 1].ТребуетОткрытогоОтвета); Возврат СтруктураВозврата; КонецЕсли; @@ -1174,9 +1174,9 @@ Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].ТолькоПросмотр = (НЕ ЭтаФорма[ИмяВопроса]); Если СтрЧислоВхождений(ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса,"Реквизит") = 0 Тогда - //У флажка и переключателя нет свойства АвтоотметкаНезаполенного. + //У флажка и переключателя нет свойства АвтоОтметкаНезаполненного. Попытка - Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].АвтоотметкаНезаполненного = (ЭтаФорма[ИмяВопроса] И ПодчиненныйВопрос.Обязательный); + Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].АвтоОтметкаНезаполненного = (ЭтаФорма[ИмяВопроса] И ПодчиненныйВопрос.Обязательный); Исключение КонецПопытки; @@ -1192,7 +1192,7 @@ КонецПроцедуры -//Устанавливает доступность и видимость реквзитов в зависимости от вида формы +//Устанавливает доступность и видимость реквизитов в зависимости от вида формы &НаСервере Процедура ДействияВЗависимостиОтВидаФормы() @@ -1232,7 +1232,7 @@ КонецПроцедуры -//Устанваливает обработчик события при изменения для простых и табличных вопросов +//Устанавливает обработчик события при изменении для простых и табличных вопросов &НаСервере Процедура УстановитьОбработчикСобытияПриИзмененииДляВопросов() diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index 262fda785..2300e6dcb 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -22,7 +22,7 @@ ПредметРасширеннаяПодсказка - 110 + 117 Label true true @@ -66,7 +66,7 @@ ВажностьРасширеннаяПодсказка - 112 + 119 Label true true @@ -108,7 +108,7 @@ ОтветственныйРасширеннаяПодсказка - 114 + 121 Label true true @@ -148,7 +148,7 @@ ГруппаПредметВажностьОтветственныйРасширеннаяПодсказка - 109 + 116 Label true true @@ -193,7 +193,7 @@
            ДатаНачалаРасширеннаяПодсказка - 118 + 125 Label true true @@ -241,7 +241,7 @@ ВремяНачалаРасширеннаяПодсказка - 120 + 127 Label true true @@ -260,10 +260,6 @@ Left true - - StartListChoice - ВремяНачалаНачалоВыбораИзСписка - 13 true true @@ -296,7 +292,7 @@ true ГруппаНачалаРасширеннаяПодсказка - 117 + 124 Label true true @@ -337,7 +333,7 @@ ДатаОкончанияРасширеннаяПодсказка - 123 + 130 Label true true @@ -385,7 +381,7 @@ ВремяОкончанияРасширеннаяПодсказка - 125 + 132 Label true true @@ -404,10 +400,6 @@ Left true - - StartListChoice - ВремяОкончанияНачалоВыбораИзСписка - 13 true true @@ -440,7 +432,7 @@ true ГруппаОкончаниеРасширеннаяПодсказка - 122 + 129 Label true true @@ -473,7 +465,7 @@ РассмотретьПослеРасширеннаяПодсказка - 128 + 135 Label true true @@ -523,7 +515,7 @@ РассмотреноРасширеннаяПодсказка - 130 + 137 Label true true @@ -558,7 +550,7 @@ ГруппаИсполнениеРасширеннаяПодсказка - 127 + 134 Label true true @@ -592,7 +584,7 @@ true ГруппаПериодПроведенияРасширеннаяПодсказка - 116 + 123 Label true true @@ -625,7 +617,7 @@ ГруппаПериодПредметВажностьРасширеннаяПодсказка - 108 + 115 Label true true @@ -659,7 +651,7 @@ МестоПроведенияВстречиРасширеннаяПодсказка - 132 + 139 Label true true @@ -701,7 +693,7 @@ ТемаРасширеннаяПодсказка - 134 + 141 Label true true @@ -742,7 +734,7 @@ ГруппаШапкаРасширеннаяПодсказка - 107 + 114 Label true true @@ -780,7 +772,7 @@ None ОписаниеРасширеннаяПодсказка - 138 + 145 Label true true @@ -824,7 +816,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 137 + 144 Label true true @@ -856,7 +848,7 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 140 + 147 Label true true @@ -887,7 +879,7 @@ None КомментарийРасширеннаяПодсказка - 142 + 149 Label true true @@ -930,7 +922,7 @@ СтраницаКомментарийРасширеннаяПодсказка - 141 + 148 Label true true @@ -959,7 +951,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 136 + 143 Label true true @@ -990,7 +982,7 @@ ДекорацияЗаголовокУчастникиРасширеннаяПодсказка - 145 + 152 Label true true @@ -1020,7 +1012,7 @@ ДекорацияУчастникиПустаяРасширеннаяПодсказка - 146 + 153 Label true true @@ -1061,7 +1053,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 149 + 156 Label true true @@ -1099,7 +1091,7 @@ СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 148 + 155 Label true true @@ -1126,7 +1118,7 @@ ДекорацияКонтактыЗаполненыРасширеннаяПодсказка - 151 + 158 Label true true @@ -1164,7 +1156,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 150 + 157 Label true true @@ -1193,7 +1185,7 @@ СтраницыУказаныКонтактыРасширеннаяПодсказка - 147 + 154 Label true true @@ -1221,7 +1213,7 @@ ГруппаЗаголовокУчастникиРасширеннаяПодсказка - 144 + 151 Label true true @@ -1275,7 +1267,7 @@ ПредставлениеКонтактаРасширеннаяПодсказка - 164 + 171 Label true true @@ -1316,7 +1308,7 @@ КакСвязатьсяРасширеннаяПодсказка - 166 + 173 Label true true @@ -1361,7 +1353,7 @@ КонтактРасширеннаяПодсказка - 168 + 175 Label true true @@ -1408,7 +1400,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 153 + 160 Label true true @@ -1437,10 +1429,10 @@ УчастникиСтрокаПоиска - 155 + 162 УчастникиСтрокаПоискаРасширеннаяПодсказка - 157 + 164 Label true true @@ -1450,7 +1442,7 @@ УчастникиСтрокаПоискаКонтекстноеМеню - 156 + 163 true Участники @@ -1460,10 +1452,10 @@ УчастникиСостояниеПросмотра - 158 + 165 УчастникиСостояниеПросмотраРасширеннаяПодсказка - 160 + 167 Label true true @@ -1473,7 +1465,7 @@ УчастникиСостояниеПросмотраКонтекстноеМеню - 159 + 166 true ViewStatusAddition @@ -1484,10 +1476,10 @@ УчастникиУправлениеПоиском - 161 + 168 УчастникиУправлениеПоискомРасширеннаяПодсказка - 163 + 170 Label true true @@ -1497,7 +1489,7 @@ УчастникиУправлениеПоискомКонтекстноеМеню - 162 + 169 true SearchControlAddition @@ -1508,7 +1500,7 @@ УчастникиРасширеннаяПодсказка - 154 + 161 Label true true @@ -1562,7 +1554,7 @@ ГруппаУчастникиРасширеннаяПодсказка - 152 + 159 Label true true @@ -1582,22 +1574,18 @@
            ГруппаАвторДатаРегистрации - 78 - - Автор - 81 + 107 + + ДекорацияПустаяПодвал + 108 true true true - - Объект.Автор - - Left - АвторРасширеннаяПодсказка - 179 + ДекорацияПустаяПодвалРасширеннаяПодсказка + 186 Label true true @@ -1606,32 +1594,25 @@ - АвторКонтекстноеМеню - 82 + ДекорацияПустаяПодвалКонтекстноеМеню + 109 true - InputField - true - Left - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal + Label + true + true + true + + Right Дата - 83 + 110 + + <key>ru</key> + <value>Создан</value> + true true @@ -1643,7 +1624,7 @@ Left ДатаРасширеннаяПодсказка - 181 + 187 Label true true @@ -1653,30 +1634,67 @@ ДатаКонтекстноеМеню - 84 + 111 true - InputField + LabelField true Left Enter true Left true - + 13 true true false - true ru - ДФ='dd MMMM yyyy "г."' + ДЛФ=DT - true - true - true - Normal + + + + Автор + 112 + true + true + + true + + + Объект.Автор + + Left + + АвторРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 113 + true + + LabelField + true + Left + Enter + true + Left + true + + 25 + true + true + false + true true @@ -1694,7 +1712,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 178 + 185 Label true true @@ -1733,7 +1751,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 24bf5a185..97723c1d1 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -27,6 +27,9 @@ ПриСозданииИПриЧтенииНаСервере(); + Взаимодействия.ЗаполнитьСписокВыбораВремени(Элементы.ВремяНачала, 1800); + Взаимодействия.ЗаполнитьСписокВыбораВремени(Элементы.ВремяОкончания, 1800); + КонецПроцедуры &НаСервере @@ -60,7 +63,8 @@ ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); - + ПроверитьДоступностьСозданияКонтакта(); + КонецПроцедуры &НаСервере @@ -116,40 +120,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ВремяНачалаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ВыбранноеВремя = ВзаимодействияКлиент.ВыбратьВремя(ЭтаФорма, Элемент, ВремяНачала, 1800); - - Если ВыбранноеВремя = Неопределено Тогда - Возврат; - КонецЕсли; - - ВремяНачала = ВыбранноеВремя; - - ВремяНачалаПриИзменении(Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура ВремяОкончанияНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ВыбранноеВремя = ВзаимодействияКлиент.ВыбратьВремя(ЭтаФорма, Элемент, ВремяОкончания, 1800); - - Если ВыбранноеВремя = Неопределено Тогда - Возврат; - КонецЕсли; - - ВремяОкончания = ВыбранноеВремя; - - ВремяОкончанияПриИзменении(Элемент); - -КонецПроцедуры - &НаКлиенте Процедура ВремяНачалаПриИзменении(Элемент) @@ -164,7 +134,7 @@ Если НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); - Сообщить(НСтр("ru='Время окончания не может быть меньше времени начала.'")); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю((НСтр("ru='Время окончания не может быть меньше времени начала.'"))); ВремяОкончания = ВремяНачала + 1800; Объект.ДатаОкончания = НачалоДня(Объект.ДатаОкончания) + ВыделитьВремя(ВремяОкончания); Возврат; @@ -189,7 +159,7 @@ Если НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания) < Объект.ДатаНачала Тогда ОчиститьСообщения(); - Сообщить(НСтр("ru='Дата окончания не может быть меньше даты начала.'")); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Дата окончания не может быть меньше даты начала.'")); ДатаОкончания = Объект.ДатаНачала; Объект.ДатаОкончания = НачалоДня(ДатаОкончания) + ВыделитьВремя(ВремяОкончания); Возврат; @@ -229,15 +199,16 @@ СтандартнаяОбработка = Ложь; текДанные = Элементы.Участники.ТекущиеДанные; - Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, текДанные.ПредставлениеКонтакта, - текДанные.Контакт, Ложь, Ложь, Истина) Тогда - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЗапланированноеВзаимодействие"); - Модифицированность = Истина; - ПроверитьДоступностьСозданияКонтакта(); - - КонецЕсли; + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоEmail", Ложь); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Ложь); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Истина); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Ложь); + + ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, текДанные.ПредставлениеКонтакта, + текДанные.Контакт, ПараметрыОткрытия) + КонецПроцедуры &НаКлиенте @@ -271,8 +242,7 @@ текДанные = Элементы.Участники.ТекущиеДанные; Если текДанные <> Неопределено Тогда ВзаимодействияКлиент.СоздатьКонтакт( - текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); + текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Documents/Встреча/Встреча.mdo b/SSL/src/Documents/Встреча/Встреча.mdo index 2cd539691..b3e14dbb8 100644 --- a/SSL/src/Documents/Встреча/Встреча.mdo +++ b/SSL/src/Documents/Встреча/Встреча.mdo @@ -101,6 +101,7 @@ Document.ЭлектронноеПисьмоВходящее Document.ЭлектронноеПисьмоИсходящее Document.ЗапланированноеВзаимодействие + Document.СообщениеSMS Use Use @@ -368,6 +369,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index cfc9f4ea3..f46291ee6 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -19,7 +19,7 @@ ПредметРасширеннаяПодсказка - 94 + 101 Label true true @@ -63,7 +63,7 @@ ОтветственныйРасширеннаяПодсказка - 96 + 103 Label true true @@ -107,7 +107,7 @@ ГруппаПредметОтветственныйРасширеннаяПодсказка - 93 + 100 Label true true @@ -141,7 +141,7 @@ ВажностьРасширеннаяПодсказка - 99 + 106 Label true true @@ -186,7 +186,7 @@ РассмотретьПослеРасширеннаяПодсказка - 102 + 109 Label true true @@ -236,7 +236,7 @@ РассмотреноРасширеннаяПодсказка - 104 + 111 Label true true @@ -271,7 +271,7 @@ ГруппаОтработатьРасширеннаяПодсказка - 101 + 108 Label true true @@ -303,7 +303,7 @@ ГруппаВажностьОтработатьРасширеннаяПодсказка - 98 + 105 Label true true @@ -336,7 +336,7 @@ ГруппаРеквизитыВзаимодействияРасширеннаяПодсказка - 92 + 99 Label true true @@ -366,7 +366,7 @@ ТемаРасширеннаяПодсказка - 106 + 113 Label true true @@ -416,7 +416,7 @@ None ОписаниеРасширеннаяПодсказка - 110 + 117 Label true true @@ -459,7 +459,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 109 + 116 Label true true @@ -491,7 +491,7 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 112 + 119 Label true true @@ -522,7 +522,7 @@ None КомментарийРасширеннаяПодсказка - 114 + 121 Label true true @@ -565,7 +565,7 @@ СтраницаКомментарийРасширеннаяПодсказка - 113 + 120 Label true true @@ -594,7 +594,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 108 + 115 Label true true @@ -625,7 +625,7 @@ ДекорацияЗаголовокУчастникиРасширеннаяПодсказка - 117 + 124 Label true true @@ -655,7 +655,7 @@ ДекорацияУчастникиПустаяРасширеннаяПодсказка - 118 + 125 Label true true @@ -696,7 +696,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 121 + 128 Label true true @@ -734,7 +734,7 @@ СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 120 + 127 Label true true @@ -761,7 +761,7 @@ ДекорацияКонтактыЗаполненыРасширеннаяПодсказка - 123 + 130 Label true true @@ -799,7 +799,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 122 + 129 Label true true @@ -828,7 +828,7 @@ СтраницыУказаныКонтактыРасширеннаяПодсказка - 119 + 126 Label true true @@ -856,7 +856,7 @@ ГруппаЗаголовокУчастникиРасширеннаяПодсказка - 116 + 123 Label true true @@ -907,7 +907,7 @@ ПредставлениеКонтактаРасширеннаяПодсказка - 136 + 143 Label true true @@ -947,7 +947,7 @@ КакСвязатьсяРасширеннаяПодсказка - 138 + 145 Label true true @@ -991,7 +991,7 @@ КонтактРасширеннаяПодсказка - 140 + 147 Label true true @@ -1036,7 +1036,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 125 + 132 Label true true @@ -1065,10 +1065,10 @@ УчастникиСтрокаПоиска - 127 + 134 УчастникиСтрокаПоискаРасширеннаяПодсказка - 129 + 136 Label true true @@ -1078,7 +1078,7 @@ УчастникиСтрокаПоискаКонтекстноеМеню - 128 + 135 true Участники @@ -1088,10 +1088,10 @@ УчастникиСостояниеПросмотра - 130 + 137 УчастникиСостояниеПросмотраРасширеннаяПодсказка - 132 + 139 Label true true @@ -1101,7 +1101,7 @@ УчастникиСостояниеПросмотраКонтекстноеМеню - 131 + 138 true ViewStatusAddition @@ -1112,10 +1112,10 @@ УчастникиУправлениеПоиском - 133 + 140 УчастникиУправлениеПоискомРасширеннаяПодсказка - 135 + 142 Label true true @@ -1125,7 +1125,7 @@ УчастникиУправлениеПоискомКонтекстноеМеню - 134 + 141 true SearchControlAddition @@ -1136,7 +1136,7 @@ УчастникиРасширеннаяПодсказка - 126 + 133 Label true true @@ -1189,7 +1189,7 @@ ГруппаУчастникиРасширеннаяПодсказка - 124 + 131 Label true true @@ -1209,22 +1209,18 @@ ГруппаАвторДатаРегистрации - 56 - - Автор - 59 + 92 + + ДекорацияПодвалПустая + 93 true true true - - Объект.Автор - - Left - АвторРасширеннаяПодсказка - 151 + ДекорацияПодвалПустаяРасширеннаяПодсказка + 158 Label true true @@ -1233,32 +1229,25 @@ - АвторКонтекстноеМеню - 60 + ДекорацияПодвалПустаяКонтекстноеМеню + 94 true - InputField - true - Left - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal + Label + true + true + true + + Right Дата - 61 + 95 + + <key>ru</key> + <value>Создан</value> + true true @@ -1270,7 +1259,7 @@ Left ДатаРасширеннаяПодсказка - 153 + 159 Label true true @@ -1280,30 +1269,67 @@ ДатаКонтекстноеМеню - 62 + 96 true - InputField + LabelField true Left Enter true Left true - + 13 true true false - true ru - ДФ='dd MMMM yyyy "г."' + ДЛФ=DT - true - true - true - Normal + + + + Автор + 97 + true + true + + true + + + Объект.Автор + + Left + + АвторРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 98 + true + + LabelField + true + Left + Enter + true + Left + true + + 25 + true + true + false + true true @@ -1321,7 +1347,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 150 + 157 Label true true @@ -1360,7 +1386,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index 14d24cb51..359356554 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -59,7 +59,8 @@ ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); - + ПроверитьДоступностьСозданияКонтакта(); + КонецПроцедуры &НаСервере @@ -137,12 +138,15 @@ СтандартнаяОбработка = Ложь; текДанные = Элементы.Участники.ТекущиеДанные; - Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, - текДанные.ПредставлениеКонтакта, текДанные.Контакт, Ложь, Ложь, Истина) Тогда - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); - Модифицированность = Истина; - ПроверитьДоступностьСозданияКонтакта(); - КонецЕсли; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоEmail", Ложь); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Ложь); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Истина); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Ложь); + + ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, + текДанные.ПредставлениеКонтакта, текДанные.Контакт, ПараметрыОткрытия); КонецПроцедуры @@ -183,8 +187,7 @@ текДанные = Элементы.Участники.ТекущиеДанные; Если текДанные <> Неопределено Тогда ВзаимодействияКлиент.СоздатьКонтакт( - текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); + текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo index 57e747563..230776940 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo @@ -100,6 +100,7 @@ Document.ТелефонныйЗвонок Document.ЭлектронноеПисьмоВходящее Document.ЭлектронноеПисьмоИсходящее + Document.СообщениеSMS Use Use @@ -300,6 +301,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index 401519572..f151c15a8 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -142,7 +142,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -//Обрабатывет изменение типа респондента +// Обрабатывает изменение типа респондента &НаКлиенте Процедура ОбработатьИзменениеТипаРеспондента() diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca new file mode 100644 index 000000000..ec102ad19 --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/ConditionalAppearance.dcssca @@ -0,0 +1,48 @@ + + + + + + Тема + + + + + ТемаРедактировалась + Equal + false + + + Объект.Тема + NotFilled + + + + + ОтметкаНезаполненного + false + + + + + + + Статус + + + + + Объект.Состояние + InList + Перечисление.СтатусыСообщенияSMS.НеДоставлено + Перечисление.СтатусыСообщенияSMS.ЧастичноДоставлено + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + + diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form new file mode 100644 index 000000000..e60533291 --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -0,0 +1,2215 @@ + + + + ГруппаРеквизитыШапки + 6 + + ГруппаПредметОтветственный + 7 + + Предмет + 8 + true + true + + true + + + Предмет + + + ПредметРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ПредметКонтекстноеМеню + 9 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + Ответственный + 12 + true + true + + true + + + Объект.Ответственный + + + ОтветственныйРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа предмет ответственный</value> + + + ru + Предмет, важность, место проведения + + + ГруппаПредметОтветственныйРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаИсполнениеВажность + 14 + + ГруппаИсполнение + 25 + + НаКонтроле + 92 + + <key>ru</key> + <value>На контроле, рассмотреть после</value> + + true + true + + true + + + НаКонтроле + + Right + + OnChange + НаКонтролеПриИзменении + + + НаКонтролеРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + НаКонтролеКонтекстноеМеню + 93 + true + + CheckBoxField + Enter + true + Left + true + + + + РассмотретьПосле + 26 + true + true + + true + + + Объект.РассмотретьПосле + + None + + РассмотретьПослеРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + РассмотретьПослеКонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + РассмотретьПослеОбработкаВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Исполнение</value> + + + ru + Исполнение + + 43 + false + + ГруппаИсполнениеРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОтправлятьВТранслите + 71 + + <key>ru</key> + <value>Преобразовать кириллические символы в латинские</value> + + true + true + + true + + + Объект.ОтправлятьВТранслите + + Right + + OnChange + ОтправлятьВТранслитеПриИзменении + + + ОтправлятьВТранслитеРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ОтправлятьВТранслитеКонтекстноеМеню + 72 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Время проведения</value> + + + ru + Группа исполнение важность + + true + false + + ГруппаИсполнениеВажностьРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Период, предмет, важность</value> + + + ru + Период, предмет, важность + + + ГруппаРеквизитыШапкиРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаСтатусПреобразовывать + 100 + true + true + + true + + + <key>ru</key> + <value>Группа статус преобразовывать</value> + + false + + ГруппаСтатусПреобразовыватьРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаДекорацийТекстСообщения + 77 + + ДекорацияЗаголовокТекстСообщения + 78 + + <key>ru</key> + <value>Текст сообщения: </value> + + true + true + + true + + + ДекорацияЗаголовокТекстСообщенияРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ДекорацияЗаголовокТекстСообщенияКонтекстноеМеню + 79 + true + + Label + true + true + + Left + + + + ДекорацияОтступ + 80 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 81 + true + + Label + true + true + true + + Left + + + + ОсталосьСимволов + 82 + true + true + + true + + + ОсталосьСимволов + + None + + ОсталосьСимволовРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + ОсталосьСимволовКонтекстноеМеню + 83 + true + + InputField + true + false + Right + Enter + true + Left + true + + true + true + false + false + false + false + false + false + false + false + false + false + false + true + true + + Style.ПоясняющийТекст + + + Style.FormBackColor + + + Style.FormBackColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа декораций текст сообщения</value> + + true + + ГруппаДекорацийТекстСообщенияРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТекстСообщения + 75 + true + true + + true + + + Объект.ТекстСообщения + + None + + ТекстСообщенияРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + ТекстСообщенияКонтекстноеМеню + 76 + true + + InputField + Enter + true + Left + true + + + TextEditEnd + ТекстСообщенияОкончаниеВводаТекста + + 50 + true + true + false + true + true + true + true + Normal + + + + ГруппаАдресатыКонтакты + 66 + + ГруппаЗаголовокАдресаты + 32 + + ДекорацияАдресатыЗаголовк + 106 + + <key>ru</key> + <value>Адресаты:</value> + + true + true + + true + + + ДекорацияАдресатыЗаголовкРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ДекорацияАдресатыЗаголовкКонтекстноеМеню + 107 + true + + Label + true + true + + Left + + + + ДекорацияАдресатыПустая + 35 + true + true + + true + + + ДекорацияАдресатыПустаяРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ДекорацияАдресатыПустаяКонтекстноеМеню + 36 + true + + Label + true + true + true + + Left + + + + СтраницыУказаныКонтакты + 37 + + СтраницаКонтактыНеЗаполнены + 38 + + ДекорацияКонтактыНеЗаполнены + 39 + + <key>ru</key> + <value>Не все контакты подобраны</value> + + true + true + + true + + + ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ДекорацияКонтактыНеЗаполненыКонтекстноеМеню + 40 + true + + Label + true + true + + Style.FieldSelectionBackColor + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница контакты не заполнены</value> + + + ru + Страница контакты не заполнены + + + СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКонтактыЗаполнены + 41 + + ДекорацияКонтактыЗаполнены + 42 + true + true + + true + + + ДекорацияКонтактыЗаполненыРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + ДекорацияКонтактыЗаполненыКонтекстноеМеню + 43 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница контакты заполнены</value> + + + ru + Страница контакты заполнены + + + СтраницаКонтактыЗаполненыРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы указаны контакты</value> + + + ru + Страницы указаны контакты + + + СтраницыУказаныКонтактыРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + ГруппаЗаголовокАдресатыРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаАдресаты + 44 + + Адресаты + 45 + true + true + + true + + + Объект.Адресаты + + false + None + Change + Copy + EndEdit + SelectAll + + АдресатыПредставлениеКонтакта + 59 + true + true + + true + + + Объект.Адресаты.ПредставлениеКонтакта + + + OnChange + ПредставлениеКонтактаПриИзменении + + + АдресатыПредставлениеКонтактаРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + АдресатыПредставлениеКонтактаКонтекстноеМеню + 60 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + АдресатыКакСвязаться + 61 + + <key>ru</key> + <value>Номер телефона</value> + + true + true + + true + + + Объект.Адресаты.КакСвязаться + + + АдресатыКакСвязатьсяРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + + АдресатыКакСвязатьсяКонтекстноеМеню + 62 + true + + InputField + Auto + true + Left + true + + ru + Номер телефона в формате "+xx (xxx) xxxxxxx" + + + true + true + true + true + true + true + Normal + + + + АдресатыКонтакт + 57 + true + true + + true + + + Объект.Адресаты.Контакт + + + OnChange + КонтактПриИзменении + + + АдресатыКонтактРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + АдресатыКонтактКонтекстноеМеню + 58 + true + + InputField + Auto + true + Left + true + + + StartChoice + КонтактНачалоВыбора + + true + true + true + true + true + true + Normal + + + + АдресатыСостояниеСообщения + 96 + true + true + + true + + + Объект.Адресаты.СостояниеСообщения + + + АдресатыСостояниеСообщенияРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + АдресатыСостояниеСообщенияКонтекстноеМеню + 97 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + АдресатыКоманднаяПанель + 47 + + СоздатьКонтакт + 54 + true + false + + true + + false + + СоздатьКонтактРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.Command.СоздатьКонтакт + Normal + Auto + true + true + UserCmds + Auto + + + АдресатыПроверитьСтатусыДоставки + 91 + + <key>ru</key> + <value>Проверить состояние доставки</value> + + true + true + + true + + + АдресатыПроверитьСтатусыДоставкиРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.ПроверитьСтатусыДоставки + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnEditEnd + АдресатыПриОкончанииРедактирования + + + OnActivateRow + АдресатыПриАктивизацииСтроки + + + OnChange + АдресатыПриИзменении + + + АдресатыСтрокаПоиска + 152 + + АдресатыСтрокаПоискаРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + АдресатыСтрокаПоискаКонтекстноеМеню + 153 + true + + Адресаты + + true + + + + АдресатыСостояниеПросмотра + 155 + + АдресатыСостояниеПросмотраРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + АдресатыСостояниеПросмотраКонтекстноеМеню + 156 + true + + ViewStatusAddition + Адресаты + + true + + + + АдресатыУправлениеПоиском + 158 + + АдресатыУправлениеПоискомРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + АдресатыУправлениеПоискомКонтекстноеМеню + 159 + true + + SearchControlAddition + Адресаты + + true + + + + АдресатыРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + АдресатыКонтекстноеМеню + 46 + true + + true + true + true + true + 3 + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + true + true + + true + + + <key>ru</key> + <value>Участники встречи</value> + + + ru + Участники встречи + + + ГруппаАдресатыРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
            + true + true + + true + + + <key>ru</key> + <value>Адресаты</value> + + + ru + Группа адресаты контакты + + + ГруппаАдресатыКонтактыРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
            + + Комментарии + 108 + true + true + + true + + + Объект.Комментарий + + Left + + КомментарииРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + КомментарииКонтекстноеМеню + 109 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарииНачалоВыбора + + true + 2 + true + true + false + true + true + true + true + true + true + true + Normal + + + + ГруппаАдресатыПодвал + 103 + + СтраницыКонтактыДопРеквизитыКомментарий + 65 + + СтраницаДополнительныеРеквизиты + 67 + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ru + Страница дополнительные реквизиты + + + СтраницаДополнительныеРеквизитыРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 68 + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы контакты доп реквизиты комментарий</value> + + + СтраницыКонтактыДопРеквизитыКомментарийРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ГруппаАвторДатаРегистрации + 1 + + Статус + 98 + + System.DefaultGUIFont + + true + true + + true + + + Объект.Состояние + + + СтатусРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + 23 + true + true + false + + System.DefaultGUIFont + true + false + false + false + + + + + ДекорацияПустаяПодвал + 104 + true + true + + true + + + ДекорацияПустаяПодвалРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ДекорацияПустаяПодвалКонтекстноеМеню + 105 + true + + Label + true + true + true + + Left + + + + Дата + 4 + + <key>ru</key> + <value>Создан</value> + + true + true + + true + + + Объект.Date + + Left + + ДатаРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 5 + true + + LabelField + true + Left + Enter + true + Left + true + + 13 + true + true + true + + ru + ДЛФ=DT + + + + + Автор + 2 + true + true + + true + + + Объект.Автор + + Left + + АвторРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 3 + true + + LabelField + true + Left + Enter + true + Left + true + + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Автор, дата регистрации</value> + + + ru + Автор, дата регистрации + + + ГруппаАвторДатаРегистрацииРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группа адресаты подвал + + + ГруппаАдресатыПодвалРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаСправка + 89 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтправить + 84 + true + true + + true + + true + + ФормаОтправитьРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.Отправить + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 85 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Normal + PictureAndText + true + true + UserCmds + Auto + + + ФормаЗаписать + 86 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + + ФормаУстановитьПометкуУдаления + 88 + true + true + + true + + + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Form.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеречитать + 87 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаГлобальныеКоманды + 90 + true + true + + true + + + <key>ru</key> + <value>Группа глобальные команды</value> + + + ГруппаГлобальныеКомандыРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DocumentObject.СообщениеSMS + + + true + + + true + + + Объект.RegisterRecords + +
            true
            + true +
            + + Предмет + + <key>ru</key> + <value>Предмет</value> + + 2 + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + DocumentRef.СообщениеSMS + + + true + + + true + + + + СписокИнтерактивноСоздаваемыхКонтактов + + <key>ru</key> + <value>Список интерактивно создаваемых контактов</value> + + 3 + + ValueList + + + true + + + true + + + + + + + ВзаимодействиеОснование + + <key>ru</key> + <value>Взаимодействие основание</value> + + 4 + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + DocumentRef.СообщениеSMS + + + true + + + true + + + + ОсталосьСимволов + + <key>ru</key> + <value>Осталось символов</value> + + 5 + + String + + 70 + + + + true + + + true + + + + НеобходимоОповещение + + <key>ru</key> + <value>Необходимо оповещение</value> + + 7 + + Boolean + + + true + + + true + + + + ИнформационнаяБазаФайловая + + <key>ru</key> + <value>Информационная база файловая</value> + + 6 + + Boolean + + + true + + + true + + + + НаКонтроле + + <key>ru</key> + <value>На контроле</value> + + 8 + + Boolean + + + true + + + true + + FunctionalOption.ИспользоватьПризнакРассмотрено + + + ТемаРедактировалась + + <key>ru</key> + <value>Тема редактировалась</value> + + 9 + + Boolean + + + true + + + true + + + + СоздатьКонтакт + + <key>ru</key> + <value>Создать контакт</value> + + 1 + + ru + Создать контакт + + + true + + Ctrl+S + + StdPicture.AddListItem + + + + СоздатьКонтактВыполнить + + + Text + Auto + Auto + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 2 + + ru + Отправить + + + true + + + + Отправить + + + Auto + Auto + + + ПроверитьСтатусыДоставки + + <key>ru</key> + <value>Проверить статусы доставки</value> + + 3 + + ru + Проверить статусы доставки + + + true + + + + ПроверитьСтатусыДоставки + + + Auto + Auto + + + Адресаты + + + + Текст + + String + + + + + Предмет + + + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardCommand.OpenByValue.Взаимодействие + + + + + + Document.СообщениеSMS.StandardCommand.CreateBasedOn + + + + + + + AfterWrite + ПослеЗаписи + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + + OnWriteAtServer + ПриЗаписиНаСервере + + true + +
            diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl new file mode 100644 index 000000000..628a821ac --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Module.bsl @@ -0,0 +1,465 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + Объект.Состояние = Перечисления.СостоянияДокументаСообщениеSMS.Черновик; + ПриСозданииЧтенииНаСервере(); + КонецЕсли; + + Если НЕ ИнформационнаяБазаФайловая Тогда + Элементы.АдресатыПроверитьСтатусыДоставки.Видимость = Ложь; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет); + КонецЕсли; + Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); + + //Определим типы контактов, которые можно создать + СписокИнтерактивноСоздаваемыхКонтактов = Взаимодействия.СоздатьСписокЗначенийИнтерактивноСоздаваемыхКонтактов(); + Элементы.СоздатьКонтакт.Видимость = СписокИнтерактивноСоздаваемыхКонтактов.Количество() > 0; + + //подготовить оповещения взаимодействий + Взаимодействия.ПодготовитьОповещения(ЭтаФорма, Параметры); + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, , "СтраницаДополнительныеРеквизиты"); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Предмет); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + + ПриСозданииЧтенииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + #Если Не ВебКлиент Тогда + ПроверитьДоступностьСозданияКонтакта(); + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.Свойства + Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + + ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + ПроверитьДоступностьСозданияКонтакта() + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + + Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "СообщениеSMS"); + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + + ПроверитьЗаполнениеСпискаАдресатов(Отказ); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле( + Объект.РассмотретьПосле, ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность); + +КонецПроцедуры + +&НаКлиенте +Процедура НаКонтролеПриИзменении() + + Объект.Рассмотрено = НЕ НаКонтроле; + УправлениеДоступностью(ЭтаФорма); + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ТекстСообщенияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + + ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( + Объект.ОтправлятьВТранслите, + Текст); + Объект.ТекстСообщения = Текст; + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправлятьВТранслитеПриИзменении(Элемент) + + ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( + Объект.ОтправлятьВТранслите, + Объект.ТекстСообщения) + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Адресаты + +&НаКлиенте +Процедура АдресатыПриИзменении(Элемент) + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресатыПриАктивизацииСтроки(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + текДанные = Элементы.Адресаты.ТекущиеДанные; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоEmail", Ложь); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Истина); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Истина); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Ложь); + + ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, текДанные.ПредставлениеКонтакта, + текДанные.Контакт, ПараметрыОткрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеКонтактаПриИзменении(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактПриИзменении(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресатыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + ТекущиеДанные = Элементы.Адресаты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ТекущиеДанные.СостояниеСообщения) Тогда + ТекущиеДанные.СостояниеСообщения = ПредопределенноеЗначение("Перечисление.СостоянияСообщенияSMS.Черновик"); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьКонтактВыполнить() + + текДанные = Элементы.Адресаты.ТекущиеДанные; + Если текДанные <> Неопределено Тогда + ВзаимодействияКлиент.СоздатьКонтакт( + текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Отправить(Команда) + + ОчиститьСообщения(); + + Если ПроверитьЗаполнение() Тогда + ОтправитьВыполнить(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьСтатусыДоставки(Команда) + + ОчиститьСообщения(); + ПроверитьСтатусыДоставкиСервер(); + +КонецПроцедуры + +// СтандартныеПодсистемы.Свойства + +&НаКлиенте +Процедура Подключаемый_РедактироватьСоставСвойств() + + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// Прочее + +&НаКлиенте +Процедура ПроверитьДоступностьСозданияКонтакта() + + текДанные = Элементы.Адресаты.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) И + ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ОбработатьПереданныеПараметры(Параметры); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "СообщениеSMS"); + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; + ОсталосьСимволов = ВзаимодействияКлиентСервер.СформироватьИнформационнуюНадписьКоличествоСимволовСообщений( + Объект.ОтправлятьВТранслите, + Объект.ТекстСообщения); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + НаКонтроле = НЕ Объект.Рассмотрено; + УправлениеДоступностью(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьВыполнить() + + ОчиститьСообщения(); + + Если ИнформационнаяБазаФайловая Тогда + КоличествоОтправленных = ВыполнитьОтправкуНаСервере(); + Если НЕ КоличествоОтправленных > 0 Тогда + Возврат; + КонецЕсли; + Иначе + ВзаимодействияКлиентСервер.УстановитьСостояниеИсходящееДокументСообщениеSMS(Объект); + КонецЕсли; + + Записать(); + Закрыть(); + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьЗаполнениеСпискаАдресатов(Отказ) + + Для Каждого Адресат Из Объект.Адресаты Цикл + ПроверитьЗаполнениеТелефона(Адресат, Отказ); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьЗаполнениеТелефона(Адресат, Отказ) + + Если ПустаяСтрока(Адресат.КакСвязаться) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не указан номер телефона'"), + , + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Адресаты", Адресат.НомерСтроки, "КакСвязаться"), + , + Отказ); + Возврат; + КонецЕсли; + + СтруктураПолей = ВзаимодействияКлиентСервер.СтруктураПолейПоПредставлениюТелефона(Адресат.КакСвязаться); + Если Не ВзаимодействияКлиентСервер.КорректноВведенНомерТелефона(СтруктураПолей) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Номер телефона должен быть указан в формате ""+xx (xxx) xxxxxxx"".'"), + , + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Адресаты", Адресат.НомерСтроки, "КакСвязаться"), + , + Отказ); + Возврат; + Иначе + Адресат.НомерДляОтправки = ?(ЛЕВ(СтруктураПолей.КодСтраны,1)= "+", СтруктураПолей.КодСтраны,"+" + СтруктураПолей.КодСтраны) + + СтруктураПолей.КодГорода + СтруктураПолей.НомерТелефона; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьОтправкуНаСервере() + + Возврат Взаимодействия.ОтправкаSMSПоДокументу(Объект); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УправлениеДоступностью(Форма) + + СообщениеОтправлено = Форма.Объект.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Черновик") И + Форма.Объект.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Исходящее"); + + Форма.Элементы.ФормаОтправить.Доступность = (НЕ СообщениеОтправлено И Форма.ИнформационнаяБазаФайловая) ИЛИ + (НЕ Форма.ИнформационнаяБазаФайловая И + Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Черновик")); + Форма.Элементы.Адресаты.ТолькоПросмотр = СообщениеОтправлено; + Форма.Элементы.ОтправлятьВТранслите.Доступность = НЕ СообщениеОтправлено; + Форма.Элементы.ТекстСообщения.ТолькоПросмотр = СообщениеОтправлено; + Форма.Элементы.РассмотретьПосле.Доступность = Форма.НаКонтроле; + + Форма.Элементы.АдресатыПроверитьСтатусыДоставки.Доступность = Форма.ИнформационнаяБазаФайловая И + СообщениеОтправлено И + Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияДокументаСообщениеSMS.Доставляется"); + + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьСтатусыДоставкиСервер() + + Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не выполнены настройки отправки SMS.'"),,"Объект"); + Возврат; + КонецЕсли; + + Взаимодействия.ПроверитьСтатусыДоставкиSMS(Объект, Модифицированность); + УправлениеДоступностью(ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Процедура ОбработатьПереданныеПараметры(Параметры) + + Если Объект.Ссылка.Пустая() Тогда + + Если Параметры.Свойство("Текст") И НЕ ПустаяСтрока(Параметры.Текст) Тогда + + Объект.ТекстСообщения = Параметры.Текст; + + КонецЕсли; + + Если Параметры.Адресаты <> Неопределено Тогда + + Если ТипЗнч(Параметры.Адресаты) = Тип("Строка") И НЕ ПустаяСтрока(Параметры.Адресаты) Тогда + + НоваяСтрока = Объект.Адресаты.Добавить(); + НоваяСтрока.Адрес = Параметры.Кому; + + ИначеЕсли ТипЗнч(Параметры.Адресаты) = Тип("СписокЗначений") Тогда + + Для Каждого ЭлементСписка Из Параметры.Адресаты Цикл + НоваяСтрока = Объект.Адресаты.Добавить(); + НоваяСтрока.КакСвязаться = ЭлементСписка.Значение; + НоваяСтрока.Представление = ЭлементСписка.Представление; + КонецЦикла; + + ИначеЕсли ТипЗнч(Параметры.Адресаты) = Тип("Массив") Тогда + + Для Каждого ЭлементМассива Из Параметры.Адресаты Цикл + + НоваяСтрока = Объект.Адресаты.Добавить(); + НоваяСтрока.КакСвязаться = ЭлементМассива.Телефон; + НоваяСтрока.ПредставлениеКонтакта = ЭлементМассива.Представление; + НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + Если Параметры.Свойство("Предмет") Тогда + Предмет = Параметры.Предмет; + КонецЕсли; + + Если Параметры.Свойство("ОтправлятьВТранслите") Тогда + Объект.ОтправлятьВТранслите = Параметры.ОтправлятьВТранслите; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl new file mode 100644 index 000000000..14dfe15ba --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -0,0 +1,33 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Получает массив структур, адресатов документа Сообщение SMS +// +// Параметры +// Ссылка - Документ.СообщениеSMS - документ, для которого получаем массив контактов +// +// Возвращаемое значение: +// Массив - адресаты сообщения SMS +// +Функция ПолучитьКонтакты(Ссылка) Экспорт + + Возврат Взаимодействия.ПолучитьУчастниковПоТаблице(Ссылка); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + Взаимодействия.ОбработкаПолученияДанныхВыбора( + ДанныеВыбора, + Параметры, + СтандартнаяОбработка, + "СообщениеSMS"); + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl new file mode 100644 index 000000000..c38bda5dc --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/ObjectModule.bsl @@ -0,0 +1,51 @@ + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//Процедура формирует строки списка участников +// +// Параметры +// Контакты - Массив - массив структур, описывающих участников взаимодействия +// +Процедура ЗаполнитьКонтакты(Контакты) Экспорт + + Взаимодействия.ЗаполнитьКонтактыДляВстречи(Контакты, Адресаты, Перечисления.ТипыКонтактнойИнформации.Телефон); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + + Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения); + +КонецПроцедуры + +Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Тема = ВзаимодействияКлиентСервер.ТемаПоТекстуСообщения(ТекстСообщения); + Взаимодействия.СформироватьСписокУчастников(ЭтотОбъект); + +КонецПроцедуры + +Процедура ПриКопировании(ОбъектКопирования) + + РассмотретьПосле = Неопределено; + Рассмотрено = Истина; + Ответственный = Пользователи.ТекущийПользователь(); + Автор = Пользователи.ТекущийПользователь(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ + + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo new file mode 100644 index 000000000..869c346a7 --- /dev/null +++ b/SSL/src/Documents/СообщениеSMS/СообщениеSMS.mdo @@ -0,0 +1,771 @@ + + + + + + + + + + СообщениеSMS + + ru + Сообщение SMS + + true + Document.СообщениеSMS.StandardAttribute.Number + DontUse + + Use + Posted + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Date + + ru + Дата создания сообщения SMS. + + + ShowError + Use + + + + + Use + Number + + ru + Номер сообщения SMS. + + + + + Use + + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + + -1 + -1 + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.StandardAttribute.Ref + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + -1 + -1 + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.StandardAttribute.Ref + + -1 + -1 + InformationRegister.ДополнительныеСведения + InformationRegister.ДополнительныеСведения.Dimension.Объект + InformationRegister.ДополнительныеСведения.Dimension.Свойство + InformationRegister.ДополнительныеСведения.Resource.Значение + -1 + -1 + + Document.Встреча + Document.ЗапланированноеВзаимодействие + Document.ТелефонныйЗвонок + Document.ЭлектронноеПисьмоВходящее + Document.ЭлектронноеПисьмоИсходящее + Document.СообщениеSMS + Use + Use + + ru + Сообщения SMS + + String + 11 + Year + true + true + Document.СообщениеSMS.Form.ФормаДокумента + Deny + true + true + + Автор + + ru + Автор + + + CatalogRef.Пользователи + + + ru + Пользователь, создавший сообщение SMS. + + + + + Use + Use + + + Важность + + ru + Важность + + + EnumRef.ВариантыВажностиВзаимодействия + + + ru + Отметка о важности SMS. Устанавливается в "Обычное" + + + + true + + Enum.ВариантыВажностиВзаимодействия.EnumValue.Обычная + + Use + + + Ответственный + + ru + Ответственный + + + CatalogRef.Пользователи + + + ru + Ответственный за работу по SMS + + + + ShowError + + Use + Use + + + Рассмотрено + + ru + Рассмотрено + + + Boolean + + + ru + Признак, указывающий, что сообщение SMS не требует дальнейшего внимания + + + + true + + true + + Use + + + РассмотретьПосле + + ru + Рассмотреть после + + + Date + + + + ru + Плановые дата и время работы по сообщению SMS + + + + + 0001-01-01T00:00:00 + + Use + + + СписокУчастников + + ru + Список участников + + + String + + 1024 + + + + ru + Список адресатов SMS. Используется для отображения в списке документов. + + + + + Use + Use + + + ВзаимодействиеОснование + + ru + Взаимодействие основание + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + DocumentRef.СообщениеSMS + + + ru + Документ - взаимодействие, на основании которого был создано сообщение SMS + + + + + Use + Use + + + Тема + + ru + Тема + + + String + + 1024 + + + + ru + Тема, которой посвящено SMS. Формируется автоматически из первых трех слов сообщения. + + + + + Use + Use + + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + + + ОтправлятьВТранслите + + ru + Отправлять в транслите + + + Boolean + + + ru + Признак того, что сообщение необходимо отправить в транслите. + + + + + Use + + + ТекстСообщения + + ru + Текст сообщения + + + String + + + + ru + Текст сообщения SMS. + + true + + + ShowError + + Use + Use + + + Состояние + + ru + Состояние + + + EnumRef.СостоянияДокументаСообщениеSMS + + + ru + Итоговое состояние сообщения SMS. Формируется на основании состояний отдельных сообщений адресатам. + + + + true + + Use + Use + + + ФормаДокумента + + ru + Форма документа + + PersonalComputer + MobileDevice + + + + + + + Адресаты + + ru + Адресаты + + + ru + Адресаты сообщения SMS, + + ShowError + + Use + LineNumber + + Use + + + + + Контакт + + ru + Контакт + + + CatalogRef.Пользователи + + + ru + Адресат SMS + + + + Use + Index + Use + + + ПредставлениеКонтакта + + ru + Представление контакта + + + String + + 100 + + + + ru + Строковое представление адресата SMS + + + + ShowError + Use + Use + + + КакСвязаться + + ru + Как связаться + + + String + + 100 + + + + ru + Номер телефона в формате "+xx (xxx) xxxxxxx" + + + + Use + Use + + + НомерДляОтправки + + ru + Номер для отправки + + + String + + 30 + + + + ru + Преобразованный в формат +xxxxxxxxxxxx номер из поля "Как связаться" + + + + Use + Use + + + ИдентификаторСообщения + + ru + Идентификатор сообщения + + + String + + 20 + + + + ru + Идентификатор сообщения, который передал провайдер. По нему можно получать статус доставки сообщения + + + + Use + Use + + + ТекстОшибки + + ru + Текст ошибки + + + String + + 500 + + + + ru + Текст ошибки, который передал провайдер при отправке или получении статуса доставки сообщения SMS. + + + + Use + Use + + + СостояниеСообщения + + ru + Состояние сообщения + + + EnumRef.СостоянияСообщенияSMS + + + ru + Состояние сообщения SMS адресату. + + + + Use + Index + Use + + + + + + + + НаборыЗначенийДоступа + + ru + Наборы значений доступа + + + Use + LineNumber + + Use + + + + + НомерНабора + + ru + Номер набора + + + Number + + 4 + true + + + + ru + Число, объединяющие несколько строк в один набор. +Результаты проверок строк в наборе объединяется по логическому "И", +а результаты проверок наборов объекта по логическому "ИЛИ" + + + + Use + + + ВидДоступа + + ru + Вид доступа + + Незаполненные значения нужно допустить, чтобы избежать ошибок при записи проверяемых объектов + + ChartOfCharacteristicTypesRef.ВидыДоступа + + + ru + Вид доступа по которому проверяется разрешенность значения доступа + + + + Use + + + ЗначениеДоступа + + ru + Значение доступа + + Незаполненные значения нужно допустить, чтобы избежать ошибок при записи проверяемых объектов + + AnyRef + + + ru + Ссылка на значение, например, на организацию, контрагента, ... + + + + Use + + + Чтение + + ru + Чтение использует номер набора + + + Boolean + + + ru + Использовать наборы при проверке ограничения чтения + + + + Use + + + Добавление + + ru + Добавление использует номер набора + + + Boolean + + + ru + Использовать наборы при проверке ограничения добавления + + + + Use + + + Изменение + + ru + Изменение использует номер набора + + + Boolean + + + ru + Использовать наборы при проверке ограничения изменения + + + + Use + + + Удаление + + ru + Удаление использует номер набора + + + Boolean + + + ru + Использовать наборы при проверке ограничения удаления + + + + Use + + + + + + + + ДополнительныеРеквизиты + + ru + Дополнительные реквизиты + + + Use + LineNumber + + Use + + + + + Свойство + + ru + Свойство + + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + ru + Дополнительный реквизит + + + + Use + Use + + + Значение + + ru + Значение + + + Characteristic.ДополнительныеРеквизитыИСведения + + + ru + Значение дополнительного реквизита + + + + + Отбор.Владелец + Document.СообщениеSMS.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + Use + Use + + + ТекстоваяСтрока + + ru + Текстовая строка + + + String + + + + ru + Полный текст строкового дополнительного реквизита + + + + Use + Use + + + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 8af0a4aef..39f256abb 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -27,7 +27,7 @@ АбонентПредставлениеРасширеннаяПодсказка - 94 + 101 Label true true @@ -73,7 +73,7 @@ АбонентКакСвязатьсяРасширеннаяПодсказка - 96 + 103 Label true true @@ -123,7 +123,7 @@ АбонентКонтактРасширеннаяПодсказка - 98 + 105 Label true true @@ -171,7 +171,7 @@ Right ВходящийРасширеннаяПодсказка - 100 + 107 Label true true @@ -206,7 +206,7 @@
            ГруппаВажностьВходящийОтработатьРасширеннаяПодсказка - 93 + 100 Label true true @@ -240,7 +240,7 @@ ПредметРасширеннаяПодсказка - 103 + 110 Label true true @@ -284,7 +284,7 @@ ОтветственныйРасширеннаяПодсказка - 105 + 112 Label true true @@ -333,7 +333,7 @@ ДекорацияВажностьРасширеннаяПодсказка - 109 + 116 Label true true @@ -368,7 +368,7 @@ None ВажностьЗаполненыРасширеннаяПодсказка - 110 + 117 Label true true @@ -413,7 +413,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 108 + 115 Label true true @@ -446,7 +446,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 114 + 121 Label true true @@ -485,7 +485,7 @@ true ГруппаКонтактыНеЗаполненыРасширеннаяПодсказка - 113 + 120 Label true true @@ -516,7 +516,7 @@ ВажностьРасширеннаяПодсказка - 115 + 122 Label true true @@ -561,7 +561,7 @@ true СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 112 + 119 Label true true @@ -590,7 +590,7 @@ true СтраницыУказаныКонтактыРасширеннаяПодсказка - 107 + 114 Label true true @@ -619,7 +619,7 @@ РассмотретьПослеРасширеннаяПодсказка - 118 + 125 Label true true @@ -673,7 +673,7 @@ РассмотреноРасширеннаяПодсказка - 120 + 127 Label true true @@ -708,7 +708,7 @@ ГруппаОтработатьРасширеннаяПодсказка - 117 + 124 Label true true @@ -736,7 +736,7 @@ ГруппаПредметВажностьОтветственныйРасширеннаяПодсказка - 102 + 109 Label true true @@ -765,7 +765,7 @@ ГруппаШапкаРасширеннаяПодсказка - 92 + 99 Label true true @@ -795,7 +795,7 @@ ТемаРасширеннаяПодсказка - 122 + 129 Label true true @@ -842,7 +842,7 @@ ГруппаТемаКакРасширеннаяПодсказка - 124 + 131 Label true true @@ -880,7 +880,7 @@ None ОписаниеРасширеннаяПодсказка - 127 + 134 Label true true @@ -923,7 +923,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 126 + 133 Label true true @@ -955,7 +955,7 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 129 + 136 Label true true @@ -986,7 +986,7 @@ None КомментарийРасширеннаяПодсказка - 131 + 138 Label true true @@ -1029,7 +1029,7 @@ СтраницаКомментарийРасширеннаяПодсказка - 130 + 137 Label true true @@ -1058,7 +1058,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 125 + 132 Label true true @@ -1074,22 +1074,18 @@
            ГруппаАвторДатаРегистрации - 55 - - Автор - 38 + 91 + + ДекорацияПустаяПодвал + 92 true true true - - Объект.Автор - - Left - АвторРасширеннаяПодсказка - 134 + ДекорацияПустаяПодвалРасширеннаяПодсказка + 141 Label true true @@ -1098,32 +1094,25 @@ - АвторКонтекстноеМеню - 39 + ДекорацияПустаяПодвалКонтекстноеМеню + 93 true - InputField - true - Left - Enter - true - Left - true - - 25 - true - true - false - true - true - true - true - Normal + Label + true + true + true + + Right Дата - 53 + 94 + + <key>ru</key> + <value>Создан</value> + true true @@ -1135,7 +1124,7 @@ Left ДатаРасширеннаяПодсказка - 136 + 142 Label true true @@ -1145,30 +1134,67 @@ ДатаКонтекстноеМеню - 54 + 95 true - InputField + LabelField true Left Enter true Left true - + 13 true true false - true ru - ДФ='dd MMMM yyyy "г."' + ДЛФ=DT - true - true - true - Normal + + + + Автор + 96 + true + true + + true + + + Объект.Автор + + Left + + АвторРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 97 + true + + LabelField + true + Left + Enter + true + Left + true + + 25 + true + true + false + true true @@ -1186,7 +1212,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 133 + 140 Label true true @@ -1217,7 +1243,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 91 + 98 Label true true @@ -1252,7 +1278,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - DontBlock + LockOwner true true true diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index 6ca215c88..885d10b6f 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -96,7 +96,8 @@ ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма,ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); - + ПроверитьДоступностьСозданияКонтакта(); + КонецПроцедуры &НаСервере @@ -122,12 +123,15 @@ Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, Объект.АбонентКакСвязаться, - Объект.АбонентПредставление, Объект.АбонентКонтакт, Ложь, Ложь, Истина) Тогда - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ТелефонныйЗвонок"); - Модифицированность = Истина; - ПроверитьДоступностьСозданияКонтакта(); - КонецЕсли; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоEmail", Ложь); + ПараметрыОткрытия.Вставить("ТолькоТелефон", Ложь); + ПараметрыОткрытия.Вставить("ЗаменятьПустыеАдресИПредставление", Истина); + ПараметрыОткрытия.Вставить("ДляФормыУточненияКонтактов", Ложь); + + ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, Объект.АбонентКакСвязаться, + Объект.АбонентПредставление, Объект.АбонентКонтакт, ПараметрыОткрытия); КонецПроцедуры @@ -169,8 +173,7 @@ Процедура СоздатьКонтактВыполнить() ВзаимодействияКлиент.СоздатьКонтакт( - Объект.АбонентПредставление, Объект.АбонентКакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); + Объект.АбонентПредставление, Объект.АбонентКакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов); КонецПроцедуры diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 5d12b58ff..c64fe0e46 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -99,6 +99,7 @@ Document.ЭлектронноеПисьмоВходящее Document.ЭлектронноеПисьмоИсходящее Document.ЗапланированноеВзаимодействие + Document.СообщениеSMS Use Use @@ -364,6 +365,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form index 11e181fc7..e1c70c080 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Form.form @@ -13,6 +13,8 @@ true None + Copy + Create Дата 4 @@ -204,6 +206,10 @@ 3 Left + + BeforeAddRow + СписокПередНачаломДобавления + СписокСтрокаПоиска 15 @@ -334,6 +340,8 @@ Left true + Copy + Create LockOwner true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl similarity index 99% rename from SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl rename to SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl index 98a0d67ac..1e1fa233c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 178be69e4..6ef157313 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -2024,6 +2024,10 @@ Left + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 2e26d5a91..9e251f027 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -113,6 +113,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.УточнениеКонтактов") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Массив") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьУточненныеКонтакты(ВыбранноеЗначение); + Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) @@ -209,20 +225,14 @@ спсПолучатели.Добавить( УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиОтвета), "Ответ"); - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ПараметрыОткрытия.Вставить("СписокВыбранных", спсПолучатели); - ПараметрыОткрытия.Вставить("Предмет", Предмет); - ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыФормы.Вставить("СписокВыбранных", спсПолучатели); + ПараметрыФормы.Вставить("Предмет", Предмет); + ПараметрыФормы.Вставить("Письмо", Объект.Ссылка); // Откроем форму для редактирования списка адресатов - Результат = ОткрытьФормуМодально("ОбщаяФорма.УточнениеКонтактов", ПараметрыОткрытия); - Если ТипЗнч(Результат) <> Тип("Массив") Тогда - Возврат; - КонецЕсли; - - ЗаполнитьУточненныеКонтакты(Результат); - Модифицированность = Истина; + ОткрытьФорму("ОбщаяФорма.УточнениеКонтактов", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -357,28 +367,29 @@ ТекстЗаголовкиИнтернета = Новый ТекстовыйДокумент; ТекстЗаголовкиИнтернета.ДобавитьСтроку(Объект.ВнутреннийЗаголовок); - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("Создано", Объект.Дата); - СтруктураПараметры.Вставить("Получено", Объект.ДатаПолучения); - СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); - СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); - СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстЗаголовкиИнтернета); - СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); - СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); - СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); - СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер); - СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Создано", Объект.Дата); + ПараметрыФормы.Вставить("Получено", Объект.ДатаПолучения); + ПараметрыФормы.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); + ПараметрыФормы.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); + ПараметрыФормы.Вставить("ЗаголовкиИнтернета", ТекстЗаголовкиИнтернета); + ПараметрыФормы.Вставить("Письмо", Объект.Ссылка); + ПараметрыФормы.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); + ПараметрыФормы.Вставить("Кодировка", Объект.Кодировка); + ПараметрыФормы.Вставить("ВнутреннийНомер", Объект.Номер); + ПараметрыФормы.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", - СтруктураПараметры, ЭтаФорма); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СвязанныеВзаимодействияВыполнить() - ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.ФормаСписка", - Новый Структура("ОбъектОтбора", Объект.Предмет)); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОбъектОтбора", Объект.Предмет); + + ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыФормы, ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form index a5997d36f..f32837bee 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Form.form @@ -135,10 +135,6 @@ 3 Left - - BeforeAddRow - СписокПередНачаломДобавления - СписокСтрокаПоиска 13 diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo index 1643d6bf2..53522aeaf 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo @@ -717,7 +717,7 @@ PersonalComputer MobileDevice - + ФормаСписка ru diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 268853e5e..ff8238a19 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -26,7 +26,7 @@ ОтправительПредставлениеРасширеннаяПодсказка - 303 + 305 Label true true @@ -70,7 +70,7 @@ СписокПолучателейПисьмаРасширеннаяПодсказка - 305 + 307 Label true true @@ -127,7 +127,7 @@ СписокПолучателейКопийРасширеннаяПодсказка - 307 + 309 Label true true @@ -188,7 +188,7 @@ СписокПолучателейСкрытыхКопийРасширеннаяПодсказка - 309 + 311 Label true true @@ -248,7 +248,7 @@ ГруппаПолучателиРасширеннаяПодсказка - 302 + 304 Label true true @@ -282,7 +282,7 @@ ПредметРасширеннаяПодсказка - 312 + 314 Label true true @@ -337,7 +337,7 @@ ДекорацияВажностьРасширеннаяПодсказка - 318 + 320 Label true true @@ -372,7 +372,7 @@ None ВажностьЗаполненыРасширеннаяПодсказка - 319 + 321 Label true true @@ -417,7 +417,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 317 + 319 Label true true @@ -446,7 +446,7 @@ УточнитьКонтактыРасширеннаяПодсказка - 323 + 325 Label true true @@ -479,7 +479,7 @@ true ГруппаКонтактыНеЗаполненыРасширеннаяПодсказка - 322 + 324 Label true true @@ -510,7 +510,7 @@ ВажностьРасширеннаяПодсказка - 324 + 326 Label true true @@ -555,7 +555,7 @@ true СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 321 + 323 Label true true @@ -584,7 +584,7 @@ true СтраницыУказаныКонтактыРасширеннаяПодсказка - 316 + 318 Label true true @@ -612,7 +612,7 @@ ГруппаВажностьУточнениеКонтактовРасширеннаяПодсказка - 315 + 317 Label true true @@ -644,7 +644,7 @@ ГруппаВажностьОтработкаРасширеннаяПодсказка - 314 + 316 Label true true @@ -674,7 +674,7 @@ ОтветственныйРасширеннаяПодсказка - 326 + 328 Label true true @@ -726,7 +726,7 @@ НаКонтролеРасширеннаяПодсказка - 329 + 331 Label true true @@ -760,7 +760,7 @@ None РассмотретьПослеРасширеннаяПодсказка - 331 + 333 Label true true @@ -808,7 +808,7 @@ ГруппаНаКонтролеРасширеннаяПодсказка - 328 + 330 Label true true @@ -841,7 +841,7 @@ false ГруппаПрочееРасширеннаяПодсказка - 311 + 313 Label true true @@ -874,7 +874,7 @@ ГруппаПолучателиПрочееРасширеннаяПодсказка - 301 + 303 Label true true @@ -909,7 +909,7 @@ ДекорацияТемаРасширеннаяПодсказка - 334 + 336 Label true true @@ -944,7 +944,7 @@ None ТемаРасширеннаяПодсказка - 335 + 337 Label true true @@ -982,7 +982,7 @@ ГруппаТемаРасширеннаяПодсказка - 333 + 335 Label true true @@ -1010,7 +1010,7 @@ ГруппаШапкаРасширеннаяПодсказка - 300 + 302 Label true true @@ -1044,7 +1044,7 @@ ДобавитьВложениеСкрепкаРасширеннаяПодсказка - 339 + 341 Label true true @@ -1092,7 +1092,7 @@ ВложенияПодписанЭЦПРасширеннаяПодсказка - 355 + 357 Label true true @@ -1141,7 +1141,7 @@ None ИндексКартинкиРасширеннаяПодсказка - 358 + 360 Label true true @@ -1187,7 +1187,7 @@ ИмяФайлаРасширеннаяПодсказка - 360 + 362 Label true true @@ -1220,7 +1220,7 @@ ГруппаРасширеннаяПодсказка - 357 + 359 Label true true @@ -1248,7 +1248,7 @@ РазмерПредставлениеРасширеннаяПодсказка - 362 + 364 Label true true @@ -1307,10 +1307,10 @@ ВложенияСтрокаПоиска - 346 + 348 ВложенияСтрокаПоискаРасширеннаяПодсказка - 348 + 350 Label true true @@ -1320,7 +1320,7 @@ ВложенияСтрокаПоискаКонтекстноеМеню - 347 + 349 true Вложения @@ -1330,10 +1330,10 @@ ВложенияСостояниеПросмотра - 349 + 351 ВложенияСостояниеПросмотраРасширеннаяПодсказка - 351 + 353 Label true true @@ -1343,7 +1343,7 @@ ВложенияСостояниеПросмотраКонтекстноеМеню - 350 + 352 true ViewStatusAddition @@ -1354,10 +1354,10 @@ ВложенияУправлениеПоиском - 352 + 354 ВложенияУправлениеПоискомРасширеннаяПодсказка - 354 + 356 Label true true @@ -1367,7 +1367,7 @@ ВложенияУправлениеПоискомКонтекстноеМеню - 353 + 355 true SearchControlAddition @@ -1378,7 +1378,7 @@ ВложенияРасширеннаяПодсказка - 345 + 347 Label true true @@ -1400,7 +1400,7 @@ false ДобавитьВложениеРасширеннаяПодсказка - 340 + 342 Label true true @@ -1427,7 +1427,7 @@ false ОткрытьВложениеРасширеннаяПодсказка - 341 + 343 Label true true @@ -1454,7 +1454,7 @@ false СохранитьВложениеРасширеннаяПодсказка - 342 + 344 Label true true @@ -1485,7 +1485,7 @@ false УдалитьВложениеРасширеннаяПодсказка - 343 + 345 Label true true @@ -1511,7 +1511,7 @@ ВложенияКонтекстноеМенюСвойстваВложенияРасширеннаяПодсказка - 344 + 346 Label true true @@ -1578,7 +1578,7 @@ СтраницаРедактированиеРасширеннаяПодсказка - 338 + 340 Label true true @@ -1602,7 +1602,7 @@ ДобавитьВложениеГиперссылкаРасширеннаяПодсказка - 373 + 375 Label true true @@ -1639,7 +1639,7 @@ 1 СтраницаДобавитьРасширеннаяПодсказка - 372 + 374 Label true true @@ -1668,7 +1668,7 @@ СтраницыВложенияРасширеннаяПодсказка - 337 + 339 Label true true @@ -1710,7 +1710,7 @@ None ТекстПисьмаРасширеннаяПодсказка - 379 + 381 Label true true @@ -1757,7 +1757,7 @@ true СтраницаОбычныйТекстРасширеннаяПодсказка - 378 + 380 Label true true @@ -1792,7 +1792,7 @@ ГруппаКоманднаяПанельФорматированногоДокументаРасширеннаяПодсказка - 382 + 384 Label true true @@ -1820,7 +1820,7 @@ None ТекстПисьмаФорматированныйДокументРасширеннаяПодсказка - 383 + 385 Label true true @@ -1862,7 +1862,7 @@ СтраницаФорматированныйДокументРасширеннаяПодсказка - 381 + 383 Label true true @@ -1891,7 +1891,7 @@ СтраницыТекстПисьмаРасширеннаяПодсказка - 377 + 379 Label true true @@ -1925,7 +1925,7 @@ None ТекстВходящегоПисьмаРасширеннаяПодсказка - 386 + 388 Label true true @@ -1972,7 +1972,7 @@ ГруппаВходящееРасширеннаяПодсказка - 385 + 387 Label true true @@ -2006,7 +2006,7 @@ НомерРасширеннаяПодсказка - 389 + 391 Label true true @@ -2049,7 +2049,7 @@ ДатаОтправленияРасширеннаяПодсказка - 391 + 393 Label true true @@ -2102,7 +2102,7 @@ ГруппаОтправленоНомерРасширеннаяПодсказка - 388 + 390 Label true true @@ -2134,7 +2134,7 @@ СтраницаПисьмоРасширеннаяПодсказка - 376 + 378 Label true true @@ -2168,7 +2168,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 375 + 377 Label true true @@ -2200,7 +2200,7 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 393 + 395 Label true true @@ -2231,7 +2231,7 @@ None КомментарийРасширеннаяПодсказка - 395 + 397 Label true true @@ -2274,7 +2274,7 @@ СтраницаКомментарийРасширеннаяПодсказка - 394 + 396 Label true true @@ -2303,7 +2303,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 374 + 376 Label true true @@ -2331,7 +2331,7 @@ false СправкаРасширеннаяПодсказка - 286 + 287 Label true true @@ -2358,7 +2358,7 @@ false ОтправитьРасширеннаяПодсказка - 287 + 288 Label true true @@ -2384,7 +2384,7 @@ ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 288 + 289 Label true true @@ -2411,7 +2411,7 @@ false ЗаписатьРасширеннаяПодсказка - 289 + 290 Label true true @@ -2437,7 +2437,7 @@ ФормаПеречитатьРасширеннаяПодсказка - 290 + 291 Label true true @@ -2464,7 +2464,7 @@ ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка - 291 + 292 Label true true @@ -2492,7 +2492,7 @@ false ИзменитьФормуРасширеннаяПодсказка - 292 + 293 Label true true @@ -2508,6 +2508,33 @@ UserCmds Auto + + ФормаВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + 286 + true + true + + true + + + ФормаВставитьВнешнююСсылкуНаОбъектИнформационнойБазыРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + Form.Command.ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Дополнительно 154 @@ -2519,7 +2546,7 @@ false ДополнительноРасширеннаяПодсказка - 293 + 295 Label true true @@ -2546,7 +2573,7 @@ ФормаУточнитьКонтактыРасширеннаяПодсказка - 294 + 296 Label true true @@ -2573,7 +2600,7 @@ ОтображатьТекстПисьмаОснованияРасширеннаяПодсказка - 295 + 297 Label true true @@ -2602,7 +2629,7 @@ ФормаHTMLРасширеннаяПодсказка - 297 + 299 Label true true @@ -2628,7 +2655,7 @@ ФормаОбычныйТекстРасширеннаяПодсказка - 298 + 300 Label true true @@ -2658,7 +2685,7 @@ ФорматСообщенияРасширеннаяПодсказка - 296 + 298 Label true true @@ -2690,7 +2717,7 @@ ГруппаГлобальныеКомандыРасширеннаяПодсказка - 299 + 301 Label true true @@ -2704,6 +2731,10 @@ Left + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения @@ -3595,6 +3626,30 @@ Auto Auto + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + + <key>ru</key> + <value>Вставить внешнюю ссылку на объект информационной базы</value> + + 3 + + ru + Вставить внешнюю ссылку на объект информационной базы + + + true + + Ctrl+Shift+V + + + ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы + + + true + Auto + Auto + УчетнаяЗапись @@ -3614,10 +3669,7 @@ Тело - - String - - + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index eff008b73..f0dd320ee 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -61,6 +61,71 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Перем СтрокаНачало, СтрокаКонец, КолонкаНачало, КолонкаКонец; + Перем НачалоВыделения, КонецВыделения; + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект") Тогда + + Если ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда + Элементы.ТекстПисьма.ПолучитьГраницыВыделения(СтрокаНачало, КолонкаНачало, СтрокаКонец, КолонкаКонец); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстПисьма); + СтрокаВставки = ТекстовыйДокумент.ПолучитьСтроку(СтрокаНачало); + СтрокаВставки = Лев(СтрокаВставки, КолонкаНачало - 1) + ВыбранноеЗначение + Прав(СтрокаВставки,СтрДлина(СтрокаВставки) - КолонкаКонец + 1); + ТекстовыйДокумент.ЗаменитьСтроку(СтрокаНачало, СтрокаВставки); + ТекстПисьма = ТекстовыйДокумент.ПолучитьТекст(); + Иначе + + Элементы.ТекстПисьмаФорматированныйДокумент.ПолучитьГраницыВыделения(НачалоВыделения, КонецВыделения); + ТекстПисьмаФорматированныйДокумент.Вставить(НачалоВыделения, ВыбранноеЗначение); + + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма") Тогда + + Если ВыбранноеЗначение <> Неопределено И Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда + + Объект.УведомитьОДоставке = ВыбранноеЗначение.УведомитьОДоставке; + Объект.УведомитьОПрочтении = ВыбранноеЗначение.УведомитьОПрочтении; + Объект.ВключатьТелоИсходногоПисьма = ВыбранноеЗначение.ВключатьТелоИсходногоПисьма; + Модифицированность = Истина; + + КонецЕсли; + + ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.АдреснаяКнига") + ИЛИ ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.УточнениеКонтактов") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Массив") И ТипЗнч(ВыбранноеЗначение) <> Тип("Соответствие") Тогда + Возврат; + КонецЕсли; + + // Получим список адресатов + СоответствиеТабличныхЧастей = Новый Соответствие; + СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма); + СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий); + СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий); + СоответствиеТабличныхЧастей.Вставить("Ответ", Объект.ПолучателиОтвета); + + ДляПодбора = (Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено")); + + // Заполним адресатов + Если ДляПодбора Тогда + ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, ВыбранноеЗначение); + Иначе + ЗаполнитьУточненныеКонтакты(ВыбранноеЗначение); + КонецЕсли; + + // Установим признак модифицированности + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) @@ -381,7 +446,7 @@ ГруппаПодбора = НСтр("ru = 'Скрытые'"); КонецЕсли; - РедактироватьСписокПолучателей(Истина,ГруппаПодбора); + РедактироватьСписокПолучателей(Истина, ГруппаПодбора); Иначе @@ -569,7 +634,6 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения @@ -708,7 +772,7 @@ Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - РедактироватьСписокПолучателей(Истина,НСтр("ru = 'Копии'")); + РедактироватьСписокПолучателей(Истина, НСтр("ru = 'Копии'")); Иначе @@ -740,16 +804,14 @@ СтруктураПараметры.Вставить("ВключатьТелоИсходногоПисьма", Объект.ВключатьТелоИсходногоПисьма); СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - Результат = ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", - СтруктураПараметры, ЭтаФорма); - Если Результат <> Неопределено И Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - - Объект.УведомитьОДоставке = Результат.УведомитьОДоставке; - Объект.УведомитьОПрочтении = Результат.УведомитьОПрочтении; - Объект.ВключатьТелоИсходногоПисьма = Результат.ВключатьТелоИсходногоПисьма; - Модифицированность = Истина; - - КонецЕсли; + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", СтруктураПараметры, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ВставитьВнешнююСсылкуНаОбъектИнформационнойБазы(Команда) + + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормированиеВнешнейСсылкиНаОбъект",,ЭтаФорма); КонецПроцедуры @@ -1347,7 +1409,7 @@ Объект.ТекстHTML = Взаимодействия.ОбработатьТекстHTMLДляФорматированногоДокумента( Объект.Ссылка, Объект.ТекстHTML,СтруктураВложений); ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений); - ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда + ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено И Параметры.Тело = Неопределено Тогда ТекстПисьмаФорматированныйДокумент = ПараметрыРаботыПользователяПользователя.Подпись; КонецЕсли; @@ -1359,7 +1421,7 @@ ТекстПисьма = Объект.Текст; Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - ТекстПисьма = ПараметрыРаботыПользователяПользователя.Подпись; + ТекстПисьма = ТекстПисьма + ПараметрыРаботыПользователяПользователя.Подпись; КонецЕсли; Объект.Кодировка = "UTF-8"; @@ -1406,8 +1468,12 @@ Объект.Тема = Параметры.Тема; КонецЕсли; - Если НЕ ПустаяСтрока(Параметры.Тело) Тогда + Если ТипЗнч(Параметры.Тело) = Тип("Структура") Тогда + ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Параметры.Тело.ТекстHTML, Параметры.Тело.СтруктураВложений); + Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками; + ИначеЕсли ТипЗнч(Параметры.Тело) = Тип("Строка") И Не ПустаяСтрока(Параметры.Тело) Тогда Объект.Текст = Параметры.Тело; + Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; КонецЕсли; Если Параметры.Свойство("Кому") И Параметры.Кому <> Неопределено Тогда @@ -1681,7 +1747,7 @@ МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Таблица.Ссылка КАК Контакт, | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП @@ -1877,7 +1943,7 @@ КонецПроцедуры &НаКлиенте -Процедура РедактироватьСписокПолучателей(ДляПодбора,ГруппаПодбора = "") +Процедура РедактироватьСписокПолучателей(ДляПодбора, ГруппаПодбора = "") // Получим список адресатов СоответствиеТабличныхЧастей = Новый Соответствие; @@ -1901,22 +1967,9 @@ // Откроем форму для редактирования списка адресатов ИмяОбщейФормы = ?(ДляПодбора, "ОбщаяФорма.АдреснаяКнига", "ОбщаяФорма.УточнениеКонтактов"); - Результат = ОткрытьФормуМодально(ИмяОбщейФормы, ПараметрыОткрытия); - Если (ТипЗнч(Результат) <> Тип("Массив")) И (ТипЗнч(Результат) <> Тип("Соответствие")) Тогда - Возврат; - КонецЕсли; - - // Заполним адресатов - Если ДляПодбора Тогда - ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, Результат); - Иначе - ЗаполнитьУточненныеКонтакты(Результат); - КонецЕсли; - // Установим признак модифицированности - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); - Модифицированность = Истина; - + ОткрытьФорму(ИмяОбщейФормы, ПараметрыОткрытия, ЭтаФорма); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form new file mode 100644 index 000000000..e1aa86dad --- /dev/null +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form @@ -0,0 +1,568 @@ + + + + <key>ru</key> + <value>Формирование внешней ссылки на объект</value> + + + ГруппаШапка + 5 + + ГруппаАдрес + 16 + + АдресПубликацииИнформационнойБазыВИнтернете + 1 + true + true + + true + + + АдресПубликацииИнформационнойБазыВИнтернете + + Top + + OnChange + АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении + + + АдресПубликацииИнформационнойБазыВИнтернетеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + АдресПубликацииИнформационнойБазыВИнтернетеКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 40 + true + true + false + true + true + true + true + Normal + + + + ДекорацияАдрес + 17 + + <key>ru</key> + <value>Адрес, по которому информационная база доступна внешнему пользователю. Если значение не заполнено, обратитесь к администратору системы.</value> + + true + true + + true + + + ДекорацияАдресРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ДекорацияАдресКонтекстноеМеню + 18 + true + + Label + true + 3 + true + false + false + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группа адрес</value> + + + ru + Группа адрес + + 40 + + ГруппаАдресРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСсылкаНаОбъект + 13 + + СсылкаНаОбъект + 3 + + <key>ru</key> + <value>Внутренняя ссылка на объект</value> + + true + true + + true + + + СсылкаНаОбъект + + Top + + OnChange + СсылкаНаОбъектПриИзменении + + + СсылкаНаОбъектРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СсылкаНаОбъектКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияПодсказкаСсылкаНаОбъект + 14 + + <key>ru</key> + <value>Для получения внутренней ссылки необходимо открыть форму объекта, выполнить комаду "Получить ссылку..."(Ctrl+F11) , полученную ссылку скопировать в буфер и вставить в это поле.</value> + + true + true + + true + + + ДекорацияПодсказкаСсылкаНаОбъектРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ДекорацияПодсказкаСсылкаНаОбъектКонтекстноеМеню + 15 + true + + Label + true + 3 + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа ссылка на объект</value> + + + ru + Группа ссылка на объект + + 50 + false + + ГруппаСсылкаНаОбъектРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа шапка</value> + + + ru + Группа шапка + + + ГруппаШапкаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормируемаяСсылка + 6 + true + + true + + + СформированнаяСсылка + + + ФормируемаяСсылкаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ФормируемаяСсылкаКонтекстноеМеню + 7 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + System.DefaultGUIFont + + + + + ГруппаПодвал + 12 + + ДекорацияПустая + 10 + true + true + + true + + + ДекорацияПустаяРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДекорацияПустаяКонтекстноеМеню + 11 + true + + Label + true + true + true + + Left + + + + ГруппаВставить + 9 + + Вставить + 8 + true + true + + true + + + ВставитьРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.Вставить + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа вставить</value> + + + ru + Группа вставить + + 9 + false + + ГруппаВставитьРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + CommandBar + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа подвал</value> + + + ru + Группа подвал + + + ГруппаПодвалРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + АдресПубликацииИнформационнойБазыВИнтернете + + <key>ru</key> + <value>Адрес публикации информационной базы в интернете</value> + + 1 + + String + + + + true + + + true + + + + СсылкаНаОбъект + + <key>ru</key> + <value>Ссылка на объект</value> + + 2 + + String + + 250 + + + + true + + + true + + + + СформированнаяСсылка + + <key>ru</key> + <value>Сформированная ссылка</value> + + 3 + + String + + + + true + + + true + + + + Вставить + + <key>ru</key> + <value>Вставить</value> + + 1 + + ru + Вставить + + + true + + + + Вставить + + + Auto + Auto + + + + + + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl new file mode 100644 index 000000000..c670ece38 --- /dev/null +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Module.bsl @@ -0,0 +1,59 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + АдресПубликацииИнформационнойБазыВИнтернете = Взаимодействия.АдресПубликацииИнформационнойБазыВИнтернете(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + СформироватьАдресСсылки(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура АдресПубликацииИнформационнойБазыВИнтернетеПриИзменении(Элемент) + + СформироватьАдресСсылки(); + +КонецПроцедуры + +&НаКлиенте +Процедура СсылкаНаОбъектПриИзменении(Элемент) + + СформироватьАдресСсылки(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Вставить(Команда) + + ОповеститьОВыборе(СформированнаяСсылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура СформироватьАдресСсылки() + + СформированнаяСсылка = АдресПубликацииИнформационнойБазыВИнтернете + "#"+ СсылкаНаОбъект; + +КонецПроцедуры + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index 45e632e4f..0a5fbe8ef 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -99,6 +99,7 @@ Document.Встреча Document.ТелефонныйЗвонок Document.ЗапланированноеВзаимодействие + Document.СообщениеSMS Use Managed Use @@ -598,6 +599,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru @@ -763,6 +765,15 @@ PersonalComputer MobileDevice + + ФормированиеВнешнейСсылкиНаОбъект + + ru + Формирование внешней ссылки на объект + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Enums/СостоянияДокументаСообщениеSMS/СостоянияДокументаСообщениеSMS.mdo b/SSL/src/Enums/СостоянияДокументаСообщениеSMS/СостоянияДокументаСообщениеSMS.mdo new file mode 100644 index 000000000..9ff3d2246 --- /dev/null +++ b/SSL/src/Enums/СостоянияДокументаСообщениеSMS/СостоянияДокументаСообщениеSMS.mdo @@ -0,0 +1,73 @@ + + + + + + + + СостоянияДокументаСообщениеSMS + + ru + Состояния документа сообщение SMS + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Черновик + + ru + Черновик + + + + Исходящее + + ru + Исходящее + + + + Доставляется + + ru + Доставляется + + + + Доставлено + + ru + Доставлено + + + + ЧастичноДоставлено + + ru + Частично доставлено + + + + НеДоставлено + + ru + Не доставлено + + + diff --git a/SSL/src/Enums/СостоянияСообщенияSMS/СостоянияСообщенияSMS.mdo b/SSL/src/Enums/СостоянияСообщенияSMS/СостоянияСообщенияSMS.mdo new file mode 100644 index 000000000..39609189e --- /dev/null +++ b/SSL/src/Enums/СостоянияСообщенияSMS/СостоянияСообщенияSMS.mdo @@ -0,0 +1,101 @@ + + + + + + + + СостоянияСообщенияSMS + + ru + Состояния сообщения SMS + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Черновик + + ru + Черновик + + + + Исходящее + + ru + Исходящее + + + + НеУдалосьПередатьПровайдеру + + ru + Не удалось передать провайдеру + + + + НеОтправленоПровайдером + + ru + Не отправлено провайдером + + + + ОтправляетсяПровайдером + + ru + Отправляется провайдером + + + + ОтправленоПровайдером + + ru + Отправлено провайдером + + + + Доставлено + + ru + Доставлено + + + + НеДоставлено + + ru + Не доставлено + + + + НеОпознаноПровайдером + + ru + Не опознано провайдером + + + + ОшибкаПолученияСтатусаУПровайдера + + ru + Ошибка получения статуса у провайдера + + + diff --git a/SSL/src/Enums/УдалитьВидыПоставляемыхДанных/УдалитьВидыПоставляемыхДанных.mdo b/SSL/src/Enums/УдалитьВидыПоставляемыхДанных/УдалитьВидыПоставляемыхДанных.mdo deleted file mode 100644 index 35d2bc4e7..000000000 --- a/SSL/src/Enums/УдалитьВидыПоставляемыхДанных/УдалитьВидыПоставляемыхДанных.mdo +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - УдалитьВидыПоставляемыхДанных - - ru - (Не используется)Виды поставляемых данных - - - Use - Order - - Use - - - - - Use - Ref - - Use - - - - true - BothWays - - РегистрСведений_АдресныеСокращения - - ru - Адресные сокращения - - - - РегистрСведений_АдресныйКлассификатор - - ru - Адресный классификатор - - - - РегистрСведений_ДанныеПроизводственногоКалендаря - - ru - Данные производственного календаря - - - - РегистрСведений_СтавкаРефинансированияЦБ - - ru - Ставки рефинансирования ЦБ РФ - - - - Справочник_Банки - - ru - Справочник банков РФ - - - - Справочник_ЕдиныеНормыАмортизационныхОтчисленийОсновныхФондов - - ru - Единые нормы амортизации основных фондов - - - - Справочник_КлассификаторЕдиницИзмерения - - ru - Общероссийский классификатор единиц измерения - - - - Справочник_ОбщероссийскийКлассификаторОсновныхФондов - - ru - Общероссийский классификатор основных фондов - - - - Справочник_СтраныМира - - ru - Общероссийский классификатор стран мира - - - - Справочник_ПроизводственныеКалендари - - ru - Производственные календари - - - diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo index 3a5bc9645..3df33ff84 100644 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередЗаписьюПрисоединенногоФайлаВзаимодействия.mdo @@ -6,6 +6,7 @@ Выполнить действия перед записью присоединенного файла (Взаимодействия) + CatalogObject.СообщениеSMSПрисоединенныеФайлы CatalogObject.ВстречаПрисоединенныеФайлы CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo index ba32717b4..266e67bbb 100644 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПередУдалениемПрисоединенногоФайлаВзаимодействия.mdo @@ -6,6 +6,7 @@ Выполнить действия перед удалением присоединенного файла (Взаимодействия) + CatalogObject.СообщениеSMSПрисоединенныеФайлы CatalogObject.ВстречаПрисоединенныеФайлы CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы diff --git a/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo b/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo index 5e9e0bd72..8e434c45c 100644 --- a/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия/ВыполнитьДействияПриЗаписиПрисоединенногоФайлаВзаимодействия.mdo @@ -6,6 +6,7 @@ Выполнить действия при записи присоединенного файла (Взаимодействия) + CatalogObject.СообщениеSMSПрисоединенныеФайлы CatalogObject.ВстречаПрисоединенныеФайлы CatalogObject.ТелефонныйЗвонокПрисоединенныеФайлы CatalogObject.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы diff --git a/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъектаПриОбменеДанными/ЗаписатьВерсиюОбъектаПриОбменеДанными.mdo b/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъектаПриОбменеДанными/ЗаписатьВерсиюОбъектаПриОбменеДанными.mdo new file mode 100644 index 000000000..c21b3d908 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗаписатьВерсиюОбъектаПриОбменеДанными/ЗаписатьВерсиюОбъектаПриОбменеДанными.mdo @@ -0,0 +1,20 @@ + + + ЗаписатьВерсиюОбъектаПриОбменеДанными + + ru + Записать версию объекта при обмене данными + + Запись версии объекта при обмене данными + + BusinessProcessObject + ChartOfCalculationTypesObject + ChartOfAccountsObject + ChartOfCharacteristicTypesObject + CatalogObject + TaskObject + DocumentObject + + OnWrite + CommonModule.ВерсионированиеОбъектовСобытия.ЗаписатьВерсиюОбъектаПриОбменеДанными + diff --git a/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo b/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo index a24ca7b71..616ade0fc 100644 --- a/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo +++ b/SSL/src/EventSubscriptions/ЗаполнитьКонтактнуюИнформацию/ЗаполнитьКонтактнуюИнформацию.mdo @@ -10,5 +10,5 @@ CatalogObject.Пользователи Filling - CommonModule.УправлениеКонтактнойИнформациейСобытия.ОбработкаЗаполненияКИ + CommonModule.УправлениеКонтактнойИнформацией.ОбработкаЗаполненияКонтактнойИнформации diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo index ea8309793..8fd97e616 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхНаборовЗаписейПриЗаписи/КонтрольНеразделенныхНаборовЗаписейПриЗаписи.mdo @@ -11,7 +11,7 @@ InformationRegisterRecordSet.УдалитьОбластиДанных InformationRegisterRecordSet.УдалитьБлокировкиСеансовОбластиДанных InformationRegisterRecordSet.ПравилаДляОбменаДанными - InformationRegisterRecordSet.УдалитьСвязиПоставляемыхДанных + InformationRegisterRecordSet.УдалитьСтраныМира InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.СообщенияОбменаДанными InformationRegisterRecordSet.АдресныйКлассификатор @@ -21,7 +21,6 @@ InformationRegisterRecordSet.НастройкиОтправителя InformationRegisterRecordSet.ОбластиТребующиеОбработкиПоставляемыхДанных InformationRegisterRecordSet.НастройкиТранспортаОбменаОбластейДанных - InformationRegisterRecordSet.УдалитьКурсыВалютПоКлассификатору InformationRegisterRecordSet.АдресныеСокращения InformationRegisterRecordSet.УдалитьОчередьЗаданий InformationRegisterRecordSet.УдалитьЗамерыВремени diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index c6bf7d74e..6cd9a1c9c 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -7,7 +7,6 @@ CatalogObject.ШаблоныЗаданийОчереди - CatalogObject.СтраныМира ConstantValueManager.МаксимальныйРазмерФайла ConstantValueManager.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса ConstantValueManager.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы @@ -38,24 +37,24 @@ ConstantValueManager.АдресАгентаСервиса ConstantValueManager.ВнутреннийАдресМенеджераСервиса CatalogObject.ПоставляемыеДополнительныеОтчетыИОбработки - ConstantValueManager.АдресВебСервисаОбменаДанными ConstantValueManager.ИзвлекатьТекстыФайловНаСервере ConstantValueManager.ИмяПользователяАгентаСервиса - ConstantValueManager.ВыполнитьЗагрузкуПараметровРаботыПрограммы + ConstantValueManager.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском CatalogObject.ОбщиеДанныеИнформационногоЦентра CatalogObject.СценарииОбменовДанными ConstantValueManager.РазрешитьВыполнениеДополнительныхОтчетовИОбработокРегламентнымиЗаданиямиВМоделиСервиса ConstantValueManager.ОбщийКаталогВременныхФайлов CatalogObject.ТипыИнформацииИнформационногоЦентра ConstantValueManager.ХранитьФайлыВТомахНаДиске + ConstantValueManager.ИмяПользователяКонференцииИнформационногоЦентра CatalogObject.ОчередьЗаданий ConstantValueManager.СообщениеОбменаДаннымиИзГлавногоУзла ConstantValueManager.ОбщийКаталогВременныхФайловLinux ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете ConstantValueManager.ПараметрыАдминистрированияИБ ConstantValueManager.ИспользоватьАвтономнуюРаботуВМоделиСервиса - CatalogObject.УдалитьКлассификаторВалют ConstantValueManager.ЭтоАвтономноеРабочееМесто + ConstantValueManager.ПарольПользователяКонференцииИнформационногоЦентра ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки ConstantValueManager.НастройкаАвтономногоРабочегоМестаЗавершена ChartOfCharacteristicTypesObject.РазделыДатЗапретаИзменения @@ -64,6 +63,7 @@ CatalogObject.КлючевыеОперации ConstantValueManager.ОценкаПроизводительностиПериодЗаписи ConstantValueManager.СписокРасширенийФайловOpenDocument + ConstantValueManager.АдресУправленияКонференцией ConstantValueManager.МинимальныйИнтервалРегламентныхЗаданийДополнительныхОтчетовИОбработокВМоделиСервиса ConstantValueManager.ИспользоватьРазделениеПоОбластямДанных ConstantValueManager.ИспользоватьСинхронизациюДанныхВМоделиСервисаСЛокальнойПрограммой @@ -82,7 +82,7 @@ CatalogObject.ИдентификаторыОбъектовМетаданных ConstantValueManager.РежимИспользованияИнформационнойБазы ConstantValueManager.ВыполнятьЗамерыПроизводительности - ConstantValueManager.ЗапуститьОбновлениеИнформационнойБазы + ConstantValueManager.ЗагрузитьСообщениеОбменаДанными ExchangePlanObject.ОбменСообщениями ConstantValueManager.МаксимальноеКоличествоИсполняющихФоновыхЗаданий ConstantValueManager.НастройкаПроксиСервера diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo index 37fcc14e1..f91683d24 100644 --- a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo @@ -9,6 +9,7 @@ DocumentObject.Встреча DocumentObject.ЭлектронноеПисьмоВходящее DocumentObject.ЗапланированноеВзаимодействие + DocumentObject.СообщениеSMS DocumentObject.ТелефонныйЗвонок DocumentObject.ЭлектронноеПисьмоИсходящее diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form index 017c51c65..f85e6398a 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form @@ -13,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 11 + 13 Label true true @@ -58,7 +58,7 @@ ИнформационноеСообщениеРасширеннаяПодсказка - 14 + 16 Label true true @@ -92,7 +92,7 @@ СделатьЭтуКонечнуюТочкуВедомойРасширеннаяПодсказка - 15 + 17 Label true true @@ -120,7 +120,7 @@ ГруппаИнформационныхСообщенийРасширеннаяПодсказка - 13 + 15 Label true true @@ -142,6 +142,38 @@ ФормаКоманднаяПанель -1 + + ФормаОбщаяКомандаНастроитьПараметрыТранспортаСообщенийОбмена + 11 + true + true + + true + + + Объект.Ref + + + ФормаОбщаяКомандаНастроитьПараметрыТранспортаСообщенийОбменаРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + Normal + PictureAndText + true + true + UserCmds + + CommonPicture.СинхронизацияДанныхНастройка + + Auto + Left true @@ -157,6 +189,9 @@ OnClose ПриЗакрытии + Copy + Delete + SetDeletionMark LockOwner true true diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl index 1e4ec2bd1..0079e0108 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl @@ -17,16 +17,13 @@ Если Объект.Заблокирована Тогда Элементы.ИнформационноеСообщение.Заголовок - = НСтр("ru = 'Эта конечная точка заблокирована.'" - ); + = НСтр("ru = 'Эта конечная точка заблокирована.'"); ИначеЕсли Объект.Ведущая Тогда Элементы.ИнформационноеСообщение.Заголовок - = НСтр("ru = 'Эта конечная точка является ведущей, т.е. инициирует отправку и получение сообщений обмена для текущей информационной системы.'" - ); + = НСтр("ru = 'Эта конечная точка является ведущей, т.е. инициирует отправку и получение сообщений обмена для текущей информационной системы.'"); Иначе Элементы.ИнформационноеСообщение.Заголовок - = НСтр("ru = 'Эта конечная точка является ведомой, т.е. выполняет отправку и получение сообщений обмена только по требованию текущей информационной системы.'" - ); + = НСтр("ru = 'Эта конечная точка является ведомой, т.е. выполняет отправку и получение сообщений обмена только по требованию текущей информационной системы.'"); КонецЕсли; Элементы.СделатьЭтуКонечнуюТочкуВедомой.Видимость = Объект.Ведущая И Не Объект.Заблокирована; diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 67892944a..d945f8f2c 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -196,27 +196,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий для обмена без использования правил обмена -// Обработчик события коллизий изменений объектов. -// Условие возникновения: -// Событие возникает при загрузке данных, -// в случае коллизии изменений загружаемого объекта. -// Коллизия изменений возникает, когда в информационной базе -// зарегистрированы изменения для загружаемого объекта. -// -// Параметры: -// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена для которого выполняется загрузка данных. -// Объект – объект, для которого возникла коллизия изменений. -// -// Возвращаемое значение: -// Тип: Булево. Истина – загружаемый объект будет записан в информационную базу; -// Ложь – загружаемый объект записан не будет. -// -Функция ПрименитьОбъектПриКоллизииИзменений(УзелИнформационнойБазы, Объект) Экспорт - - Возврат Ложь; - -КонецФункции - // Определяет режим удаления объектов при загрузке данных. // // Возвращающее значение: diff --git a/SSL/src/FunctionalOptions/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo b/SSL/src/FunctionalOptions/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo index afafd35ce..62df5977a 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo @@ -17,4 +17,5 @@ Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + Document.СообщениеSMS.Attribute.Рассмотрено diff --git a/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo b/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo index 7d6b5b617..693c3a452 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo @@ -16,4 +16,7 @@ DocumentJournal.Взаимодействия.Command.ЗапланироватьВстречу DocumentJournal.Взаимодействия.Command.ЗапланироватьВзаимодействие DocumentJournal.Взаимодействия.Command.Позвонить + Catalog.СообщениеSMSПрисоединенныеФайлы + Document.СообщениеSMS + DocumentJournal.Взаимодействия.Command.НаписатьSMS diff --git a/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo b/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo index c2c08bb47..b7d4dcd86 100644 --- a/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo +++ b/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo @@ -7,7 +7,6 @@ Constant.ПоддержкаРезервногоКопирования true - CommonForm.НастройкиРезервногоКопированияПриложений CommonForm.СозданиеРезервнойКопии CommonCommand.СоздатьРезервнуюКопию InformationRegister.УдалитьОбластиКРезервномуКопированию diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo index 056ecfcf2..3d032a395 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo @@ -12,4 +12,5 @@ DataProcessor.НастройкаРезервногоКопированияИБ DataProcessor.РезервноеКопированиеИБ DataProcessor.ПанельАдминистрированияБСП.Command.СинхронизацияДанных + CommonForm.АвтономнаяРабота diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo index 10914d995..fbb12e30c 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo @@ -7,8 +7,6 @@ Constant.ИспользоватьРазделениеПоОбластямДанных true - Catalog.УдалитьКлассификаторВалют - InformationRegister.УдалитьКурсыВалютПоКлассификатору CommonForm.ВходВОбластьДанных CommonForm.ЗагрузкаДанныхВОбласть CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию @@ -16,7 +14,6 @@ InformationRegister.УдалитьБлокировкиСеансовОбластиДанных InformationRegister.НеразделенныеПользователи InformationRegister.УдалитьОчередьЗаданий - InformationRegister.УдалитьСвязиПоставляемыхДанных DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных CommonCommand.ДобавитьПользователейСервиса Constant.КлючОбластиДанных @@ -34,4 +31,5 @@ InformationRegister.ВерсииПодсистемОбластейДанных InformationRegister.ОчередьИзвлеченияТекста InformationRegister.ОбластиДанных + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса diff --git a/SSL/src/InformationRegisters/АдресныеСокращения/АдресныеСокращения.mdo b/SSL/src/InformationRegisters/АдресныеСокращения/АдресныеСокращения.mdo index d6ee56be1..345294d4e 100644 --- a/SSL/src/InformationRegisters/АдресныеСокращения/АдресныеСокращения.mdo +++ b/SSL/src/InformationRegisters/АдресныеСокращения/АдресныеСокращения.mdo @@ -14,7 +14,6 @@ ru Адресные сокращения - true Use Active diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl index 89f93fb05..b376cb691 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl @@ -2,6 +2,5 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АдресныйКлассификатор",, - ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно - ); + ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form index 57aaf8256..702db92b8 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form @@ -14,9 +14,13 @@ КодПользователя + + ru + Код пользователя для авторизации на сайте фирмы 1С + КодПользователяРасширеннаяПодсказка - 21 + 23 Label true true @@ -30,6 +34,7 @@ true InputField + true Enter true Left @@ -37,6 +42,7 @@ true true + true true true true @@ -54,9 +60,13 @@ Пароль + + ru + Пароль для регистрации на сайте фирмы 1С + ПарольРасширеннаяПодсказка - 23 + 25 Label true true @@ -98,7 +108,7 @@ Right ЗапомнитьИмяИПарольРасширеннаяПодсказка - 25 + 27 Label true true @@ -133,7 +143,7 @@ ВведитеДанныеРасширеннаяПодсказка - 20 + 22 Label true true @@ -155,7 +165,7 @@ ПерейтиКРегистрацииНаСайте - 14 + 17 <key>ru</key> <value>Перейти к регистрации на сайте поддержки пользователей</value> @@ -167,7 +177,7 @@ </userVisible> <extendedTooltip> <name>ПерейтиКРегистрацииНаСайтеРасширеннаяПодсказка</name> - <id>27</id> + <id>29</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -177,7 +187,7 @@ </extendedTooltip> <contextMenu> <name>ПерейтиКРегистрацииНаСайтеКонтекстноеМеню</name> - <id>15</id> + <id>18</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -208,7 +218,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ПродолжитьРасширеннаяПодсказка</name> - <id>17</id> + <id>19</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -235,7 +245,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОтменаРасширеннаяПодсказка</name> - <id>18</id> + <id>20</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -262,7 +272,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СправкаРасширеннаяПодсказка</name> - <id>19</id> + <id>21</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -284,7 +294,7 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> @@ -348,24 +358,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>СсылкаНаПользовательскийСайт</name> - <title> - <key>ru</key> - <value>Ссылка на пользовательский сайт</value> - - 2 - - String - - - - true - - - true - - СохранитьДанныеАутентификацииИПродолжить diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html index ab7b7fe38..270fa20a9 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html @@ -1,2 +1,2 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для загрузки <a href="InformationRegister.АдресныйКлассификатор/Help">адресного классификатора</a> с сайта "1С" необходимо ввести данные регистрации на <a href="http://users.v8.1c.ru/">сайте поддержки пользователей 1С:Предприятия</a>: код пользователя и пароль.</p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl index 8bddf9210..6e16697d0 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl @@ -1,10 +1,11 @@ -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -13,42 +14,44 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ +// &НаКлиенте Процедура ПерейтиКРегистрацииНаСайтеНажатие(Элемент) ЗапуститьПриложение("http://users.v8.1c.ru/"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -// Обработчик события нажатия на кнопку "Продолжить" // -// Параметр закрытия формы: Неопределено - пользователь отказался от ввода пароля -// Структура - -// ключ "Статус", булево - истина или ложь в зависмости от успеха вызова -// ключ "КодПользователя", строка - в случае если статус Истина содержит -// код пользователя -// ключ "Пароль", строка - в случае если статус Истина содержит пароль + +// Кнопка "Продолжить", выполнение выбора. +// +// Результат выбора: Неопределено, если пользователь отказался от ввода пароля, или структура с полями: +// Статус - истина или ложь в зависимости от успеха вызова +// КодПользователя - строка кода пользователя, имеет смысл только если Статус=Истина +// Пароль - строка пароля, имеет смысл только если Статус=Истина &НаКлиенте Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнить() - СохранитьДанныеАутентификацииИПродолжитьВыполнитьНаСервере(); - Закрыть(Новый Структура("Статус, КодПользователя ,Пароль", Истина, КодПользователя, Пароль)); + СохраняемыйПароль = ?(ЗапомнитьПароль, Пароль, Неопределено); + СохранитьДанныеАутентификации(КодПользователя, СохраняемыйПароль); + + Результат = Новый Структура("Статус, КодПользователя ,Пароль", Истина, КодПользователя, Пароль); + ОповеститьОВыборе(Результат); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// -&НаСервере -Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнитьНаСервере() - - АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, ?(ЗапомнитьПароль, Пароль, Неопределено)); - +&НаСервереБезКонтекста +Процедура СохранитьДанныеАутентификации(Код, Пароль) + АдресныйКлассификатор.СохранитьПараметрыАутентификации(Код, Пароль); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html index 9352d768f..65ad34433 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html @@ -1,2 +1,2 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>На форме выводится сводная информация об имеющихся в системе адресных сведениях, а также доступны основные операции по управлению ими: загрузка, очистка и проверка обновлений через Интернет.</p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl index fc018807e..0600a8ea6 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl @@ -36,7 +36,7 @@ &НаКлиенте Процедура ОчиститьАдресныйКлассификатор(Команда) - АдресныйКлассификаторКлиент.ОчиститьКлассификатор(); + АдресныйКлассификаторКлиент.ОчиститьКлассификатор(ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -52,14 +52,12 @@ Результат = Новый Структура("Заголовок, КоличествоЗагруженных", НСтр("ru = 'Адресный классификатор не заполнен.'"), - АдресныйКлассификатор.ЧислоЗаполненныхАдресныхОбъектов() - ); + АдресныйКлассификатор.ЧислоЗаполненныхАдресныхОбъектов()); Если Результат.КоличествоЗагруженных>0 Тогда Результат.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загружено регионов: %1.'"), - Результат.КоличествоЗагруженных - ); + Результат.КоличествоЗагруженных); КонецЕсли; Возврат Результат; diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index dc73e1eec..dbab58c9b 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -614,6 +614,10 @@ <dataPath xsi:type="form:DataPath"> <segments>ДискИТС</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Путь к файлам диска ИТС</value> + </toolTip> <extendedTooltip> <name>ДискИТСРасширеннаяПодсказка</name> <id>113</id> @@ -693,6 +697,10 @@ <dataPath xsi:type="form:DataPath"> <segments>ПутьКФайламДанныхНаДиске</segments> </dataPath> + <toolTip> + <key>ru</key> + <value>Путь к файлам адресного классификатора, полученных из другого источника</value> + </toolTip> <extendedTooltip> <name>ПутьКФайламДанныхНаДискеРасширеннаяПодсказка</name> <id>116</id> diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index 70add594c..a5b53ee1a 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Перед тем как начать загрузку <a href="InformationRegister.АдресныйКлассификатор/Help">адресного классификатора</a>, необходимо выбрать регионы РФ, адресные сведения по которым необходимо загрузить в программу. Загрузка адресного классификатора по всем регионам может занять длительное время.</p> <p>Затем выберите один из трех вариантов, откуда будут загружаться адресные сведения: с сайта поддержки пользователей 1С:Предприятия фирмы "1С", с диска информационно-технологического сопровождения (1С:ИТС), или из файлов, полученных каким-либо способом от ГНИВЦ ФНС РФ. </p> <p>Для загрузки адресного классификатора с сайта фирмы "1С" необходим доступ в сеть Интернет, а также данные регистрации на <a href="http://users.v8.1c.ru/">сайте поддержки пользователей 1С:Предприятие</a> (код пользователя и пароль).</p> diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 52a48d959..71b9b10db 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -77,8 +77,7 @@ Иначе СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файлы адресных сведений не найдены в каталоге ""%1"".'"), - ПутьКФайламДанныхНаДиске - ); + ПутьКФайламДанныхНаДиске); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ПутьКФайламДанныхНаДиске"); КонецЕсли; КонецЕсли; @@ -111,8 +110,7 @@ СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файлы адресных сведений не найдены: ""%1"". |Проверьте правильность указанного пути к диску 1С:ИТС.'"), - ДискИТС - ); + ДискИТС); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ДискИТС"); КонецЕсли; КонецЕсли; @@ -276,8 +274,7 @@ КонецЦикла; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ПараметрыЗагрузкиАдресногоКлассификатора", "ЗагружаемыеРегионы", МассивЗагружаемыхАО - ); + "ПараметрыЗагрузкиАдресногоКлассификатора", "ЗагружаемыеРегионы", МассивЗагружаемыхАО); ИсточникКЛАДР = Новый Структура("ИсточникДанныхДляЗагрузки"); ИсточникКЛАДР.ИсточникДанныхДляЗагрузки = ИсточникДанныхДляЗагрузки; @@ -289,8 +286,7 @@ КонецЕсли; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ПараметрыЗагрузкиАдресногоКлассификатора", "ИсточникКЛАДР", ИсточникКЛАДР - ); + "ПараметрыЗагрузкиАдресногоКлассификатора", "ИсточникКЛАДР", ИсточникКЛАДР); КонецПроцедуры @@ -334,7 +330,7 @@ // Возвращает: // -1, если при старте загрузки произошла ошибка, // 0, если загружено успешно -// 1, если стартована фоновая загрузка +// 1, если запущена фоновая загрузка // &НаКлиенте Функция ЗагрузитьКЛАДР() @@ -459,8 +455,7 @@ // Процесс продолжается ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина - ); + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); КонецЕсли; КонецЕсли; @@ -639,8 +634,7 @@ ПараметрыЗагрузки = Новый Структура( "АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии", - АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии - ); + АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); @@ -704,7 +698,7 @@ КонецЕсли; КонецЕсли; - ДанныеАутентификации = Новый Структура("КодПользователя ,Пароль", КодПользователя, Пароль); + ДанныеАутентификации = Новый Структура("КодПользователя, Пароль", КодПользователя, Пароль); Возврат Истина; КонецФункции @@ -724,8 +718,7 @@ ТекстСтатусаЗагрузки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка файлов адресных сведений с веб-сервера: |%1 %2.'"), - АдресныеСведения.Наименование, АдресныеСведения.Сокращение - ); + АдресныеСведения.Наименование, АдресныеСведения.Сокращение); УстановитьСтатусЗагрузки(ТекстСтатусаЗагрузки); Результат = АдресныйКлассификаторКлиент.ЗагрузитьКЛАДРСВебСервера(АдресныйОбъект, ДанныеАутентификации, ПутьКДанным); Если Не Результат.Статус Тогда @@ -886,3 +879,4 @@ ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html index 329c75d9a..4a58a06fb 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html @@ -1,2 +1,2 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для удаления всех адресных сведений по выбранным регионам из <a href="InformationRegister.АдресныйКлассификатор/Help">адресного классификатора</a>, нажмите<strong> </strong>кнопку <strong>Очистить<em>.</em></strong></p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index eec2db5f0..5955fd80f 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -58,7 +58,7 @@ КонецПроцедуры // Обработчик события нажатия на кнопку "Очистить" -// Проверяет корректность данных и вызывает диалог поддверждения +// Проверяет корректность данных и вызывает диалог подтверждения // очистки адресных сведений. // &НаКлиенте @@ -136,7 +136,7 @@ КонецФункции -// Удалает адресные сведения по выбранным адресным объектам +// Удаляет адресные сведения по выбранным адресным объектам // &НаСервере Процедура ОчиститьАдресныеСведения() diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss index e7070816a..e43e21797 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Наименование</left> - <comparisonType>NotEqual</comparisonType> - <right xsi:type="xs:string"/> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form index 9c031502e..aaaaaaeca 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form @@ -687,6 +687,7 @@ <verticalScrollBar>AutoUse</verticalScrollBar> <horizontalLines>true</horizontalLines> <verticalLines>true</verticalLines> + <horizontalLinesBWA>false</horizontalLinesBWA> <initialListView>Auto</initialListView> <horizontalStretch>true</horizontalStretch> <verticalStretch>true</verticalStretch> diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl index 89da7b8b9..0f9d9e257 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl @@ -27,7 +27,7 @@ Если ИспользоватьСохраненныеНастройки Тогда // Восстанавливаем значение флага "Скрывать неактуальные адреса" из настроек и даем возможность управления - СкрыватьНеактуальныеАдреса = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса", Ложь); + СкрыватьНеактуальныеАдреса = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса", Ложь); Иначе СкрыватьНеактуальныеАдреса = Параметры.СкрыватьНеактуальныеАдреса; КонецЕсли; @@ -38,14 +38,16 @@ // Колонка неактуальной картинки Элементы.Актуальность.Видимость = Не ИспользоватьСохраненныеНастройки; - // Установим отбор - Параметры.Отбор = ПолучитьОграниченияПоУровню(Параметры.Уровень); + // Установим отбор по входным параметрам + Для Каждого КлючЗначение Из ПолучитьОграниченияПоУровню(Параметры.Уровень) Цикл + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, КлючЗначение.Ключ, КлючЗначение.Значение); + КонецЦикла; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Наименование", "", ВидСравненияКомпоновкиДанных.НеРавно); // Установим текущую строку Поля = ПолучитьПоляПоУровню(Параметры.Уровень + 1); СтруктураОтбора = АдресныйКлассификатор.ВернутьСтруктуруАдресногоКлассификатораПоАдреснымЭлементам( - Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица - ); + Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица); Если СтруктураОтбора.ТипАдресногоЭлемента = Параметры.Уровень Тогда Параметры.ТекущаяСтрока = РегистрыСведений.АдресныйКлассификатор.СоздатьКлючЗаписи(СтруктураОтбора); КонецЕсли; @@ -83,8 +85,7 @@ Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, - "ПризнакАктуальности", 0, ВидСравненияКомпоновкиДанных.Равно, "Признак актуальности", СкрыватьНеактуальныеАдреса - ); + "ПризнакАктуальности", 0, ВидСравненияКомпоновкиДанных.Равно, "Признак актуальности", СкрыватьНеактуальныеАдреса); ЭтаФорма.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры @@ -104,8 +105,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='%1 %2 не актуален. |Продолжить?'"), - ТекущиеДанные.Наименование, ТекущиеДанные.Сокращение - ); + ТекущиеДанные.Наименование, ТекущиеДанные.Сокращение); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); Если Ответ<>КодВозвратаДиалога.Да Тогда Возврат; @@ -147,8 +147,7 @@ Поля = ПолучитьПоляПоУровню(Уровень); Ограничения = АдресныйКлассификатор.ВернутьСтруктуруОграниченийПоРодителю( - Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица, 0, Уровень - ); + Поля.Регион, Поля.Район, Поля.Город, Поля.НаселенныйПункт, Поля.Улица, 0, Уровень); Если СкрыватьНеактуальныеАдреса Тогда Ограничения.Вставить("ПризнакАктуальности", 0); @@ -187,8 +186,7 @@ // Вычисляемые Результат.Вставить("Представление", СокрЛП( - ?(ПустаяСтрока(Результат.Наименование), "", СокрЛП(Результат.Наименование) + " " + СокрЛП(Результат.Сокращение)) - )); + ?(ПустаяСтрока(Результат.Наименование), "", СокрЛП(Результат.Наименование) + " " + СокрЛП(Результат.Сокращение)))); Результат.Вставить("ПолноеНаименование", Результат.Представление); // Структура адреса @@ -196,8 +194,7 @@ Если ИспользоватьСохраненныеНастройки Тогда СтруктураАдреса.Вставить("СкрыватьНеактуальныеАдреса", - ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса", Ложь) - ); + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КонтактнаяИнформация.ВводАдреса", "СкрыватьНеактуальныеАдреса", Ложь)); КонецЕсли; СтруктураПолей = ИсправитьПоля(СтруктураАдреса, Уровень); @@ -230,14 +227,12 @@ КонецЕсли; СтруктураПроверки = АдресныйКлассификатор.ПроверитьСоответствиеАдресаКЛАДРу( - "", Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус - ); + "", Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); // Очищаем не подходящие поля Если СтруктураПроверки.ЕстьОшибки Тогда АдресныйКлассификатор.ОчиститьПотомковПоУровнюАдресногоЭлемента( - Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень - ); + Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); КонецЕсли; // Заполняем или исправляем промежуточные поля @@ -275,8 +270,7 @@ // Проверяем ещё раз и возвращаем структуру ошибок СтруктураПроверки = АдресныйКлассификатор.ПроверитьСоответствиеАдресаКЛАДРу( - "", Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус - ); + "", Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); СтруктураПроверки.Вставить("СтруктураАдреса", СтруктураАдреса); Возврат СтруктураПроверки; diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html index 17e8fdf16..fcdb769a6 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html @@ -1,2 +1,2 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В адресном классификаторе хранятся адресные сведения, необходимые для работы в программе. Для всех регионов РФ имеется возможность <a href="InformationRegister.АдресныйКлассификатор.Form.ЗагрузкаАдресногоКлассификатора/Help">загрузки адресных сведений</a> с сайта поддержки пользователей системы "1С:Предприятие" фирмы "1С", с диска информационно-технологического сопровождения (1С:ИТС), а также из файлов, распространяемых ГНИВЦ ФНС РФ. </p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 6da9e760c..9f8290e5f 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -14,7 +14,6 @@ <key>ru</key> <value>Адресный классификатор</value> </synonym> - <useStandardCommands>true</useStandardCommands> <standardAttributes> <dataHistory>Use</dataHistory> <name>Active</name> @@ -199,8 +198,6 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <indexing>Index</indexing> - <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> <fillValue xsi:type="core:NumberValue"> <value>0</value> diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index e74efd2ff..658340979 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -16,7 +16,7 @@ ЦветКрасноФиолетовый = ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон; Если ТипЗнч(Параметры.СравниваемыеВерсии) = Тип("Массив") Тогда - // номера версий из регистра ВерсииОбъеков для сравнения, + // номера версий из регистра ВерсииОбъектов для сравнения, // или одна версия если отчет по одному объекту СравниваемыеВерсии = Новый ФиксированныйМассив(СортироватьПоВозрастанию(Параметры.СравниваемыеВерсии)); @@ -34,8 +34,8 @@ СтрокаНомераВерсий = Лев(СтрокаНомераВерсий, СтрДлина(СтрокаНомераВерсий) - 2); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сравнение версий объекта ""%1"" (№№ %2)'"), - СсылкаНаОбъект, + НСтр("ru = 'Сравнение версий ""%1"" (№№ %2)'"), + ОбщегоНазначения.ПредметСтрокой(СсылкаНаОбъект), СтрокаНомераВерсий); Иначе Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -123,7 +123,7 @@ Макет = Неопределено; КонецЕсли; - ОписаниеВерсии = ПолучитьОписаниеПоВерсии(ИдентификаторВерсии); + ОписаниеВерсии = ПолучитьОписаниеПоВерсии(ИдентификаторВерсии).Описание; Если Макет = Неопределено Тогда ВерсияОбъекта = РазборВерсии(ИдентификаторВерсии, СсылкаНаОбъект); @@ -135,7 +135,9 @@ // вывод списка изменившихся реквизитов ТЧОтчета.Область("C2").ШиринаКолонки = 30; - ВывестиШапкуПоВерсии(ТЧОтчета, ОписаниеВерсии, 3); + ВывестиШапкуПоВерсии(ТЧОтчета, ОписаниеВерсии, 4, 3); + ВывестиШапкуПоВерсии(ТЧОтчета, ВерсияОбъекта.Комментарий, 5, 3); + ЧислоВыведенныхСтрок = ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта); ЧислоВыведенныхСтрок = ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, ЧислоВыведенныхСтрок+7); Иначе @@ -358,18 +360,22 @@ // Выводит шапку отчета при выводе отчета по версии объекта // -Процедура ВывестиШапкуПоВерсии(ТЧОтчета, знач Текст, знач НомерКолонки) +Процедура ВывестиШапкуПоВерсии(ТЧОтчета, знач Текст, Знач НомерСтроки, Знач НомерКолонки) - ТЧОтчета.Область("C"+Строка(НомерКолонки)).ШиринаКолонки = 50; - - Регион = "R4C"+Строка(НомерКолонки); - ТЧОтчета.Область(Регион).Текст = Текст; - ТЧОтчета.Область(Регион).ЦветФона = ЦветСветлоСерый; - ТЧОтчета.Область(Регион).Шрифт = Новый Шрифт(, 8, Истина, , , ); - ТЧОтчета.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ТЧОтчета.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ТЧОтчета.Область(Регион).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - ТЧОтчета.Область(Регион).ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + Если Не ПустаяСтрока(Текст) Тогда + + ТЧОтчета.Область("C"+Строка(НомерКолонки)).ШиринаКолонки = 50; + + Регион = "R" + Строка(НомерСтроки) + "C"+Строка(НомерКолонки); + ТЧОтчета.Область(Регион).Текст = Текст; + ТЧОтчета.Область(Регион).ЦветФона = ЦветСветлоСерый; + ТЧОтчета.Область(Регион).Шрифт = Новый Шрифт(, 8, Истина, , , ); + ТЧОтчета.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ТЧОтчета.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ТЧОтчета.Область(Регион).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + ТЧОтчета.Область(Регион).ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + + КонецЕсли; КонецПроцедуры @@ -506,9 +512,10 @@ СтрокаТЧ = СсылкаНаВерсиюТаблицы[Индекс-1]; ПараметрыОтбора = Новый Структура; - Для Каждого ЭлементКоллекции Из СсылкаНаВерсиюТаблицы.Колонки Цикл - Если (ЭлементКоллекции.Имя <> "Версионирование_ИдСтроки") И (ЭлементКоллекции.Имя <> "Версионирование_Модификация") Тогда - ПараметрыОтбора.Вставить(ЭлементКоллекции.Имя, СтрокаТЧ[ЭлементКоллекции.Имя]); + ОбщиеКолонки = НайтиОбщиеКолонки(СсылкаНаВерсиюТаблицы, ТаблицаИзмененийТабличныхЧастей[ИмяТаблицы][НомерПредыдущейВерсии]); + Для Каждого ИмяКолонки Из ОбщиеКолонки Цикл + Если (ИмяКолонки <> "Версионирование_ИдСтроки") И (ИмяКолонки <> "Версионирование_Модификация") Тогда + ПараметрыОтбора.Вставить(ИмяКолонки, СтрокаТЧ[ИмяКолонки]); КонецЕсли; КонецЦикла; @@ -537,10 +544,10 @@ // передаем скомпонованную информацию в спец блок для вывода данных в отчет ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, - ТаблицаИзмененийТабличныхЧастей, - счетчикУникальныйИд, - МассивНомеровВерсий, - ТЧОтчета); + ТаблицаИзмененийТабличныхЧастей, + счетчикУникальныйИд, + МассивНомеровВерсий, + ТЧОтчета); ШаблонЛегенда = ОбщийШаблон.ПолучитьОбласть("Легенда"); ТЧОтчета.Вывести(ШаблонЛегенда); @@ -878,18 +885,46 @@ ОбластьВерсии = ОбщийШаблон.ПолучитьОбласть("ЗаголовокВерсии"); ТЧОтчета.Присоединить(ПустаяЯчейка); ТЧОтчета.Присоединить(ОбластьВерсии); - ОбластьВерсии = ОбщийШаблон.ПолучитьОбласть("ПредставлениеВерсии"); + КомментарииКВерсиям = Новый Структура; + ЕстьКомментарии = Ложь; + ИндексПоВерсиям = ЧислоВерсий; Пока ИндексПоВерсиям > 0 Цикл - ОбластьВерсии.Параметры.ПредставлениеВерсии = - ПолучитьОписаниеПоВерсии(МассивНомеровВерсий[ИндексПоВерсиям-1]); + + СведенияОВерсии = ПолучитьОписаниеПоВерсии(МассивНомеровВерсий[ИндексПоВерсиям-1]); + ОбластьВерсии.Параметры.ПредставлениеВерсии = СведенияОВерсии.Описание; + + КомментарииКВерсиям.Вставить("Комментарий" + ИндексПоВерсиям, СведенияОВерсии.Комментарий); + Если Не ПустаяСтрока(СведенияОВерсии.Комментарий) Тогда + ЕстьКомментарии = Истина; + КонецЕсли; + ТЧОтчета.Присоединить(ОбластьВерсии); ТЧОтчета.Область("C"+Строка(ИндексПоВерсиям+2)).ШиринаКолонки = 50; ИндексПоВерсиям = ИндексПоВерсиям - 1; + КонецЦикла; + Если ЕстьКомментарии Тогда + + ОбластьКомментарий = ОбщийШаблон.ПолучитьОбласть("ЗаголовокКомментарий"); + ТЧОтчета.Вывести(ПустаяЯчейка); + ТЧОтчета.Присоединить(ОбластьКомментарий); + ОбластьКомментарий = ОбщийШаблон.ПолучитьОбласть("Комментарий"); + + ИндексПоВерсиям = ЧислоВерсий; + Пока ИндексПоВерсиям > 0 Цикл + + ОбластьКомментарий.Параметры.Комментарий = КомментарииКВерсиям["Комментарий" + ИндексПоВерсиям]; + ТЧОтчета.Присоединить(ОбластьКомментарий); + ИндексПоВерсиям = ИндексПоВерсиям - 1; + + КонецЦикла; + + КонецЕсли; + ОбластьСвободнаяСтрока = ОбщийШаблон.ПолучитьОбласть("СвободнаяСтрока"); ТЧОтчета.Вывести(ОбластьСвободнаяСтрока); @@ -1173,6 +1208,7 @@ Результат.Вставить("ИмяОбъекта", Строка(Ссылка)); Результат.Вставить("АвторИзменения", СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); Результат.Вставить("ДатаИзменения", СведенияОВерсии.ДатаВерсии); + Результат.Вставить("Комментарий", СведенияОВерсии.Комментарий); Возврат Результат; @@ -1600,7 +1636,9 @@ СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии, Строка(СведенияОВерсии.ДатаВерсии), СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); - Возврат Описание; + СведенияОВерсии.Вставить("Описание", Описание); + + Возврат СведенияОВерсии; КонецФункции @@ -2089,6 +2127,9 @@ &НаСервере Функция СтрокиИмеютРазличия(Строка1, Строка2, ПроверяемыеКолонки) Для Каждого Колонка Из ПроверяемыеКолонки Цикл + Если ТипЗнч(Строка1[Колонка]) = Тип("ХранилищеЗначения") Тогда + Продолжить; // реквизиты с типом ХранилищеЗначения не сравниваем. + КонецЕсли; Если Строка1[Колонка] <> Строка2[Колонка] Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx index f4d3a8360..bfed345da 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx @@ -126,10 +126,38 @@ <c> <c> <f>0</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Комментарий</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>14</f> + <parameter>Комментарий</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <c> + <c> + <f>0</f> + <tl/> <note> <drawingType>Text</drawingType> <id>0</id> - <formatIndex>13</formatIndex> + <formatIndex>15</formatIndex> <text> <v8:item> <v8:lang>ru</v8:lang> @@ -138,7 +166,7 @@ </text> <beginRow>1</beginRow> <beginRowOffset>-21</beginRowOffset> - <endRow>5</endRow> + <endRow>6</endRow> <endRowOffset>51</endRowOffset> <beginColumn>1</beginColumn> <beginColumnOffset>21</beginColumnOffset> @@ -153,12 +181,13 @@ <c> <c> <f>10</f> + <tl/> </c> </c> </row> </rowsItem> <rowsItem> - <index>6</index> + <index>7</index> <row> <c> <i>1</i> @@ -174,26 +203,6 @@ </c> </row> </rowsItem> - <rowsItem> - <index>8</index> - <row> - <c> - <c> - <f>3</f> - </c> - </c> - <c> - <c> - <f>14</f> - </c> - </c> - <c> - <c> - <f>0</f> - </c> - </c> - </row> - </rowsItem> <rowsItem> <index>9</index> <row> @@ -204,7 +213,7 @@ </c> <c> <c> - <f>14</f> + <f>16</f> </c> </c> <c> @@ -224,18 +233,12 @@ </c> <c> <c> - <f>14</f> + <f>16</f> </c> </c> <c> <c> - <f>15</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Не изменялись</v8:content> - </v8:item> - </tl> + <f>0</f> </c> </c> </row> @@ -250,12 +253,18 @@ </c> <c> <c> - <f>14</f> + <f>16</f> </c> </c> <c> <c> - <f>0</f> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Не изменялись</v8:content> + </v8:item> + </tl> </c> </c> </row> @@ -271,13 +280,11 @@ <c> <c> <f>16</f> - <parameter>НаименованиеРеквизитаПоля</parameter> </c> </c> <c> <c> - <f>17</f> - <parameter>ЗначениеРеквизита</parameter> + <f>0</f> </c> </c> </row> @@ -286,9 +293,14 @@ <index>13</index> <row> <c> - <i>1</i> + <c> + <f>3</f> + </c> + </c> + <c> <c> <f>18</f> + <parameter>НаименованиеРеквизитаПоля</parameter> </c> </c> <c> @@ -304,25 +316,8 @@ <row> <c> <i>1</i> - <c> - <f>18</f> - </c> - </c> - <c> <c> <f>20</f> - <parameter>ЗначениеРеквизита</parameter> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>15</index> - <row> - <c> - <i>1</i> - <c> - <f>18</f> </c> </c> <c> @@ -334,7 +329,41 @@ </row> </rowsItem> <rowsItem> - <index>17</index> + <index>15</index> + <row> + <c> + <i>1</i> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>22</f> + <parameter>ЗначениеРеквизита</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <c> + <i>1</i> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>ЗначениеРеквизита</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> <row> <c> <i>1</i> @@ -351,7 +380,7 @@ </row> </rowsItem> <rowsItem> - <index>18</index> + <index>19</index> <row> <c> <i>1</i> @@ -362,24 +391,24 @@ </row> </rowsItem> <rowsItem> - <index>19</index> + <index>20</index> <row> <c> <i>1</i> <c> - <f>22</f> + <f>24</f> <parameter>НаименованиеТабличнойЧасти</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>21</index> + <index>22</index> <row> <c> <i>1</i> <c> - <f>23</f> + <f>25</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -390,35 +419,6 @@ </c> </row> </rowsItem> - <rowsItem> - <index>23</index> - <row> - <columnsID>0a84e64e-bded-4ad6-99ae-d67a7e3710ec</columnsID> - <c> - <i>1</i> - <c> - <f>24</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Легенда</v8:content> - </v8:item> - </tl> - </c> - </c> - <c> - <c> - <f>0</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content> </v8:content> - </v8:item> - </tl> - </c> - </c> - </row> - </rowsItem> <rowsItem> <index>24</index> <row> @@ -426,11 +426,11 @@ <c> <i>1</i> <c> - <f>25</f> + <f>26</f> <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Измененное значение реквизита или строка табличной части</v8:content> + <v8:content>Легенда</v8:content> </v8:item> </tl> </c> @@ -455,11 +455,11 @@ <c> <i>1</i> <c> - <f>26</f> + <f>27</f> <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Новое значение реквизита или строка табличной части</v8:content> + <v8:content>Измененное значение реквизита или строка табличной части</v8:content> </v8:item> </tl> </c> @@ -484,7 +484,36 @@ <c> <i>1</i> <c> - <f>27</f> + <f>28</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Новое значение реквизита или строка табличной части</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>0</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content> </v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <columnsID>0a84e64e-bded-4ad6-99ae-d67a7e3710ec</columnsID> + <c> + <i>1</i> + <c> + <f>29</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -508,14 +537,14 @@ </rowsItem> <templateMode>true</templateMode> <defaultFormatIndex>3</defaultFormatIndex> - <height>27</height> - <vgRows>27</vgRows> + <height>28</height> + <vgRows>28</vgRows> <namedItem xsi:type="NamedItemCells"> <name>ДобавленныйРеквизит</name> <area> <type>Rectangle</type> - <beginRow>14</beginRow> - <endRow>14</endRow> + <beginRow>15</beginRow> + <endRow>15</endRow> <beginColumn>2</beginColumn> <endColumn>2</endColumn> </area> @@ -530,8 +559,28 @@ <endColumn>1</endColumn> </area> </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЗаголовокКомментарий</name> + <area> + <type>Rectangle</type> + <beginRow>5</beginRow> + <endRow>5</endRow> + <beginColumn>1</beginColumn> + <endColumn>1</endColumn> + </area> + </namedItem> <namedItem xsi:type="NamedItemCells"> <name>ИзмененноеЗначениеРеквизита</name> + <area> + <type>Rectangle</type> + <beginRow>14</beginRow> + <endRow>14</endRow> + <beginColumn>2</beginColumn> + <endColumn>2</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИсходноеЗначениеРеквизита</name> <area> <type>Rectangle</type> <beginRow>13</beginRow> @@ -541,11 +590,11 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>ИсходноеЗначениеРеквизита</name> + <name>Комментарий</name> <area> <type>Rectangle</type> - <beginRow>12</beginRow> - <endRow>12</endRow> + <beginRow>5</beginRow> + <endRow>5</endRow> <beginColumn>2</beginColumn> <endColumn>2</endColumn> </area> @@ -554,8 +603,8 @@ <name>Легенда</name> <area> <type>Rows</type> - <beginRow>23</beginRow> - <endRow>26</endRow> + <beginRow>24</beginRow> + <endRow>27</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -564,8 +613,8 @@ <name>НаименованиеРеквизитаПоля</name> <area> <type>Rectangle</type> - <beginRow>12</beginRow> - <endRow>12</endRow> + <beginRow>13</beginRow> + <endRow>13</endRow> <beginColumn>1</beginColumn> <endColumn>1</endColumn> </area> @@ -594,8 +643,8 @@ <name>РеквизитыНеИзменялись</name> <area> <type>Rows</type> - <beginRow>10</beginRow> - <endRow>10</endRow> + <beginRow>11</beginRow> + <endRow>11</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -604,8 +653,8 @@ <name>СвободнаяСтрока</name> <area> <type>Rows</type> - <beginRow>8</beginRow> - <endRow>8</endRow> + <beginRow>9</beginRow> + <endRow>9</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -614,8 +663,8 @@ <name>УдаленныйРеквизит</name> <area> <type>Rectangle</type> - <beginRow>15</beginRow> - <endRow>15</endRow> + <beginRow>16</beginRow> + <endRow>16</endRow> <beginColumn>2</beginColumn> <endColumn>2</endColumn> </area> @@ -634,8 +683,8 @@ <name>ШапкаРеквизитов</name> <area> <type>Rows</type> - <beginRow>6</beginRow> - <endRow>6</endRow> + <beginRow>7</beginRow> + <endRow>7</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -644,8 +693,8 @@ <name>ШапкаСтрокиТабличнойЧасти</name> <area> <type>Rows</type> - <beginRow>21</beginRow> - <endRow>21</endRow> + <beginRow>22</beginRow> + <endRow>22</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -654,8 +703,8 @@ <name>ШапкаТабличнойЧасти</name> <area> <type>Rows</type> - <beginRow>19</beginRow> - <endRow>19</endRow> + <beginRow>20</beginRow> + <endRow>20</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -664,8 +713,8 @@ <name>ШапкаТабличныхЧастей</name> <area> <type>Rows</type> - <beginRow>17</beginRow> - <endRow>17</endRow> + <beginRow>18</beginRow> + <endRow>18</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> @@ -752,6 +801,16 @@ <backColor>style:FormBackColor</backColor> <fillType>Parameter</fillType> </format> + <format> + <font>2</font> + <horizontalAlignment>Left</horizontalAlignment> + <textOrientation>0</textOrientation> + </format> + <format> + <border>0</border> + <backColor>style:FormBackColor</backColor> + <fillType>Parameter</fillType> + </format> <format> <verticalAlignment>Top</verticalAlignment> <textColor>style:ToolTipTextColor</textColor> diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 7a685a69a..4628cfd00 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -186,10 +186,7 @@ <value>Объект</value> </synonym> <type> - <types>String</types> - <stringQualifiers> - <length>10</length> - </stringQualifiers> + <types>AnyRef</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Attributes/Список/ExtInfo/ListSettings.dcss index 5c29d4e48..e0a1b149c 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> - <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Завершен</left> - <comparisonType>Equal</comparisonType> - <right xsi:type="xs:boolean">false</right> - </item> <viewMode>Normal</viewMode> <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl index c4a89bae6..594d741de 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl @@ -10,8 +10,8 @@ УстановитьОтбор(Новый Структура("ПоказыватьЗавершенные", ПоказыватьЗавершенные)); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "Автор", Пользователи.ТекущийПользователь()); - + Список, "Автор", Пользователи.ТекущийПользователь()); + КонецПроцедуры &НаКлиенте @@ -25,7 +25,7 @@ Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) УстановитьОтбор(Настройки); - + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -81,11 +81,12 @@ &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Завершен"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Завершен"); Если НЕ ПараметрыОтбора["ПоказыватьЗавершенные"] Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "Завершен", Ложь); + Список, "Завершен", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html index 1c475e863..978b615b9 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке выводятся <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессы</a>, в которых автором является текущий пользователь. Установив соответствующий флаг, можно вывести в списке также завершенные бизнес-процессы. </p> <h4>См. также</h4> <ul><li><a href="BusinessProcess.Задание/Help">Задания</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 96b084249..a60287978 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -4747,4 +4747,369 @@ <Item Calendar="РФ" Year="2013" DayType="Воскресенье" Date="20131229" SwapDate=""/> <Item Calendar="РФ" Year="2013" DayType="Рабочий" Date="20131230" SwapDate=""/> <Item Calendar="РФ" Year="2013" DayType="Предпраздничный" Date="20131231" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140101" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140102" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140103" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140104" SwapDate="20140502"/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140105" SwapDate="20140613"/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140106" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140107" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140108" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140109" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140110" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140111" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140112" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140113" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140114" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140115" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140116" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140117" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140118" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140119" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140120" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140121" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140122" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140123" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140124" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140125" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140126" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140127" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140128" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140129" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140130" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140131" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140201" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140202" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140203" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140204" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140205" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140206" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140207" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140208" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140209" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140210" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140211" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140212" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140213" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140214" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140215" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140216" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140217" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140218" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140219" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140220" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140221" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140222" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140223" SwapDate="20141103"/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140224" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140225" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140226" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140227" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140228" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140301" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140302" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140303" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140304" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140305" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140306" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Предпраздничный" Date="20140307" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140308" SwapDate="20140310"/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140309" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140310" SwapDate="20140308"/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140311" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140312" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140313" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140314" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140315" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140316" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140317" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140318" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140319" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140320" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140321" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140322" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140323" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140324" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140325" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140326" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140327" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140328" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140329" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140330" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140331" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140401" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140402" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140403" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140404" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140405" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140406" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140407" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140408" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140409" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140410" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140411" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140412" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140413" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140414" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140415" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140416" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140417" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140418" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140419" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140420" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140421" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140422" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140423" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140424" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140425" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140426" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140427" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140428" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140429" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Предпраздничный" Date="20140430" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140501" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140502" SwapDate="20140104"/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140503" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140504" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140505" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140506" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140507" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Предпраздничный" Date="20140508" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140509" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140510" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140511" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140512" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140513" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140514" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140515" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140516" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140517" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140518" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140519" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140520" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140521" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140522" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140523" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140524" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140525" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140526" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140527" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140528" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140529" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140530" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140531" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140601" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140602" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140603" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140604" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140605" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140606" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140607" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140608" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140609" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140610" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Предпраздничный" Date="20140611" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20140612" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140613" SwapDate="20140105"/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140614" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140615" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140616" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140617" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140618" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140619" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140620" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140621" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140622" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140623" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140624" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140625" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140626" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140627" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140628" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140629" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140630" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140701" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140702" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140703" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140704" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140705" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140706" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140707" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140708" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140709" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140710" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140711" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140712" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140713" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140714" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140715" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140716" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140717" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140718" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140719" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140720" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140721" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140722" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140723" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140724" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140725" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140726" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140727" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140728" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140729" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140730" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140731" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140801" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140802" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140803" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140804" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140805" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140806" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140807" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140808" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140809" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140810" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140811" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140812" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140813" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140814" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140815" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140816" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140817" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140818" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140819" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140820" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140821" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140822" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140823" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140824" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140825" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140826" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140827" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140828" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140829" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140830" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140831" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140901" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140902" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140903" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140904" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140905" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140906" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140907" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140908" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140909" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140910" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140911" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140912" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140913" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140914" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140915" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140916" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140917" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140918" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140919" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140920" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140921" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140922" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140923" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140924" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140925" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140926" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20140927" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20140928" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140929" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20140930" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141001" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141002" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141003" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141004" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141005" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141006" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141007" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141008" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141009" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141010" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141011" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141012" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141013" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141014" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141015" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141016" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141017" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141018" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141019" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141020" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141021" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141022" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141023" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141024" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141025" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141026" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141027" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141028" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141029" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141030" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141031" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141101" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141102" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141103" SwapDate="20140223"/> + <Item Calendar="РФ" Year="2014" DayType="Праздник" Date="20141104" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141105" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141106" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141107" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141108" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141109" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141110" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141111" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141112" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141113" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141114" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141115" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141116" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141117" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141118" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141119" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141120" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141121" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141122" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141123" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141124" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141125" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141126" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141127" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141128" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141129" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141130" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141201" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141202" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141203" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141204" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141205" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141206" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141207" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141208" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141209" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141210" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141211" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141212" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141213" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141214" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141215" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141216" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141217" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141218" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141219" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141220" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141221" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141222" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141223" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141224" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141225" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141226" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Суббота" Date="20141227" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Воскресенье" Date="20141228" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141229" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Рабочий" Date="20141230" SwapDate=""/> + <Item Calendar="РФ" Year="2014" DayType="Предпраздничный" Date="20141231" SwapDate=""/> </Items> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index e222bf44b..60ebb141d 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -3036,6 +3036,10 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> + <handlers> + <event>ChoiceProcessing</event> + <name>ОбработкаВыбора</name> + </handlers> <handlers> <event>BeforeClose</event> <name>ПередЗакрытием</name> diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 7bf08db7c..a30084855 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -13,7 +13,8 @@ СвойстваРазделов = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); ЗаполнитьЗначенияСвойств(ЭтаФорма, СвойстваРазделов, , "ТипыОбъектовРазделов"); ЗначениеВРеквизитФормы(СвойстваРазделов.ТипыОбъектовРазделов, "ТипыОбъектовРазделов"); - ПервыйРаздел = ?(ТипыОбъектовРазделов.Количество() = 1, ТипыОбъектовРазделов[0].Раздел, РазделПустаяСсылка); + ПервыйРаздел = ?( + ТипыОбъектовРазделов.Количество() = 1, ТипыОбъектовРазделов[0].Раздел, РазделПустаяСсылка); // Настройка полей формы Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда @@ -30,61 +31,119 @@ Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("ПоПользователям").Представление = НСтр("ru = 'По информационным базам'"); // - Элементы.Отчеты.Подсказка = НСтр("ru = 'Отчеты по датам запрета загрузки данных, - |установленным ""По информационным базам"".'"); - Команды.ДатыЗапретаПоПользователям.Заголовок = НСтр("ru = 'Даты запрета по информационным базам'"); - Команды.ДатыЗапретаПоПользователям.Подсказка = НСтр("ru = 'Даты запрета загрузки данных - |по информационным базам и программам.'"); - Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = НСтр("ru = 'Даты запрета по разделам и объектам для информационных баз'"); - Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Подсказка = НСтр("ru = 'Даты запрета загрузки данных - |по разделам и объектам для информационных баз и программ.'"); - // - Элементы.ПользователиПолноеПредставление.Заголовок = НСтр("ru = 'Программа: информационная база'"); - // - ЗначениеДляВсехПользователей = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз; - Для каждого ТипПользователя Из Метаданные.РегистрыСведений.ДатыЗапретаИзменения.Измерения.Пользователь.Тип.Типы() Цикл + Элементы.Отчеты.Подсказка + = НСтр("ru = 'Отчеты по датам запрета загрузки данных, + |установленным ""По информационным базам"".'"); + + Команды.ДатыЗапретаПоПользователям.Заголовок + = НСтр("ru = 'Даты запрета по информационным базам'"); + + Команды.ДатыЗапретаПоПользователям.Подсказка + = НСтр("ru = 'Даты запрета загрузки данных + |по информационным базам и программам.'"); + + Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = + НСтр("ru = 'Даты запрета по разделам и объектам для информационных баз'"); + + Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Подсказка = + НСтр("ru = 'Даты запрета загрузки данных + |по разделам и объектам для информационных баз и программ.'"); + + Элементы.ПользователиПолноеПредставление.Заголовок = + НСтр("ru = 'Программа: информационная база'"); + + ЗначениеДляВсехПользователей = + Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз; + + ТипыПользователя = + Метаданные.РегистрыСведений.ДатыЗапретаИзменения.Измерения.Пользователь.Тип.Типы(); + + Для каждого ТипПользователя Из ТипыПользователя Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипПользователя); Если НЕ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда Продолжить; КонецЕсли; - ПустаяСсылкаУзлаПланаОбмена = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка(); - СписокТиповПользователей.Добавить(ПустаяСсылкаУзлаПланаОбмена, ОбъектМетаданных.Представление()); + ПустаяСсылкаУзлаПланаОбмена = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка(); + + СписокТиповПользователей.Добавить( + ПустаяСсылкаУзлаПланаОбмена, ОбъектМетаданных.Представление()); КонецЦикла; Элементы.Пользователи.КартинкаСтрок = БиблиотекаКартинок.ПиктограммыПланОбменаУзел; Иначе ЗначениеДляВсехПользователей = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи"), НСтр("ru = 'Пользователь'")); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи"), НСтр("ru = 'Внешний пользователь'")); + + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.Пользователи"), НСтр("ru = 'Пользователь'")); + + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.ВнешниеПользователи"), НСтр("ru = 'Внешний пользователь'")); КонецЕсли; Список = Элементы.СпособУказанияДатыЗапрета.СписокВыбора; Если БезРазделовИОбъектов Тогда - Элементы.СпособУказанияДатыЗапрета.Видимость = ЗначениеЗаполнено(ТекущийСпособУказанияДатыЗапрета("*", ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей)); + Элементы.СпособУказанияДатыЗапрета.Видимость = + ЗначениеЗаполнено(ТекущийСпособУказанияДатыЗапрета( + "*", ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей)); + Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоРазделам")); Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); ИначеЕсли НЕ ПоказыватьРазделы Тогда - Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоОбъектам(); + Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = + ТекстЗаголовкаКомандыОтчетПоОбъектам(); + Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоРазделам")); ИначеЕсли ВсеРазделыБезОбъектов Тогда - Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоРазделам(); + Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = + ТекстЗаголовкаКомандыОтчетПоРазделам(); + Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); Иначе Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); КонецЕсли; - ИспользоватьВнешнихПользователей = ИспользоватьВнешнихПользователей И ВнешниеПользователи.ИспользоватьВнешнихПользователей(); - СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); + ИспользоватьВнешнихПользователей = ИспользоватьВнешнихПользователей + И ВнешниеПользователи.ИспользоватьВнешнихПользователей(); + + СправочникВнешниеПользователиДоступен = + ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); ОбновитьНаСервере(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) + = ВРег("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета") Тогда + + Если ВыбранноеЗначение <> Неопределено Тогда + ВыделенныеСтроки = Элементы.ДатыЗапрета.ВыделенныеСтроки; + + Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Строка = ДатыЗапрета.НайтиПоИдентификатору(ВыделеннаяСтрока); + Строка.ОписаниеДатыЗапрета = ВыбранноеЗначение.ОписаниеДатыЗапрета; + Строка.КоличествоДнейРазрешения = ВыбранноеЗначение.КоличествоДнейРазрешения; + Строка.ДатаЗапрета = ВыбранноеЗначение.ДатаЗапрета; + ЗаписатьОписаниеИДатуЗапрета(Строка); + Строка.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(Строка); + КонецЦикла; + ОбновитьНаличиеДатЗапретаТекущегоПользователя(); + КонецЕсли; + + // Отмена блокировки выделенных строк + РазблокироватьВсеЗаписи(ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -92,7 +151,8 @@ Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, , , ТекстВопроса + Символы.ПС + ТекстВопросаЗакрытьФорму()); + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы( + Отказ, , , ТекстВопроса + Символы.ПС + ТекстВопросаЗакрытьФорму()); КонецЕсли; @@ -126,13 +186,19 @@ ТекущаяУстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); - Если ТекущаяУстановкаДатыЗапрета = "ПоПользователям" И ВыбранноеЗначение = "ДляВсехПользователей" Тогда + Если ТекущаяУстановкаДатыЗапрета = "ПоПользователям" + И ВыбранноеЗначение = "ДляВсехПользователей" Тогда + ТекстВопроса = ТекстВопросаУдалитьВсеДатыЗапретаКромеДатДляВсехПользователей(); - ИначеЕсли ТекущаяУстановкаДатыЗапрета = "ПоПользователям" И ВыбранноеЗначение = "НетЗапрета" Тогда + ИначеЕсли ТекущаяУстановкаДатыЗапрета = "ПоПользователям" + И ВыбранноеЗначение = "НетЗапрета" Тогда + ТекстВопроса = ТекстВопросаУдалитьВсеДатыЗапрета(); - ИначеЕсли ТекущаяУстановкаДатыЗапрета = "ДляВсехПользователей" И ВыбранноеЗначение = "НетЗапрета" Тогда + ИначеЕсли ТекущаяУстановкаДатыЗапрета = "ДляВсехПользователей" + И ВыбранноеЗначение = "НетЗапрета" Тогда + ТекстВопроса = ТекстВопросаУдалитьВсеДатыЗапрета(); КонецЕсли; @@ -307,7 +373,7 @@ Если Поле = Элементы.ПользователиПолноеПредставление Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ТекстСообщенияЗначениеДляВсехПользователейНеИзменяется()); - // + ИначеЕсли Поле = Элементы.ПользователиКомментарий Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ТекстСообщенияКомментарийДляВсехПользователейНеИзменяется()); @@ -318,14 +384,17 @@ // Все значения, кроме преопределенного значения "<Для всех пользователей>", // должны быть заполнены до установки описания или даты запрета Элемент.ТекущийЭлемент = Элементы.ПользователиПолноеПредставление; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияСначалаВыберитеПользователя()); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ТекстСообщенияСначалаВыберитеПользователя()); КонецЕсли; Если Отказ Тогда Элементы.ПользователиПолноеПредставление.ТолькоПросмотр = Ложь; Элементы.ПользователиКомментарий.ТолькоПросмотр = Ложь; Иначе - Элементы.ПользователиКомментарий.ТолькоПросмотр = НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление); + Элементы.ПользователиКомментарий.ТолькоПросмотр = + НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление); + Если ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда ЗаблокироватьНаборЗаписейПользователя(ТекущиеДанные.Пользователь, Элемент.ТекущаяСтрока); КонецЕсли; @@ -453,10 +522,15 @@ Для каждого Значение Из ВыбранноеЗначение Цикл Отбор.Пользователь = Значение; Если ПользователиДатЗапрета.НайтиСтроки(Отбор).Количество() = 0 Тогда - ЗаблокироватьИЗаписатьПустыеДаты(РазделПустаяСсылка, РазделПустаяСсылка, Отбор.Пользователь, ""); + ЗаблокироватьИЗаписатьПустыеДаты( + РазделПустаяСсылка, РазделПустаяСсылка, Отбор.Пользователь, ""); + ОписаниеПользователя = ПользователиДатЗапрета.Добавить(); - ОписаниеПользователя.Пользователь = Отбор.Пользователь; - ОписаниеПользователя.Представление = ТекстПредставленияПользователя(ЭтаФорма, Отбор.Пользователь); + ОписаниеПользователя.Пользователь = Отбор.Пользователь; + + ОписаниеПользователя.Представление = ТекстПредставленияПользователя( + ЭтаФорма, Отбор.Пользователь); + ОписаниеПользователя.ПолноеПредставление = ОписаниеПользователя.Представление; КонецЕсли; КонецЦикла; @@ -725,8 +799,11 @@ // Блокировка записи перед редактированием Если ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда - ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя(ЭтаФорма, ТекущийРаздел(), ТекущиеДанные.Объект, ТекущийПользователь); - ОбновитьЗначенияПрочитанныхСвойств(ТекущиеДанные, ПрочитанныеСвойства, Элементы.Пользователи.ТекущиеДанные); + ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя( + ЭтаФорма, ТекущийРаздел(), ТекущиеДанные.Объект, ТекущийПользователь); + + ОбновитьЗначенияПрочитанныхСвойств( + ТекущиеДанные, ПрочитанныеСвойства, Элементы.Пользователи.ТекущиеДанные); КонецЕсли; Если ОткрытьФормуРедактированияДатыЗапрета Тогда @@ -744,10 +821,13 @@ Элементы.ДатыЗапретаДатаЗапрета.ТолькоПросмотр = Ложь; Иначе // Блокировка недоступных полей - Элементы.ДатыЗапретаПолноеПредставление.ТолькоПросмотр = ЗначениеЗаполнено(ТекущиеДанные.Представление); + Элементы.ДатыЗапретаПолноеПредставление.ТолькоПросмотр = + ЗначениеЗаполнено(ТекущиеДанные.Представление); + Элементы.ДатыЗапретаОписаниеДатыЗапретаПредставление.ТолькоПросмотр = Истина; - Элементы.ДатыЗапретаДатаЗапрета.ТолькоПросмотр = НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление) - ИЛИ ТекущиеДанные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата"; + Элементы.ДатыЗапретаДатаЗапрета.ТолькоПросмотр = + НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление) + ИЛИ ТекущиеДанные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата"; КонецЕсли; КонецПроцедуры @@ -800,7 +880,8 @@ ТекущиеДанные.ДатаЗапрета = '00000000'; ТекущиеДанные.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; Если Отказ Тогда - ТекущиеДанные.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(ТекущиеДанные); + ТекущиеДанные.ОписаниеДатыЗапретаПредставление = + ПредставлениеОписанияДатыЗапрета(ТекущиеДанные); КонецЕсли; ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); Иначе @@ -848,8 +929,9 @@ ИЛИ НЕ Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; КонецЕсли; - Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапретаПредставление - = ПредставлениеОписанияДатыЗапрета(Элементы.ДатыЗапрета.ТекущиеДанные); + Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапретаПредставление = + ПредставлениеОписанияДатыЗапрета(Элементы.ДатыЗапрета.ТекущиеДанные); + ПодключитьОбработчикОжидания("ОбработчикОжиданияВыбратьОбъекты", 0.1, Истина); КонецЕсли; @@ -882,15 +964,15 @@ СтандартнаяОбработка = Ложь; ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - // + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Объект = ВыбранноеЗначение Тогда - // + Возврат; КонецЕсли; ИдентификаторРаздела = Неопределено; - // + Если ПоказыватьРазделыТекущегоПользователя Тогда Родитель = ТекущиеДанные.ПолучитьРодителя(); Если Родитель = Неопределено Тогда @@ -926,11 +1008,16 @@ КонецЦикла; Если ОбъектыДляДобавления.Количество() > 0 Тогда + Если ТекущийПользователь <> Неопределено Тогда Комментарий = КомментарийТекущегоПользователя(ЭтаФорма); - ЗаблокироватьИЗаписатьПустыеДаты(ТекущийРаздел(, Истина), ОбъектыДляДобавления, ТекущийПользователь, Комментарий); + + ЗаблокироватьИЗаписатьПустыеДаты( + ТекущийРаздел(, Истина), ОбъектыДляДобавления, ТекущийПользователь, Комментарий); + ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); КонецЕсли; + Для каждого ТекущийОбъект Из ОбъектыДляДобавления Цикл ОписаниеОбъекта = КоллекцияОбъектов.Добавить(); ОписаниеОбъекта.Раздел = ТекущийРаздел(, Истина); @@ -938,9 +1025,11 @@ ОписаниеОбъекта.Представление = Строка(Объект); ОписаниеОбъекта.ПолноеПредставление = ОписаниеОбъекта.Представление; ОписаниеОбъекта.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; + ОписаниеОбъекта.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(ОписаниеОбъекта); КонецЦикла; + Если ИдентификаторРаздела <> Неопределено Тогда Элементы.ДатыЗапрета.Развернуть(ИдентификаторРаздела, Истина); КонецЕсли; @@ -996,20 +1085,26 @@ // Если ЗначениеНеНайдено Тогда Если ТекущиеДанные.Объект <> ВыбранноеЗначение Тогда - ЗначенияСвойств = ПолучитьТекущиеЗначенияСвойств(ТекущиеДанные, Элементы.Пользователи.ТекущиеДанные); + + ЗначенияСвойств = ПолучитьТекущиеЗначенияСвойств( + ТекущиеДанные, Элементы.Пользователи.ТекущиеДанные); + Если НЕ ЗаменитьОбъектВЗаписиПользователяНаСервере( ТекущиеДанные.Раздел, ТекущиеДанные.Объект, ВыбранноеЗначение, ТекущийПользователь, ЗначенияСвойств) Тогда - // - Предупреждение(ТекстСообщенияЗначениеУжеДобавленоВСписок() - + Символы.ПС - + ТекстСообщенияОбновитьДанныеФормыF5()); + + Предупреждение( + ТекстСообщенияЗначениеУжеДобавленоВСписок() + + Символы.ПС + + ТекстСообщенияОбновитьДанныеФормыF5()); Возврат; Иначе - ОбновитьЗначенияПрочитанныхСвойств(ТекущиеДанные, ЗначенияСвойств, Элементы.Пользователи.ТекущиеДанные); + ОбновитьЗначенияПрочитанныхСвойств( + ТекущиеДанные, ЗначенияСвойств, Элементы.Пользователи.ТекущиеДанные); + ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.ДатыЗапретаИзменения")); КонецЕсли; КонецЕсли; @@ -1094,7 +1189,8 @@ Процедура ПодобратьОбъекты(Команда) Если ТекущийПользователь = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияСначалаВыберитеПользователя()); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ТекстСообщенияСначалаВыберитеПользователя()); Возврат; КонецЕсли; @@ -1160,7 +1256,8 @@ Функция ПересчитатьДатыНаСервере() ОписаниеРезультата = ""; - ДатыЗапретаИзмененияСлужебный.ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(Ложь, ОписаниеРезультата); + ДатыЗапретаИзмененияСлужебный.ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета( + Ложь, ОписаниеРезультата); ОбновитьНаСервере(); @@ -1214,21 +1311,32 @@ КонецЕсли; Если НЕ ПроверкаНесохраненныхЗаписей() Тогда - ПодключитьОбработчикОжидания("ПользователиВосстановитьТекущуюСтрокуПослеОтказаПриАктивизацииСтроки", 0.1, Истина); + ПодключитьОбработчикОжидания( + "ПользователиВосстановитьТекущуюСтрокуПослеОтказаПриАктивизацииСтроки", 0.1, Истина); Возврат; КонецЕсли; - СпособУказанияЗначениеВСписке = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияДатыЗапрета); - Если ТекущийПользователь <> Неопределено И СпособУказанияЗначениеВСписке <> Неопределено Тогда - ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей); - ТекущийСпособУказания = ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); + СпособУказанияЗначениеВСписке = + Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияДатыЗапрета); + + Если ТекущийПользователь <> Неопределено + И СпособУказанияЗначениеВСписке <> Неопределено Тогда + + ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета( + ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей); + + ТекущийСпособУказания = + ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); + СпособУказанияДатыЗапрета = ТекущийСпособУказания; Если ТекущийСпособУказания <> СпособУказанияЗначениеВСписке.Значение Тогда + + ЭлементСписка = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению( + ТекущийСпособУказания); + Предупреждение(ТекстСообщенияСпособУказанияНеИспользован( СпособУказанияЗначениеВСписке.Представление, - ?(Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания) = Неопределено, - ТекущийСпособУказания, - Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания).Представление))); + ?(ЭлементСписка = Неопределено, ТекущийСпособУказания, ЭлементСписка.Представление))); КонецЕсли; КонецЕсли; @@ -1256,10 +1364,11 @@ Отбор = Новый Структура("Пользователь", ТекущийПользователь); НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда ТекстВопроса = ТекстВопросаОНесохраненныхДанных(Истина); Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОчиститьНезаполненыеСтроки(); + ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОчиститьНезаполненныеСтроки(); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда ПользователиТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); @@ -1281,7 +1390,7 @@ НачатьТранзакцию(); Попытка Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); + Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -1374,21 +1483,32 @@ Если Контекст.УстановкаДатыЗапрета = "НетЗапрета" Тогда - // + РазблокироватьВсеЗаписи(Контекст); Возврат; - // + ИначеЕсли Контекст.УстановкаДатыЗапрета = "ПоПользователям" Тогда - НайденныеСтроки = Контекст.ПользователиДатЗапрета.НайтиСтроки(Новый Структура("Пользователь", Контекст.ТекущийПользователь)); + + НайденныеСтроки = Контекст.ПользователиДатЗапрета.НайтиСтроки( + Новый Структура("Пользователь", Контекст.ТекущийПользователь)); + Если НайденныеСтроки.Количество() > 0 Тогда Контекст.ТекущийПользовательПредставление = НайденныеСтроки[0].Представление; КонецЕсли; КонецЕсли; - Контекст.Элементы.ДанныеПользователя.ТекущаяСтраница = Контекст.Элементы.СтраницаПользовательВыбран; + + Контекст.Элементы.ДанныеПользователя.ТекущаяСтраница = + Контекст.Элементы.СтраницаПользовательВыбран; + Контекст.ДатыЗапрета.ПолучитьЭлементы().Очистить(); Если ТекущийСпособУказания = Неопределено Тогда - ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета(Контекст.ТекущийПользователь, Контекст.ЕдинственныйРаздел, Контекст.ПервыйРаздел, Контекст.ЗначениеДляВсехПользователей, Данные); + ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета( + Контекст.ТекущийПользователь, + Контекст.ЕдинственныйРаздел, + Контекст.ПервыйРаздел, + Контекст.ЗначениеДляВсехПользователей, Данные); + ТекущийСпособУказания = ?(ТекущийСпособУказания = "", "ОбщаяДата", ТекущийСпособУказания); Если Контекст.СпособУказанияДатыЗапрета <> ТекущийСпособУказания Тогда Контекст.СпособУказанияДатыЗапрета = ТекущийСпособУказания; @@ -1396,7 +1516,8 @@ КонецЕсли; Если Контекст.СпособУказанияДатыЗапрета = "ОбщаяДата" Тогда - Контекст.Элементы.СпособыУказания.ТекущаяСтраница = Контекст.Элементы.СпособУказанияОбщаяДата; + Контекст.Элементы.СпособыУказания.ТекущаяСтраница = + Контекст.Элементы.СпособУказанияОбщаяДата; ЗаполнитьЗначенияСвойств(Контекст, Данные); Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Контекст.КоличествоДнейРазрешения <> 0; @@ -1406,35 +1527,44 @@ Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.ТолькоПросмотр = Ложь; Контекст.Элементы.КоличествоДнейРазрешения.ТолькоПросмотр = Ложь; Попытка - ЗаблокироватьЗаписьПользователя(Контекст, Контекст.РазделПустаяСсылка, Контекст.РазделПустаяСсылка, Контекст.ТекущийПользователь, Истина); + ЗаблокироватьЗаписьПользователя( + Контекст, + Контекст.РазделПустаяСсылка, + Контекст.РазделПустаяСсылка, + Контекст.ТекущийПользователь, + Истина); Исключение Контекст.Элементы.ОписаниеДатыЗапрета.ТолькоПросмотр = Истина; Контекст.Элементы.ДатаЗапрета.ТолькоПросмотр = Истина; Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.ТолькоПросмотр = Истина; Контекст.Элементы.КоличествоДнейРазрешения.ТолькоПросмотр = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат; КонецЕсли; - Контекст.Элементы.СпособыУказания.ТекущаяСтраница = Контекст.Элементы.СпособУказанияПоРазделамОбъектам; + Контекст.Элементы.СпособыУказания.ТекущаяСтраница = + Контекст.Элементы.СпособУказанияПоРазделамОбъектам; + УстановитьКоманднуюПанельДатЗапрета(Контекст); ДанныеПользователя = Неопределено; ПрочитатьДанныеПользователяНаСервере( - Контекст.ТекущийПользователь, - Контекст.ПервыйРаздел, - ДанныеПользователя, - Контекст.ПоказыватьРазделы, - Контекст.ПоказыватьРазделыТекущегоПользователя, - Контекст.БезРазделовИОбъектов, - Контекст.ВсеРазделыБезОбъектов, - Контекст.ЕдинственныйРаздел, - Контекст.РазделыБезОбъектов, - ПолучитьЗначенияКлючейЗаблокированныхЗаписей(Контекст), - Контекст.УникальныйИдентификатор, - Контекст.СпособУказанияДатыЗапрета, - Контекст.ЗначениеДляВсехПользователей); + Контекст.ТекущийПользователь, + Контекст.ПервыйРаздел, + ДанныеПользователя, + Контекст.ПоказыватьРазделы, + Контекст.ПоказыватьРазделыТекущегоПользователя, + Контекст.БезРазделовИОбъектов, + Контекст.ВсеРазделыБезОбъектов, + Контекст.ЕдинственныйРаздел, + Контекст.РазделыБезОбъектов, + ПолучитьЗначенияКлючейЗаблокированныхЗаписей(Контекст), + Контекст.УникальныйИдентификатор, + Контекст.СпособУказанияДатыЗапрета, + Контекст.ЗначениеДляВсехПользователей); // Загрузка данных пользователя в коллекцию КоллекцияСтрок = Контекст.ДатыЗапрета.ПолучитьЭлементы(); @@ -1444,14 +1574,20 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка.Значение); НоваяСтрока.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(НоваяСтрока); КоллекцияПодстрок = НоваяСтрока.ПолучитьЭлементы(); + Для каждого Подстрока Из Строка.Значение.СписокПодстрок Цикл НоваяПодстрока = КоллекцияПодстрок.Добавить(); ЗаполнитьЗначенияСвойств(НоваяПодстрока, Подстрока.Значение); - ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(НоваяПодстрока, НоваяПодстрока.ОписаниеДатыЗапрета); - НоваяПодстрока.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(НоваяПодстрока); + ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета( + НоваяПодстрока, НоваяПодстрока.ОписаниеДатыЗапрета); + + НоваяПодстрока.ОписаниеДатыЗапретаПредставление = + ПредставлениеОписанияДатыЗапрета(НоваяПодстрока); КонецЦикла; + Если НоваяСтрока.ЭтоРаздел Тогда - НоваяСтрока.РазделБезОбъектов = Контекст.РазделыБезОбъектов.НайтиПоЗначению(НоваяСтрока.Раздел) <> Неопределено; + НоваяСтрока.РазделБезОбъектов = + Контекст.РазделыБезОбъектов.НайтиПоЗначению(НоваяСтрока.Раздел) <> Неопределено; КонецЕсли; КонецЦикла; @@ -1460,20 +1596,21 @@ Если Контекст.ВсеРазделыБезОбъектов Тогда // Используется дата только по измерению Раздел // Измерение Объект заполнено значением измерения Раздел - // Отборажение объекта не требуется + // Отображение объекта не требуется Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = ТекстЗаголовкаРаздела(); Контекст.Элементы.ДатыЗапрета.Отображение = ОтображениеТаблицы.Список; - // + Иначе - Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = ТекстЗаголовкаРазделаСОбъектами(); + Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = + ТекстЗаголовкаРазделаСОбъектами(); + Контекст.Элементы.ДатыЗапрета.Отображение = ОтображениеТаблицы.Дерево; КонецЕсли; Иначе ПредставленияТиповОбъектов = ""; Для каждого ОписаниеТипаОбъекта Из Контекст.ТипыОбъектовРазделов[0].ТипыОбъекта Цикл - ПредставленияТиповОбъектов = СокрЛП( ПредставленияТиповОбъектов - + Символы.ПС - + ОписаниеТипаОбъекта.Представление ); + ПредставленияТиповОбъектов = + СокрЛП(ПредставленияТиповОбъектов + Символы.ПС + ОписаниеТипаОбъекта.Представление); КонецЦикла; Контекст.Элементы.ДатыЗапретаПолноеПредставление.Заголовок = ПредставленияТиповОбъектов; Контекст.Элементы.ДатыЗапрета.Отображение = ОтображениеТаблицы.Список; @@ -1507,13 +1644,18 @@ // Подготовка дерева значений дат запрета изменения Если ПоказыватьРазделыТекущегоПользователя Тогда - ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяСРазделами(Пользователь, ВсеРазделыБезОбъектов, РазделыБезОбъектов, ЗначениеДляВсехПользователей); + ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяСРазделами( + Пользователь, ВсеРазделыБезОбъектов, РазделыБезОбъектов, ЗначениеДляВсехПользователей); Иначе - ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяБезРазделов(Пользователь, ПервыйРаздел, ЗначениеДляВсехПользователей); + ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяБезРазделов( + Пользователь, ПервыйРаздел, ЗначениеДляВсехПользователей); КонецЕсли; ДанныеПользователя = Новый СписокЗначений; - ПоляСтроки = "ПолноеПредставление, Представление, Раздел, Объект, ДатаЗапрета, ОписаниеДатыЗапрета, КоличествоДнейРазрешения, БезДатыЗапрета, ЭтоРаздел, СписокПодстрок"; + ПоляСтроки = "ПолноеПредставление, Представление, Раздел, Объект, + |ДатаЗапрета, ОписаниеДатыЗапрета, КоличествоДнейРазрешения, + |БезДатыЗапрета, ЭтоРаздел, СписокПодстрок"; + Для каждого Строка Из ПрочитанныеДатыЗапрета.Строки Цикл СтруктураСтроки = Новый Структура(ПоляСтроки); ЗаполнитьЗначенияСвойств(СтруктураСтроки, Строка); @@ -1787,7 +1929,9 @@ НайденныеСтроки = УстановленныеБлокировки.НайтиСтроки(ЗначенияКлючаЗаписи); Если НайденныеСтроки.Количество() = 0 Тогда // Добавление новой блокировки - КлючЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьКлючЗаписи(ЗначенияКлючаЗаписи); + КлючЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьКлючЗаписи( + ЗначенияКлючаЗаписи); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи, , УникальныйИдентификатор); ЗаполнитьЗначенияСвойств(УстановленныеБлокировки.Добавить(), ЗначенияКлючаЗаписи); Если ТекущиеДанные <> Неопределено Тогда @@ -1815,7 +1959,8 @@ &НаКлиентеНаСервереБезКонтекста Процедура РазблокироватьВсеЗаписи(Знач Контекст) - РазблокироватьВсеЗаписиНаСервере(ПолучитьЗначенияКлючейЗаблокированныхЗаписей(Контекст), Контекст.УникальныйИдентификатор); + РазблокироватьВсеЗаписиНаСервере( + ПолучитьЗначенияКлючейЗаблокированныхЗаписей(Контекст), Контекст.УникальныйИдентификатор); Контекст.УстановленныеБлокировки.Очистить(); @@ -1885,7 +2030,8 @@ КонецПопытки; ЗафиксироватьТранзакцию(); Иначе - ЗаблокироватьИЗаписатьПустыеДаты(РазделПустаяСсылка, РазделПустаяСсылка, НовыйПользователь, ""); + ЗаблокироватьИЗаписатьПустыеДаты( + РазделПустаяСсылка, РазделПустаяСсылка, НовыйПользователь, ""); КонецЕсли; РазблокироватьВсеЗаписи(ЭтаФорма); @@ -1997,8 +2143,14 @@ Если РазблокироватьРанееЗаблокированное ИЛИ Контекст.УстановленныеБлокировки.НайтиСтроки(ЗначенияКлючаЗаписи).Количество() = 0 Тогда - // - ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователяНаСервере(ЗначенияКлючаЗаписи, Контекст.УникальныйИдентификатор, ПрочитанныеСвойства, РазблокироватьРанееЗаблокированное, ЗначенияКлючейЗаписей); + + ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователяНаСервере( + ЗначенияКлючаЗаписи, + Контекст.УникальныйИдентификатор, + ПрочитанныеСвойства, + РазблокироватьРанееЗаблокированное, + ЗначенияКлючейЗаписей); + Если РазблокироватьРанееЗаблокированное Тогда Контекст.УстановленныеБлокировки.Очистить(); КонецЕсли; @@ -2025,7 +2177,8 @@ Если МенеджерЗаписи.Выбран() Тогда ПрочитанныеСвойства.ДатаЗапрета = МенеджерЗаписи.ДатаЗапрета; ПрочитанныеСвойства.Комментарий = МенеджерЗаписи.Комментарий; - ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(ПрочитанныеСвойства, МенеджерЗаписи.ОписаниеДатыЗапрета); + ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета( + ПрочитанныеСвойства, МенеджерЗаписи.ОписаниеДатыЗапрета); Иначе НачатьТранзакцию(); Попытка @@ -2078,7 +2231,9 @@ Если ЗначениеЗаполнено(СтарыйОбъект) Тогда // Блокировка старой записи - ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя(ЭтаФорма, Раздел, СтарыйОбъект, Пользователь); + ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя( + ЭтаФорма, Раздел, СтарыйОбъект, Пользователь); + ОбновитьЗначенияПрочитанныхСвойств(ТекущиеЗначенияСвойств, ПрочитанныеСвойства); ЗначенияКлючаЗаписи.Объект = СтарыйОбъект; @@ -2091,14 +2246,14 @@ Если ЗначениеЗаполнено(ДатаЗапрета) И ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда - // + МенеджерЗаписи.Раздел = Раздел; МенеджерЗаписи.Объект = НовыйОбъект; МенеджерЗаписи.Пользователь = Пользователь; МенеджерЗаписи.ДатаЗапрета = ТекущиеЗначенияСвойств.ДатаЗапрета; МенеджерЗаписи.ОписаниеДатыЗапрета = ВнутреннееОписаниеДатыЗапрета(ТекущиеЗначенияСвойств); МенеджерЗаписи.Комментарий = ТекущиеЗначенияСвойств.Комментарий; - // + МенеджерЗаписи.Записать(); КонецЕсли; @@ -2117,9 +2272,9 @@ Если БезРазделовИОбъектов ИЛИ СпособУказанияДатыЗапрета = "ОбщаяДата" Тогда - // + ТекущийРаздел = РазделПустаяСсылка; - // + ИначеЕсли ПоказыватьРазделыТекущегоПользователя Тогда Если ТекущиеДанные.ЭтоРаздел Тогда ТекущийРаздел = ТекущиеДанные.Раздел; @@ -2131,7 +2286,7 @@ Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Раздел = РазделПустаяСсылка И НЕ РазделОбъектов Тогда - // + ТекущийРаздел = РазделПустаяСсылка; Иначе ТекущийРаздел = ПервыйРаздел; @@ -2287,7 +2442,10 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, Неопределено, Элементы.Пользователи.ТекущиеДанные.Пользователь)); + ПараметрыФормы.Вставить("ТекущаяСтрока", + ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, + Неопределено, + Элементы.Пользователи.ТекущиеДанные.Пользователь)); ВыборИПодборВнешнихПользователей = Ложь; Если ИспользоватьВнешнихПользователей Тогда @@ -2312,20 +2470,12 @@ Если ВыборИПодборВнешнихПользователей Тогда Если СправочникВнешниеПользователиДоступен Тогда - Если Подобрать Тогда - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); - Иначе - ОткрытьФормуМодально("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); - КонецЕсли; + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); Иначе Предупреждение(ТекстСообщенияНедостаточноПравДляВыбораВнешнихПользователей()); КонецЕсли; Иначе - Если Подобрать Тогда - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); - Иначе - ОткрытьФормуМодально("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); - КонецЕсли; + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, ВладелецФормы); КонецЕсли; КонецПроцедуры @@ -2335,9 +2485,12 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, Неопределено, Элементы.Пользователи.ТекущиеДанные.Пользователь)); ПараметрыФормы.Вставить("ВыбиратьВсеУзлы", Истина); ПараметрыФормы.Вставить("ПланыОбменаДляВыбора", СписокТиповПользователей.ВыгрузитьЗначения()); + ПараметрыФормы.Вставить("ТекущаяСтрока", + ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, + Неопределено, + Элементы.Пользователи.ТекущиеДанные.Пользователь)); Если Подобрать Тогда ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); @@ -2347,11 +2500,7 @@ ВладелецФормы = Элементы.ПользователиПолноеПредставление; КонецЕсли; - Если Подобрать Тогда - ОткрытьФорму("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ВладелецФормы); - Иначе - ОткрытьФормуМодально("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ВладелецФормы); - КонецЕсли; + ОткрытьФорму("ОбщаяФорма.ВыборУзловПлановОбмена", ПараметрыФормы, ВладелецФормы); КонецПроцедуры @@ -2377,9 +2526,12 @@ ВыборИПодборВнешнихПользователей = Ложь; Если ИспользоватьВнешнихПользователей Тогда - Элемент = СписокТиповПользователей.ВыбратьЭлемент(ТекстЗаголовкаВыборТипаДанных(), СписокТиповПользователей[0]); + Элемент = СписокТиповПользователей.ВыбратьЭлемент( + ТекстЗаголовкаВыборТипаДанных(), СписокТиповПользователей[0]); + Если Элемент <> Неопределено Тогда - ВыборИПодборВнешнихПользователей = Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); + ВыборИПодборВнешнихПользователей = + Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); Иначе Возврат Ложь; КонецЕсли; @@ -2393,23 +2545,28 @@ Процедура ЗаполнитьНомераКартинокПользователейДатЗапрета(ТекущаяСтрока = Неопределено) Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - // + Для каждого Строка Из ПользователиДатЗапрета Цикл - // - Если Строка.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда + + Если Строка.Пользователь + = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехИнформационныхБаз Тогда + Строка.НомерКартинки = -1; - // + ИначеЕсли НЕ ЗначениеЗаполнено(Строка.Пользователь) Тогда Строка.НомерКартинки = 0; - // - ИначеЕсли Строка.Пользователь = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.Пользователь).ЭтотУзел() Тогда + + ИначеЕсли Строка.Пользователь + = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.Пользователь).ЭтотУзел() Тогда + Строка.НомерКартинки = 1; Иначе Строка.НомерКартинки = 2; КонецЕсли; КонецЦикла; Иначе - Пользователи.ЗаполнитьНомераКартинокПользователей(ПользователиДатЗапрета, "Пользователь", "НомерКартинки", ТекущаяСтрока); + Пользователи.ЗаполнитьНомераКартинокПользователей( + ПользователиДатЗапрета, "Пользователь", "НомерКартинки", ТекущаяСтрока); КонецЕсли; КонецПроцедуры @@ -2473,17 +2630,18 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.Объект)); + ПараметрыФормы.Вставить("ТекущаяСтрока", + ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.Объект)); Если Подобрать Тогда ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); ВладелецФормы = Элементы.ДатыЗапрета; - ОткрытьФорму(Элемент.Значение + ".ФормаВыбора", ПараметрыФормы, ВладелецФормы); Иначе ВладелецФормы = Элементы.ДатыЗапретаПолноеПредставление; - ОткрытьФормуМодально(Элемент.Значение + ".ФормаВыбора", ПараметрыФормы, ВладелецФормы); КонецЕсли; + ОткрытьФорму(Элемент.Значение + ".ФормаВыбора", ПараметрыФормы, ВладелецФормы); + КонецПроцедуры &НаКлиенте @@ -2496,7 +2654,7 @@ Если НЕ БезПроверкиПользователей И ПользователиДатЗапрета.НайтиСтроки(Новый Структура("Представление", "")).Количество() > 0 Тогда - // + ВсеПользователиВыбраны = Ложь; Иначе Если НЕ БезРазделовИОбъектов Тогда @@ -2535,14 +2693,22 @@ И ВсеДатыЗапретаПоРазделамЗаполнены И ВсеДатыЗапретаПоОбъектамЗаполнены И ВсеОбъектыВыбраны Тогда - НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Новый Структура("БезДатыЗапрета", Истина)); + + НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки( + Новый Структура("БезДатыЗапрета", Истина)); + Для каждого Строка Из НайденныеСтроки Цикл - Если НазначениеДляВсех(Строка.Пользователь) И ЗначениеЗаполнено(Строка.Представление) Тогда + + Если НазначениеДляВсех(Строка.Пользователь) + И ЗначениеЗаполнено(Строка.Представление) Тогда + Продолжить; КонецЕсли; + ВсеДатыЗапретаЗаполнены = Ложь; Прервать; КонецЦикла; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -2551,16 +2717,20 @@ // Предупреждение пользователя ТекстВопроса = ""; Если НЕ ВсеПользователиВыбраны Тогда - ТекстВопроса = ТекстВопроса + ТекстСообщенияНастройкиСНевыбраннымиПользователямиНеСохранены(ЭтаФорма); - // + ТекстВопроса = ТекстВопроса + + ТекстСообщенияНастройкиСНевыбраннымиПользователямиНеСохранены(ЭтаФорма); + ИначеЕсли НЕ ВсеОбъектыВыбраны Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстСообщенияНастройкиСНевыбраннымиОбъектамиНеСохранены(); - // + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНевыбраннымиОбъектамиНеСохранены(); + ИначеЕсли НЕ ВсеДатыЗапретаПоРазделамЗаполнены Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляРазделовНеСохранены(); - // + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляРазделовНеСохранены(); + ИначеЕсли НЕ ВсеДатыЗапретаПоОбъектамЗаполнены Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляОбъектовНеСохранены(); + ТекстВопроса = ТекстВопроса + Символы.ПС + + ТекстСообщенияНастройкиСНезаполненнымиДатамиЗапретаДляОбъектовНеСохранены(); КонецЕсли; Возврат СокрЛ(ТекстВопроса); @@ -2639,7 +2809,8 @@ Возврат; КонецЕсли; - ИзменитьВидимость(Элементы.УстановкаПоПользователям, УстановкаДатыЗапрета <> "ДляВсехПользователей"); + ИзменитьВидимость( + Элементы.УстановкаПоПользователям, УстановкаДатыЗапрета <> "ДляВсехПользователей"); Если УстановкаДатыЗапрета <> "ПоПользователям" Тогда Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.СтраницаПользовательВыбран; @@ -2664,16 +2835,18 @@ НачатьТранзакцию(); Попытка Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); - // + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", + Параметры.ДатыЗапретаЗагрузкиДанных); + Если ВыбранноеЗначение = "НетЗапрета" Тогда Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Ложь); - // + ИначеЕсли ВыбранноеЗначение = "ДляВсехПользователей" Тогда Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Истина); Иначе Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Неопределено); КонецЕсли; + Запрос.Текст = "ВЫБРАТЬ | ДатыЗапретаИзменения.Раздел, @@ -2701,12 +2874,19 @@ // Блокировка удаляемых записей. Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл - ЗаблокироватьЗаписьПользователя(ЭтаФорма, ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); + ЗаблокироватьЗаписьПользователя( + ЭтаФорма, + ЗначенияКлючаЗаписи.Раздел, + ЗначенияКлючаЗаписи.Объект, + ЗначенияКлючаЗаписи.Пользователь); КонецЦикла; // Удаление заблокированных записей. Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл - УдалитьЗаписьПользователя(ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); + УдалитьЗаписьПользователя( + ЗначенияКлючаЗаписи.Раздел, + ЗначенияКлючаЗаписи.Объект, + ЗначенияКлючаЗаписи.Пользователь); КонецЦикла; ЗафиксироватьТранзакцию(); @@ -2825,18 +3005,20 @@ ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(Данные, Выборка.ОписаниеДатыЗапрета); КонецЕсли; - Если РезультатыЗапроса[0].Пустой() Тогда // Нет по объектам и по разделам, когда пустой. + Если РезультатыЗапроса[0].Пустой() Тогда + // Нет по объектам и по разделам, когда пустой. ТекущийСпособУказанияДатыЗапрета = ?(ОбщаяДатаПрочитана, "ОбщаяДата", ""); - ИначеЕсли НЕ РезультатыЗапроса[1].Пустой() Тогда // Есть по объектам, когда не пустой. - Если РезультатыЗапроса[2].Пустой() // Только по ПервыйРаздел (без дат по разделам), когда пустой. + ИначеЕсли НЕ РезультатыЗапроса[1].Пустой() Тогда + // Есть по объектам, когда не пустой. + + Если РезультатыЗапроса[2].Пустой() И ЕдинственныйРаздел Тогда - + // Только по ПервыйРаздел (без дат по разделам), когда пустой. ТекущийСпособУказанияДатыЗапрета = "ПоОбъектам"; Иначе ТекущийСпособУказанияДатыЗапрета = "ПоРазделамИОбъектам"; КонецЕсли; - Иначе ТекущийСпособУказанияДатыЗапрета = "ПоРазделам"; КонецЕсли; @@ -2930,7 +3112,11 @@ Для каждого ОписаниеРаздела Из ОтмеченныеРазделы Цикл Если ОписаниеРаздела.Пометка Тогда - ЗаблокироватьИЗаписатьПустыеДаты(ОписаниеРаздела.Значение, ОписаниеРаздела.Значение, ТекущийПользователь, Комментарий); + ЗаблокироватьИЗаписатьПустыеДаты( + ОписаниеРаздела.Значение, + ОписаниеРаздела.Значение, + ТекущийПользователь, Комментарий); + ЭлементДанных = ДатыЗапретаДерево.Строки.Добавить(); ЭлементДанных.ЭтоРаздел = Истина; ЭлементДанных.Раздел = ОписаниеРаздела.Значение; @@ -2942,7 +3128,9 @@ КонецЕсли; ЭлементДанных.ПолноеПредставление = ЭлементДанных.Представление; ЭлементДанных.ОписаниеДатыЗапрета = "ПроизвольнаяДата"; - ЭлементДанных.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(ЭлементДанных); + + ЭлементДанных.ОписаниеДатыЗапретаПредставление = + ПредставлениеОписанияДатыЗапрета(ЭлементДанных); КонецЕсли; КонецЦикла; @@ -2972,63 +3160,79 @@ Элементы.ДатыЗапрета.Обновить(); Предупреждение(ТекстСообщенияСнятоВыделениеСНезаполненныхСтрок()); КонецЕсли; + // Блокировка записей выделенных строк Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл ТекущиеДанные = ДатыЗапрета.НайтиПоИдентификатору(ВыделеннаяСтрока); - ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя(ЭтаФорма, ТекущийРаздел(ТекущиеДанные), ТекущиеДанные.Объект, ТекущийПользователь); - ОбновитьЗначенияПрочитанныхСвойств(ТекущиеДанные, ПрочитанныеСвойства, Элементы.Пользователи.ТекущиеДанные); + + ПрочитанныеСвойства = ЗаблокироватьЗаписьПользователя( + ЭтаФорма, ТекущийРаздел(ТекущиеДанные), ТекущиеДанные.Объект, ТекущийПользователь); + + ОбновитьЗначенияПрочитанныхСвойств( + ТекущиеДанные, ПрочитанныеСвойства, Элементы.Пользователи.ТекущиеДанные); КонецЦикла; + // Изменение описания даты запрета ПараметрыФормы = Новый Структура; Если УстановкаДатыЗапрета = "ПоПользователям" Тогда - ПараметрыФормы.Вставить("ПользовательПредставление", Элементы.Пользователи.ТекущиеДанные.Представление); + ПараметрыФормы.Вставить("ПользовательПредставление", + Элементы.Пользователи.ТекущиеДанные.Представление); Иначе - ПараметрыФормы.Вставить("ПользовательПредставление", ТекстПредставленияДляВсехПользователей(ЭтаФорма)); + ПараметрыФормы.Вставить("ПользовательПредставление", + ТекстПредставленияДляВсехПользователей(ЭтаФорма)); КонецЕсли; + Если ВыделенныеСтроки.Количество() = 1 Тогда Если СпособУказанияДатыЗапрета = "ПоОбъектам" Тогда + Если Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); + ПараметрыФормы.Вставить("РазделПредставление", + Элементы.ДатыЗапрета.ТекущиеДанные.Представление); ПараметрыФормы.Вставить("ОбъектПредставление", ""); Иначе ПараметрыФормы.Вставить("РазделПредставление", ""); - ПараметрыФормы.Вставить("ОбъектПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); + ПараметрыФормы.Вставить("ОбъектПредставление", + Элементы.ДатыЗапрета.ТекущиеДанные.Представление); КонецЕсли; Иначе Если Элементы.ДатыЗапрета.ТекущиеДанные.ЭтоРаздел Тогда - ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); - РазделБезОбъектов = РазделыБезОбъектов.НайтиПоЗначению(Элементы.ДатыЗапрета.ТекущиеДанные.Раздел) <> Неопределено; - Если НЕ РазделБезОбъектов И ТипЗнч(ТекущийПользователь) <> Тип("ПеречислениеСсылка.ВидыНазначенияДатЗапрета") Тогда + ПараметрыФормы.Вставить("РазделПредставление", + Элементы.ДатыЗапрета.ТекущиеДанные.Представление); + + РазделБезОбъектов = РазделыБезОбъектов.НайтиПоЗначению( + Элементы.ДатыЗапрета.ТекущиеДанные.Раздел) <> Неопределено; + + Если НЕ РазделБезОбъектов + И ТипЗнч(ТекущийПользователь) + <> Тип("ПеречислениеСсылка.ВидыНазначенияДатЗапрета") Тогда + ПараметрыФормы.Вставить("РазрешитьПоУмолчанию", Истина); КонецЕсли; Иначе - ПараметрыФормы.Вставить("РазделПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.ПолучитьРодителя().Представление); - ПараметрыФормы.Вставить("ОбъектПредставление", Элементы.ДатыЗапрета.ТекущиеДанные.Представление); + ПараметрыФормы.Вставить("РазделПредставление", + Элементы.ДатыЗапрета.ТекущиеДанные.ПолучитьРодителя().Представление); + + ПараметрыФормы.Вставить("ОбъектПредставление", + Элементы.ДатыЗапрета.ТекущиеДанные.Представление); КонецЕсли; КонецЕсли; Иначе ПараметрыФормы.Вставить("РазделПредставление", "<...>"); ПараметрыФормы.Вставить("ОбъектПредставление", "<...>"); КонецЕсли; - ПараметрыФормы.Вставить("ОписаниеДатыЗапрета", Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета); - ПараметрыФормы.Вставить("КоличествоДнейРазрешения", Элементы.ДатыЗапрета.ТекущиеДанные.КоличествоДнейРазрешения); - ПараметрыФормы.Вставить("ДатаЗапрета", Элементы.ДатыЗапрета.ТекущиеДанные.ДатаЗапрета); - НовыеДанные = ОткрытьФормуМодально("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета", ПараметрыФормы); - Если НовыеДанные <> Неопределено Тогда - Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Строка = ДатыЗапрета.НайтиПоИдентификатору(ВыделеннаяСтрока); - Строка.ОписаниеДатыЗапрета = НовыеДанные.ОписаниеДатыЗапрета; - Строка.КоличествоДнейРазрешения = НовыеДанные.КоличествоДнейРазрешения; - Строка.ДатаЗапрета = НовыеДанные.ДатаЗапрета; - ЗаписатьОписаниеИДатуЗапрета(Строка); - Строка.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(Строка); - КонецЦикла; - ОбновитьНаличиеДатЗапретаТекущегоПользователя(); - КонецЕсли; - // Отмена блокировки выделенных строк - РазблокироватьВсеЗаписи(ЭтаФорма); + ПараметрыФормы.Вставить("ОписаниеДатыЗапрета", + Элементы.ДатыЗапрета.ТекущиеДанные.ОписаниеДатыЗапрета); + + ПараметрыФормы.Вставить("КоличествоДнейРазрешения", + Элементы.ДатыЗапрета.ТекущиеДанные.КоличествоДнейРазрешения); + + ПараметрыФормы.Вставить("ДатаЗапрета", + Элементы.ДатыЗапрета.ТекущиеДанные.ДатаЗапрета); + + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.РедактированиеДатыЗапрета", + ПараметрыФормы, ЭтаФорма); Иначе - Предупреждение(ТекстСообщенияВыделенныеСтрокиНезаполнены()); + Предупреждение(ТекстСообщенияВыделенныеСтрокиНеЗаполнены()); КонецЕсли; КонецПроцедуры @@ -3037,7 +3241,9 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеОписанияДатыЗапрета(Знач Данные) - Представление = СписокОписанийДатыЗапрета().НайтиПоЗначению(Данные.ОписаниеДатыЗапрета).Представление; + Представление = СписокОписанийДатыЗапрета().НайтиПоЗначению( + Данные.ОписаниеДатыЗапрета).Представление; + Если Данные.КоличествоДнейРазрешения > 0 Тогда Представление = Представление + " (" + Формат(Данные.КоличествоДнейРазрешения, "ЧГ=") + ")"; КонецЕсли; @@ -3051,7 +3257,9 @@ ВнутреннееОписание = ""; Если Данные.ОписаниеДатыЗапрета <> "ПроизвольнаяДата" Тогда - ВнутреннееОписание = СокрЛП(Данные.ОписаниеДатыЗапрета + Символы.ПС + Формат(Данные.КоличествоДнейРазрешения, "ЧГ=0")); + ВнутреннееОписание = СокрЛП( + Данные.ОписаниеДатыЗапрета + Символы.ПС + + Формат(Данные.КоличествоДнейРазрешения, "ЧГ=0")); КонецЕсли; Возврат ВнутреннееОписание; @@ -3178,53 +3386,66 @@ Сутки = 60*60*24; Если Контекст.ОписаниеДатыЗапрета = "ПроизвольнаяДата" Тогда - Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; - Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = Контекст.Элементы.ПроизвольнаяДатаИспользуется; + Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = + Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; + + Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = + Контекст.Элементы.ПроизвольнаяДатаИспользуется; + Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Ложь; Контекст.КоличествоДнейРазрешения = 0; Иначе - Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаИспользуется; - Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = + Контекст.Элементы.НепроизвольнаяДатаИспользуется; + + Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = + Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Если Контекст.ОписаниеДатыЗапрета = "ПредыдущийДень" Тогда Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.Доступность = Ложь; Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Ложь; Иначе Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.Доступность = Истина; КонецЕсли; - РасчетныеДатыЗапрета = РасчетДатыЗапрета(Контекст.ОписаниеДатыЗапрета, Контекст.ТекущаяДатаНаСервере); + РасчетныеДатыЗапрета = РасчетДатыЗапрета( + Контекст.ОписаниеДатыЗапрета, Контекст.ТекущаяДатаНаСервере); + Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Текущая; КонецЕсли; ТекстНадписи = ""; Если Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета Тогда - СкорректироватьКоличествоДнейРазрешения(Контекст.ОписаниеДатыЗапрета, Контекст.КоличествоДнейРазрешения); - Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаРазрешено; - СрокРазрешения = РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; + СкорректироватьКоличествоДнейРазрешения( + Контекст.ОписаниеДатыЗапрета, Контекст.КоличествоДнейРазрешения); + + Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = + Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаРазрешено; + + СрокРазрешения = + РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; Если Контекст.ТекущаяДатаНаСервере > СрокРазрешения Тогда - ТекстНадписи = Символы.ПС - + НСтр("ru = 'Срок возможности изменения данных с %3 по %4 истек %2'"); + ТекстНадписи = Символы.ПС + + НСтр("ru = 'Срок возможности изменения данных с %3 по %4 истек %2'"); Иначе Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Предыдущая; КонецЕсли; - ТекстНадписи = Символы.ПС - + НСтр("ru = 'По %2 возможно изменение данных с %3 по %4'") - + Символы.ПС - + НСтр("ru = 'После %2 будет запрещено изменение данных по %4'") - + Символы.ПС; + ТекстНадписи = Символы.ПС + + НСтр("ru = 'По %2 возможно изменение данных с %3 по %4'") + Символы.ПС + + НСтр("ru = 'После %2 будет запрещено изменение данных по %4'") + Символы.ПС; КонецЕсли; Иначе Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; Контекст.КоличествоДнейРазрешения = 0; КонецЕсли; - Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запрещено изменение данных по %1'") - + ТекстНадписи, - Формат(Контекст.ДатаЗапрета, "ДФ=dd.MM.yyyy"), - Формат(СрокРазрешения, "ДФ=dd.MM.yyyy"), - Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДФ=dd.MM.yyyy"), - Формат(РасчетныеДатыЗапрета.Текущая, "ДФ=dd.MM.yyyy")); + Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрещено изменение данных по %1'") + ТекстНадписи, + Формат(Контекст.ДатаЗапрета, "ДЛФ=Д"), + Формат(СрокРазрешения, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д")); КонецЕсли; КонецПроцедуры @@ -3239,23 +3460,23 @@ Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; КонецЕсли; Возврат Новый Структура("Текущая, Предыдущая", ТекущаяДатаЗапрета, ПредыдущаяДатаЗапрета); @@ -3325,9 +3546,11 @@ Для каждого ЗначениеСписка Из Контекст.СписокТиповПользователей Цикл Если ТипЗнч(ЗначениеСписка.Значение) = ТипЗнч(Пользователь) Тогда Если ЗначениеЗаполнено(Пользователь) Тогда - Возврат ЗначениеСписка.Представление + ": " + Строка(Пользователь); + Возврат ЗначениеСписка.Представление + ": " + + Строка(Пользователь); Иначе - Возврат ЗначениеСписка.Представление + ": " + НСтр("ru = '<Все информационные базы>'"); + Возврат ЗначениеСписка.Представление + ": " + + НСтр("ru = '<Все информационные базы>'"); КонецЕсли; КонецЕсли; КонецЦикла; @@ -3379,7 +3602,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ТекстВопросаПересчитатьДатыЗапрета() - Возврат НСтр("ru = 'Очистить незаполненые строки и пересчитать относительные даты запрета?'"); + Возврат НСтр("ru = 'Очистить незаполненные строки и пересчитать относительные даты запрета?'"); КонецФункции @@ -3393,7 +3616,9 @@ &НаКлиенте Функция ТекстВопросаУдалитьВсеДатыЗапретаКромеДатДляВсехПользователей() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удалить все даты запрета, кроме установленных %1?'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалить все даты запрета, кроме установленных %1?'"), + ЗначениеДляВсехПользователей); КонецФункции @@ -3407,14 +3632,18 @@ &НаКлиенте Функция ТекстСообщенияЗначениеДляВсехПользователейНеИзменяется() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Значение %1 не изменяется.'"), ТекстПредставленияДляВсехПользователей(ЭтаФорма)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значение %1 не изменяется.'"), + ТекстПредставленияДляВсехПользователей(ЭтаФорма)); КонецФункции &НаКлиенте Функция ТекстСообщенияКомментарийДляВсехПользователейНеИзменяется() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Комментарий %1 не изменяется.'"), ТекстПредставленияДляВсехПользователей(ЭтаФорма)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Комментарий %1 не изменяется.'"), + ТекстПредставленияДляВсехПользователей(ЭтаФорма)); КонецФункции @@ -3429,15 +3658,15 @@ Функция ТекстСообщенияСпособУказанияНеИспользован(СпособУказанияВФорме, СпособУказанияВБазеДанных) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Способ указания ""%1"" не использован, - |поэтому сохранен способ указания ""%2""'"), - СпособУказанияВФорме, - СпособУказанияВБазеДанных); + НСтр("ru = 'Способ указания ""%1"" не использован, + |поэтому сохранен способ указания ""%2""'"), + СпособУказанияВФорме, + СпособУказанияВБазеДанных); КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ТекстВопросаОчиститьНезаполненыеСтроки() +Функция ТекстВопросаОчиститьНезаполненныеСтроки() Возврат НСтр("ru = 'Очистить незаполненные строки?'"); @@ -3453,7 +3682,8 @@ &НаКлиенте Функция ТекстВопросаУдалитьДатыЗапретаДляВсехПользователей() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удалить даты запрета %1?'"), НРег(ЗначениеДляВсехПользователей)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалить даты запрета %1?'"), НРег(ЗначениеДляВсехПользователей)); КонецФункции @@ -3495,7 +3725,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейДатыЗапретаНеУстановлены() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 даты запрета не установлены.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 даты запрета не установлены.'"), ЗначениеДляВсехПользователей); КонецФункции @@ -3612,7 +3843,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейРазделыВсегдаПоказываются() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 разделы всегда показываются.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 разделы всегда показываются.'"), ЗначениеДляВсехПользователей); КонецФункции @@ -3626,7 +3858,8 @@ &НаКлиенте Функция ТекстСообщенияДляВсехПользователейОбщаяДатаВсегдаПоказывается() - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 <Общая дата> всегда показывается.'"), ЗначениеДляВсехПользователей); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 <Общая дата> всегда показывается.'"), ЗначениеДляВсехПользователей); КонецФункции @@ -3719,7 +3952,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция ТекстСообщенияВыделенныеСтрокиНезаполнены() +Функция ТекстСообщенияВыделенныеСтрокиНеЗаполнены() Возврат НСтр("ru ='Выделенные строки не заполнены.'"); diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index 5841a1ea2..8e3ec1720 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -940,9 +940,13 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>OnClose</event> + <name>ПриЗакрытии</name> + </handlers> <excludedCommands>CustomizeForm</excludedCommands> <excludedCommands>Help</excludedCommands> - <windowOpeningMode>DontBlock</windowOpeningMode> + <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> <autoUrl>true</autoUrl> @@ -1103,6 +1107,21 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ВозвращаемоеЗначение</name> + <title> + <key>ru</key> + <value>Возвращаемое значение</value> + + 9 + + + true + + + true + + ОК diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index b2baaffa3..1cb9d6b65 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -37,6 +37,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + ОповеститьОВыборе(ВозвращаемоеЗначение); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -86,12 +93,12 @@ &НаКлиенте Процедура ОК(Команда) - Данные = Новый Структура; - Данные.Вставить("ОписаниеДатыЗапрета", ОписаниеДатыЗапрета); - Данные.Вставить("КоличествоДнейРазрешения", КоличествоДнейРазрешения); - Данные.Вставить("ДатаЗапрета", ДатаЗапрета); + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("ОписаниеДатыЗапрета", ОписаниеДатыЗапрета); + ВозвращаемоеЗначение.Вставить("КоличествоДнейРазрешения", КоличествоДнейРазрешения); + ВозвращаемоеЗначение.Вставить("ДатаЗапрета", ДатаЗапрета); - Закрыть(Данные); + Закрыть(); КонецПроцедуры @@ -102,8 +109,12 @@ Процедура ОбщаяДатаЗапретаСОписаниемПриИзмененииДополнительно(Знач Контекст) Если Контекст.ОписаниеДатыЗапрета = "" Тогда - Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; - Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = + Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; + + Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = + Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Ложь; Контекст.КоличествоДнейРазрешения = 0; Контекст.ДатаЗапрета = '00000000'; @@ -122,28 +133,43 @@ Сутки = 60*60*24; Если Контекст.ОписаниеДатыЗапрета = "ПроизвольнаяДата" Тогда - Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; - Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = Контекст.Элементы.ПроизвольнаяДатаИспользуется; + Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = + Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; + + Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = + Контекст.Элементы.ПроизвольнаяДатаИспользуется; + Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Ложь; Контекст.КоличествоДнейРазрешения = 0; Иначе - Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаИспользуется; - Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = + Контекст.Элементы.НепроизвольнаяДатаИспользуется; + + Контекст.Элементы.ПроизвольнаяДата.ТекущаяСтраница = + Контекст.Элементы.ПроизвольнаяДатаНеИспользуется; + Если Контекст.ОписаниеДатыЗапрета = "ПредыдущийДень" Тогда Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.Доступность = Ложь; Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета = Ложь; Иначе Контекст.Элементы.РазрешитьИзменениеДанныхДоДатыЗапрета.Доступность = Истина; КонецЕсли; - РасчетныеДатыЗапрета = РасчетДатыЗапрета(Контекст.ОписаниеДатыЗапрета, Контекст.ТекущаяДатаНаСервере); + РасчетныеДатыЗапрета = РасчетДатыЗапрета( + Контекст.ОписаниеДатыЗапрета, Контекст.ТекущаяДатаНаСервере); + Если РассчитатьДатуЗапрета Тогда Контекст.ДатаЗапрета = РасчетныеДатыЗапрета.Текущая; КонецЕсли; ТекстНадписи = ""; Если Контекст.РазрешитьИзменениеДанныхДоДатыЗапрета Тогда - СкорректироватьКоличествоДнейРазрешения(Контекст.ОписаниеДатыЗапрета, Контекст.КоличествоДнейРазрешения); - Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаРазрешено; - СрокРазрешения = РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; + СкорректироватьКоличествоДнейРазрешения( + Контекст.ОписаниеДатыЗапрета, Контекст.КоличествоДнейРазрешения); + + Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = + Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаРазрешено; + + СрокРазрешения = + РасчетныеДатыЗапрета.Текущая + Контекст.КоличествоДнейРазрешения * Сутки; Если Контекст.ТекущаяДатаНаСервере > СрокРазрешения Тогда ТекстНадписи = Символы.ПС @@ -159,16 +185,18 @@ + Символы.ПС; КонецЕсли; Иначе - Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; + Контекст.Элементы.СвойствоКоличествоДнейРазрешенияИзменения.ТекущаяСтраница = + Контекст.Элементы.ИзменениеДанныхДоДатыЗапретаНеРазрешено; + Контекст.КоличествоДнейРазрешения = 0; КонецЕсли; - Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запрещено изменение данных по %1'") - + ТекстНадписи, - Формат(Контекст.ДатаЗапрета, "ДФ=dd.MM.yyyy"), - Формат(СрокРазрешения, "ДФ=dd.MM.yyyy"), - Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДФ=dd.MM.yyyy"), - Формат(РасчетныеДатыЗапрета.Текущая, "ДФ=dd.MM.yyyy")); + Контекст.Элементы.ПояснениеНепроизвольнойДаты.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запрещено изменение данных по %1'") + ТекстНадписи, + Формат(Контекст.ДатаЗапрета, "ДЛФ=Д"), + Формат(СрокРазрешения, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Предыдущая + Сутки, "ДЛФ=Д"), + Формат(РасчетныеДатыЗапрета.Текущая, "ДЛФ=Д")); КонецЕсли; КонецПроцедуры @@ -183,23 +211,23 @@ Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; + ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; КонецЕсли; Возврат Новый Структура("Текущая, Предыдущая", ТекущаяДатаЗапрета, ПредыдущаяДатаЗапрета); @@ -235,4 +263,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 865b6fb96..91027f589 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -5,18 +5,6 @@ <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> </filter> <order> - <item xsi:type="OrderItemField"> - <field>Пользователь</field> - <orderType>Asc</orderType> - </item> - <item xsi:type="OrderItemField"> - <field>Раздел</field> - <orderType>Asc</orderType> - </item> - <item xsi:type="OrderItemField"> - <field>Объект</field> - <orderType>Asc</orderType> - </item> <viewMode>Normal</viewMode> <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> </order> diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 007731ea6..8aef556b5 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -73,6 +73,34 @@ СвойстваРазделов = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); Элементы.ФормаДатыЗапретаЗагрузкиДанных.Видимость = СвойстваРазделов.ИспользоватьДатыЗапретаЗагрузкиДанных; + // Настройка порядка + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; + Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; + Иначе + Порядок = Список.Порядок; + КонецЕсли; + + Порядок.Элементы.Очистить(); + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Пользователь"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Раздел"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + + ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Объект"); + ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ЭлементПорядка.Использование = Истина; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index 3643bd125..4af52dfe5 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <h3>О запрете изменения (загрузки) данных</h3> <p>Иногда при работе с информационной базой требуется установить запрет изменения каких-либо данных до определенной даты. Например, после сдачи квартальной бухгалтерской отчетности в налоговую инспекцию, обычно устанавливается запрет изменения тех данных, которые использовались для формирования этой отчетности, то есть данных по последний день отчетного периода.<br>Запрет загрузки в отличие от запрета изменения может быть установлен для данных, которые должны редактироваться только в одном узле информационной базы, а также по правилам, которые следуют из требований обмена данными, а не из типовых бизнес-процессов организации.<br>Запреты загрузки данных могут не использоваться. В этом случае доступна только форма настройки дат запрета изменения данных.</p> <h3>Проявление установленного запрета</h3> diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html index cae151628..94911e528 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p class="Usual">Для физического лица может потребоваться хранить информацию о его удостоверении личности.</p> <p class="Usual">При заполнении информации необходимо указать вид документа, удостоверяющего личность, его серию и номер, информацию о том, кем выдан документ и дату выдачи.</p> <p class="Usual">См. также:</p> diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html index 16db04430..606d420b1 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html @@ -1,3 +1,3 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Для некоторых объектов конфигурации можно указать дополнительные сведения, состав и тип которых настраивается администратором.</p> <p>См. также: <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения/Help">Дополнительные свойства</a>, <a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Наборы свойств</a>.</p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИдентификаторыПолученныхЭлектронныхПисем/ИдентификаторыПолученныхЭлектронныхПисем.mdo b/SSL/src/InformationRegisters/ИдентификаторыПолученныхЭлектронныхПисем/ИдентификаторыПолученныхЭлектронныхПисем.mdo index b9b98df29..dd42011a3 100644 --- a/SSL/src/InformationRegisters/ИдентификаторыПолученныхЭлектронныхПисем/ИдентификаторыПолученныхЭлектронныхПисем.mdo +++ b/SSL/src/InformationRegisters/ИдентификаторыПолученныхЭлектронныхПисем/ИдентификаторыПолученныхЭлектронныхПисем.mdo @@ -86,9 +86,11 @@ <maxValue xsi:type="core:UndefinedValue"/> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> + <fillFromFillingValue>true</fillFromFillingValue> <fillValue xsi:type="core:ReferenceValue"> <value>Catalog.УчетныеЗаписиЭлектроннойПочты.EmptyRef</value> </fillValue> + <master>true</master> <mainFilter>true</mainFilter> </dimensions> <dimensions uuid="e67b4a32-4bac-450e-be6d-88c262383f31"> diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index 47b0629fe..3bdd1dfbd 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -5,6 +5,10 @@ Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения) Экспорт + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Выборка изменений данных запрещена в активной транзакции.'"); + КонецЕсли; + Результат = Новый Массив; НачатьТранзакцию(); @@ -81,6 +85,10 @@ Процедура УдалитьРегистрациюИзменений(Знач Узел, Знач НомерСообщения = Неопределено) Экспорт + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Удаление регистрации изменений данных не может быть выполнено в активной транзакции.'"); + КонецЕсли; + НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html index 617df6d45..34173be13 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям исполнителей</a>. </p> <p>Роли, на которые не назначено ни одного исполнителя, отмечены значком "внимание". Такая ситуация может приводить к возникновению зависших задач (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен <a href="Report.ЗависшиеЗадачи/Help">Отчет по зависшим задачам</a>, для получения уведомлений по зависшим задачам - предопределенная роль "<a href="Catalog.РолиИсполнителей/Help">Координатор выполнения задач</a>".</p> <p>См. также:</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html index d89d191d2..bdba6669a 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке содержится актуальная (текущая) информация о назначении пользователей на <a href="Catalog.РолиИсполнителей/Help">роль исполнителей</a> по указанному <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекту адресации задач</a>. </p> <p>Роли, на которые не назначено ни одного исполнителя, отмечены значком "внимание". Такая ситуация может приводить к возникновению зависших задач (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен <a href="Report.ЗависшиеЗадачи/Help">Отчет по зависшим задачам</a>, для получения уведомлений по зависшим задачам - предопределенная роль "<a href="Catalog.РолиИсполнителей/Help">Координатор выполнения задач</a>".</p> <p>См. также:</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss index 31980f61b..5e2a1d6aa 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss @@ -16,22 +16,4 @@ <viewMode>Normal</viewMode> <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> </conditionalAppearance> - <item xsi:type="StructureItemGroup"> - <groupItems> - <item xsi:type="GroupItemField"> - <field>ОсновнойОбъектАдресации</field> - <groupType>Items</groupType> - <periodAdditionType>None</periodAdditionType> - <periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</periodAdditionBegin> - <periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</periodAdditionEnd> - </item> - <item xsi:type="GroupItemField"> - <field>ДополнительныйОбъектАдресации</field> - <groupType>Items</groupType> - <periodAdditionType>None</periodAdditionType> - <periodAdditionBegin xsi:type="xs:dateTime">0001-01-01T00:00:00</periodAdditionBegin> - <periodAdditionEnd xsi:type="xs:dateTime">0001-01-01T00:00:00</periodAdditionEnd> - </item> - </groupItems> - </item> </Settings> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html index d89d191d2..bdba6669a 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке содержится актуальная (текущая) информация о назначении пользователей на <a href="Catalog.РолиИсполнителей/Help">роль исполнителей</a> по указанному <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекту адресации задач</a>. </p> <p>Роли, на которые не назначено ни одного исполнителя, отмечены значком "внимание". Такая ситуация может приводить к возникновению зависших задач (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен <a href="Report.ЗависшиеЗадачи/Help">Отчет по зависшим задачам</a>, для получения уведомлений по зависшим задачам - предопределенная роль "<a href="Catalog.РолиИсполнителей/Help">Координатор выполнения задач</a>".</p> <p>См. также:</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl index 897f44ec0..a58c52ebc 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -11,13 +11,15 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Исполнители, "РольИсполнителя", Параметры.РольИсполнителя, ВидСравненияКомпоновкиДанных.Равно); СвойстваРоли = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.РольИсполнителя, "ИспользуетсяСОбъектамиАдресации,ТипыДополнительногоОбъектаАдресации,ТипыОсновногоОбъектаАдресации"); - Если Не СвойстваРоли.ИспользуетсяСОбъектамиАдресации Тогда - Исполнители.Группировка.Элементы[0].Использование = Ложь; // ОсновнойОбъектАдресации - Исполнители.Группировка.Элементы[1].Использование = Ложь; // ДополнительныйОбъектАдресации - ИначеЕсли СвойстваРоли.ТипыДополнительногоОбъектаАдресации.Пустая() Тогда - Исполнители.Группировка.Элементы[1].Использование = Ложь; // ДополнительныйОбъектАдресации + Если СвойстваРоли.ИспользуетсяСОбъектамиАдресации Тогда + ПолеГруппировки = Исполнители.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("ОсновнойОбъектАдресации"); + ПолеГруппировки.Использование = Истина; + Если Не СвойстваРоли.ТипыДополнительногоОбъектаАдресации.Пустая() Тогда + ПолеГруппировки = Исполнители.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("ДополнительныйОбъектАдресации"); + ПолеГруппировки.Использование = Истина; + КонецЕсли; КонецЕсли; - КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index a4058b1fc..c3ee15673 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>В этом списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям</a> и <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектам адресации</a>, которая используется механизмом бизнес-процессов для доставки <a href="Task.ЗадачаИсполнителя/Help">задач</a> конкретным пользователям.</p> <p>Примеры заполнения списка ролевой адресации:</p> <p></p> diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html index e8ba9ba57..ffe0ae770 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html @@ -1,2 +1,2 @@ -<!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 9.00.8112.16455"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16470"></meta></head><body> <p>Система позволяет хранить графики работы, которые используются на предприятии.</p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/КалендарныеГрафики.mdo b/SSL/src/InformationRegisters/КалендарныеГрафики/КалендарныеГрафики.mdo index 7889d1a07..0dea4fbfe 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -81,7 +81,7 @@ <name>КоличествоДнейВГрафикеСНачалаГода</name> <synonym> <key>ru</key> - <value>(Не используется) Количество дней в графике с начала года</value> + <value>Количество дней в графике с начала года</value> </synonym> <type> <types>Number</types> diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl index c4f1ba8dd..4124c7df9 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl @@ -19,15 +19,16 @@ ПараметрыПолучения = Неопределено; Если Не ДополнительныеСвойства.Свойство("ПараметрыПолучения", ПараметрыПолучения) Тогда - ВызватьИсключение НСтр("ru = 'При записи данных в регистр сведений КэшПрограммныхИнтерфейсов из сеансов с включенным разделением требуется передавать параметры получения данных для кэша интерфейсов в дополнительном свойстве набора записей ПараметрыПолучения!'"); + ВызватьИсключение НСтр("ru = 'При записи данных в регистр сведений КэшПрограммныхИнтерфейсов из сеансов + |с включенным разделением требуется передавать параметры получения данных для кэша + |интерфейсов в дополнительном свойстве набора записей ПараметрыПолучения!'"); КонецЕсли; Для Каждого Запись Из ЭтотОбъект Цикл Данные = ОбщегоНазначения.ПодготовитьДанныеКэшаВерсий( - Запись.ТипДанных, ПараметрыПолучения - ); + Запись.ТипДанных, ПараметрыПолучения); Запись.Данные = Новый ХранилищеЗначения(Данные); КонецЦикла; @@ -48,9 +49,38 @@ // разделении по областям данных. Если ТребуетсяКонтроль Тогда - ЭтотОбъект.Загрузить(ТаблицаКонтроля); + + Для Каждого Запись Из ЭтотОбъект Цикл + + КонтрольныеСтроки = ТаблицаКонтроля.НайтиСтроки( + Новый Структура("Идентификатор, ТипДанных", Запись.Идентификатор, Запись.ТипДанных)); + + Если КонтрольныеСтроки.Количество() <> 1 Тогда + ОшибкаКонтроля(); + Иначе + + КонтрольнаяСтрока = КонтрольныеСтроки.Получить(0); + + ТекущиеДанные = ОбщегоНазначения.ЗначениеВСтрокуXML(Запись.Данные.Получить()); + КонтрольныеДанные = ОбщегоНазначения.ЗначениеВСтрокуXML(КонтрольнаяСтрока.Данные.Получить()); + + Если ТекущиеДанные <> КонтрольныеДанные Тогда + ОшибкаКонтроля(); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + КонецЕсли; КонецПроцедуры -#КонецЕсли \ No newline at end of file +Процедура ОшибкаКонтроля() + + ВызватьИсключение НСтр("ru = 'Недопустимое изменение ресурса Данные записи регистра сведений КэшПрограммныхИнтерфейсов + |внутри транзакции записи из сеанса с включенным разделением!'"); + +КонецПроцедуры + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl new file mode 100644 index 000000000..102867d06 --- /dev/null +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Commands/НазначениеДополнительныхОбработок/CommandModule.bsl @@ -0,0 +1,6 @@ +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + Отбор = Новый Структура("ОбъектНазначения", ПараметрКоманды); + ПараметрыФормы = Новый Структура("Отбор, РежимОткрытияИзФормы", Отбор, Истина); + ОткрытьФорму("РегистрСведений.НазначениеДополнительныхОбработок.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); +КонецПроцедуры 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..91027f589 --- /dev/null +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> +</Settings> diff --git a/SSL/src/Catalogs/СтраныМира/Forms/ФормаВыбора/Form.form b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Form.form similarity index 69% rename from SSL/src/Catalogs/СтраныМира/Forms/ФормаВыбора/Form.form rename to SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Form.form index d9af8c910..f332baa3a 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/ФормаВыбора/Form.form +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Form.form @@ -14,7 +14,7 @@ <defaultItem>true</defaultItem> <titleLocation>None</titleLocation> <items xsi:type="form:FormField"> - <name>Наименование</name> + <name>ОбъектНазначения</name> <id>4</id> <visible>true</visible> <enabled>true</enabled> @@ -22,12 +22,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Список.Description</segments> + <segments>Список.ОбъектНазначения</segments> </dataPath> <defaultItem>true</defaultItem> <extendedTooltip> - <name>НаименованиеРасширеннаяПодсказка</name> - <id>24</id> + <name>ОбъектНазначенияРасширеннаяПодсказка</name> + <id>28</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -36,7 +36,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>НаименованиеКонтекстноеМеню</name> + <name>ОбъектНазначенияКонтекстноеМеню</name> <id>5</id> <autoFill>true</autoFill> </contextMenu> @@ -51,7 +51,7 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>Код</name> + <name>ТипФормы</name> <id>6</id> <visible>true</visible> <enabled>true</enabled> @@ -59,11 +59,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Список.Code</segments> + <segments>Список.ТипФормы</segments> </dataPath> + <defaultItem>true</defaultItem> <extendedTooltip> - <name>КодРасширеннаяПодсказка</name> - <id>26</id> + <name>ТипФормыРасширеннаяПодсказка</name> + <id>30</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -72,7 +73,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КодКонтекстноеМеню</name> + <name>ТипФормыКонтекстноеМеню</name> <id>7</id> <autoFill>true</autoFill> </contextMenu> @@ -87,7 +88,7 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>КодАльфа2</name> + <name>УдалитьТипОбъекта</name> <id>8</id> <visible>true</visible> <enabled>true</enabled> @@ -95,11 +96,12 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Список.КодАльфа2</segments> + <segments>Список.УдалитьТипОбъекта</segments> </dataPath> + <defaultItem>true</defaultItem> <extendedTooltip> - <name>КодАльфа2РасширеннаяПодсказка</name> - <id>28</id> + <name>УдалитьТипОбъектаРасширеннаяПодсказка</name> + <id>32</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -108,7 +110,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КодАльфа2КонтекстноеМеню</name> + <name>УдалитьТипОбъектаКонтекстноеМеню</name> <id>9</id> <autoFill>true</autoFill> </contextMenu> @@ -123,17 +125,20 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>КодАльфа3</name> + <name>ИспользоватьЗаполнениеОбъекта</name> <id>10</id> <visible>true</visible> <enabled>true</enabled> - <userVisible/> + <userVisible> + <common>true</common> + </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Список.КодАльфа3</segments> + <segments>Список.ИспользоватьЗаполнениеОбъекта</segments> </dataPath> + <defaultItem>true</defaultItem> <extendedTooltip> - <name>КодАльфа3РасширеннаяПодсказка</name> - <id>30</id> + <name>ИспользоватьЗаполнениеОбъектаРасширеннаяПодсказка</name> + <id>34</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -142,36 +147,32 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КодАльфа3КонтекстноеМеню</name> + <name>ИспользоватьЗаполнениеОбъектаКонтекстноеМеню</name> <id>11</id> <autoFill>true</autoFill> </contextMenu> - <type>LabelField</type> + <type>CheckBoxField</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> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> </items> <items xsi:type="form:FormField"> - <name>НаименованиеПолное</name> + <name>ИспользоватьОтчеты</name> <id>12</id> - <title> - <key>ru</key> - <value>Полное наименование</value> - true true - + + true + - Список.НаименованиеПолное + Список.ИспользоватьОтчеты + true - НаименованиеПолноеРасширеннаяПодсказка - 32 + ИспользоватьОтчетыРасширеннаяПодсказка + 36 Label true true @@ -180,19 +181,84 @@ - НаименованиеПолноеКонтекстноеМеню + ИспользоватьОтчетыКонтекстноеМеню 13 true - LabelField + CheckBoxField Enter true Left true - + + + + ИспользоватьПечатныеФормы + 14 + true + true + + true + + + Список.ИспользоватьПечатныеФормы + + true + + ИспользоватьПечатныеФормыРасширеннаяПодсказка + 38 + Label true true - + + Left + + + + ИспользоватьПечатныеФормыКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьСозданиеСвязанныхОбъектов + 16 + true + true + + true + + + Список.ИспользоватьСозданиеСвязанныхОбъектов + + true + + ИспользоватьСозданиеСвязанныхОбъектовРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ИспользоватьСозданиеСвязанныхОбъектовКонтекстноеМеню + 17 + true + + CheckBoxField + Enter + true + Left + true + None @@ -202,10 +268,10 @@ СписокСтрокаПоиска - 15 + 19 СписокСтрокаПоискаРасширеннаяПодсказка - 17 + 21 Label true true @@ -215,7 +281,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 16 + 20 true Список @@ -225,10 +291,10 @@ СписокСостояниеПросмотра - 18 + 22 СписокСостояниеПросмотраРасширеннаяПодсказка - 20 + 24 Label true true @@ -238,7 +304,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 19 + 23 true ViewStatusAddition @@ -249,10 +315,10 @@ СписокУправлениеПоиском - 21 + 25 СписокУправлениеПоискомРасширеннаяПодсказка - 23 + 27 Label true true @@ -262,7 +328,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 22 + 26 true SearchControlAddition @@ -273,7 +339,7 @@ СписокРасширеннаяПодсказка - 14 + 18 Label true true @@ -291,7 +357,6 @@ true true true - true MultiRow
            true
            1 @@ -330,7 +395,11 @@ Left true - LockOwner + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock true true true @@ -355,13 +424,19 @@
            true
            - Catalog.СтраныМира + InformationRegister.НазначениеДополнительныхОбработок true true true true + + РежимОткрытияИзФормы + + Boolean + + diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..d8e1aa907 --- /dev/null +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.РежимОткрытияИзФормы Тогда + Элементы.ОбъектНазначения.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl index 4d2b7dc71..304920963 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/ManagerModule.bsl @@ -32,11 +32,10 @@ // Полностью перезаполняет данные регистра. // -Процедура Обновить() Экспорт +Процедура Обновить(РежимОбновленияИБ = Ложь) Экспорт + Запрос = НовыйЗапросОбновленияДанныхРегистра(Неопределено); - ВыборкаСсылок = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - НаборЗаписей = СоздатьНаборЗаписей(); Пока ВыборкаСсылок.Следующий() Цикл ВыборкаЗаписей = ВыборкаСсылок.Выбрать(); @@ -44,7 +43,13 @@ ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), ВыборкаЗаписей); КонецЦикла; КонецЦикла; - НаборЗаписей.Записать(Истина); + + Если РежимОбновленияИБ Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; + КонецПроцедуры // Возвращает текст запроса, который используется для обновления данных регистра @@ -166,8 +171,7 @@ ТекстЗапроса, "ДополнительныеОтчетыИОбработкиНазначение.ОбъектНазначения В(&СсылкиОбъектовМетаданных) | И ", - "" - ); + ""); Иначе Запрос.УстановитьПараметр("СсылкиОбъектовМетаданных", СсылкиОбъектовМетаданных); КонецЕсли; @@ -183,4 +187,4 @@ Возврат Запрос; КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo index 8b421bcd3..d88a94312 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo @@ -16,6 +16,7 @@ true InDialog + InformationRegister.НазначениеДополнительныхОбработок.Form.ФормаСписка Use Active @@ -189,4 +190,25 @@ + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + НазначениеДополнительныхОбработок + + ru + Назначение дополнительных обработок + + FormNavigationPanelGoTo + + CatalogRef.ИдентификаторыОбъектовМетаданных + + Auto + diff --git a/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo b/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo index c1397cc5b..6b0b6d98f 100644 --- a/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo +++ b/SSL/src/InformationRegisters/НаличиеПрисоединенныхФайлов/НаличиеПрисоединенныхФайлов.mdo @@ -101,6 +101,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 91cfcb449..3a5d35387 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -31,6 +31,12 @@ ЭтоНовый = Не ЗначениеЗаполнено(Объект.ИсходныйКлючЗаписи); Элементы.Прекратить.Видимость = Не ЭтоНовый; + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Элементы.СпособУстановкиВремениНапоминания["КнопкаВыпадающегоСписка"] = Истина; + Элементы.Время["КнопкаВыпадающегоСписка"] = Истина; + Элементы.ИнтервалВремениОтносительноИсточника["КнопкаВыпадающегоСписка"] = Истина; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -123,6 +129,8 @@ Если ЗначениеЗаполнено(Объект.Источник) Тогда ОповеститьОбИзменении(Объект.Источник); КонецЕсли; + + Оповестить("Запись_НапоминанияПользователя", Новый Структура, ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -304,7 +312,7 @@ КонецЕсли; КонецЦикла; - // получаем переопределённый массив реквизитов + // получаем переопределенный массив реквизитов ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.НапоминанияПользователя\ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания"); Для Каждого Обработчик Из ОбработчикиСобытия Цикл diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 373b096c2..4ed1f078b 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -728,6 +728,10 @@ OnReopen ПриПовторномОткрытии + + OnCreateAtServer + ПриСозданииНаСервере + OnClose ПриЗакрытии diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index af4e53d2b..08794d42d 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -1,6 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Элементы.СрокПовторногоОповещения["КнопкаВыпадающегоСписка"] = Истина; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ПриОткрытии(Отказ) СрокПовторногоОповещения = "15м"; @@ -135,16 +146,15 @@ СтрокаНайдена = Ложь; Для Каждого СтрокаКэша Из ТаблицаНапоминаний Цикл - Если СтрокаКэша.Источник = Напоминание.Источник - И СтрокаКэша.ВремяСобытия = Напоминание.ВремяСобытия Тогда - СтрокаНайдена = Истина; + Если СтрокаКэша.Источник = Напоминание.Источник И СтрокаКэша.ВремяСобытия = Напоминание.ВремяСобытия Тогда + СтрокаНайдена = Истина; Прервать; КонецЕсли; КонецЦикла; Если не СтрокаНайдена Тогда - СтрокиНаУдаление.Добавить(Напоминание); - КонецЕсли; - КонецЦикла; + СтрокиНаУдаление.Добавить(Напоминание); + КонецЕсли; + КонецЦикла; Для Каждого Строка Из СтрокиНаУдаление Цикл Напоминания.Удалить(Строка); @@ -154,7 +164,7 @@ Интервал = 15; // обновление таблицы не реже чем 1 раз в 15 сек. Если ВремяБлижайшего <> Неопределено Тогда - Интервал = Мин(Интервал, ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса()); + Интервал = Макс(Мин(Интервал, ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса()), 1); КонецЕсли; ПодключитьОбработчикОжидания("ОбновитьТаблицуНапоминаний", Интервал, Истина); diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form index 5b4177f74..b957a0073 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form @@ -42,7 +42,7 @@ None КартинкаРасширеннаяПодсказка - 58 + 60 Label true true @@ -86,7 +86,7 @@ НаименованиеОбъектаРасширеннаяПодсказка - 60 + 62 Label true true @@ -132,7 +132,7 @@ КартинкаНаименованиеРасширеннаяПодсказка - 57 + 59 Label true true @@ -160,7 +160,7 @@ ВариантВерсионированияРасширеннаяПодсказка - 62 + 64 Label true true @@ -206,10 +206,10 @@ ДеревоОбъектовМетаданныхСтрокаПоиска - 48 + 50 ДеревоОбъектовМетаданныхСтрокаПоискаРасширеннаяПодсказка - 50 + 52 Label true true @@ -219,7 +219,7 @@ ДеревоОбъектовМетаданныхСтрокаПоискаКонтекстноеМеню - 49 + 51 true ДеревоОбъектовМетаданных @@ -229,10 +229,10 @@ ДеревоОбъектовМетаданныхСостояниеПросмотра - 51 + 53 ДеревоОбъектовМетаданныхСостояниеПросмотраРасширеннаяПодсказка - 53 + 55 Label true true @@ -242,7 +242,7 @@ ДеревоОбъектовМетаданныхСостояниеПросмотраКонтекстноеМеню - 52 + 54 true ViewStatusAddition @@ -253,10 +253,10 @@ ДеревоОбъектовМетаданныхУправлениеПоиском - 54 + 56 ДеревоОбъектовМетаданныхУправлениеПоискомРасширеннаяПодсказка - 56 + 58 Label true true @@ -266,7 +266,7 @@ ДеревоОбъектовМетаданныхУправлениеПоискомКонтекстноеМеню - 55 + 57 true SearchControlAddition @@ -277,7 +277,7 @@ ДеревоОбъектовМетаданныхРасширеннаяПодсказка - 47 + 49 Label true true @@ -299,7 +299,7 @@ false КМ_УстановитьВариантВерсионированияПриПроведенииРасширеннаяПодсказка - 42 + 44 Label true true @@ -326,7 +326,7 @@ false КМ_УстановитьВариантВерсионированияВсегдаРасширеннаяПодсказка - 43 + 45 Label true true @@ -353,7 +353,7 @@ false КМ_УстановитьВариантВерсионированияНеВерсионироватьРасширеннаяПодсказка - 44 + 46 Label true true @@ -383,7 +383,7 @@ false КМ_УстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка - 46 + 48 Label true true @@ -414,7 +414,7 @@ ДеревоОбъектовМетаданныхКонтекстноеМенюГруппаКнопокРасширеннаяПодсказка - 45 + 47 Label true true @@ -468,7 +468,7 @@ false УстановитьВариантВерсионированияНеВерсионироватьРасширеннаяПодсказка - 36 + 37 Label true true @@ -495,7 +495,7 @@ false УстановитьВариантВерсионированияВсегдаРасширеннаяПодсказка - 37 + 38 Label true true @@ -522,7 +522,7 @@ false УстановитьВариантВерсионированияПриПроведенииРасширеннаяПодсказка - 38 + 39 Label true true @@ -552,7 +552,7 @@ false УстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка - 40 + 41 Label true true @@ -583,7 +583,7 @@ КоманднаяПанельГруппаКнопокРасширеннаяПодсказка - 39 + 40 Label true true @@ -608,7 +608,7 @@ ВариантВерсионированияГруппаРасширеннаяПодсказка - 35 + 36 Label true true @@ -640,7 +640,7 @@ КомандыСпискаРасширеннаяПодсказка - 41 + 42 Label true true @@ -652,6 +652,33 @@ Item.ДеревоОбъектовМетаданных
            + + ДеревоОбъектовМетаданныхОбновить + 35 + true + true + + true + + + ДеревоОбъектовМетаданныхОбновитьРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -924,6 +951,32 @@ Auto Auto + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 5 + + ru + Обновить + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + Auto + Auto + diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl index 55dd99d3b..16c719c00 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl @@ -88,10 +88,15 @@ &НаКлиенте Процедура УстановитьНастройкиПоУмолчанию(Команда) - УстановитьНастройкиПоУмолчаниюСервер(); + УстановитьВариантВерсионированияДляВыделенныхСтрок(Неопределено); КонецПроцедуры +&НаКлиенте +Процедура Обновить(Команда) + ЗаполнитьТипыОбъектовВДеревеЗначений(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -200,33 +205,16 @@ КонецФункции -&НаСервере -Процедура УстановитьНастройкиПоУмолчаниюСервер() - - Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл - - ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - - Если ПустаяСтрока(ЭлементДерева.ТипОбъекта) Тогда - Продолжить; - КонецЕсли; - - Если ЭлементДерева.КлассОбъекта = "КлассДокументы" Тогда - УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); - Иначе - УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - &НаСервере Процедура УстановитьВариантВерсионированияДляВыделенныхСтрок(Знач ВариантВерсионирования) Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если Не ПустаяСтрока(ЭлементДерева.ТипОбъекта) Тогда + Если ПустаяСтрока(ЭлементДерева.ТипОбъекта) Тогда + Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл + УстановитьВариантВерсионированияДляЭлементаДерева(ПодчиненныйЭлементДерева, ВариантВерсионирования); + КонецЦикла; + Иначе УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, ВариантВерсионирования); КонецЕсли; КонецЦикла; @@ -236,6 +224,14 @@ &НаСервере Процедура УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Знач ВариантВерсионирования) + Если ВариантВерсионирования = Неопределено Тогда + Если ЭлементДерева.КлассОбъекта = "КлассДокументы" Тогда + ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении; + Иначе + ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; + КонецЕсли; + КонецЕсли; + Если ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении И Не ЭлементДерева.Проводится Тогда ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html index ad992fdda..1d8a0091a 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            • Не версионировать - история версий объекта не ведется;
            • Версионировать при записи - новая запись заносится в историю версий каждый раз при изменении (или создании нового) справочника или документа; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form index cf8599ec7..6109af6a6 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form @@ -1,69 +1,30 @@ - + <key>ru</key> - <value>Настройка подключения к Интернету</value> + <value>Настройка подключения к приложению в Интернете</value> - - WSИмяПользователя - 5 - true - true - - true - - - Запись.WSИмяПользователя - - - WSИмяПользователяРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - WSИмяПользователяКонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - Normal - - - Группа1 - 9 + Группа2 + 14 - WSПароль - 7 + Пользователь + 20 true true true - Запись.WSПароль + Пользователь + + ru + Пользователь приложения в Интернете + - WSПарольРасширеннаяПодсказка - 19 + ПользовательРасширеннаяПодсказка + 26 Label true true @@ -72,8 +33,8 @@ - WSПарольКонтекстноеМеню - 8 + ПользовательКонтекстноеМеню + 21 true InputField @@ -87,24 +48,100 @@ true false true - true + false + true true true true Normal - - ЗабылиПароль - 12 + + Группа1 + 9 + + WSПароль + 7 + true + true + + true + + + Запись.WSПароль + + + ru + Пароль пользователя приложения в Интернете + + + WSПарольРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + ЗабылиПароль + 12 + true + true + + true + + + ЗабылиПарольРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + true true true - ЗабылиПарольРасширеннаяПодсказка - 21 + Группа1РасширеннаяПодсказка + 28 Label true true @@ -112,23 +149,127 @@ Left - Hyperlink - Form.Command.ЗабылиПароль - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа3 + 15 + + Декорация4 + 16 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 17 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + Декорация3 + 18 + + <key>ru</key> + <value>Хранение пароля в программе небезопасно. +Для автоматической синхронизации данных с приложением в Интернете +рекомендуется указывать отдельного пользователя +с ограниченными правами (только права на синхронизацию данных).</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 19 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 32 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + true true true + + <key>ru</key> + <value>Имя и пароль пользователя приложения в Интернете</value> + - Группа1РасширеннаяПодсказка - 18 + Группа2РасширеннаяПодсказка + 25 Label true true @@ -138,47 +279,16 @@ UsualGroup + Vertical Auto + StrongSeparation true true + auto Auto Auto - - WSЗапомнитьПароль - 3 - true - true - - true - - - Запись.WSЗапомнитьПароль - - Right - - WSЗапомнитьПарольРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - - WSЗапомнитьПарольКонтекстноеМеню - 4 - true - - CheckBoxField - Enter - true - Left - true - - ПараметрыДоступаВИнтернет 13 @@ -189,7 +299,7 @@ ПараметрыДоступаВИнтернетРасширеннаяПодсказка - 24 + 35 Label true true @@ -212,17 +322,20 @@ ФормаКоманднаяПанель -1 - ПроверитьПодключениеИЗакрыть - 10 + ФормаЗаписатьИЗакрыть + 22 + + <key>ru</key> + <value>Проверить подключение и закрыть</value> + true true true - true - ПроверитьПодключениеИЗакрытьРасширеннаяПодсказка - 14 + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 23 Label true true @@ -230,7 +343,7 @@ Left - Form.Command.ПроверитьПодключениеИЗакрыть + Form.StandardCommand.WriteAndClose Auto true true @@ -248,7 +361,7 @@ ФормаЗакрытьРасширеннаяПодсказка - 15 + 24 Label true true @@ -282,7 +395,6 @@ Retry SaveValues Write - WriteAndClose Yes LockOwner true @@ -343,28 +455,23 @@ true - - ПроверитьПодключениеИЗакрыть + + Пользователь <key>ru</key> - <value>Проверить подключение и закрыть</value> + <value>Пользователь приложения</value> - 1 - - ru - Проверить подключение и закрыть - - + 4 + + CatalogRef.Пользователи + + true - - - - ПроверитьПодключениеИЗакрыть - - - Auto - Auto - + + + true + + ЗабылиПароль @@ -374,7 +481,7 @@ <id>2</id> <toolTip> <key>ru</key> - <value>Забыли пароль</value> + <value>Переход к странице восстановления пароля</value> </toolTip> <use> <common>true</common> @@ -418,5 +525,9 @@ <event>BeforeWrite</event> <name>ПередЗаписью</name> </handlers> + <handlers> + <event>BeforeWriteAtServer</event> + <name>ПередЗаписьюНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl index caa73a2fc..859046cbc 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -8,6 +8,10 @@ Возврат; КонецЕсли; + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; НастройкаАвтоматическойСинхронизации = Параметры.НастройкаАвтоматическойСинхронизации; @@ -17,55 +21,51 @@ Элементы.ПараметрыДоступаВИнтернет.Видимость = Ложь; КонецЕсли; + Если Не ПустаяСтрока(Запись.WSИмяПользователя) Тогда + + Пользователь = Пользователи.НайтиПоИмени(Запись.WSИмяПользователя); + + КонецЕсли; + + Для Каждого ПользовательСинхронизации Из ПользователиСинхронизацииДанных() Цикл + + Элементы.Пользователь.СписокВыбора.Добавить(ПользовательСинхронизации.Пользователь, ПользовательСинхронизации.Представление); + + КонецЦикла; + КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + ПроверитьПодключениеКСервису(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + Если НастройкаАвтоматическойСинхронизации Тогда Оповестить("Запись_НастройкиТранспортаОбмена", - Новый Структура("НастройкаАвтоматическойСинхронизации, WSЗапомнитьПароль", НастройкаАвтоматическойСинхронизации, Запись.WSЗапомнитьПароль) - ); - + Новый Структура("НастройкаАвтоматическойСинхронизации")); КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ТекущийОбъект.WSЗапомнитьПароль = Истина; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ -&НаКлиенте -Процедура ПроверитьПодключениеИЗакрыть(Команда) - - Отказ = Ложь; - - ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ); - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Не удалось установить подключение к приложению в Интернете.'")); - - Иначе - - Если НастройкаАвтоматическойСинхронизации Тогда - - Оповестить("Запись_НастройкиТранспортаОбмена", - Новый Структура("НастройкаАвтоматическойСинхронизации, WSЗапомнитьПароль", НастройкаАвтоматическойСинхронизации, Запись.WSЗапомнитьПароль) - ); - - КонецЕсли; - - Закрыть(); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ЗабылиПароль(Команда) - ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(); + ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры @@ -80,21 +80,74 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере -Процедура ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ) +Процедура ПроверитьПодключениеКСервису(Отказ) + УстановитьПривилегированныйРежим(Истина); + + // Определяем имя пользователя + СвойстваПользователя = Неопределено; + + Пользователи.ПрочитатьПользователяИБ( + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ"), + СвойстваПользователя); + Если СвойстваПользователя <> Неопределено Тогда + Запись.WSИмяПользователя = СвойстваПользователя.Имя + КонецЕсли; + + // Выполняем проверку подключения к корреспонденту ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); СообщениеПользователю = ""; Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "Запись.WSПароль",, Отказ); - Возврат; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - - Записать(); - КонецПроцедуры - +&НаСервере +Функция ПользователиСинхронизацииДанных() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Пользователь"); // Тип: СправочникСсылка.Пользователи + Результат.Колонки.Добавить("Представление"); + + ТекстЗапроса = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | Пользователи.Наименование КАК Представление, + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | НЕ Пользователи.ПометкаУдаления + | И НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | + |УПОРЯДОЧИТЬ ПО + | Пользователи.Наименование"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено + И ОбменДаннымиСервер.СинхронизацияДанныхРазрешена(ПользовательИБ) Тогда + + ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form new file mode 100644 index 000000000..9d171df27 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -0,0 +1,419 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Decoration"> + <name>Пояснение</name> + <id>7</id> + <title> + <key>ru</key> + <value>Не удалось обновить информационную базу. +Техническую информацию см. в журнале регистрации:</value> + + true + true + + true + + + ПояснениеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 8 + true + + Label + true + true + + Left + + + + ЖурналРегистрации + 12 + + <key>ru</key> + <value>Журнал регистрации</value> + + true + true + + true + + + ru + Просмотр ошибок (в том числе ошибок загрузки сообщения обмена данными) + + + ЖурналРегистрацииРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ЖурналРегистрацииКонтекстноеМеню + 13 + true + + Label + true + 2 + true + + + Click + ЖурналРегистрацииНажатие + + true + Left + Top + + + + Пояснение1 + 18 + + <key>ru</key> + <value>1. Рекомендуется получить новое сообщение обмена из главного узла. +Для этого нажмите "Синхронизировать и продолжить". +При необходимости укажите параметры подключения для синхронизации данных:</value> + + true + true + + true + + + Пояснение1РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + Пояснение1КонтекстноеМеню + 19 + true + + Label + true + true + + Left + + + + ПараметрыПодключенияПриСинхронизацииДанных + 15 + + <key>ru</key> + <value>Параметры подключения при синхронизации данных</value> + + true + true + + true + + + ru + Настройка параметров подключения в случае, если они не заполнены или содержат ошибку. + + + ПараметрыПодключенияПриСинхронизацииДанныхРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ПараметрыПодключенияПриСинхронизацииДанныхКонтекстноеМеню + 16 + true + + Label + true + 2 + true + + + Click + ПараметрыПодключенияПриСинхронизацииДанныхНажатие + + true + Left + Top + + + + Пояснение2 + 21 + + <key>ru</key> + <value>2. В случае, если сообщение обмена было успешно получено, +но информационную базу не удалось обновить по другим причинам, +нажмите "Не синхронизировать и продолжить" для повторной попытки обновления.</value> + + true + true + + true + + + Пояснение2РасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + Пояснение2КонтекстноеМеню + 22 + true + + Label + true + true + + Left + + + + ДополнительныеСведения + 10 + true + true + + true + + + <key>ru</key> + <value>Дополнительные сведения</value> + + + ДополнительныеСведенияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаСинхронизироватьИПродолжить + 1 + true + true + + true + + + ФормаСинхронизироватьИПродолжитьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.СинхронизироватьИПродолжить + Auto + true + true + true + UserCmds + Auto + + + ФормаНеСинхронизироватьИПродолжить + 3 + true + true + + true + + + ФормаНеСинхронизироватьИПродолжитьРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.Command.НеСинхронизироватьИПродолжить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗавершитьРаботу + 5 + true + true + + true + + + ФормаЗавершитьРаботуРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Command.ЗавершитьРаботу + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 66 + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ГлавныйУзел + + <key>ru</key> + <value>Главный узел</value> + + 1 + + + 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 + + + ГлавныйУзел + + + + + + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl new file mode 100644 index 000000000..227bc70a9 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -0,0 +1,146 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ГлавныйУзел = ПланыОбмена.ГлавныйУзел(); + + УстановитьДоступность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыПодключенияПриСинхронизацииДанныхНажатие(Элемент) + + Отбор = Новый Структура("Узел", ГлавныйУзел); + ЗначенияЗаполнения = Новый Структура("Узел", ГлавныйУзел); + + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору( + Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ЖурналРегистрацииНажатие(Элемент) + + ПараметрыФормы = Новый Структура; + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура СинхронизироватьИПродолжить(Команда) + + ТекстПредупреждения = ЗагрузитьИПродолжитьНаСервере(); + Если ПустаяСтрока(ТекстПредупреждения) Тогда + Закрыть("Продолжить"); + Иначе + Предупреждение(ТекстПредупреждения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НеСинхронизироватьИПродолжить(Команда) + + ПродолжитьЗапускНаСервере(); + + Закрыть("Продолжить"); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьРаботу(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаСервере +Процедура ПродолжитьЗапускНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь); + КонецЕсли; + + ДобавитьУправляющийПараметр("ПропуститьПовторнуюЗагрузкуСообщенияОбменаДанными"); + +КонецПроцедуры + +&НаСервере +Функция ЗагрузитьИПродолжитьНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + Если КонфигурацияИзменена() Тогда + Возврат + НСтр("ru = 'Из главного узла получены изменения, которые ещё не применены. + |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + КонецЕсли; + + Попытка + Справочники.ИдентификаторыОбъектовМетаданных.ПроверкаИспользования(); + Исключение + // Если ИдентификаторыОбъектовМетаданных не используются, + // тогда предварительная синхронизация не требуется. + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + Возврат ""; + КонецПопытки; + + ТекстПредупреждения = ""; + Отказ = Ложь; + Попытка + ОбменДаннымиСервер.ПередПроверкойИдентификаторовОбъектовМетаданныхВПодчиненномУзлеРИБ(Отказ); + Исключение + Отказ = Истина; + КонецПопытки; + + Если НЕ Отказ Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + ДобавитьУправляющийПараметр("ИдентификаторыОбъектовМетаданныхВПодчиненномУзлеУжеЗагружены"); + + ИначеЕсли КонфигурацияИзменена() Тогда + Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина); + ТекстПредупреждения = + НСтр("ru = 'Из главного узла получены изменения, которые нужно применить. + |Требуется открыть конфигуратор и обновить конфигурацию базы данных.'"); + Иначе + ТекстПредупреждения = + НСтр("ru = 'Получение данных из главного узла завершилось с ошибками. + |Подробности см. в журнале регистрации.'"); + КонецЕсли; + + УстановитьДоступность(); + + Возврат ТекстПредупреждения; + +КонецФункции + +&НаСервере +Процедура УстановитьДоступность() + + Если ОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными() + И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + + Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Ложь; + Элементы.Пояснение2.Доступность = Ложь; + Иначе + Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Истина; + Элементы.Пояснение2.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьУправляющийПараметр(Имя) + + ТекущиеПараметры = Новый Соответствие; + Для Каждого КлючИЗначение Из ПараметрыСеанса.ПараметрыКлиентаНаСервере Цикл + ТекущиеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ТекущиеПараметры.Вставить(Имя, Истина); + + ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index 4eced9350..81f77c6d7 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -41,8 +41,6 @@ true false true - true - false true true true @@ -883,40 +881,6 @@ UserCmds Auto - - WSИспользоватьПередачуБольшогоОбъемаДанных - 107 - true - true - - true - - - Запись.WSИспользоватьПередачуБольшогоОбъемаДанных - - Right - - WSИспользоватьПередачуБольшогоОбъемаДанныхРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - - WSИспользоватьПередачуБольшогоОбъемаДанныхКонтекстноеМеню - 108 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -962,7 +926,7 @@ FILEКаталогОбменаИнформациейРасширеннаяПодсказка - 162 + 160 Label true true @@ -1011,7 +975,7 @@ false ПроверитьПодключениеFILEРасширеннаяПодсказка - 164 + 162 Label true true @@ -1045,7 +1009,7 @@ Right FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 166 + 164 Label true true @@ -1078,7 +1042,7 @@ ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка - 168 + 166 Label true true @@ -1116,7 +1080,7 @@ Группа1РасширеннаяПодсказка - 165 + 163 Label true true @@ -1150,7 +1114,7 @@ НастройкиТранспортаFILEРасширеннаяПодсказка - 161 + 159 Label true true @@ -1183,7 +1147,7 @@ FTPСоединениеПутьРасширеннаяПодсказка - 172 + 170 Label true true @@ -1224,7 +1188,7 @@ FTPСоединениеПортРасширеннаяПодсказка - 174 + 172 Label true true @@ -1271,7 +1235,7 @@ ГруппаСерверПортРасширеннаяПодсказка - 171 + 169 Label true true @@ -1304,7 +1268,7 @@ FTPСоединениеПользовательРасширеннаяПодсказка - 177 + 175 Label true true @@ -1345,7 +1309,7 @@ FTPСоединениеПарольРасширеннаяПодсказка - 179 + 177 Label true true @@ -1389,7 +1353,7 @@ ГруппаПользовательПарольРасширеннаяПодсказка - 176 + 174 Label true true @@ -1422,7 +1386,7 @@ FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 182 + 180 Label true true @@ -1465,7 +1429,7 @@ Декорация1РасширеннаяПодсказка - 184 + 182 Label true true @@ -1492,7 +1456,7 @@ Группа7РасширеннаяПодсказка - 181 + 179 Label true true @@ -1523,7 +1487,7 @@ Right FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка - 185 + 183 Label true true @@ -1553,7 +1517,7 @@ ПараметрыДоступаВИнтернет1РасширеннаяПодсказка - 187 + 185 Label true true @@ -1581,7 +1545,7 @@ false ПроверитьПодключениеFTPРасширеннаяПодсказка - 188 + 186 Label true true @@ -1615,7 +1579,7 @@ Right FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 190 + 188 Label true true @@ -1648,7 +1612,7 @@ ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка - 192 + 190 Label true true @@ -1686,7 +1650,7 @@ Группа3РасширеннаяПодсказка - 189 + 187 Label true true @@ -1720,7 +1684,7 @@ НастройкиТранспортаFTPРасширеннаяПодсказка - 170 + 168 Label true true @@ -1750,7 +1714,7 @@ EMAILУчетнаяЗаписьРасширеннаяПодсказка - 195 + 193 Label true true @@ -1794,7 +1758,7 @@ EMAILМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 198 + 196 Label true true @@ -1837,7 +1801,7 @@ Декорация2РасширеннаяПодсказка - 200 + 198 Label true true @@ -1864,7 +1828,7 @@ Группа8РасширеннаяПодсказка - 197 + 195 Label true true @@ -1892,7 +1856,7 @@ false ПроверитьПодключениеEMAILРасширеннаяПодсказка - 201 + 199 Label true true @@ -1926,7 +1890,7 @@ Right EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 203 + 201 Label true true @@ -1959,7 +1923,7 @@ ПарольАрхиваСообщенияОбмена2РасширеннаяПодсказка - 205 + 203 Label true true @@ -1997,7 +1961,7 @@ Группа4РасширеннаяПодсказка - 202 + 200 Label true true @@ -2031,7 +1995,7 @@ НастройкиТранспортаEMAILРасширеннаяПодсказка - 194 + 192 Label true true @@ -2090,7 +2054,7 @@ КоличествоЭлементовВТранзакцииЗагрузкиДанныхРасширеннаяПодсказка - 208 + 206 Label true true @@ -2131,7 +2095,7 @@ КоличествоЭлементовВТранзакцииВыгрузкиДанныхРасширеннаяПодсказка - 210 + 208 Label true true @@ -2174,7 +2138,7 @@ ДополнительныеНастройкиРасширеннаяПодсказка - 207 + 205 Label true true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html index deac36d76..5fe1c2a06 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html @@ -1,4 +1,4 @@ - +

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

              Общими для всех являются следующие настройки:

              • "Вид транспорта сообщений обмена по умолчанию" – поле для задания вида транспорта, который будет использоваться по умолчанию при выполнении автоматического и интерактивного обмена данными. diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl index b34a58d46..a86d1c4ad 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -49,15 +49,34 @@ КонецФункции -Функция НастройкиТранспортаWS(Узел, Пароль = "") Экспорт +Функция НастройкиТранспортаWS(Узел, ПараметрыАутентификации = Неопределено) Экспорт СтруктураНастроек = ПолучитьСтруктуруНастроек("WS"); Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); - Если Не Результат.WSЗапомнитьПароль Тогда + Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента - Результат.WSПароль = Пароль; + Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда + + Результат.WSИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; + + КонецЕсли; + + Пароль = Неопределено; + + Если ПараметрыАутентификации.Свойство("Пароль", Пароль) + И Пароль <> Неопределено Тогда // Ввели пароль на клиенте + + Результат.WSПароль = Пароль; + + Иначе // Пароль на клиенте не вводили + + Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Узел); + + Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); + + КонецЕсли; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo index b49afa23c..945c137b9 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo @@ -684,4 +684,13 @@ PersonalComputer MobileDevice + + ПовторнаяСинхронизацияДанныхПередЗапуском + + ru + Повторная синхронизация данных перед запуском + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl index 3fbbdc2f5..a43561924 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl @@ -24,8 +24,7 @@ Если РезультатЗапроса.Пустой() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не заданы настройки подключения для корреспондента ""%1"".'"), Строка(Корреспондент) - ); + НСтр("ru = 'Не заданы настройки подключения для корреспондента ""%1"".'"), Строка(Корреспондент)); КонецЕсли; Выборка = РезультатЗапроса.Выбрать(); @@ -38,8 +37,7 @@ ИЛИ ПустаяСтрока(ОтносительныйКаталогОбменаИнформацией) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не заданы настройки подключения для корреспондента ""%1"".'"), Строка(Корреспондент) - ); + НСтр("ru = 'Не заданы настройки подключения для корреспондента ""%1"".'"), Строка(Корреспондент)); КонецЕсли; Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщийКаталогОбменаИнформацией, ОтносительныйКаталогОбменаИнформацией); @@ -127,15 +125,13 @@ Результат.FILEКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( Результат.FILEОбщийКаталогОбменаИнформацией, - Результат.FILEОтносительныйКаталогОбменаИнформацией - ); + Результат.FILEОтносительныйКаталогОбменаИнформацией); Результат.FTPСоединениеПуть = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( Результат.FTPОбщийКаталогОбменаИнформацией, - Результат.FTPОтносительныйКаталогОбменаИнформацией - ); + Результат.FTPОтносительныйКаталогОбменаИнформацией); - Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Ложь); + Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); Возврат Результат; КонецФункции @@ -163,8 +159,7 @@ Если РезультатЗапроса.Пустой() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не заданы настройки подключения веб-сервиса для корреспондента %1.'"), - Строка(Корреспондент) - ); + Строка(Корреспондент)); КонецЕсли; Возврат ОбменДаннымиСервер.РезультатЗапросаВСтруктуру(РезультатЗапроса); @@ -188,4 +183,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index b8e4bff06..06a2ec554 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -17,8 +17,7 @@ СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); СтруктураЗаписи.Вставить("НачальнаяВыгрузкаДанных", Истина); СтруктураЗаписи.Вставить("НомерОтправленногоНачальнаяВыгрузкаДанных", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "НомерОтправленного") + 1 - ); + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "НомерОтправленного") + 1); ОбновитьЗапись(СтруктураЗаписи); @@ -220,6 +219,70 @@ // +Процедура УстановитьПризнакОтправкиДанных(Знач Получатель) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Получатель); + СтруктураЗаписи.Вставить("ВыполнитьОтправкуДанных", Истина); + + ОбновитьЗапись(СтруктураЗаписи); + +КонецПроцедуры + +Процедура СнятьПризнакОтправкиДанных(Знач Получатель) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если ВыполнитьОтправкуДанных(Получатель) Тогда + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Получатель); + СтруктураЗаписи.Вставить("ВыполнитьОтправкуДанных", Ложь); + + ОбновитьЗапись(СтруктураЗаписи); + + КонецЕсли; + +КонецПроцедуры + +Функция ВыполнитьОтправкуДанных(Знач Получатель) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.ВыполнитьОтправкуДанных КАК ВыполнитьОтправкуДанных + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &Получатель"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Получатель", Получатель); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ВыполнитьОтправкуДанных = Истина; +КонецФункции + +// + // Процедура обновляет запись в регистре по переданным значениям структуры Процедура ОбновитьЗапись(СтруктураЗаписи) Экспорт @@ -227,4 +290,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo index 8e1df0f05..0f0427ee9 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo @@ -110,6 +110,25 @@ Use + + ВыполнитьОтправкуДанных + + ru + Выполнить отправку данных + + + Boolean + + + ru + Признак того, что при очередном интерактивном сеансе синхронизации данных следует выполнить сначала отправку данных, а затем получение и отправку. Используется при получении изменений метаданных главного узла через веб-сервис. + + + + Use + Use + + НомерОтправленного diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss index da2c79d72..91027f589 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ - - Получатель - Equal - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl index b04e5e199..912ae7884 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl @@ -8,6 +8,7 @@ Возврат; КонецЕсли; - Параметры.Отбор.Вставить("Получатель", ОбменСообщениямиВнутренний.ЭтотУзел()); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Получатель", ОбменСообщениямиВнутренний.ЭтотУзел() ); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html index 27950d819..e0efd9ffc 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                • клавишу Enter 
                • двойной щелчок левой кнопкой мыши diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl index 9a3714aa2..96a2a7e3e 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl @@ -10,8 +10,7 @@ Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкаОткрытияМакетов", - "СпрашиватьРежимОткрытияМакета" - ); + "СпрашиватьРежимОткрытияМакета"); Если Значение = Неопределено Тогда БольшеНеСпрашивать = Ложь; @@ -21,8 +20,7 @@ Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкаОткрытияМакетов", - "РежимОткрытияМакетаПросмотр" - ); + "РежимОткрытияМакетаПросмотр"); Если Значение = Неопределено Тогда КакОткрывать = 0; @@ -47,7 +45,7 @@ СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр); - Закрыть(Новый Структура("БольшеНеСпрашивать, РежимОткрытияПросмотр", + ОповеститьОВыборе(Новый Структура("БольшеНеСпрашивать, РежимОткрытияПросмотр", БольшеНеСпрашивать, РежимОткрытияМакетаПросмотр) ); @@ -62,13 +60,11 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "НастройкаОткрытияМакетов", "СпрашиватьРежимОткрытияМакета", - СпрашиватьРежимОткрытияМакета - ); + СпрашиватьРежимОткрытияМакета); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "НастройкаОткрытияМакетов", "РежимОткрытияМакетаПросмотр", - РежимОткрытияМакетаПросмотр - ); + РежимОткрытияМакетаПросмотр); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Form.form index 05dd116c7..bf2aef8a0 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Form.form @@ -155,6 +155,10 @@ Right + + ChoiceProcessing + ОбработкаВыбора + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl index 7e6b02bc8..490e74e46 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl @@ -13,17 +13,26 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати") Тогда + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда + КаталогДляСохраненияДанныхПечати = ВыбранноеЗначение; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ИзменитьРабочийКаталогПечати(Команда) - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати"); - - Если ТипЗнч(Результат) = Тип("Строка") Тогда - КаталогДляСохраненияДанныхПечати = Результат; - КонецЕсли; + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати", , ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 57861335f..e4dcf0522 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -777,10 +777,18 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + NotificationProcessing ОбработкаОповещения + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html new file mode 100644 index 000000000..0311007cb --- /dev/null +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html @@ -0,0 +1,4 @@ + +

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

                  +

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

                  +

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

                  \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index c4f16a842..9050135f9 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -1,3 +1,6 @@ +&НаКлиенте +Перем КонтекстВыбора; + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -20,15 +23,58 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Запись_ПользовательскиеМакетыПечати" Тогда - НайденныеМакеты = МакетыПечатныхФорм.НайтиСтроки(Новый Структура("ИмяОбъектаМетаданныхМакета", Параметр.ИмяОбъектаМетаданныхМакета)); - Для Каждого Макет Из НайденныеМакеты Цикл - Макет.Изменен = Истина; - Макет.ИспользуетсяИзмененный = Истина; - УстановитьКартинкуИспользования(Макет); - КонецЦикла; - УстановитьДоступностьКнопокКоманднойПанели(); + ОбновитьОтображениеМакета(Параметр.ИмяОбъектаМетаданныхМакета); + ИначеЕсли ИмяСобытия = "Запись_ТабличныйДокумент" И Источник.ВладелецФормы = ЭтаФорма Тогда + Макет = Параметр.ТабличныйДокумент; + АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет); + ЗаписатьМакет(Параметр.ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); + ОбновитьОтображениеМакета(Параметр.ИмяОбъектаМетаданныхМакета) КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета") Тогда + + Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + РежимОткрытияМакетаПросмотр = ВыбранноеЗначение.РежимОткрытияПросмотр; + СпрашиватьРежимОткрытияМакета = НЕ ВыбранноеЗначение.БольшеНеСпрашивать; + + Если КонтекстВыбора = "ОткрытьМакетПечатнойФормы" Тогда + + Если ВыбранноеЗначение.БольшеНеСпрашивать Тогда + СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр); + КонецЕсли; + + Если РежимОткрытияМакетаПросмотр Тогда + ОткрытьМакетПечатнойФормыДляПросмотра(); + Иначе + ОткрытьМакетПечатнойФормыДляРедактирования(); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Параметр = Новый Структура("Отказ", Ложь); + Оповестить("ЗакрытиеФормыВладельца", Параметр, ЭтаФорма); + + Если Параметр.Отказ Тогда + Отказ = Истина; + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -70,12 +116,8 @@ &НаКлиенте Процедура ЗадатьДействиеПриВыбореМакетаПечатнойФормы(Команда) - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; - СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; - КонецЕсли; + КонтекстВыбора = "ЗадатьДействиеПриВыбореМакетаПечатнойФормы"; + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета", , ЭтаФорма); КонецПроцедуры @@ -247,17 +289,9 @@ Процедура ОткрытьМакетПечатнойФормы() Если СпрашиватьРежимОткрытияМакета Тогда - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; - СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; - Если Результат.БольшеНеСпрашивать Тогда - СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр); - КонецЕсли; - Иначе - Возврат; - КонецЕсли; + КонтекстВыбора = "ОткрытьМакетПечатнойФормы"; + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета", , ЭтаФорма); + Возврат; КонецЕсли; Если РежимОткрытияМакетаПросмотр Тогда @@ -281,6 +315,14 @@ ПараметрыОткрытия.Вставить("ЭтоВебКлиент", Истина); #КонецЕсли + #Если Не ВебКлиент Тогда + Если ТекущиеДанные.ТипМакета = "MXL" Тогда + ПараметрыОткрытия.Вставить("ИмяДокумента", ТекущиеДанные.ПредставлениеМакета); + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтаФорма); + Возврат; + КонецЕсли; + #КонецЕсли + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыОткрытия, ЭтаФорма); КонецПроцедуры @@ -297,6 +339,15 @@ ПараметрыОткрытия.Вставить("ЭтоВебКлиент", Истина); #КонецЕсли + #Если Не ВебКлиент Тогда + Если ТекущиеДанные.ТипМакета = "MXL" Тогда + ПараметрыОткрытия.Вставить("ИмяДокумента", ТекущиеДанные.ПредставлениеМакета); + ПараметрыОткрытия.Вставить("Редактирование", Истина); + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия, ЭтаФорма); + Возврат; + КонецЕсли; + #КонецЕсли + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыОткрытия, ЭтаФорма); КонецПроцедуры @@ -393,6 +444,25 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) + УправлениеПечатью.ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображениеМакета(ИмяОбъектаМетаданныхМакета); + + НайденныеМакеты = МакетыПечатныхФорм.НайтиСтроки(Новый Структура("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета)); + Для Каждого Макет Из НайденныеМакеты Цикл + Макет.Изменен = Истина; + Макет.ИспользуетсяИзмененный = Истина; + УстановитьКартинкуИспользования(Макет); + КонецЦикла; + + УстановитьДоступностьКнопокКоманднойПанели(); + +КонецПроцедуры + // Общие &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl index 794fc0475..380027318 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl @@ -40,6 +40,6 @@ Процедура ОК(Команда) УправлениеПечатьюВызовСервера.СохранитьЛокальныйКаталогФайловПечати(КаталогДляСохраненияДанныхПечати); - Закрыть(КаталогДляСохраненияДанныхПечати); + ОповеститьОВыборе(КаталогДляСохраненияДанныхПечати); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html index d3a4b0398..279b9e472 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html @@ -1,4 +1,4 @@ - +

                  Редактирование файла макета

                  diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 7167ec777..c288e343e 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -72,9 +72,7 @@ ИмяСобытия = "Запись_ПользовательскиеМакетыПечати"; КонецЕсли; - Источник = ?(ЭтаФорма.ВладелецФормы <> Неопределено, ЭтаФорма.ВладелецФормы.УникальныйИдентификатор, Неопределено); - - Оповестить(ИмяСобытия, Новый Структура("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета), Источник); + Оповестить(ИмяСобытия, Новый Структура("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета), ЭтаФорма); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo index 329e0d730..f7dfffcff 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ПользовательскиеМакетыПечати.mdo @@ -171,6 +171,11 @@ ru Макеты печатных форм + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl index fcc453e55..0d06ce288 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаСписка/Module.bsl @@ -15,12 +15,7 @@ Список.Параметры.УстановитьЗначениеПараметра("ОбъектМетаданных", Параметры.ОбъектМетаданных); Если ЗначениеЗаполнено(Параметры.ОбъектМетаданных) Тогда - Элементы.ОбъектМетаданных.Видимость = Ложь; - Автозаголовок = Ложь; - - Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( - НСтр("ru = 'Права ролей на объект метаданных: ""%1"" (%2)'"), Параметры.ОбъектМетаданных); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html index a8bcb6f5f..b78a763c9 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                  Для замены типовых правил конвертации объектов правилами из внешнего файла необходимо:

                  • Установить значение переключателя в положение Правила из файла или Режим отладки и по кнопке Загрузить правила выбрать файл правил на компьютере или в сетевой папке. diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl index 9735bfc02..1f086dc8a 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -165,8 +165,7 @@ Если Отказ Тогда НСтрока = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. - |Перейти в журнал регистрации?'" - ); + |Перейти в журнал регистрации?'"); Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда @@ -290,8 +289,7 @@ ГруппаИсточникиПравил.ТекущаяСтраница = ?(ИсточникПравил = 0, ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникМакетКонфигурации, - ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл - ); + ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл); Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.Доступность = Запись.РежимОтладкиВыгрузки; Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.Доступность = Запись.РежимОтладкиЗагрузки; @@ -395,8 +393,7 @@ ИнформацияОПравилах = НСтр("ru = 'Использование правил, загруженных из файла, |может привести к ошибкам при переходе на новую версию программы. | - |[ИнформацияОПравилах]'" - ); + |[ИнформацияОПравилах]'"); ИнформацияОПравилах = СтрЗаменить(ИнформацияОПравилах, "[ИнформацияОПравилах]", Запись.ИнформацияОПравилах); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index 81ad0ca79..441fb2c2e 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                    • diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index 3061ee702..733195369 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -104,15 +104,14 @@ Если Отказ Тогда НСтрока = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. - |Перейти в журнал регистрации?'" - ); + |Перейти в журнал регистрации?'"); Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда Отбор = Новый Структура; Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); КонецЕсли; @@ -229,8 +228,7 @@ ГруппаИсточникиПравил.ТекущаяСтраница = ?(ИсточникПравил = 0, ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникМакетКонфигурации, - ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл - ); + ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл); КонецПроцедуры @@ -328,8 +326,7 @@ ИнформацияОПравилах = НСтр("ru = 'Использование правил, загруженных из файла, |может привести к ошибкам при переходе на новую версию программы. | - |[ИнформацияОПравилах]'" - ); + |[ИнформацияОПравилах]'"); ИнформацияОПравилах = СтрЗаменить(ИнформацияОПравилах, "[ИнформацияОПравилах]", Запись.ИнформацияОПравилах); diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index aa6940adf..b85a77677 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -117,6 +117,7 @@ КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); // свойства обработки + КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = Запись.ИмяПланаОбмена; КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo index 62fb3886f..f26b29afb 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ПредметыПапкиВзаимодействий.mdo @@ -63,6 +63,7 @@ DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча + DocumentRef.СообщениеSMS ru @@ -108,6 +109,7 @@ DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча String + DocumentRef.СообщениеSMS 10 diff --git a/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index 78d14fdf1..0fbb5ab2c 100644 --- a/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/InformationRegisters/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -78,6 +78,7 @@ CatalogRef.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы CatalogRef.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы CatalogRef.ЗапланированноеВзаимодействиеПрисоединенныеФайлы + CatalogRef.СообщениеSMSПрисоединенныеФайлы CatalogRef.ВстречаПрисоединенныеФайлы CatalogRef.ТелефонныйЗвонокПрисоединенныеФайлы diff --git a/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo b/SSL/src/InformationRegisters/ПросмотренныеДанныеИнформационногоЦентра/ПросмотренныеДанныеИнформационногоЦентра.mdo similarity index 50% rename from SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo rename to SSL/src/InformationRegisters/ПросмотренныеДанныеИнформационногоЦентра/ПросмотренныеДанныеИнформационногоЦентра.mdo index 0625ff8ad..40f7c8a95 100644 --- a/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo +++ b/SSL/src/InformationRegisters/ПросмотренныеДанныеИнформационногоЦентра/ПросмотренныеДанныеИнформационногоЦентра.mdo @@ -1,19 +1,20 @@ - + - - - - - - - + + + + + + + - УдалитьКурсыВалютПоКлассификатору + ПросмотренныеДанныеИнформационногоЦентра ru - (Не используется) Курсы валют по классификатору + Просмотренные данные информационного центра + true InDialog Use @@ -48,73 +49,63 @@ - Day - true Managed - - ru - Курсы для валют - - - Курс + + Просмотрены ru - Курс + Просмотрены - Number - - 15 - 4 - true - + Boolean + + ru + Признак просмотра уведомлений + Use Use - - Кратность + + Пользователь ru - Кратность + Пользователь - Number - - 10 - true - + CatalogRef.Пользователи ru - Кратность валюты + Пользователь приложения - ShowError + Index Use Use - true - - 1 - - - - Валюта + + true + + + ДанныеИнформационногоЦентра ru - Валюта + Данные информационного центра - CatalogRef.УдалитьКлассификаторВалют + CatalogRef.ОбщиеДанныеИнформационногоЦентра + + ru + Уведомления пользователю + - ShowError - true + Index Use Use diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss index 08dd374b0..d32a986ce 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/Коллизии/ExtInfo/ListSettings.dcss @@ -1,45 +1,14 @@ - - false - АвторДругойВерсии - Equal - Inaccessible - - - false - AndGroup - - ДатаДругойВерсии - GreaterOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - - ДатаДругойВерсии - LessOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - Inaccessible - - - ВерсияПроигнорирована - Equal - false - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb + + Дата + Desc + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 @@ -62,52 +31,6 @@ - - АвторЭтойВерсии - - - ДатаЭтойВерсии - - - НомерЭтойВерсии - - - ЭтаВерсияПринята - - - - - AndGroup - - ЭтаВерсияПринята - Equal - false - - - ВерсияПроигнорирована - Equal - false - - - - - - ЦветТекста - style:НепринятаяВерсия - - - - - - - АвторДругойВерсии - - - ДатаДругойВерсии - - - НомерДругойВерсии - ДругаяВерсияПринята @@ -134,25 +57,6 @@ - - - - ЭтаВерсияПринята - - - - - НомерЭтойВерсии - NotFilled - - - - - Текст - Удалена - - - diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss index dbf27ac72..e05cbc45e 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НезаполненныеРеквизиты/ExtInfo/ListSettings.dcss @@ -1,48 +1,6 @@ - - Пропущена - Equal - false - Inaccessible - - - false - AndGroup - - ДатаВозникновения - GreaterOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - - ДатаВозникновения - LessOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - Inaccessible - - - false - УзелИнформационнойБазы - Equal - Inaccessible - - - false - Причина - Contains - - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss index ff8a6d165..8ac7d7dfb 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепринятыеПоДате/ExtInfo/ListSettings.dcss @@ -1,52 +1,14 @@ - - false - АвторДругойВерсии - Equal - Inaccessible - - - false - AndGroup - - ДатаДругойВерсии - GreaterOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - - ДатаДругойВерсии - LessOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - Inaccessible - - - false - ПричинаЗапрета - Equal - - Inaccessible - - - ВерсияПроигнорирована - Equal - false - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb + + Дата + Desc + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 @@ -83,7 +45,7 @@ Текст - Новый объект + Отсутствуют diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss index dbf27ac72..e05cbc45e 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Attributes/НепроведенныеДокументы/ExtInfo/ListSettings.dcss @@ -1,48 +1,6 @@ - - Пропущена - Equal - false - Inaccessible - - - false - AndGroup - - ДатаВозникновения - GreaterOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - - ДатаВозникновения - LessOrEqual - - Custom - 0001-01-01T00:00:00 - - Inaccessible - - Inaccessible - - - false - УзелИнформационнойБазы - Equal - Inaccessible - - - false - Причина - Contains - - Inaccessible - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 7208d67a3..097f0d48d 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Результаты синхронизации данных, требующие внимания</value> + <value>Предупреждения при синхронизации данных</value> ГруппаОтборов @@ -10,10 +10,6 @@ Период 34 - - <key>ru</key> - <value>Дата</value> - true true @@ -28,7 +24,7 @@ ПериодРасширеннаяПодсказка - 331 + 365 Label true true @@ -75,7 +71,7 @@ УзелИнформационнойБазыРасширеннаяПодсказка - 333 + 367 Label true true @@ -140,7 +136,7 @@ СтрокаПоискаРасширеннаяПодсказка - 335 + 369 Label true true @@ -183,9 +179,10 @@ ru Группа отборов + true ГруппаОтборовРасширеннаяПодсказка - 330 + 364 Label true true @@ -223,7 +220,7 @@ ДекорацияДокументыРасширеннаяПодсказка - 339 + 373 Label true true @@ -276,7 +273,7 @@ None НепроведенныеДокументыПометкаУдаленияРасширеннаяПодсказка - 368 + 406 Label true true @@ -329,7 +326,7 @@ НепроведенныеДокументыТипСтрокойРасширеннаяПодсказка - 370 + 408 Label true true @@ -367,7 +364,7 @@ НепроведенныеДокументыГруппаКартинкиРасширеннаяПодсказка - 367 + 405 Label true true @@ -397,7 +394,7 @@ НепроведенныеДокументыСсылкаРасширеннаяПодсказка - 372 + 410 Label true true @@ -441,7 +438,7 @@ НепроведенныеДокументыНомерДокументаРасширеннаяПодсказка - 374 + 412 Label true true @@ -481,7 +478,7 @@ НепроведенныеДокументыДатаДокументаРасширеннаяПодсказка - 376 + 414 Label true true @@ -521,7 +518,7 @@ НепроведенныеДокументыПричинаРасширеннаяПодсказка - 378 + 416 Label true true @@ -565,7 +562,7 @@ НепроведенныеДокументыДатаВозникновенияРасширеннаяПодсказка - 380 + 418 Label true true @@ -609,7 +606,7 @@ НепроведенныеДокументыУзелИнформационнойБазыРасширеннаяПодсказка - 382 + 420 Label true true @@ -645,7 +642,7 @@ НепроведенныеДокументыИзменитьВыделенныеДокументыРасширеннаяПодсказка - 347 + 381 Label true true @@ -671,7 +668,7 @@ НепроведенныеДокументыПровестиДокументРасширеннаяПодсказка - 348 + 382 Label true true @@ -697,7 +694,7 @@ НепроведенныеДокументыИзменитьРасширеннаяПодсказка - 349 + 383 Label true true @@ -727,7 +724,7 @@ НепроведенныеДокументыИгнорироватьДокументРасширеннаяПодсказка - 351 + 385 Label true true @@ -753,7 +750,7 @@ НепроведенныеДокументыНеИгнорироватьДокументРасширеннаяПодсказка - 352 + 386 Label true true @@ -770,6 +767,33 @@ Auto InAdditionalSubmenu + + НепроведенныеДокументыПоказыватьПроигнорированныеНепроведенные + 340 + true + true + + true + + + НепроведенныеДокументыПоказыватьПроигнорированныеНепроведенныеРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + Form.Command.ПоказыватьПроигнорированныеНепроведенные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -785,7 +809,7 @@ ГруппаИгнорированияДокументовРасширеннаяПодсказка - 350 + 384 Label true true @@ -795,6 +819,32 @@ + + НепроведенныеДокументыОбновить + 357 + true + true + + true + + + НепроведенныеДокументыОбновитьРасширеннаяПодсказка + 388 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + НепроведенныеДокументыНайти 228 @@ -805,7 +855,7 @@ НепроведенныеДокументыНайтиРасширеннаяПодсказка - 353 + 389 Label true true @@ -831,7 +881,7 @@ НепроведенныеДокументыОтменитьПоискРасширеннаяПодсказка - 354 + 390 Label true true @@ -857,7 +907,7 @@ НепроведенныеДокументыНастройкаСпискаРасширеннаяПодсказка - 355 + 391 Label true true @@ -884,7 +934,7 @@ НепроведенныеДокументыВывестиСписокРасширеннаяПодсказка - 356 + 392 Label true true @@ -900,6 +950,59 @@ UserCmds Auto + + НепроведенныеДокументыИзменитьФорму + 344 + true + true + + true + + + НепроведенныеДокументыИзменитьФормуРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + НепроведенныеДокументыСправка + 360 + true + true + + true + + + НепроведенныеДокументыСправкаРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left @@ -912,10 +1015,10 @@ НепроведенныеДокументыСтрокаПоиска - 358 + 396 НепроведенныеДокументыСтрокаПоискаРасширеннаяПодсказка - 360 + 398 Label true true @@ -925,7 +1028,7 @@ НепроведенныеДокументыСтрокаПоискаКонтекстноеМеню - 359 + 397 true НепроведенныеДокументы @@ -935,10 +1038,10 @@ НепроведенныеДокументыСостояниеПросмотра - 361 + 399 НепроведенныеДокументыСостояниеПросмотраРасширеннаяПодсказка - 363 + 401 Label true true @@ -948,7 +1051,7 @@ НепроведенныеДокументыСостояниеПросмотраКонтекстноеМеню - 362 + 400 true ViewStatusAddition @@ -959,10 +1062,10 @@ НепроведенныеДокументыУправлениеПоиском - 364 + 402 НепроведенныеДокументыУправлениеПоискомРасширеннаяПодсказка - 366 + 404 Label true true @@ -972,7 +1075,7 @@ НепроведенныеДокументыУправлениеПоискомКонтекстноеМеню - 365 + 403 true SearchControlAddition @@ -983,7 +1086,7 @@ НепроведенныеДокументыРасширеннаяПодсказка - 357 + 395 Label true true @@ -1004,7 +1107,7 @@ НепроведенныеДокументыКонтекстноеМенюИзменитьВыделенныеДокументыРасширеннаяПодсказка - 340 + 374 Label true true @@ -1030,7 +1133,7 @@ НепроведенныеДокументыКонтекстноеМенюПровестиДокументРасширеннаяПодсказка - 341 + 375 Label true true @@ -1056,7 +1159,7 @@ НепроведенныеДокументыКонтекстноеМенюИзменитьРасширеннаяПодсказка - 342 + 376 Label true true @@ -1085,7 +1188,7 @@ НепроведенныеДокументыКонтекстноеМенюИгнорироватьДокументРасширеннаяПодсказка - 344 + 378 Label true true @@ -1111,7 +1214,7 @@ НепроведенныеДокументыКонтекстноеМенюНеИгнорироватьДокументРасширеннаяПодсказка - 345 + 379 Label true true @@ -1142,7 +1245,7 @@ НепроведенныеДокументыКонтекстноеМенюГруппаИгнорированияРасширеннаяПодсказка - 343 + 377 Label true true @@ -1162,7 +1265,7 @@ НепроведенныеДокументыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 346 + 380 Label true true @@ -1214,69 +1317,24 @@ true - - ГруппаПричинаДокументы - 31 - - НепроведенныеДокументыПричинаПодробно - 170 - - <key>ru</key> - <value>Документ не удалось провести автоматически по причине</value> - - true - true - - true - - - Items.НепроведенныеДокументы.CurrentData.Причина - - - НепроведенныеДокументыПричинаПодробноРасширеннаяПодсказка - 393 - Label - true - true - - Left - - - - НепроведенныеДокументыПричинаПодробноКонтекстноеМеню - 171 - true - - InputField - true - Enter - true - Left - true - - true - 4 - true - true - true - true - true - true - Normal - - + + НепроведенныеДокументыПричинаПодробно + 170 + + <key>ru</key> + <value>Документ не удалось провести автоматически по причине</value> + true true true - - <key>ru</key> - <value>Документ не удалось провести автоматически по причине</value> - + + Items.НепроведенныеДокументы.CurrentData.Причина + - ГруппаПричинаДокументыРасширеннаяПодсказка - 392 + НепроведенныеДокументыПричинаПодробноРасширеннаяПодсказка + 430 Label true true @@ -1284,14 +1342,27 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + НепроведенныеДокументыПричинаПодробноКонтекстноеМеню + 171 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + true + true + true + true + true + Normal true @@ -1309,7 +1380,7 @@ СтраницаНепроведенныеДокументыРасширеннаяПодсказка - 338 + 372 Label true true @@ -1344,7 +1415,7 @@ ДекорацияОбъектыРасширеннаяПодсказка - 396 + 433 Label true true @@ -1401,7 +1472,7 @@ НезаполненныеРеквизитыПометкаУдаленияРасширеннаяПодсказка - 423 + 464 Label true true @@ -1450,7 +1521,7 @@ НезаполненныеРеквизитыТипСтрокойРасширеннаяПодсказка - 425 + 466 Label true true @@ -1488,7 +1559,7 @@ НезаполненныеРеквизитыГруппаКартинкиРасширеннаяПодсказка - 422 + 463 Label true true @@ -1524,7 +1595,7 @@ НезаполненныеРеквизитыСсылкаРасширеннаяПодсказка - 427 + 468 Label true true @@ -1568,7 +1639,7 @@ НезаполненныеРеквизитыДатаВозникновенияРасширеннаяПодсказка - 429 + 470 Label true true @@ -1608,7 +1679,7 @@ НезаполненныеРеквизитыПричинаРасширеннаяПодсказка - 431 + 472 Label true true @@ -1652,7 +1723,7 @@ НезаполненныеРеквизитыУзелИнформационнойБазыРасширеннаяПодсказка - 433 + 474 Label true true @@ -1688,7 +1759,7 @@ НезаполненныеРеквизитыИзменитьВыделенныеОбъектыРасширеннаяПодсказка - 403 + 440 Label true true @@ -1714,7 +1785,7 @@ НезаполненныеРеквизитыИзменитьРасширеннаяПодсказка - 404 + 441 Label true true @@ -1744,7 +1815,7 @@ НезаполненныеРеквизитыИгнорироватьОбъектРасширеннаяПодсказка - 406 + 443 Label true true @@ -1770,7 +1841,7 @@ НезаполненныеРеквизитыНеИгнорироватьОбъектРасширеннаяПодсказка - 407 + 444 Label true true @@ -1787,6 +1858,33 @@ Auto InAdditionalSubmenu + + НезаполненныеРеквизитыПоказыватьПроигнорированныеНезаполненные + 341 + true + true + + true + + + НезаполненныеРеквизитыПоказыватьПроигнорированныеНезаполненныеРасширеннаяПодсказка + 445 + Label + true + true + + Left + + + Form.Command.ПоказыватьПроигнорированныеНезаполненные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -1802,7 +1900,7 @@ ГруппаИгнорированияОбъектовРасширеннаяПодсказка - 405 + 442 Label true true @@ -1812,6 +1910,32 @@ + + НезаполненныеРеквизитыОбновить + 358 + true + true + + true + + + НезаполненныеРеквизитыОбновитьРасширеннаяПодсказка + 446 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + НезаполненныеРеквизитыНайти 234 @@ -1822,7 +1946,7 @@ НезаполненныеРеквизитыНайтиРасширеннаяПодсказка - 408 + 447 Label true true @@ -1848,7 +1972,7 @@ НезаполненныеРеквизитыОтменитьПоискРасширеннаяПодсказка - 409 + 448 Label true true @@ -1874,7 +1998,7 @@ НезаполненныеРеквизитыВывестиСписокРасширеннаяПодсказка - 410 + 449 Label true true @@ -1900,7 +2024,7 @@ НезаполненныеРеквизитыНастройкаСпискаРасширеннаяПодсказка - 411 + 450 Label true true @@ -1917,6 +2041,59 @@ Auto InCommandBarAndInAdditionalSubmenu + + НезаполненныеРеквизитыИзменитьФорму + 345 + true + true + + true + + + НезаполненныеРеквизитыИзменитьФормуРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + НезаполненныеРеквизитыСправка + 361 + true + true + + true + + + НезаполненныеРеквизитыСправкаРасширеннаяПодсказка + 452 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left @@ -1929,10 +2106,10 @@ НезаполненныеРеквизитыСтрокаПоиска - 413 + 454 НезаполненныеРеквизитыСтрокаПоискаРасширеннаяПодсказка - 415 + 456 Label true true @@ -1942,7 +2119,7 @@ НезаполненныеРеквизитыСтрокаПоискаКонтекстноеМеню - 414 + 455 true НезаполненныеРеквизиты @@ -1952,10 +2129,10 @@ НезаполненныеРеквизитыСостояниеПросмотра - 416 + 457 НезаполненныеРеквизитыСостояниеПросмотраРасширеннаяПодсказка - 418 + 459 Label true true @@ -1965,7 +2142,7 @@ НезаполненныеРеквизитыСостояниеПросмотраКонтекстноеМеню - 417 + 458 true ViewStatusAddition @@ -1976,10 +2153,10 @@ НезаполненныеРеквизитыУправлениеПоиском - 419 + 460 НезаполненныеРеквизитыУправлениеПоискомРасширеннаяПодсказка - 421 + 462 Label true true @@ -1989,7 +2166,7 @@ НезаполненныеРеквизитыУправлениеПоискомКонтекстноеМеню - 420 + 461 true SearchControlAddition @@ -2000,7 +2177,7 @@ НезаполненныеРеквизитыРасширеннаяПодсказка - 412 + 453 Label true true @@ -2021,7 +2198,7 @@ НезаполненныеРеквизитыКонтекстноеМенюИзменитьВыделенныеОбъектыРасширеннаяПодсказка - 397 + 434 Label true true @@ -2047,7 +2224,7 @@ НезаполненныеРеквизитыКонтекстноеМенюИзменитьРасширеннаяПодсказка - 398 + 435 Label true true @@ -2076,7 +2253,7 @@ НезаполненныеРеквизитыКонтекстноеМенюИгнорироватьОбъектРасширеннаяПодсказка - 400 + 437 Label true true @@ -2102,7 +2279,7 @@ НезаполненныеРеквизитыКонтекстноеМенюНеИгнорироватьОбъектРасширеннаяПодсказка - 401 + 438 Label true true @@ -2133,7 +2310,7 @@ НезаполненныеРеквизитыКонтекстноеМенюГруппаИгнорированияРасширеннаяПодсказка - 399 + 436 Label true true @@ -2153,7 +2330,7 @@ НезаполненныеРеквизитыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 402 + 439 Label true true @@ -2206,73 +2383,24 @@ true - - ГруппаПричинаОбъекты - 86 - - НезаполненныеРеквизитыПричинаПодробно - 174 - - <key>ru</key> - <value>Данные не удалось записать по причине</value> - - true - true - - true - - - Items.НезаполненныеРеквизиты.CurrentData.Причина - - - НезаполненныеРеквизитыПричинаПодробноРасширеннаяПодсказка - 444 - Label - true - true - - Left - - - - НезаполненныеРеквизитыПричинаПодробноКонтекстноеМеню - 175 - true - - InputField - true - Enter - true - Left - true - - true - 4 - true - true - true - true - true - true - Normal - - + + НезаполненныеРеквизитыПричинаПодробно + 174 + + <key>ru</key> + <value>Данные не удалось записать по причине</value> + true true true - - <key>ru</key> - <value>Данные не удалось записать по причине</value> - - - ru - Группа причина объекты - + + Items.НезаполненныеРеквизиты.CurrentData.Причина + - ГруппаПричинаОбъектыРасширеннаяПодсказка - 443 + НезаполненныеРеквизитыПричинаПодробноРасширеннаяПодсказка + 484 Label true true @@ -2280,14 +2408,27 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + НезаполненныеРеквизитыПричинаПодробноКонтекстноеМеню + 175 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + true + true + true + true + true + Normal true @@ -2305,7 +2446,7 @@ СтраницаНезаполненныеРеквизитыРасширеннаяПодсказка - 395 + 432 Label true true @@ -2330,8 +2471,8 @@ 176 <key>ru</key> - <value>Данные были одновременно изменены в этой и в другой программе, в результате появилось две версии одного элемента справочника (документа). -Одна из версий была принята, а другая отклонена. Для перехода к другой версии используйте команду "Перейти на версию".</value> + <value>Данные были одновременно изменены в этой и в другой программе, в результате чего появилось две версии +одного элемента справочника (документа) и возник конфликт, который был разрешен автоматически.</value> true true @@ -2340,7 +2481,7 @@ ДекорацияКоллизииРасширеннаяПодсказка - 447 + 487 Label true true @@ -2376,9 +2517,53 @@ Коллизии None + + КоллизииДата + 332 + + <key>ru</key> + <value>Дата конфликта</value> + + true + true + + true + + + Коллизии.Дата + + + ru + Дата возникновения конфликта + + + КоллизииДатаРасширеннаяПодсказка + 522 + Label + true + true + + Left + + + + КоллизииДатаКонтекстноеМеню + 333 + true + + LabelField + Enter + true + Left + true + + true + true + + КоллизииСсылка - 283 + 330 <key>ru</key> <value>Данные</value> @@ -2393,11 +2578,11 @@ </dataPath> <toolTip> <key>ru</key> - <value>Данные, для которых возник конфликт</value> + <value>Элемент справочника (документа) для которого возник конфликт</value> </toolTip> <extendedTooltip> <name>КоллизииСсылкаРасширеннаяПодсказка</name> - <id>478</id> + <id>524</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2407,7 +2592,7 @@ </extendedTooltip> <contextMenu> <name>КоллизииСсылкаКонтекстноеМеню</name> - <id>284</id> + <id>331</id> <autoFill>true</autoFill> </contextMenu> <type>LabelField</type> @@ -2437,11 +2622,11 @@ </dataPath> <toolTip> <key>ru</key> - <value>Тип данных</value> + <value>Вид справочника (документа)</value> </toolTip> <extendedTooltip> <name>КоллизииТипСтрокойРасширеннаяПодсказка</name> - <id>480</id> + <id>526</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2464,206 +2649,28 @@ <autoMaxHeight>true</autoMaxHeight> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>КоллизииГруппаВерсияЭтойПрограммы</name> - <id>199</id> - <items xsi:type="form:FormField"> - <name>КоллизииНомерЭтойВерсии</name> - <id>289</id> - <title> - <key>ru</key> - <value>№</value> - - true - true - - true - - - Коллизии.НомерЭтойВерсии - - - ru - Номер версии - - - КоллизииНомерЭтойВерсииРасширеннаяПодсказка - 483 - Label - true - true - - Left - - - - КоллизииНомерЭтойВерсииКонтекстноеМеню - 290 - true - - LabelField - Enter - true - Left - true - - 1 - true - true - - - - КоллизииАвторЭтойВерсии - 285 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - Коллизии.АвторЭтойВерсии - - - ru - Пользователь, создавший версию в этой программе - - - КоллизииАвторЭтойВерсииРасширеннаяПодсказка - 485 - Label - true - true - - Left - - - - КоллизииАвторЭтойВерсииКонтекстноеМеню - 286 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КоллизииДатаЭтойВерсии - 287 - - <key>ru</key> - <value>Дата</value> - - true - true - - true - - - Коллизии.ДатаЭтойВерсии - - - ru - Дата версии - - - КоллизииДатаЭтойВерсииРасширеннаяПодсказка - 487 - Label - true - true - - Left - - - - КоллизииДатаЭтойВерсииКонтекстноеМеню - 288 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КоллизииЭтаВерсияПринята - 297 - - <key>ru</key> - <value>Статус</value> - - true - true - - true - - - Коллизии.ЭтаВерсияПринята - - - ru - Статус версии - - - КоллизииЭтаВерсияПринятаРасширеннаяПодсказка - 489 - Label - true - true - - Left - - - - КоллизииЭтаВерсияПринятаКонтекстноеМеню - 298 - true - - LabelField - Enter - true - Left - true - - true - true - - ru - БЛ=Перезаписана; БИ='Не изменена' - - - + + КоллизииАвторДругойВерсии + 291 + + <key>ru</key> + <value>Данные получены из программы</value> + true true true - - <key>ru</key> - <value>Версия в этой программе</value> - + + Коллизии.АвторДругойВерсии + ru - Версия, созданная в этой программе + Информационная база или приложение из которого получена версия - КоллизииГруппаВерсияЭтойПрограммыРасширеннаяПодсказка - 482 + КоллизииАвторДругойВерсииРасширеннаяПодсказка + 528 Label true true @@ -2671,214 +2678,43 @@ Left - ColumnGroup - - auto - true - Center - true + + КоллизииАвторДругойВерсииКонтекстноеМеню + 292 + true + + LabelField + Enter + true + Left + true + + true + true - - КоллизииГруппаВерсияДругойПрограммы - 200 - - КоллизииНомерДругойВерсии - 295 - - <key>ru</key> - <value>№</value> - - true - true - - true - - - Коллизии.НомерДругойВерсии - - - ru - Номер версии - - - КоллизииНомерДругойВерсииРасширеннаяПодсказка - 492 - Label - true - true - - Left - - - - КоллизииНомерДругойВерсииКонтекстноеМеню - 296 - true - - LabelField - Enter - true - Left - true - - 1 - true - true - - - - КоллизииАвторДругойВерсии - 291 - - <key>ru</key> - <value>Отправитель</value> - - true - true - - true - - - Коллизии.АвторДругойВерсии - - - ru - Информационная база или приложение из которого получена версия - - - КоллизииАвторДругойВерсииРасширеннаяПодсказка - 494 - Label - true - true - - Left - - - - КоллизииАвторДругойВерсииКонтекстноеМеню - 292 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КоллизииДатаДругойВерсии - 293 - - <key>ru</key> - <value>Дата</value> - - true - true - - true - - - Коллизии.ДатаДругойВерсии - - - ru - Дата версии - - - КоллизииДатаДругойВерсииРасширеннаяПодсказка - 496 - Label - true - true - - Left - - - - КоллизииДатаДругойВерсииКонтекстноеМеню - 294 - true - - LabelField - Enter - true - Left - true - - true - true - - - - КоллизииДругаяВерсияПринята - 299 - - <key>ru</key> - <value>Статус</value> - - true - true - - true - - - Коллизии.ДругаяВерсияПринята - - - ru - Статус версии - - - КоллизииДругаяВерсияПринятаРасширеннаяПодсказка - 498 - Label - true - true - - Left - - - - КоллизииДругаяВерсияПринятаКонтекстноеМеню - 300 - true - - LabelField - Enter - true - Left - true - - true - true - - ru - БЛ=Отклонена; БИ=Принята - - - + + КоллизииДругаяВерсияПринята + 299 + + <key>ru</key> + <value>Статус полученной версии</value> + true true true - - <key>ru</key> - <value>Версия из другой программы</value> - + + Коллизии.ДругаяВерсияПринята + ru - Версия, полученная из другой программы + Статус версии, полученной из другой программы - КоллизииГруппаВерсияДругойПрограммыРасширеннаяПодсказка - 491 + КоллизииДругаяВерсияПринятаРасширеннаяПодсказка + 530 Label true true @@ -2886,12 +2722,23 @@ Left - ColumnGroup - - auto - true - Center - true + + КоллизииДругаяВерсияПринятаКонтекстноеМеню + 300 + true + + LabelField + Enter + true + Left + true + + true + true + + ru + БЛ=Отклонена; БИ=Принята + @@ -2907,7 +2754,7 @@ КоллизииСравнитьСТекущейВерсиейКоллизииРасширеннаяПодсказка - 456 + 495 Label true true @@ -2923,59 +2770,6 @@ UserCmds Auto - - КоллизииПерейтиНаВерсиюКонфликта - 275 - true - true - - true - - - КоллизииПерейтиНаВерсиюКонфликтаРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - Form.Command.ПерейтиНаВерсиюКонфликта - Normal - Auto - true - true - UserCmds - Auto - - - КоллизииИзменить - 201 - true - true - - true - - - КоллизииИзменитьРасширеннаяПодсказка - 458 - Label - true - true - - Left - - - Form.Command.Изменить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - КоллизииОткрытьВерсиюКоллизии 157 @@ -2986,7 +2780,7 @@ КоллизииОткрытьВерсиюКоллизииРасширеннаяПодсказка - 459 + 496 Label true true @@ -2994,7 +2788,65 @@ Left - Form.Command.ОткрытьВерсиюКоллизии + Form.Command.ОткрытьВерсиюДоКонфликта + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КоллизииОткрытьВерсиюКонфликта + 356 + true + true + + true + + + КоллизииОткрытьВерсиюКонфликтаРасширеннаяПодсказка + 497 + Label + true + true + + Left + + + Form.Command.ОткрытьВерсиюКонфликта + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КоллизииИзменить + 201 + + <key>ru</key> + <value>Изменить данные</value> + + true + true + + true + + + КоллизииИзменитьРасширеннаяПодсказка + 498 + Label + true + true + + Left + + + Form.Command.Изменить Normal Auto true @@ -3016,7 +2868,7 @@ КоллизииИгнорироватьКонфликтРасширеннаяПодсказка - 461 + 500 Label true true @@ -3042,7 +2894,7 @@ КоллизииНеИгнорироватьКонфликтРасширеннаяПодсказка - 462 + 501 Label true true @@ -3074,7 +2926,7 @@ КоллизииГруппаИгнорированияРасширеннаяПодсказка - 460 + 499 Label true true @@ -3084,9 +2936,96 @@ + + КоллизииИзменитьРезультатКонфликта + 355 + + <key>ru</key> + <value>Пересмотреть</value> + + true + true + + true + + + КоллизииИзменитьРезультатКонфликтаРасширеннаяПодсказка + 502 + Label + true + true + + Left + + + Form.Command.ИзменитьРезультатКонфликта + Normal + PictureAndText + true + true + UserCmds + + CommonPicture.СинхронизацияДанныхКоллизия + + Auto + + + КоллизииПоказыватьПроигнорированныеКонфликты + 342 + true + true + + true + + + КоллизииПоказыватьПроигнорированныеКонфликтыРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + Form.Command.ПоказыватьПроигнорированныеКонфликты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + КоллизииГруппаСлужебные 156 + + ФормаОбновить + 28 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + КоллизииНайти 238 @@ -3097,7 +3036,7 @@ КоллизииНайтиРасширеннаяПодсказка - 464 + 506 Label true true @@ -3123,7 +3062,7 @@ КоллизииОтменитьПоискРасширеннаяПодсказка - 465 + 507 Label true true @@ -3149,7 +3088,7 @@ КоллизииВывестиСписокРасширеннаяПодсказка - 466 + 508 Label true true @@ -3175,7 +3114,7 @@ КоллизииНастройкаСпискаРасширеннаяПодсказка - 467 + 509 Label true true @@ -3207,7 +3146,7 @@ КоллизииГруппаСлужебныеРасширеннаяПодсказка - 463 + 504 Label true true @@ -3217,11 +3156,64 @@ + + КоллизииИзменитьФорму + 346 + true + true + + true + + + КоллизииИзменитьФормуРасширеннаяПодсказка + 510 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + КоллизииСправка + 362 + true + true + + true + + + КоллизииСправкаРасширеннаяПодсказка + 511 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left - Selection - КоллизииВыбор + OnActivateRow + КоллизииПриАктивизацииСтроки BeforeRowChange @@ -3229,10 +3221,10 @@ КоллизииСтрокаПоиска - 469 + 513 КоллизииСтрокаПоискаРасширеннаяПодсказка - 471 + 515 Label true true @@ -3242,7 +3234,7 @@ КоллизииСтрокаПоискаКонтекстноеМеню - 470 + 514 true Коллизии @@ -3252,10 +3244,10 @@ КоллизииСостояниеПросмотра - 472 + 516 КоллизииСостояниеПросмотраРасширеннаяПодсказка - 474 + 518 Label true true @@ -3265,7 +3257,7 @@ КоллизииСостояниеПросмотраКонтекстноеМеню - 473 + 517 true ViewStatusAddition @@ -3276,10 +3268,10 @@ КоллизииУправлениеПоиском - 475 + 519 КоллизииУправлениеПоискомРасширеннаяПодсказка - 477 + 521 Label true true @@ -3289,7 +3281,7 @@ КоллизииУправлениеПоискомКонтекстноеМеню - 476 + 520 true SearchControlAddition @@ -3300,7 +3292,7 @@ КоллизииРасширеннаяПодсказка - 468 + 512 Label true true @@ -3321,7 +3313,7 @@ КоллизииКонтекстноеМенюСравнитьСТекущейВерсиейКоллизииРасширеннаяПодсказка - 448 + 488 Label true true @@ -3338,16 +3330,16 @@ Auto - КоллизииКонтекстноеМенюПерейтиНаВерсиюКонфликта - 278 + КоллизииКонтекстноеМенюОткрытьВерсиюДоКонфликта + 162 true true true - КоллизииКонтекстноеМенюПерейтиНаВерсиюКонфликтаРасширеннаяПодсказка - 449 + КоллизииКонтекстноеМенюОткрытьВерсиюДоКонфликтаРасширеннаяПодсказка + 489 Label true true @@ -3355,7 +3347,33 @@ Left - Form.Command.ПерейтиНаВерсиюКонфликта + Form.Command.ОткрытьВерсиюДоКонфликта + Normal + Auto + true + true + UserCmds + Auto + + + КоллизииКонтекстноеМенюОткрытьВерсиюКонфликта + 338 + true + true + + true + + + КоллизииКонтекстноеМенюОткрытьВерсиюКонфликтаРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + Form.Command.ОткрытьВерсиюКонфликта Normal Auto true @@ -3373,7 +3391,7 @@ КоллизииКонтекстноеМенюИзменитьРасширеннаяПодсказка - 450 + 491 Label true true @@ -3389,61 +3407,9 @@ UserCmds Auto - - КоллизииКонтекстноеМенюОткрытьВерсиюКоллизии - 162 - true - true - - true - - - КоллизииКонтекстноеМенюОткрытьВерсиюКоллизииРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - Form.Command.ОткрытьВерсиюКоллизии - Normal - Auto - true - true - UserCmds - Auto - - КоллизииКонтекстноеМенюГруппаИгнорирования - 321 - - КоллизииКонтекстноеМенюИгнорироватьКонфликт - 273 - true - true - - true - - - КоллизииКонтекстноеМенюИгнорироватьКонфликтРасширеннаяПодсказка - 453 - Label - true - true - - Left - - - Form.Command.ИгнорироватьКонфликт - Normal - Auto - true - true - UserCmds - Auto - + КоллизииКонтекстноеМенюГруппаРазедлитель + 349 КоллизииКонтекстноеМенюНеИгнорироватьКонфликт 317 @@ -3454,7 +3420,7 @@ КоллизииКонтекстноеМенюНеИгнорироватьКонфликтРасширеннаяПодсказка - 454 + 493 Label true true @@ -3477,15 +3443,11 @@ <key>ru</key> - <value>Коллизии контекстное меню группа игнорирования</value> + <value>Коллизии контекстное меню группа разедлитель</value> - - ru - Коллизии контекстное меню группа игнорирования - - КоллизииКонтекстноеМенюГруппаИгнорированияРасширеннаяПодсказка - 452 + КоллизииКонтекстноеМенюГруппаРазедлительРасширеннаяПодсказка + 492 Label true true @@ -3505,7 +3467,7 @@ КоллизииКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 455 + 494 Label true true @@ -3530,6 +3492,7 @@ true true MultiRow + Row
                      true
                      1 1 @@ -3557,6 +3520,51 @@ true
                      + + ПричинаКонфликта + 353 + true + true + + true + + + ПричинаКонфликта + + Top + + ПричинаКонфликтаРасширеннаяПодсказка + 540 + Label + true + true + + Left + + + + ПричинаКонфликтаКонтекстноеМеню + 354 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + true + true + true + true + true + Normal + + true true @@ -3572,7 +3580,7 @@ СтраницаКоллизииРасширеннаяПодсказка - 446 + 486 Label true true @@ -3607,7 +3615,7 @@ ДекорацияНепринятыеРасширеннаяПодсказка - 509 + 543 Label true true @@ -3643,6 +3651,42 @@ НепринятыеПоДате None + + НепринятыеПоДатеДата + 334 + true + true + + true + + + НепринятыеПоДате.Дата + + + НепринятыеПоДатеДатаРасширеннаяПодсказка + 579 + Label + true + true + + Left + + + + НепринятыеПоДатеДатаКонтекстноеМеню + 335 + true + + LabelField + Enter + true + Left + true + + true + true + + НепринятыеПоДатеСсылка 220 @@ -3664,7 +3708,7 @@ НепринятыеПоДатеСсылкаРасширеннаяПодсказка - 540 + 581 Label true true @@ -3708,7 +3752,7 @@ НепринятыеПоДатеТипСтрокойРасширеннаяПодсказка - 542 + 583 Label true true @@ -3731,157 +3775,28 @@ true - - НепринятыеПоДатеГруппаТекущаяВерсия - 224 - - НепринятыеПоДатеНомерЭтойВерсии - 309 - - <key>ru</key> - <value>№</value> - - true - true - - true - - - НепринятыеПоДате.НомерЭтойВерсии - - - ru - Номер версии - - - НепринятыеПоДатеНомерЭтойВерсииРасширеннаяПодсказка - 545 - Label - true - true - - Left - - - - НепринятыеПоДатеНомерЭтойВерсииКонтекстноеМеню - 310 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НепринятыеПоДатеАвторЭтойВерсии - 305 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - НепринятыеПоДате.АвторЭтойВерсии - - - ru - Пользователь, создавший версию в этой программе - - - НепринятыеПоДатеАвторЭтойВерсииРасширеннаяПодсказка - 547 - Label - true - true - - Left - - - - НепринятыеПоДатеАвторЭтойВерсииКонтекстноеМеню - 306 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НепринятыеПоДатеДатаЭтойВерсии - 307 - - <key>ru</key> - <value>Дата</value> - - true - true - - true - - - НепринятыеПоДате.ДатаЭтойВерсии - - - ru - Дата версии - - - НепринятыеПоДатеДатаЭтойВерсииРасширеннаяПодсказка - 549 - Label - true - true - - Left - - - - НепринятыеПоДатеДатаЭтойВерсииКонтекстноеМеню - 308 - true - - LabelField - Enter - true - Left - true - - true - true - - + + НепринятыеПоДатеАвторДругойВерсии + 247 + + <key>ru</key> + <value>Данные получены из программы</value> + true true true - - <key>ru</key> - <value>Версия в этой программе</value> - + + НепринятыеПоДате.АвторДругойВерсии + ru - Версия, созданная в этой программе + Информационная база или приложение из которого получена версия - НепринятыеПоДатеГруппаТекущаяВерсияРасширеннаяПодсказка - 544 + НепринятыеПоДатеАвторДругойВерсииРасширеннаяПодсказка + 585 Label true true @@ -3889,178 +3804,19 @@ Left - ColumnGroup - - auto - true - Center - true - - - - НепринятыеПоДатеГруппаНепринятаяВерсия - 223 - - НепринятыеПоДатеНомерДругойВерсии - 245 - - <key>ru</key> - <value>№</value> - - true - true - - true - - - НепринятыеПоДате.НомерДругойВерсии - - - ru - Номер версии - - - НепринятыеПоДатеНомерДругойВерсииРасширеннаяПодсказка - 552 - Label - true - true - - Left - - - - НепринятыеПоДатеНомерДругойВерсииКонтекстноеМеню - 246 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НепринятыеПоДатеАвторДругойВерсии - 247 - - <key>ru</key> - <value>Отправитель</value> - - true - true - - true - - - НепринятыеПоДате.АвторДругойВерсии - - - ru - Информационная база или приложение из которого получена версия - - - НепринятыеПоДатеАвторДругойВерсииРасширеннаяПодсказка - 554 - Label - true - true - - Left - - - - НепринятыеПоДатеАвторДругойВерсииКонтекстноеМеню - 248 - true - - LabelField - Enter - true - Left - true - - true - true - - - - НепринятыеПоДатеДатаДругойВерсии - 249 - - <key>ru</key> - <value>Дата</value> - - true - true - - true - - - НепринятыеПоДате.ДатаДругойВерсии - - - ru - Дата версии - - - НепринятыеПоДатеДатаДругойВерсииРасширеннаяПодсказка - 556 - Label - true - true - - Left - - - - НепринятыеПоДатеДатаДругойВерсииКонтекстноеМеню - 250 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - <key>ru</key> - <value>Непринятая версия из другой программы</value> - - - ru - Версия, которая была отклонена из-за установленного запрета на загрузку данных - - - НепринятыеПоДатеГруппаНепринятаяВерсияРасширеннаяПодсказка - 551 - Label + + НепринятыеПоДатеАвторДругойВерсииКонтекстноеМеню + 248 + true + + LabelField + Enter + true + Left + true + true true - - Left - - - ColumnGroup - - auto - true - Center - true @@ -4076,7 +3832,7 @@ НепринятыеПоДатеСравнитьСДаннымиВБазеРасширеннаяПодсказка - 518 + 553 Label true true @@ -4093,16 +3849,16 @@ Auto - НепринятыеПоДатеПринятьВресию + НепринятыеПоДатеПринятьВерсию 320 true - true + false true - НепринятыеПоДатеПринятьВресиюРасширеннаяПодсказка - 519 + НепринятыеПоДатеПринятьВерсиюРасширеннаяПодсказка + 554 Label true true @@ -4110,7 +3866,7 @@ Left - Form.Command.ПринятьВерсию + Form.Command.ПринятьВерсиюНепринятые Normal Auto true @@ -4128,7 +3884,7 @@ НепринятыеПоДатеИзменитьРасширеннаяПодсказка - 520 + 555 Label true true @@ -4155,7 +3911,7 @@ НепринятыеПоДатеОткрытьВерсиюРасширеннаяПодсказка - 521 + 556 Label true true @@ -4185,7 +3941,7 @@ НепринятыеПоДатеИгнорироватьНепринятыйРасширеннаяПодсказка - 523 + 558 Label true true @@ -4211,7 +3967,7 @@ НепринятыеПоДатеНеИгнорироватьНепринятыйРасширеннаяПодсказка - 524 + 559 Label true true @@ -4228,6 +3984,33 @@ Auto InAdditionalSubmenu + + НепринятыеПоДатеПоказыватьПроигнорированныеНепринятые + 343 + true + true + + true + + + НепринятыеПоДатеПоказыватьПроигнорированныеНепринятыеРасширеннаяПодсказка + 560 + Label + true + true + + Left + + + Form.Command.ПоказыватьПроигнорированныеНепринятые + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -4243,7 +4026,7 @@ НепринятыеПоДатеГруппаИгнорированияРасширеннаяПодсказка - 522 + 557 Label true true @@ -4256,6 +4039,32 @@ НепринятыеПоДатеГруппаСлужебные 153 + + НепринятыеПоДатеОбновить + 359 + true + true + + true + + + НепринятыеПоДатеОбновитьРасширеннаяПодсказка + 562 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + НепринятыеПоДатеНайти 241 @@ -4266,7 +4075,7 @@ НепринятыеПоДатеНайтиРасширеннаяПодсказка - 526 + 563 Label true true @@ -4292,7 +4101,7 @@ НепринятыеПоДатеОтменитьПоискРасширеннаяПодсказка - 527 + 564 Label true true @@ -4318,7 +4127,7 @@ НепринятыеПоДатеВывестиСписокРасширеннаяПодсказка - 528 + 565 Label true true @@ -4344,7 +4153,7 @@ НепринятыеПоДатеНастройкаСпискаРасширеннаяПодсказка - 529 + 566 Label true true @@ -4375,7 +4184,7 @@ НепринятыеПоДатеГруппаСлужебныеРасширеннаяПодсказка - 525 + 561 Label true true @@ -4385,11 +4194,64 @@
                      + + НепринятыеПоДатеИзменитьФорму + 347 + true + true + + true + + + НепринятыеПоДатеИзменитьФормуРасширеннаяПодсказка + 567 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + НепринятыеПоДатеСправка + 363 + true + true + + true + + + НепринятыеПоДатеСправкаРасширеннаяПодсказка + 568 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left - Selection - НепринятыеПоДатеВыбор + OnActivateRow + НепринятыеПоДатеПриАктивизацииСтроки BeforeRowChange @@ -4397,10 +4259,10 @@ НепринятыеПоДатеСтрокаПоиска - 531 + 570 НепринятыеПоДатеСтрокаПоискаРасширеннаяПодсказка - 533 + 572 Label true true @@ -4410,7 +4272,7 @@ НепринятыеПоДатеСтрокаПоискаКонтекстноеМеню - 532 + 571 true НепринятыеПоДате @@ -4420,10 +4282,10 @@ НепринятыеПоДатеСостояниеПросмотра - 534 + 573 НепринятыеПоДатеСостояниеПросмотраРасширеннаяПодсказка - 536 + 575 Label true true @@ -4433,7 +4295,7 @@ НепринятыеПоДатеСостояниеПросмотраКонтекстноеМеню - 535 + 574 true ViewStatusAddition @@ -4444,10 +4306,10 @@ НепринятыеПоДатеУправлениеПоиском - 537 + 576 НепринятыеПоДатеУправлениеПоискомРасширеннаяПодсказка - 539 + 578 Label true true @@ -4457,7 +4319,7 @@ НепринятыеПоДатеУправлениеПоискомКонтекстноеМеню - 538 + 577 true SearchControlAddition @@ -4468,7 +4330,7 @@ НепринятыеПоДатеРасширеннаяПодсказка - 530 + 569 Label true true @@ -4489,7 +4351,7 @@ НепринятыеПоДатеКонтекстноеМенюСравнитьСДаннымиВБазеРасширеннаяПодсказка - 510 + 544 Label true true @@ -4515,7 +4377,7 @@ НепринятыеПоДатеКонтекстноеМенюПринятьВресиюРасширеннаяПодсказка - 511 + 545 Label true true @@ -4523,7 +4385,7 @@ Left - Form.Command.ПринятьВерсию + Form.Command.ПринятьВерсиюНепринятые Normal Auto true @@ -4541,7 +4403,7 @@ НепринятыеПоДатеКонтекстноеМенюИзменитьРасширеннаяПодсказка - 512 + 546 Label true true @@ -4557,6 +4419,32 @@ UserCmds Auto
                      + + НепринятыеПоДатеКонтекстноеМенюОткрытьВерсиюНепринятыеВЭтойПрограмме + 339 + true + true + + true + + + НепринятыеПоДатеКонтекстноеМенюОткрытьВерсиюНепринятыеВЭтойПрограммеРасширеннаяПодсказка + 547 + Label + true + true + + Left + + + Form.Command.ОткрытьВерсиюНепринятыеВЭтойПрограмме + Normal + Auto + true + true + UserCmds + Auto + НепринятыеПоДатеКонтекстноеМенюОткрытьВерсию 151 @@ -4567,7 +4455,7 @@ НепринятыеПоДатеКонтекстноеМенюОткрытьВерсиюРасширеннаяПодсказка - 513 + 548 Label true true @@ -4596,7 +4484,7 @@ НепринятыеПоДатеКонтекстноеМенюИгнорироватьНепринятыйРасширеннаяПодсказка - 515 + 550 Label true true @@ -4622,7 +4510,7 @@ НепринятыеПоДатеКонтекстноеМенюНеИгнорироватьНепринятыйРасширеннаяПодсказка - 516 + 551 Label true true @@ -4653,7 +4541,7 @@ НепринятыеПоДатеКонтекстноеМенюГруппаИгнорированияРасширеннаяПодсказка - 514 + 549 Label true true @@ -4673,7 +4561,7 @@ НепринятыеПоДатеКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 517 + 552 Label true true @@ -4698,6 +4586,7 @@ true true MultiRow + Row
                      true
                      1 1 @@ -4725,69 +4614,24 @@ true
                      - - ГруппаПричинаНепринятыеПоДате - 145 - - НепринятыеПоДатеПричинаЗапретаПодробно - 225 - - <key>ru</key> - <value>Данные были отклонены из-за запрета</value> - - true - true - - true - - - Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета - - - НепринятыеПоДатеПричинаЗапретаПодробноРасширеннаяПодсказка - 567 - Label - true - true - - Left - - - - НепринятыеПоДатеПричинаЗапретаПодробноКонтекстноеМеню - 226 - true - - InputField - true - Enter - true - Left - true - - true - 4 - true - true - true - true - true - true - Normal - - + + НепринятыеПоДатеПричинаЗапретаПодробно + 225 + + <key>ru</key> + <value>Данные были отклонены из-за запрета</value> + true true true - - <key>ru</key> - <value>Данные не были приняты из-за запрета</value> - + + Items.НепринятыеПоДате.CurrentData.ПричинаЗапрета + - ГруппаПричинаНепринятыеПоДатеРасширеннаяПодсказка - 566 + НепринятыеПоДатеПричинаЗапретаПодробноРасширеннаяПодсказка + 595 Label true true @@ -4795,14 +4639,27 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + НепринятыеПоДатеПричинаЗапретаПодробноКонтекстноеМеню + 226 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + true + true + true + true + true + Normal true @@ -4820,7 +4677,7 @@ СтраницаНепринятыеПоДатеЗапретаРасширеннаяПодсказка - 508 + 542 Label true true @@ -4852,7 +4709,7 @@ РезультатыОбменаДаннымиРасширеннаяПодсказка - 337 + 371 Label true true @@ -4873,114 +4730,7 @@ ФормаКоманднаяПанель -1 - - ФормаИзменитьФорму - 325 - true - true - - true - - - ФормаИзменитьФормуРасширеннаяПодсказка - 326 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ФормаЗакрыть - 49 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 327 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - - ФормаОбновить - 28 - true - true - - true - - - ФормаОбновитьРасширеннаяПодсказка - 328 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ФормаПоказыватьПроигнорированные - 316 - true - true - - true - - - ФормаПоказыватьПроигнорированныеРасширеннаяПодсказка - 329 - Label - true - true - - Left - - - Form.Command.ПоказыватьПроигнорированные - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - Left - true NotificationProcessing @@ -5082,26 +4832,6 @@ true - - ПоказыватьПроигнорированные - - <key>ru</key> - <value>Показывать проигнорированные</value> - - 2 - - Boolean - - - true - - - true - - - ПоказыватьПроигнорированные - - Период @@ -5250,6 +4980,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.АвторТекущейВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Коллизии.АвторЭтойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.БылЗагружен</segments> </notDefaultUseAlwaysAttributes> @@ -5259,9 +4992,15 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.ДатаВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Коллизии.ДатаДругойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.ДатаТекущейВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Коллизии.ДатаЭтойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.НомерВерсии</segments> </notDefaultUseAlwaysAttributes> @@ -5271,17 +5010,17 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.Объект</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Коллизии.ЭтаВерсияПринята</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.АвторДругойВерсии</segments> </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Коллизии.АвторЭтойВерсии</segments> + <segments>Коллизии.ВерсияПроигнорирована</segments> </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Коллизии.ДатаДругойВерсии</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Коллизии.ДатаЭтойВерсии</segments> + <segments>Коллизии.Дата</segments> </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.ДругаяВерсияПринята</segments> @@ -5298,30 +5037,20 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Коллизии.ТипСтрокой</segments> </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>Коллизии.ЭтаВерсияПринята</segments> - </notDefaultUseAlwaysAttributes> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ РАЗРЕШЕННЫЕ + ВерсииДругойПрограммы.ДатаВерсии КАК Дата, ВерсииДругойПрограммы.Объект КАК Ссылка, + ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, - ВерсииЭтойПрограммы.АвторВерсии КАК АвторЭтойВерсии, - ВерсииЭтойПрограммы.ДатаВерсии КАК ДатаЭтойВерсии, ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, - ВерсииДругойПрограммы.ДатаВерсии КАК ДатаДругойВерсии, ВЫБОР КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ДругаяВерсияПринята, - ВЫБОР - КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ КАК ЭтаВерсияПринята, - Представление(ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект)) КАК ТипСтрокой, - ВерсииДругойПрограммы.ВерсияПроигнорирована + ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована ИЗ РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы @@ -5363,12 +5092,18 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.АвторТекущейВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>НепринятыеПоДате.АвторЭтойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.ВерсияПропущена</segments> </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.ДатаВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>НепринятыеПоДате.ДатаДругойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.ДатаНепринятойВерсии</segments> </notDefaultUseAlwaysAttributes> @@ -5378,6 +5113,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.ДатаТекущйВерсии</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>НепринятыеПоДате.ДатаЭтойВерсии</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.ЕстьВБазе</segments> </notDefaultUseAlwaysAttributes> @@ -5402,15 +5140,6 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.АвторДругойВерсии</segments> </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>НепринятыеПоДате.АвторЭтойВерсии</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>НепринятыеПоДате.ДатаДругойВерсии</segments> - </notDefaultUseAlwaysAttributes> - <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> - <segments>НепринятыеПоДате.ДатаЭтойВерсии</segments> - </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>НепринятыеПоДате.НовыйОбъект</segments> </notDefaultUseAlwaysAttributes> @@ -5431,20 +5160,17 @@ </notDefaultUseAlwaysAttributes> <extInfo xsi:type="form:DynamicListExtInfo"> <queryText>ВЫБРАТЬ РАЗРЕШЕННЫЕ + НепринятаяВерсия.ДатаВерсии КАК Дата, НепринятаяВерсия.Объект КАК Ссылка, НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, ВЫБОР КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектСуществует) ТОГДА ЛОЖЬ - КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыеДанныеПоДатеЗапретаОбъектНеСуществует) - ТОГДА ИСТИНА + ИНАЧЕ ИСТИНА КОНЕЦ КАК НовыйОбъект, ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, - НепринятаяВерсия.ДатаВерсии КАК ДатаДругойВерсии, ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, - ТекущаяВерсия.АвторВерсии КАК АвторЭтойВерсии, - ТекущаяВерсия.ДатаВерсии КАК ДатаЭтойВерсии, ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, НепринятаяВерсия.ВерсияПроигнорирована ИЗ @@ -5480,6 +5206,134 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ПоказыватьПроигнорированныеКонфликты</name> + <title> + <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> + + 2 + + String + + + + true + + + true + + + + СписокУзлов + + <key>ru</key> + <value>Список узлов</value> + + 14 + + + true + + + true + + + + НастройкиОтборовДинамическихСписков + + <key>ru</key> + <value>Настройки отборов динамических списков</value> + + 15 + + + true + + + true + + ИгнорироватьДокумент @@ -5670,7 +5524,7 @@ <name>ОткрытьВерсиюНепринятые</name> <title> <key>ru</key> - <value>Открыть версию</value> + <value>Показать непринятую версию</value> 15 @@ -5715,22 +5569,22 @@ Auto - ОткрытьВерсиюКоллизии + ОткрытьВерсиюДоКонфликта <key>ru</key> - <value>Открыть версию</value> + <value>Показать версию, созданную в этой информационной базе</value> 19 ru - Открыть отклоненную версию + Открыть версию, созданную в этой информационной базе true - ОткрытьВерсиюКоллизии + ОткрытьВерсиюДоКонфликта Auto @@ -5745,7 +5599,7 @@ 20 ru - Показать отличия в виде отчета + Показать отличия между версиями в этой и в дргой программе true @@ -5793,43 +5647,25 @@ ИгнорироватьКонфликт <key>ru</key> - <value>Игнорировать</value> + <value>Подтвердить</value> 23 ru - Игнорировать конфликт + Рассмотреть и подтвердить результат автоматического разрешения конфликта true + + CommonPicture.СинхронизацияДанныхДанныеПолучены + ИгнорироватьКонфликт - Auto - Auto - - - ПерейтиНаВерсиюКонфликта - - <key>ru</key> - <value>Перейти на версию</value> - - 24 - - ru - Перейти на отклоненную версию - - - true - - - - ПерейтиНаВерсиюКонфликта - - + TextPicture Auto Auto @@ -5859,12 +5695,12 @@ НеИгнорироватьКонфликт <key>ru</key> - <value>Не игнорировать</value> + <value>Снять признак "Рассмотрено"</value> 6 ru - Отменить игнорирование конфликта + Снять с конфликта признак его рассмотренния true @@ -5900,29 +5736,7 @@ Auto - ПоказыватьПроигнорированные - - <key>ru</key> - <value>Показывать проигнорированные</value> - - 18 - - ru - Показывать проигнорированные - - - true - - - - ПоказыватьПроигнорированные - - - Auto - Auto - - - ПринятьВерсию + ПринятьВерсиюНепринятые <key>ru</key> <value>Принять версию</value> @@ -5937,26 +5751,169 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ПринятьВерсию</name> + <name>ПринятьВерсиюНепринятые</name> + </handler> + </action> + <currentRowUse>Auto</currentRowUse> + <selectedRowsUse>Auto</selectedRowsUse> + </formCommands> + <formCommands> + <name>ОткрытьВерсиюКонфликта</name> + <title> + <key>ru</key> + <value>Показать версию, полученную из другой информационной базы</value> + + 17 + + ru + Открыть версию, полученную из другой информационной базы + + + true + + + + ОткрытьВерсиюКонфликта + + + Auto + Auto + + + ОткрытьВерсиюНепринятыеВЭтойПрограмме + + <key>ru</key> + <value>Показать версию в этой программе</value> + + 21 + + ru + Открыть версию в этой программе + + + true + + + + ОткрытьВерсиюНепринятыеВЭтойПрограмме + + + Auto + Auto + + + ПоказыватьПроигнорированныеНепроведенные + + <key>ru</key> + <value>Показывать проигнорированные</value> + + 24 + + ru + Показывать проигнорированные документы + + + true + + + + ПоказыватьПроигнорированныеНепроведенные + + + Auto + Auto + + + ПоказыватьПроигнорированныеНезаполненные + + <key>ru</key> + <value>Показывать проигнорированные</value> + + 25 + + ru + Показывать проигнорированные + + + true + + + + ПоказыватьПроигнорированныеНезаполненные + + + Auto + Auto + + + ПоказыватьПроигнорированныеКонфликты + + <key>ru</key> + <value>Показывать рассмотренные конфликты</value> + + 26 + + ru + Показывать рассмотренные конфликты + + + true + + + + ПоказыватьПроигнорированныеКонфликты + + + Auto + Auto + + + ПоказыватьПроигнорированныеНепринятые + + <key>ru</key> + <value>Показывать проигнорированные</value> + + 27 + + ru + Показывать проигнорированные + + + true + + + + ПоказыватьПроигнорированныеНепринятые + + + Auto + Auto + + + ИзменитьРезультатКонфликта + + <key>ru</key> + <value>Изменить</value> + + 18 + + ru + Рассмотреть и изменить результат разрешения конфликта на противоположный + + + true + + + + ИзменитьРезультатКонфликта Auto Auto - УзелИнформационнойБазы - - ExchangePlanRef - - - - ОткрываемаяСтраница - - String - - 50 - - + УзлыОбмена + diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 9c99c5359..be30e7e55 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -1,18 +1,16 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ИнформационнаяБаза = Параметры.УзелИнформационнойБазы; - - Если ЗначениеЗаполнено(Параметры.ОткрываемаяСтраница) Тогда - - Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы[Параметры.ОткрываемаяСтраница]; - + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; КонецЕсли; + // Устанавливаем отборы динамических списков и сохраняем их в реквизите для управления ими + НастроитьОтборыДинамическихСписков(НастройкиОтборовДинамическихСписков); + ИспользуетсяГрупповоеИзменение = Ложь; ОбменДаннымиСервер.ПриОпределенииИспользованияГрупповогоИзмененияОбъектов(ИспользуетсяГрупповоеИзменение); @@ -28,7 +26,7 @@ ИспользуетсяДатыЗапретаИзменения = Ложь; ОбменДаннымиСервер.ПриОпределенииИспользованияДатЗапретаИзменения(ИспользуетсяДатыЗапретаИзменения); - ОбменДаннымиСервер.ПриОпределенииИспользованияВерсионирования(ИспользуетсяВерсионирование); + ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); Если Не ИспользуетсяВерсионирование Тогда @@ -44,8 +42,15 @@ КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Элементы.КоллизииАвторДругойВерсии.Заголовок = Нстр("ru = 'Версия получена из приложения'"); + + КонецЕсли; + ЗаполнитьСписокУзлов(); - ОбновитьНаСервере(); + + ОбновитьОтборыИПроигнорированные(); КонецПроцедуры @@ -66,11 +71,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - ОбновитьОтборПоПериоду(Ложь); - ОбновитьОтборПоУзлу(Ложь); - ОбновитьОтборПоПричине(Ложь); - ПоказатьПроигнорированные(Ложь); - ОбновитьНаСервере(); + ОбновитьОтборыИПроигнорированные(); КонецПроцедуры @@ -177,46 +178,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Коллизии - -&НаКлиенте -Процедура КоллизииВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; - - Если Поле.Родитель.Имя = "КоллизииГруппаВерсияЭтойПрограммы" Тогда - - ОткрытьОбъектИлиВерсию(Элементы.Коллизии, ТекущиеДанные.ЭтаВерсияПринята, ТекущиеДанные.НомерЭтойВерсии); - - ИначеЕсли Поле.Родитель.Имя = "КоллизииГруппаВерсияДругойПрограммы" Тогда - - ОткрытьОбъектИлиВерсию(Элементы.Коллизии, ТекущиеДанные.ДругаяВерсияПринята, ТекущиеДанные.НомерДругойВерсии); - - Иначе - - ОткрытьОбъект(Элементы.Коллизии); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьОбъектИлиВерсию(Элемент, ВерсияПринята, Версия) - - Если ВерсияПринята Тогда - - ОткрытьОбъект(Элемент); - - Иначе - - ОткрытьВерсиюНаКлиенте(Элемент.ТекущиеДанные, Версия); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура КоллизииПередНачаломИзменения(Элемент, Отказ) @@ -225,22 +186,24 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НепринятыеПоДате - &НаКлиенте -Процедура НепринятыеПоДатеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура КоллизииПриАктивизацииСтроки(Элемент) - СтандартнаяОбработка = Ложь; - ТекущиеДанные = Элементы.НепринятыеПоДате.ТекущиеДанные; - - Если Поле.Родитель.Имя = "НепринятыеПоДатеГруппаНепринятаяВерсия" Тогда + Если Элемент.ТекущиеДанные <> Неопределено Тогда - ОткрытьВерсиюНаКлиенте(ТекущиеДанные, ТекущиеДанные.НомерДругойВерсии); - - Иначе - - ОткрытьОбъект(Элементы.НепринятыеПоДате); + Если Элемент.ТекущиеДанные.ДругаяВерсияПринята Тогда + + ПричинаКонфликта = "Конфликт был разрешен автоматически в пользу программы ""%1"". + |Версия в этой программе была замененена на версию из другой программы."; + ПричинаКонфликта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаКонфликта, Элемент.ТекущиеДанные.АвторДругойВерсии); + + + Иначе + + ПричинаКонфликта ="Конфликт был разрешен автоматически в пользу этой программы. + |Версия в этой программе была сохранена, версия из другой программы была отклонена."; + + КонецЕсли; КонецЕсли; @@ -254,6 +217,25 @@ КонецПроцедуры +&НаКлиенте +Процедура НепринятыеПоДатеПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущиеДанные <> Неопределено Тогда + + Если Элемент.ТекущиеДанные.НовыйОбъект Тогда + + Элементы.НепринятыеПоДатеПринятьВерсию.Доступность = Ложь; + + Иначе + + Элементы.НепринятыеПоДатеПринятьВерсию.Доступность = Истина; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -343,18 +325,16 @@ КонецПроцедуры &НаКлиенте -Процедура ОткрытьВерсиюКоллизии(Команда) +Процедура ОткрытьВерсиюНепринятыеВЭтойПрограмме(Команда) - ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; - - Если ТекущиеДанные.ЭтаВерсияПринята Тогда - Версия = ТекущиеДанные.НомерДругойВерсии; - Иначе - Версия = ТекущиеДанные.НомерЭтойВерсии; + Если Элементы.НепринятыеПоДате.ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; - ОткрытьВерсиюНаКлиенте(Элементы.Коллизии.ТекущиеДанные, Версия); - + СравниваемыеВерсии = Новый Массив; + СравниваемыеВерсии.Добавить(Элементы.НепринятыеПоДате.ТекущиеДанные.НомерЭтойВерсии); + ОбменДаннымиКлиент.ПриОткрытииФормыОтчетаПоВерсии(Элементы.НепринятыеПоДате.ТекущиеДанные.Ссылка, СравниваемыеВерсии); + КонецПроцедуры &НаКлиенте @@ -371,30 +351,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПерейтиНаВерсиюКонфликта(Команда) - - ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.ЭтаВерсияПринята Тогда - ВерсияДляПерехода = ТекущиеДанные.НомерДругойВерсии; - Иначе - ВерсияДляПерехода = ТекущиеДанные.НомерЭтойВерсии; - КонецЕсли; - - Если ВерсияДляПерехода = 0 Тогда - Сообщить(НСтр("ru = 'Нет версии для перехода.'")); - Возврат; - КонецЕсли; - - ПерейтиНаВерсиюКоллизииНаСервере(ТекущиеДанные.Ссылка, ВерсияДляПерехода, ТекущиеДанные.НомерДругойВерсии); - -КонецПроцедуры - &НаКлиенте Процедура ИгнорироватьНепринятый(Команда) @@ -417,29 +373,89 @@ КонецПроцедуры &НаКлиенте -Процедура ПоказыватьПроигнорированные(Команда) +Процедура ПринятьВерсиюНепринятые(Команда) - ПоказыватьПроигнорированные = Не ПоказыватьПроигнорированные; - ПоказатьПроигнорированные(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПринятьВерсию(Команда) - - ТекущиеДанные = Элементы.НепринятыеПоДате.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Или ТекущиеДанные.НомерДругойВерсии = 0 Тогда - Сообщить(НСтр("ru = 'Нет версии для перехода.'")); - Возврат; - КонецЕсли; - - Ответ = Вопрос(НСтр("ru = 'Загрузить версию, несмотря на запрет загрузки?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + Ответ = Вопрос(НСтр("ru = 'Принять версию, несмотря на запрет загрузки?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; - ПерейтиНаНепринятуюВерсиюНаСервере(ТекущиеДанные.Ссылка, ТекущиеДанные.НомерДругойВерсии); + ПринятьОтклонитьВерсиюНаСервере(Элементы.НепринятыеПоДате.ВыделенныеСтроки, Истина, "НепринятыеПоДате"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьВерсиюДоКонфликта(Команда) + + ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; + ОткрытьВерсиюНаКлиенте(Элементы.Коллизии.ТекущиеДанные, ТекущиеДанные.НомерЭтойВерсии); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьВерсиюКонфликта(Команда) + + ТекущиеДанные = Элементы.Коллизии.ТекущиеДанные; + ОткрытьВерсиюНаКлиенте(Элементы.Коллизии.ТекущиеДанные, ТекущиеДанные.НомерДругойВерсии); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьПроигнорированныеКонфликты(Команда) + + ПоказыватьПроигнорированныеКонфликты = Не ПоказыватьПроигнорированныеКонфликты; + ПоказыватьПроигнорированныеКонфликтыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьПроигнорированныеНезаполненные(Команда) + + ПоказыватьПроигнорированныеНезаполненные = Не ПоказыватьПроигнорированныеНезаполненные; + ПоказыватьПроигнорированныеНезаполненныеНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьПроигнорированныеНепринятые(Команда) + + ПоказыватьПроигнорированныеНепринятые = Не ПоказыватьПроигнорированныеНепринятые; + ПоказыватьПроигнорированныеНепринятыеНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьПроигнорированныеНепроведенные(Команда) + + ПоказыватьПроигнорированныеНепроведенные = Не ПоказыватьПроигнорированныеНепроведенные; + ПоказыватьПроигнорированныеНепроведенныеНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРезультатКонфликта(Команда) + + Если Элементы.Коллизии.ТекущиеДанные <> Неопределено Тогда + + Если Элементы.Коллизии.ТекущиеДанные.ДругаяВерсияПринята Тогда + + ТекстВопроса = Нстр("ru = 'Заменить версию, полученную из другой программы, на версию из этой программы?'"); + + Иначе + + ТекстВопроса = Нстр("ru = 'Заменить версию этой программы на версию, полученную из другой программы?'"); + + КонецЕсли; + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + ПринятьОтклонитьВерсиюНаСервере(Элементы.Коллизии.ВыделенныеСтроки, Элементы.Коллизии.ТекущиеДанные.ДругаяВерсияПринята, "Коллизии"); + + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -464,18 +480,80 @@ КонецПроцедуры &НаСервере -Процедура ПоказатьПроигнорированные(Обновлять= Истина) +Процедура ПоказыватьПроигнорированныеКонфликтыНаСервере(Обновлять= Истина) - Элементы.ФормаПоказыватьПроигнорированные.Пометка = ПоказыватьПроигнорированные; - - НепроведенныеДокументы.Отбор.Элементы[0].Использование = Не ПоказыватьПроигнорированные; - НезаполненныеРеквизиты.Отбор.Элементы[0].Использование = Не ПоказыватьПроигнорированные; - Коллизии.Отбор.Элементы[2].Использование = Не ПоказыватьПроигнорированные; - НепринятыеПоДате.Отбор.Элементы[3].Использование = Не ПоказыватьПроигнорированные; + Элементы.КоллизииПоказыватьПроигнорированныеКонфликты.Пометка = ПоказыватьПроигнорированныеКонфликты; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Коллизии, + "ВерсияПроигнорирована", + , + , + , + Не ПоказыватьПроигнорированныеКонфликты); Если Обновлять Тогда - ОбновитьНаСервере(); + ОбновитьНаСервере("Коллизии"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПоказыватьПроигнорированныеНезаполненныеНаСервере(Обновлять= Истина) + + Элементы.НезаполненныеРеквизитыПоказыватьПроигнорированныеНезаполненные.Пометка = ПоказыватьПроигнорированныеНезаполненные; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НезаполненныеРеквизиты, + "Пропущена", + , + , + , + Не ПоказыватьПроигнорированныеНезаполненные); + + Если Обновлять Тогда + + ОбновитьНаСервере("НезаполненныеРеквизиты"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПоказыватьПроигнорированныеНепринятыеНаСервере(Обновлять= Истина) + + Элементы.НепринятыеПоДатеПоказыватьПроигнорированныеНепринятые.Пометка = ПоказыватьПроигнорированныеНепринятые; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НепринятыеПоДате, + "ВерсияПроигнорирована", + , + , + , + Не ПоказыватьПроигнорированныеНепринятые); + + Если Обновлять Тогда + + ОбновитьНаСервере("НепринятыеПоДате"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПоказыватьПроигнорированныеНепроведенныеНаСервере(Обновлять= Истина) + + Элементы.НепроведенныеДокументыПоказыватьПроигнорированныеНепроведенные.Пометка = ПоказыватьПроигнорированныеНепроведенные; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НепроведенныеДокументы, + "Пропущена", + , + , + , + Не ПоказыватьПроигнорированныеНепроведенные); + + Если Обновлять Тогда + + ОбновитьНаСервере("НепроведенныеДокументы"); КонецЕсли; @@ -505,6 +583,88 @@ &НаСервере Процедура ЗаполнитьСписокУзлов() + ОтсутствуетОбменПоПравилам = Истина; + КонтекстноеОткрытие = ЗначениеЗаполнено(Параметры.УзлыОбмена); + + УзлыОбмена = ?(КонтекстноеОткрытие, Параметры.УзлыОбмена, МассивУзловПриНеконтекстномОткрытии()); + Элементы.УзелИнформационнойБазы.СписокВыбора.ЗагрузитьЗначения(УзлыОбмена); + + Для Каждого УзелОбмена Из УзлыОбмена Цикл + + Если ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(УзелОбмена) Тогда + + ОтсутствуетОбменПоПравилам = Ложь; + + КонецЕсли; + + КонецЦикла; + + Если КонтекстноеОткрытие Тогда + + УстановитьОтборПоУзлам(УзлыОбмена); + СписокУзлов = Новый СписокЗначений; + СписокУзлов.ЗагрузитьЗначения(УзлыОбмена); + + КонецЕсли; + + Если КонтекстноеОткрытие И УзлыОбмена.Количество() = 1 Тогда + + УзелИнформационнойБазы = Неопределено; + Элементы.УзелИнформационнойБазы.Видимость = Ложь; + Элементы.НепроведенныеДокументыУзелИнформационнойБазы.Видимость = Ложь; + Элементы.НезаполненныеРеквизитыУзелИнформационнойБазы.Видимость = Ложь; + Элементы.КоллизииАвторДругойВерсии.Видимость = Ложь; + Элементы.НепринятыеПоДатеАвторДругойВерсии.Видимость = Ложь; + + ИначеЕсли УзлыОбмена.Количество() >= 7 Тогда + + Элементы.УзелИнформационнойБазы.РежимВыбораИзСписка = Ложь; + + КонецЕсли; + + Если КонтекстноеОткрытие И ОтсутствуетОбменПоПравилам Тогда + Заголовок = Нстр("ru = 'Конфликты при синхронизации данных'"); + Элементы.СтрокаПоиска.Видимость = Ложь; + Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы.СтраницаКоллизии; + Элементы.РезультатыОбменаДанными.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборПоУзлам(УзлыОбмена) + + ОтборПоУзламДокумент = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы, + НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.УзелВСписке); + + ОтборПоУзламОбъект = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты, + НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.УзелВСписке); + + ОтборПоУзламКоллизии = ЭлементОтбораДинамическогоСписка(Коллизии, + НастройкиОтборовДинамическихСписков.Коллизии.АвторВСписке); + + ОтборПоУзламНепринятые = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате, + НастройкиОтборовДинамическихСписков.НепринятыеПоДате.АвторВСписке); + + ОтборПоУзламДокумент.Использование = Истина; + ОтборПоУзламДокумент.ПравоеЗначение = УзлыОбмена; + + ОтборПоУзламОбъект.Использование = Истина; + ОтборПоУзламОбъект.ПравоеЗначение = УзлыОбмена; + + ОтборПоУзламКоллизии.Использование = Истина; + ОтборПоУзламКоллизии.ПравоеЗначение = УзлыОбмена; + + ОтборПоУзламНепринятые.Использование = Истина; + ОтборПоУзламНепринятые.ПравоеЗначение = УзлыОбмена; + +КонецПроцедуры + +&НаСервере +Функция МассивУзловПриНеконтекстномОткрытии() + + УзлыОбмена = Новый Массив; + СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); Для Каждого ИмяПланаОбмена Из СписокПлановОбмена Цикл @@ -516,8 +676,7 @@ Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТаблицаПланаОбмена.Ссылка, - | ТаблицаПланаОбмена.Представление КАК Представление + | ТаблицаПланаОбмена.Ссылка КАК УзелОбмена |ИЗ | &ТаблицаПланаОбмена КАК ТаблицаПланаОбмена |ГДЕ @@ -532,94 +691,87 @@ Пока Выборка.Следующий() Цикл - Элементы.УзелИнформационнойБазы.СписокВыбора.Добавить(Выборка.Ссылка, Выборка.Представление); + УзлыОбмена.Добавить(Выборка.УзелОбмена); КонецЦикла; КонецЦикла; - Если Элементы.УзелИнформационнойБазы.СписокВыбора.Количество() >= 7 Тогда - - Элементы.УзелИнформационнойБазы.РежимВыбораИзСписка = Ложь; - - КонецЕсли; + Возврат УзлыОбмена; -КонецПроцедуры +КонецФункции &НаСервере Процедура ОбновитьОтборПоУзлу(Обновлять = Истина) - ОтборПоУзлуДокумент = НепроведенныеДокументы.Отбор.Элементы[2]; - ОтборПоУзлуОбъект = НезаполненныеРеквизиты.Отбор.Элементы[2]; - ОтборПоУзлуКоллизии = Коллизии.Отбор.Элементы[0]; - ОтборПоУзлуНепринятые = НепринятыеПоДате.Отбор.Элементы[0]; + ОтборПоУзлуДокумент = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы, + НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.УзелРавно); - Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + ОтборПоУзлуОбъект = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты, + НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.УзелРавно); - ОтборПоУзлуДокумент.Использование = Истина; - ОтборПоУзлуДокумент.ПравоеЗначение = УзелИнформационнойБазы; + ОтборПоУзлуКоллизии = ЭлементОтбораДинамическогоСписка(Коллизии, + НастройкиОтборовДинамическихСписков.Коллизии.АвторРавно); - ОтборПоУзлуОбъект.Использование = Истина; - ОтборПоУзлуОбъект.ПравоеЗначение = УзелИнформационнойБазы; - - ОтборПоУзлуКоллизии.Использование = Истина; - ОтборПоУзлуКоллизии.ПравоеЗначение = УзелИнформационнойБазы; - - ОтборПоУзлуНепринятые.Использование = Истина; - ОтборПоУзлуНепринятые.ПравоеЗначение = УзелИнформационнойБазы; - - Иначе - - ОтборПоУзлуДокумент.Использование = Ложь; - ОтборПоУзлуОбъект.Использование = Ложь; - ОтборПоУзлуКоллизии.Использование = Ложь; - ОтборПоУзлуНепринятые.Использование = Ложь; - - КонецЕсли; + ОтборПоУзлуНепринятые = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате, + НастройкиОтборовДинамическихСписков.НепринятыеПоДате.АвторРавно); + + Использование = ЗначениеЗаполнено(УзелИнформационнойБазы); + + // Использование + ОтборПоУзлуДокумент.Использование = Использование; + ОтборПоУзлуОбъект.Использование = Использование; + ОтборПоУзлуКоллизии.Использование = Использование; + ОтборПоУзлуНепринятые.Использование = Использование; + + // И значение + ОтборПоУзлуДокумент.ПравоеЗначение = УзелИнформационнойБазы; + ОтборПоУзлуОбъект.ПравоеЗначение = УзелИнформационнойБазы; + ОтборПоУзлуКоллизии.ПравоеЗначение = УзелИнформационнойБазы; + ОтборПоУзлуНепринятые.ПравоеЗначение = УзелИнформационнойБазы; Если Обновлять Тогда - ОбновитьНаСервере(); - КонецЕсли; - КонецПроцедуры &НаСервере Функция КоличествоНепринятых() - КоличествоНепринятых = 0; - ОбменДаннымиСервер.ПриОбновленииЗаголовковСтраницРезультатовОбменаДанными(КоличествоНепринятых, Ложь, - ПоказыватьПроигнорированные, УзелИнформационнойБазы, Период, СтрокаПоиска); - - Возврат КоличествоНепринятых; + УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов); + + Возврат ОбменДаннымиСервер.КоличествоПроблемВерсионирования(УзлыОбмена, Ложь, + ПоказыватьПроигнорированныеКонфликты, Период, СтрокаПоиска); КонецФункции &НаСервере Функция КоличествоКоллизий() - КоличествоКоллизий = 0; - ОбменДаннымиСервер.ПриОбновленииЗаголовковСтраницРезультатовОбменаДанными(КоличествоКоллизий, Истина, - ПоказыватьПроигнорированные, УзелИнформационнойБазы, Период, СтрокаПоиска); - - Возврат КоличествоКоллизий; - + УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов); + + Возврат ОбменДаннымиСервер.КоличествоПроблемВерсионирования(УзлыОбмена, Истина, + ПоказыватьПроигнорированныеКонфликты, Период, СтрокаПоиска); + КонецФункции &НаСервере Функция КоличествоНезаполненныхРеквизитов() - Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты, - УзелИнформационнойБазы, ПоказыватьПроигнорированные, Период, СтрокаПоиска); + УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов); + + Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты, + ПоказыватьПроигнорированныеНезаполненные, Период, СтрокаПоиска); КонецФункции &НаСервере Функция КоличествоНепроведенныхДокументов() - Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент, - УзелИнформационнойБазы, ПоказыватьПроигнорированные, Период, СтрокаПоиска); + УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов); + + Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент, + ПоказыватьПроигнорированныеНепроведенные, Период, СтрокаПоиска); КонецФункции @@ -702,17 +854,29 @@ СтрокаПоискаЗадана = ЗначениеЗаполнено(СтрокаПоиска); - ОтборПоПричинеДокумент = НепроведенныеДокументы.Отбор.Элементы[3]; - ОтборПоПричинеДокумент.ПравоеЗначение = СтрокаПоиска; - ОтборПоПричинеДокумент.Использование = ?(СтрокаПоискаЗадана, Истина, Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НепроведенныеДокументы, + "Причина", + СтрокаПоиска, + , + , + СтрокаПоискаЗадана); - ОтборПоПричинеОбъект = НезаполненныеРеквизиты.Отбор.Элементы[3]; - ОтборПоПричинеОбъект.ПравоеЗначение = СтрокаПоиска; - ОтборПоПричинеОбъект.Использование = ?(СтрокаПоискаЗадана, Истина, Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НезаполненныеРеквизиты, + "Причина", + СтрокаПоиска, + , + , + СтрокаПоискаЗадана); - ОтборПоПричинеНепринятые = НепринятыеПоДате.Отбор.Элементы[2]; - ОтборПоПричинеНепринятые.ПравоеЗначение = СтрокаПоиска; - ОтборПоПричинеНепринятые.Использование = ?(СтрокаПоискаЗадана, Истина, Ложь); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + НепринятыеПоДате, + "ПричинаЗапрета", + СтрокаПоиска, + , + , + СтрокаПоискаЗадана); Если Обновлять Тогда @@ -725,44 +889,57 @@ &НаСервере Процедура ОбновитьОтборПоПериоду(Обновлять = Истина) - ОтборПоПериодуДокумент = НепроведенныеДокументы.Отбор.Элементы[1]; - ОтборПоПериодуОбъект = НезаполненныеРеквизиты.Отбор.Элементы[1]; - ОтборПоПериодуКоллизии = Коллизии.Отбор.Элементы[1]; - ОтборПоПериодуНепринятые = НепринятыеПоДате.Отбор.Элементы[1]; + ОтборПоПериодуДокументС = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы, + НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.ДатаНачала); + ОтборПоПериодуДокументПо = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы, + НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.ДатаОкончания); - Если ЗначениеЗаполнено(Период) Тогда - - ОтборПоПериодуДокумент.Использование = Истина; - ОтборПоПериодуДокумент.Элементы[0].ПравоеЗначение = Период.ДатаНачала; - ОтборПоПериодуДокумент.Элементы[1].ПравоеЗначение = Период.ДатаОкончания; - - ОтборПоПериодуОбъект.Использование = Истина; - ОтборПоПериодуОбъект.Элементы[0].ПравоеЗначение = Период.ДатаНачала; - ОтборПоПериодуОбъект.Элементы[1].ПравоеЗначение = Период.ДатаОкончания; - - ОтборПоПериодуКоллизии.Использование = Истина; - ОтборПоПериодуКоллизии.Элементы[0].ПравоеЗначение = Период.ДатаНачала; - ОтборПоПериодуКоллизии.Элементы[1].ПравоеЗначение = Период.ДатаОкончания; - - ОтборПоПериодуНепринятые.Использование = Истина; - ОтборПоПериодуНепринятые.Элементы[0].ПравоеЗначение = Период.ДатаНачала; - ОтборПоПериодуНепринятые.Элементы[1].ПравоеЗначение = Период.ДатаОкончания; - - Иначе - - ОтборПоПериодуДокумент.Использование = Ложь; - ОтборПоПериодуОбъект.Использование = Ложь; - ОтборПоПериодуКоллизии.Использование = Ложь; - ОтборПоПериодуНепринятые.Использование = Ложь; - - КонецЕсли; + ОтборПоПериодуОбъектС = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты, + НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.ДатаНачала); + ОтборПоПериодуОбъектПо = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты, + НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.ДатаОкончания); + + ОтборПоПериодуКоллизииС = ЭлементОтбораДинамическогоСписка(Коллизии, + НастройкиОтборовДинамическихСписков.Коллизии.ДатаНачала); + ОтборПоПериодуКоллизииПо = ЭлементОтбораДинамическогоСписка(Коллизии, + НастройкиОтборовДинамическихСписков.Коллизии.ДатаОкончания); + + ОтборПоПериодуНепринятыеС = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате, + НастройкиОтборовДинамическихСписков.НепринятыеПоДате.ДатаНачала); + ОтборПоПериодуНепринятыеПо = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате, + НастройкиОтборовДинамическихСписков.НепринятыеПоДате.ДатаОкончания); + + Использование = ЗначениеЗаполнено(Период); + + // Использование + ОтборПоПериодуДокументС.Использование = Использование; + ОтборПоПериодуДокументПо.Использование = Использование; + + ОтборПоПериодуОбъектС.Использование = Использование; + ОтборПоПериодуОбъектПо.Использование = Использование; + + ОтборПоПериодуКоллизииС.Использование = Использование; + ОтборПоПериодуКоллизииПо.Использование = Использование; + + ОтборПоПериодуНепринятыеС.Использование = Использование; + ОтборПоПериодуНепринятыеПо.Использование = Использование; + + // И границы + ОтборПоПериодуДокументС.ПравоеЗначение = Период.ДатаНачала; + ОтборПоПериодуДокументПо.ПравоеЗначение = Период.ДатаОкончания; + + ОтборПоПериодуОбъектС.ПравоеЗначение = Период.ДатаНачала; + ОтборПоПериодуОбъектПо.ПравоеЗначение = Период.ДатаОкончания; + + ОтборПоПериодуКоллизииС.ПравоеЗначение = Период.ДатаНачала; + ОтборПоПериодуКоллизииПо.ПравоеЗначение = Период.ДатаОкончания; + + ОтборПоПериодуНепринятыеС.ПравоеЗначение = Период.ДатаНачала; + ОтборПоПериодуНепринятыеПо.ПравоеЗначение = Период.ДатаОкончания; Если Обновлять Тогда - ОбновитьНаСервере(); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -823,22 +1000,6 @@ КонецПроцедуры -&НаСервере -Процедура ПерейтиНаВерсиюКоллизииНаСервере(Ссылка, ВерсияДляПерехода, ИгнорируемаяВерсия) - - ОбменДаннымиСервер.ПриПереходеНаВерсиюОбъекта(Ссылка, ВерсияДляПерехода, ИгнорируемаяВерсия); - ОбновитьНаСервере("Коллизии"); - -КонецПроцедуры - -&НаСервере -Процедура ПерейтиНаНепринятуюВерсиюНаСервере(Ссылка, НомерВерсии) - - ОбменДаннымиСервер.ПриПереходеНаВерсиюОбъекта(Ссылка, НомерВерсии, НомерВерсии, Истина); - ОбновитьНаСервере("НепринятыеПоДате"); - -КонецПроцедуры - &НаКлиенте Процедура ОткрытьВерсиюНаКлиенте(ТекущиеДанные, Версия) @@ -851,3 +1012,139 @@ ОбменДаннымиКлиент.ПриОткрытииФормыОтчетаПоВерсии(ТекущиеДанные.Ссылка, СравниваемыеВерсии); КонецПроцедуры + +&НаСервере +Процедура ПринятьОтклонитьВерсиюНаСервере(Знач ВыделенныеСтроки, ПринятьВерсию, ИмяЭлемента, ПропуститьПроверкуЗапретаИзменения = Ложь) + + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + + Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + + ОбменДаннымиСервер.ПриПереходеНаВерсиюОбъекта(ВыделеннаяСтрока.Объект, ВыделеннаяСтрока.НомерВерсии, ПропуститьПроверкуЗапретаИзменения); + + КонецЦикла; + + ОбновитьНаСервере(ИмяЭлемента); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьОтборыДинамическихСписков(Результат) + Результат = Новый Структура; + + // Непроведенные документы + Отбор = ОтборДинамическогоСписка(НепроведенныеДокументы); + Результат.Вставить("НепроведенныеДокументы", Новый Структура); + Настройка = Результат.НепроведенныеДокументы; + + Настройка.Вставить("Пропущена", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Пропущена", ВидСравненияКомпоновкиДанных.Равно, Ложь, ,Истина))); + Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("УзелРавно", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.Равно, Неопределено, , Ложь))); + Настройка.Вставить("Причина", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Причина", ВидСравненияКомпоновкиДанных.Содержит, Неопределено, , Ложь))); + Настройка.Вставить("УзелВСписке", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, , Ложь))); + + // Незаполненные реквизиты + Отбор = ОтборДинамическогоСписка(НезаполненныеРеквизиты); + Результат.Вставить("НезаполненныеРеквизиты", Новый Структура); + Настройка = Результат.НезаполненныеРеквизиты; + + Настройка.Вставить("Пропущена", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Пропущена", ВидСравненияКомпоновкиДанных.Равно, Ложь, ,Истина))); + Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("УзелРавно", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.Равно, Неопределено, , Ложь))); + Настройка.Вставить("Причина", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Причина", ВидСравненияКомпоновкиДанных.Содержит, Неопределено, , Ложь))); + Настройка.Вставить("УзелВСписке", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, , Ложь))); + + // Конфликты + Отбор = ОтборДинамическогоСписка(Коллизии); + Результат.Вставить("Коллизии", Новый Структура); + Настройка = Результат.Коллизии; + + Настройка.Вставить("АвторРавно", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.Равно, Неопределено, ,Ложь))); + Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ВерсияПроигнорирована", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ВерсияПроигнорирована", ВидСравненияКомпоновкиДанных.Равно, Ложь, , Истина))); + Настройка.Вставить("АвторВСписке", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, ,Ложь))); + + // Непринятые по дате запрета + Отбор = ОтборДинамическогоСписка(НепринятыеПоДате); + Результат.Вставить("НепринятыеПоДате", Новый Структура); + Настройка = Результат.НепринятыеПоДате; + + Настройка.Вставить("АвторРавно", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.Равно, Неопределено, ,Ложь))); + Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина))); + Настройка.Вставить("ПричинаЗапрета", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ПричинаЗапрета", ВидСравненияКомпоновкиДанных.Равно, Неопределено, , Ложь))); + Настройка.Вставить("ВерсияПроигнорирована", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ВерсияПроигнорирована", ВидСравненияКомпоновкиДанных.Равно, Ложь, , Истина))); + Настройка.Вставить("АвторВСписке", Отбор.ПолучитьИдентификаторПоОбъекту( + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, ,Ложь))); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОтборДинамическогоСписка(Знач ДинамическийСписок) + Если ОбщегоНазначенияКлиентСервер.ЭтоПлатформа83БезРежимаСовместимости() Тогда + Возврат ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор; + КонецЕсли; + Возврат ДинамическийСписок.Отбор; +КонецФункции + +&НаСервереБезКонтекста +Функция ЭлементОтбораДинамическогоСписка(Знач ДинамическийСписок, Знач Идентификатор) + Отбор = ОтборДинамическогоСписка(ДинамическийСписок); + Возврат Отбор.ПолучитьОбъектПоИдентификатору(Идентификатор); +КонецФункции + +&НаСервере +Процедура ОбновитьОтборыИПроигнорированные() + + ОбновитьОтборПоПериоду(Ложь); + ОбновитьОтборПоУзлу(Ложь); + ОбновитьОтборПоПричине(Ложь); + + ПоказыватьПроигнорированныеКонфликтыНаСервере(Ложь); + ПоказыватьПроигнорированныеНезаполненныеНаСервере(Ложь); + ПоказыватьПроигнорированныеНепринятыеНаСервере(Ложь); + ПоказыватьПроигнорированныеНепроведенныеНаСервере(Ложь); + + ОбновитьНаСервере(); + + Если Не Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы.СтраницаКоллизии Тогда + + Для Каждого Страница Из Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы Цикл + + Если Найти(Страница.Заголовок, "(") Тогда + Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Страница; + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html new file mode 100644 index 000000000..c02c1c1ef --- /dev/null +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html @@ -0,0 +1,10 @@ + +

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

                      +

                      Непроведенные документы

                      +

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

                      +

                      Незаполненные реквизиты

                      +

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

                      +

                      Конфликты

                      +

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

                      +

                      Непринятые по дате запрета

                      +

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

                      \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index e8e6fb9fd..ab7051554 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Процедура ЗарегистрироватьОшибкуПроверкиОбъекта(Ссылка, УзелИнформационнойБазы, ТипСтрокой, Причина, ТипПроблемы) Экспорт +Процедура ЗарегистрироватьОшибкуПроверкиОбъекта(Ссылка, УзелИнформационнойБазы, Причина, ТипПроблемы) Экспорт НаборЗаписейКонфликта = РегистрыСведений.РезультатыОбменаДанными.СоздатьНаборЗаписей(); НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(Ссылка); @@ -43,7 +43,7 @@ КонецПроцедуры -Функция КоличествоПроблем(ТипПроблемы = Неопределено, УзелИнформационнойБазы = Неопределено, УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт +Функция КоличествоПроблем(УзлыОбмена = Неопределено, ТипПроблемы = Неопределено, УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт Количество = 0; @@ -71,12 +71,16 @@ КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоТипу]", СтрокаОтбора); - Если УзелИнформационнойБазы = Неопределено Тогда + Если УзлыОбмена = Неопределено Тогда СтрокаОтбора = ""; - Иначе + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипЗнч(УзлыОбмена)) Тогда СтрокаОтбора = "И РезультатыОбменаДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы"; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзлыОбмена); + Иначе + СтрокаОтбора = "И РезультатыОбменаДанными.УзелИнформационнойБазы В (&УзлыОбмена)"; + Запрос.УстановитьПараметр("УзлыОбмена", УзлыОбмена); КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОтборПоУзлу]", СтрокаОтбора); Если ЗначениеЗаполнено(Период) Тогда diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo b/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo index 58f68a88e..4b818b4aa 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo @@ -12,7 +12,7 @@ РезультатыОбменаДанными ru - Результаты обмена данными + Предупреждения при синхронизации данных InDialog InformationRegister.РезультатыОбменаДанными.Form.Форма @@ -49,10 +49,15 @@ + + + ru + + Managed ru - Конфликт синхронизации данных + Предупреждение при синхронизации данных УзелИнформационнойБазы diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 108e200f3..d0a151413 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -25,8 +25,7 @@ РезультатВыполнения.ВыполненаВПапку ИЛИ РезультатВыполнения.ВыполненаВСетевойКаталог ИЛИ РезультатВыполнения.ВыполненаНаFTP - ИЛИ РезультатВыполнения.ВыполненаПоЭлектроннойПочте - ); + ИЛИ РезультатВыполнения.ВыполненаПоЭлектроннойПочте); МенеджерЗаписи.СОшибками = РезультатВыполнения.БылиОшибки ИЛИ РезультатВыполнения.БылиПредупреждения; @@ -34,4 +33,4 @@ КонецПроцедуры -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 0f3f20d9b..f4f2a6e6c 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -60,6 +60,12 @@ Таблицы = Неопределено, ЕстьИзменения = Неопределено) Экспорт + Если ТипЗнч(Таблицы) = Тип("Массив") + И Таблицы.Количество() > 500 Тогда + + Таблицы = Неопределено; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); ТекстЗапросовВременныхТаблиц = diff --git a/SSL/src/InformationRegisters/УдалитьСвязиПоставляемыхДанных/УдалитьСвязиПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/УдалитьСвязиПоставляемыхДанных/УдалитьСвязиПоставляемыхДанных.mdo deleted file mode 100644 index 991da627a..000000000 --- a/SSL/src/InformationRegisters/УдалитьСвязиПоставляемыхДанных/УдалитьСвязиПоставляемыхДанных.mdo +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - УдалитьСвязиПоставляемыхДанных - - ru - (Не используется) Связи поставляемых данных - - true - InDialog - - Use - Active - - Use - - - - - Use - LineNumber - - Use - - - - - Use - Recorder - - Use - - - - - Use - Period - - ShowError - Use - - - - Managed - - РучноеИзменение - - ru - Ручное изменение - - - Boolean - - - - Use - Use - - - - ОбластьДанных - - ru - Область данных - - - Number - - 7 - true - - - - - Use - Use - - true - - - ЭлементРазделенныхДанных - - ru - Элемент разделенных данных - - - CatalogRef.Валюты - CatalogRef.Календари - - - - Use - Use - true - - true - - - ЭлементОбщихДанных - - ru - Элемент общих данных - - - CatalogRef.УдалитьКлассификаторВалют - CatalogRef.ПроизводственныеКалендари - String - - 10 - - - - - Use - Use - true - - true - true - - - ТипОбщихДанных - - ru - Тип общих данных - - - String - - 10 - - - - - Use - Use - - true - - diff --git a/SSL/src/InformationRegisters/УдалитьСтраныМира/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьСтраныМира/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/УдалитьСтраныМира/УдалитьСтраныМира.mdo b/SSL/src/InformationRegisters/УдалитьСтраныМира/УдалитьСтраныМира.mdo new file mode 100644 index 000000000..f4126a220 --- /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 + Значение + + + ValueStorage + + + ru + Значение для обновления + + + + Use + + + + ОбластьДанных + + ru + Область данных + + + Number + + 10 + + + + ru + Область данных для обновления + + + + Use + + true + + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html index 31d724158..4b8b95d96 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Отчет «Анализ журнала регистрации» предназначен для диагностики работы программы на основе данных журнала регистрации. Включает в себя следующие варианты отчетов:

                      ·         Анализ активности пользователей

                      ·         Активность пользователя

                      diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 142a5e489..c79866daf 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -365,7 +365,7 @@ Если ОдновременноРаботавшихПользователей <> 0 Тогда СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, ОдновременноРаботавшихПользователей, ТекущДата); - КонецЕсли; + КонецЕсли; ОдновременноРаботавшихПользователей = 0; Счетчик = 0; МассивПользователей.Очистить(); diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 5b7f68d3e..d065de52b 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -3053,9 +3053,9 @@ Day 1 true - 2013-04-18T13:00:00 - 2013-04-27T13:59:59 - 2013-04-18T13:00:00 + 2013-07-18T11:00:00 + 2013-07-27T11:59:59 + 2013-07-18T11:00:00 Gradient 3 Day diff --git a/SSL/src/Reports/АнализОпроса/АнализОпроса.mdo b/SSL/src/Reports/АнализОпроса/АнализОпроса.mdo index a2704de77..03b16a161 100644 --- a/SSL/src/Reports/АнализОпроса/АнализОпроса.mdo +++ b/SSL/src/Reports/АнализОпроса/АнализОпроса.mdo @@ -11,6 +11,7 @@ true Report.АнализОпроса.Form.ФормаОтчета + SettingsStorage.ХранилищеВариантовОтчетов ФормаОтчета diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/АналитическийОтчетПоАнкетированию.mdo b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/АналитическийОтчетПоАнкетированию.mdo index 7d70b34d7..e641fab0e 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/АналитическийОтчетПоАнкетированию.mdo +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/АналитическийОтчетПоАнкетированию.mdo @@ -11,6 +11,7 @@ true Report.АналитическийОтчетПоАнкетированию.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index 77ea3f705..d51b601fe 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                      Если установлен отбор по "Координатору выполнения задач", то в отчет будут выводиться только те задачи, которые назначены исполнителям в объектах адресации, за которые отвечает указанный Координатор выполнения задач.

                      Чтобы установить группировку списка зависших задач по объектам адресации, выберите вариант отчета "Зависшие задачи".

                      diff --git a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form index 24c7aa07f..64e55e813 100644 --- a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Form.form @@ -622,6 +622,10 @@ -1 Left + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true diff --git a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl index e1e3e25d8..5217cfb61 100644 --- a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -9,3 +25,4 @@ КонецЕсли; КонецПроцедуры + diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 6ca383f84..3227a404e 100644 --- a/SSL/src/Reports/Задачи/Help/ru.html +++ b/SSL/src/Reports/Задачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                      Текущие задачи

                      При необходимости установите параметры отчета:

                      diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index e721321ed..33be48683 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html @@ -1,3 +1,3 @@ - +

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

                      Для детальной настройки отчета используйте команду "Все действия - Изменить вариант".

                      \ No newline at end of file diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form index 5dec85744..16c4ee786 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Form.form @@ -193,6 +193,7 @@
                      DontBlock true + true true Vertical true diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index 98dcd65a7..f83abfcbe 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -10,16 +10,12 @@ Если НЕ ЗначениеЗаполнено(Параметры.Пользователь) ИЛИ ( НЕ Пользователи.ЭтоПолноправныйПользователь() - И Параметры.Пользователь <> Пользователи.ТекущийПользователь() ) Тогда + И Параметры.Пользователь <> Пользователи.АвторизованныйПользователь() ) Тогда Отказ = Истина; Возврат; КонецЕсли; - // Установка заголовка формы. - Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( - НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); - Элементы.ПодробныеСведенияОПравахДоступа.Видимость = НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); @@ -748,7 +744,7 @@ Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка"); Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Просмотр объектов'"); Документ.Вывести(Область, 1); - Область = Макет.ПолучитьОбласть("ПросмотрОбъековЛегенда"); + Область = Макет.ПолучитьОбласть("ПросмотрОбъектовЛегенда"); Документ.Вывести(Область, 2); Для каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл @@ -960,7 +956,7 @@ КонецЕсли; КонецЦикла; КонецЦикла; - // Объединение ячеек объектаи установка границы + // Объединение ячеек объекта и установка границы ОбъединитьЯчейкиУстановитьГраницы( Документ, НачальнаяСтрокаОбластиОбъекта, @@ -991,7 +987,7 @@ Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка"); Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Редактирование объектов'"); Документ.Вывести(Область, 1); - Область = Макет.ПолучитьОбласть("РедактированиеОбъековЛегенда"); + Область = Макет.ПолучитьОбласть("РедактированиеОбъектовЛегенда"); Документ.Вывести(Область, 2); Для каждого ОписаниеВидаОбъектов Из ПраваОбъектов.Строки Цикл @@ -1391,7 +1387,7 @@ КонецЦикла; Если НЕ ВыводПравГруппы Тогда НомерЯчейки = "R1C" + Формат(ТекущийНомерОбласти, "ЧГ="); - МакетШапки.Область(НомерЯчейки).Текст = НСтр("ru = 'Настрока прав от'"); + МакетШапки.Область(НомерЯчейки).Текст = НСтр("ru = 'Настройка прав от'"); МакетШапки.Область(НомерЯчейки).ШиринаКолонки = 40; КонецЕсли; Документ.Вывести(МакетШапки, 2); @@ -1473,13 +1469,13 @@ Если ОписаниеВидаДоступа.ДоступРазрешен Тогда Если ОписаниеВидаДоступа.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.Пользователи Тогда ШаблонПредставленияВидаДоступа = - НСтр("ru = '%1 (запрешенные, текущий пользователь всегда разрешен):'"); + НСтр("ru = '%1 (запрещенные, текущий пользователь всегда разрешен):'"); ИначеЕсли ОписаниеВидаДоступа.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи Тогда ШаблонПредставленияВидаДоступа = - НСтр("ru = '%1 (запрешенные, текущий внешний пользователь всегда разрешен):'"); + НСтр("ru = '%1 (запрещенные, текущий внешний пользователь всегда разрешен):'"); Иначе - ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (запрешенные):'"); + ШаблонПредставленияВидаДоступа = НСтр("ru = '%1 (запрещенные):'"); КонецЕсли; Иначе Если ОписаниеВидаДоступа.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.Пользователи Тогда diff --git a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx index 801d92d4f..b56c6b507 100644 --- a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx +++ b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx @@ -1634,7 +1634,7 @@ - ПросмотрОбъековЛегенда + ПросмотрОбъектовЛегенда Rows 23 @@ -1644,7 +1644,7 @@ - РедактированиеОбъековЛегенда + РедактированиеОбъектовЛегенда Rows 28 diff --git a/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo b/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo index 02d33019e..d8e21ed38 100644 --- a/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo +++ b/SSL/src/Reports/ПраваДоступа/ПраваДоступа.mdo @@ -11,6 +11,7 @@ true Report.ПраваДоступа.Form.ФормаОтчета + SettingsStorage.ХранилищеВариантовОтчетов ФормаОтчета diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html index 9d8445ab5..a0d96c545 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html @@ -1,3 +1,3 @@ - +

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

                      Для детальной настройки отчета используйте команду "Все действия - Изменить вариант".

                      \ No newline at end of file diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index de8ce0558..285ef11bd 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -105,6 +105,25 @@ true + + Constant.ИмяПользователяКонференцииИнформационногоЦентра + + Read + true + + + Update + true + + + View + true + + + Edit + true + + ExchangePlan.ОбменСообщениями @@ -860,6 +879,25 @@ true + + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Catalog.ИдентификаторыОбъектовМетаданных @@ -1035,6 +1073,25 @@ true + + Constant.ПарольПользователяКонференцииИнформационногоЦентра + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Constant.СписокРасширенийТекстовыхФайлов @@ -1178,26 +1235,7 @@ - InformationRegister.УдалитьСвязиПоставляемыхДанных - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - Constant.ЗапуститьОбновлениеИнформационнойБазы + Constant.ЗагрузитьСообщениеОбменаДанными Read true @@ -1234,97 +1272,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - true - - - DataAdministration - true - - - UpdateDataBaseConfiguration - true - - - ExclusiveMode - true - - - ActiveUsers - true - - - EventLog - true - - - ThinClient - true - - - WebClient - true - - - ThickClient - true - - - ExternalConnection - true - - - Automation - true - - - TechnicalSpecialistMode - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - SaveUserData - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - - Output - true - - InformationRegister.НастройкиОтправителя @@ -1846,6 +1793,13 @@ true + + CommonCommand.СоставОтправляемыхДанных + + View + true + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой @@ -2116,6 +2070,13 @@ true + + InformationRegister.НазначениеДополнительныхОбработок.Command.НазначениеДополнительныхОбработок + + View + true + + Constant.КаталогВременныхФайловДляWindows @@ -2154,53 +2115,6 @@ true - - Catalog.УдалитьКлассификаторВалют - - Read - true - - - Insert - true - - - Update - true - - - Delete - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InteractiveDeleteMarked - true - - - InputByString - true - - Constant.НеИспользоватьРазделениеПоОбластямДанных @@ -2316,25 +2230,6 @@ true - - InformationRegister.УдалитьКурсыВалютПоКлассификатору - - Read - true - - - Update - true - - - View - true - - - Edit - true - - Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете @@ -2411,6 +2306,13 @@ true + + CommonCommand.УдалитьНастройкуСинхронизации + + View + true + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы @@ -2441,6 +2343,97 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + + Output + true + + Constant.ИмяСлужебногоПользователяМенеджераСервиса @@ -2791,6 +2784,25 @@ true + + Constant.АдресУправленияКонференцией + + Read + true + + + Update + true + + + View + true + + + Edit + true + + CommonCommand.ДополнительныеОтчетыИОбработкиОтчеты @@ -2855,25 +2867,6 @@ true - - Constant.АдресВебСервисаОбменаДанными - - Read - true - - - Update - true - - - View - true - - - Edit - true - - DataProcessor.УправлениеПолнотекстовымПоиском.Command.УправлениеПолнотекстовымПоиском @@ -2938,6 +2931,25 @@ true + + Constant.СведенияОбОбновленииИБ + + Read + true + + + Update + true + + + View + true + + + Edit + true + + ChartOfCharacteristicTypes.ВидыДоступа @@ -3210,6 +3222,25 @@ true + + InformationRegister.УдалитьСтраныМира + + Read + true + + + Update + true + + + View + true + + + Edit + true + + CommonForm.МониторСинхронизацииДанныхВМоделиСервиса @@ -3397,7 +3428,7 @@ - Constant.ВыполнитьЗагрузкуПараметровРаботыПрограммы + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Read true diff --git a/SSL/src/Roles/Администрирование/Rights.rights b/SSL/src/Roles/Администрирование/Rights.rights index e6e17be97..46fd4ecf0 100644 --- a/SSL/src/Roles/Администрирование/Rights.rights +++ b/SSL/src/Roles/Администрирование/Rights.rights @@ -1,27 +1,8 @@ false - false + true false - - InformationRegister.ОбластиПерсональныхДанных - - Read - true - - - Update - true - - - View - true - - - Edit - true - - Configuration.БиблиотекаСтандартныхПодсистем diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 59f245caf..07d6971c3 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -346,6 +346,13 @@ true + + Constant.РежимИспользованияИнформационнойБазы + + Read + true + + Catalog.Заметки.StandardAttribute.Predefined @@ -485,6 +492,13 @@ false + + CommonForm.ПараметрыПроксиСервера + + View + true + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге @@ -507,6 +521,13 @@ false + + SessionParameter.ВыполняетсяОбновлениеИБ + + Get + true + + Catalog.Заметки.Attribute.ДатаИзменения @@ -953,6 +974,13 @@ false + + CommonForm.РедактированиеТабличногоДокумента + + View + true + + CommonForm.НастройкаОсновногоРабочегоКаталога @@ -1201,18 +1229,18 @@ - CommonForm.НерекомендуемаяВерсияПлатформы + DataProcessor.ИнформацияПриЗапуске + + Use + true + View true - DataProcessor.ИнформацияПриЗапуске - - Use - true - + CommonForm.ОписаниеИзмененийСистемы View true @@ -1268,6 +1296,17 @@ true + + DataProcessor.ОбновлениеИнформационнойБазы + + Use + true + + + View + true + + CommonForm.СохранениеПечатнойФормы diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index ebebf8706..ffe26697b 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -6812,37 +6812,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11991,6 +11960,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights index aa6d07b25..ecc6b1a2c 100644 --- a/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights +++ b/SSL/src/Roles/ВыполнениеСинхронизацииДанных/Rights.rights @@ -92,6 +92,13 @@ false + + CommonForm.АвтономнаяРабота + + View + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные @@ -542,6 +549,13 @@ false + + CommonCommand.АвтономнаяРабота + + View + true + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights index 2b835e8c0..069eb7402 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights @@ -10,13 +10,6 @@ true - - CommonForm.ВводТелефона - - View - true - - Catalog.НаборыДополнительныхРеквизитовИСведений @@ -154,13 +147,6 @@ true - - CommonForm.ВводАдреса - - View - true - - Catalog.Календари @@ -303,17 +289,6 @@ false - - Constant.РежимИспользованияИнформационнойБазы - - Read - true - - - View - true - - InformationRegister.АдресныеСокращения diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 3f1521fab..68da7252e 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -16,7 +16,7 @@ Read true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Чтение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Чтение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -26,7 +26,7 @@ Insert true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -36,7 +36,7 @@ Update true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоВходящее", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -298,7 +298,7 @@ Read true - #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Чтение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Чтение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -308,7 +308,7 @@ Insert true - #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -318,7 +318,7 @@ Update true - #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Изменение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЗапланированноеВзаимодействие", "Изменение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -424,21 +424,21 @@ Read true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Чтение","","") + #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Чтение","РасширенноеИЛИ","") Insert true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Добавление","","") + #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Добавление","РасширенноеИЛИ","") Update true - #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Изменение","","") + #ПоНаборамЗначений( "Документ.ТелефонныйЗвонок","Изменение","РасширенноеИЛИ","") @@ -517,7 +517,7 @@ Read true - #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Чтение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Чтение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -527,7 +527,7 @@ Insert true - #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -537,7 +537,7 @@ Update true - #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Изменение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ТелефонныйЗвонок", "Изменение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -582,21 +582,21 @@ Read true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Чтение","","") + #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Чтение","РасширенноеИЛИ","") Insert true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Добавление","","") + #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Добавление","РасширенноеИЛИ","") Update true - #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Изменение","","") + #ПоНаборамЗначений( "Документ.ЗапланированноеВзаимодействие","Изменение","РасширенноеИЛИ","") @@ -654,21 +654,21 @@ Read true - #ПоНаборамЗначений( "Документ.Встреча","Чтение","","") + #ПоНаборамЗначений( "Документ.Встреча","Чтение","РасширенноеИЛИ","") Insert true - #ПоНаборамЗначений( "Документ.Встреча","Добавление","","") + #ПоНаборамЗначений( "Документ.Встреча","Добавление","РасширенноеИЛИ","") Update true - #ПоНаборамЗначений( "Документ.Встреча","Изменение","","") + #ПоНаборамЗначений( "Документ.Встреча","Изменение","РасширенноеИЛИ","") @@ -741,7 +741,7 @@ Update true - #ПоЗначениямИНаборамРасширенный( "РегистрСведений.ПредметыПапкиВзаимодействий","Изменение","", + #ПоЗначениямИНаборамРасширенный( "РегистрСведений.ПредметыПапкиВзаимодействий","Изменение","РасширенноеИЛИ", "", "", "Объект","Взаимодействие","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) @@ -791,6 +791,78 @@ false + + Document.СообщениеSMS + + Read + true + + #ПоНаборамЗначений( "Документ.СообщениеSMS","Чтение","","") + + + + Insert + true + + #ПоНаборамЗначений( "Документ.СообщениеSMS","Добавление","","") + + + + Update + true + + #ПоНаборамЗначений( "Документ.СообщениеSMS","Изменение","","") + + + + Posting + true + + + UndoPosting + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractivePosting + true + + + InteractivePostingRegular + true + + + InteractiveUndoPosting + true + + + InteractiveChangeOfPosted + true + + + InputByString + true + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined @@ -963,7 +1035,7 @@ Read true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Чтение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Чтение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -973,7 +1045,7 @@ Insert true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -983,7 +1055,7 @@ Update true - #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Изменение", "", + #ПоЗначениямИНаборамРасширенный("Документ.ЭлектронноеПисьмоИсходящее", "Изменение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -1035,10 +1107,11 @@ Read true - #ПоЗначениямИНаборамРасширенный( "ЖурналДокументов.Взаимодействия","Чтение","", + #ПоЗначениямИНаборамРасширенный( "ЖурналДокументов.Взаимодействия","Чтение","РасширенноеИЛИ", "", "", -"Объект","Т.Ссылка","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) +"Объект","Т.Ссылка","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) + @@ -1134,21 +1207,21 @@ Read true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Чтение","","") + #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Чтение","РасширенноеИЛИ","") Insert true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Добавление","","") + #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Добавление","РасширенноеИЛИ","") Update true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Изменение","","") + #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоИсходящее","Изменение","РасширенноеИЛИ","") @@ -1276,6 +1349,67 @@ false + + Catalog.СообщениеSMSПрисоединенныеФайлы + + Read + true + + #ПоЗначениямИНаборамРасширенный("Документ.СообщениеSMS", "Чтение", "РасширенноеИЛИ", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + Insert + true + + #ПоЗначениямИНаборамРасширенный("Документ.СообщениеSMS", "Добавление", "РасширенноеИЛИ", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + Update + true + + #ПоЗначениямИНаборамРасширенный("Документ.СообщениеSMS", "Изменение", "РасширенноеИЛИ", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + DocumentJournal.Взаимодействия.Command.ЗапланироватьВстречу @@ -1314,7 +1448,7 @@ Read true - #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Чтение", "", + #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Чтение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -1324,7 +1458,7 @@ Insert true - #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Добавление", "", + #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Добавление", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -1334,7 +1468,7 @@ Update true - #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Изменение", "", + #ПоЗначениямИНаборамРасширенный("Документ.Встреча", "Изменение", "РасширенноеИЛИ", "", "", "Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") @@ -1505,21 +1639,14 @@ Read true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","Чтение","","") - - - - Insert - false - - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","Добавление","","") + #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","Чтение","РасширенноеИЛИ","") Update true - #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","Изменение","","") + #ПоНаборамЗначений( "Документ.ЭлектронноеПисьмоВходящее","Изменение","РасширенноеИЛИ","") @@ -1608,7 +1735,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). @@ -5091,13 +5218,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -5138,7 +5275,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -5160,7 +5300,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -5277,14 +5417,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5292,8 +5482,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5535,8 +5753,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -5808,14 +6027,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5823,8 +6092,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6066,8 +6363,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -6339,14 +6637,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6354,8 +6702,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6597,8 +6973,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -6870,14 +7247,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6885,8 +7312,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7128,8 +7583,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -7401,14 +7857,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7416,8 +7922,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7659,8 +8193,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -7932,14 +8467,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7947,8 +8532,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8190,8 +8803,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -8463,14 +9077,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8478,8 +9142,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8721,8 +9413,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -8994,14 +9687,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9009,8 +9752,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9252,8 +10023,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -9525,14 +10297,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9540,8 +10362,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9783,8 +10633,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -10056,14 +10907,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10071,8 +10972,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -10314,8 +11243,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -10587,14 +11517,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10602,8 +11582,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -10845,8 +11853,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -11118,14 +12127,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -11133,8 +12192,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11376,8 +12463,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -11649,14 +12737,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -11664,8 +12802,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11907,8 +13073,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -12180,14 +13347,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -12195,8 +13412,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -12438,8 +13683,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -12711,14 +13957,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -12726,8 +14022,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -12969,8 +14293,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -13242,14 +14567,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -13257,8 +14632,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -13500,8 +14903,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда @@ -13713,8 +15117,18 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает -// безусловно выбирать группы иерархического справочника. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ВладелецНаборов - имя поля, содержащего ссылку на объект-владелец // наборов значений доступа в регистре сведений НаборыЗначенийДоступа. @@ -13731,7 +15145,10 @@ // Пример4: ПоНаборамЗначений("Справочник.ВложенияЭлектронныхПисем", "Чтение", "", "Владелец" ) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -13748,7 +15165,7 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -13790,7 +15207,66 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ - Истина В +#Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НомераНаборов.Объект = Т.Ссылка + #Иначе + НомераНаборов.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Ссылка = Т.Ссылка + #КонецЕсли + И НомераНаборов.#Параметр(2) + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НаборыЗначений.Объект = Т.Ссылка + #Иначе + НаборыЗначений.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Ссылка = Т.Ссылка + #КонецЕсли + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ +#Иначе + ( +#КонецЕсли + Истина В ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. #Если "#Параметр(2)" = "Чтение" #Тогда @@ -13807,7 +15283,44 @@ НомераНаборов.Ссылка = Т.Ссылка #КонецЕсли И НомераНаборов.#Параметр(2) - И НЕ Ложь В + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НаборыЗначений.Объект = Т.Ссылка + #Иначе + НаборыЗначений.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Ссылка = Т.Ссылка + #КонецЕсли + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. #Если "#Параметр(2)" = "Чтение" #Тогда @@ -13825,7 +15338,6 @@ #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - ( Выбор // Проверка заведомого ложного или заведомо истинного однострочного набора значений. Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) @@ -13880,7 +15392,7 @@ #КонецЕсли Тогда ( - НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. ( Выбрать Истина ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды @@ -14072,9 +15584,9 @@ Иначе Ложь Конец Конец - ) - ) // НЕ Ложь В + ) // НЕ Ложь В ) + ) ) #КонецЕсли diff --git a/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights index 7e3c494fb..61b6e5669 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights @@ -31,6 +31,13 @@ true + + InformationRegister.НеразделенныеПользователи + + Read + true + + Catalog.ВнешниеПользователи diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights index 4b5b71c18..79b660d8e 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights @@ -10644,6 +10644,13 @@ false + + InformationRegister.НазначениеДополнительныхОбработок.Command.НазначениеДополнительныхОбработок + + View + true + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index a4a0e6205..b5ff8b2dd 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -188,7 +188,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). @@ -3671,13 +3671,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -3718,7 +3728,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -3740,7 +3753,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -3857,14 +3870,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3872,8 +3935,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4115,8 +4206,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -4388,14 +4480,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4403,8 +4545,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4646,8 +4816,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -4919,14 +5090,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4934,8 +5155,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5177,8 +5426,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -5450,14 +5700,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5465,8 +5765,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5708,8 +6036,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -5981,14 +6310,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5996,8 +6375,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6239,8 +6646,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -6512,14 +6920,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6527,8 +6985,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6770,8 +7256,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -7043,14 +7530,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7058,8 +7595,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7301,8 +7866,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -7574,14 +8140,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7589,8 +8205,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7832,8 +8476,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -8105,14 +8750,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8120,8 +8815,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8363,8 +9086,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -8636,14 +9360,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8651,8 +9425,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8894,8 +9696,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -9167,14 +9970,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9182,8 +10035,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9425,8 +10306,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -9698,14 +10580,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9713,8 +10645,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9956,8 +10916,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -10229,14 +11190,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10244,8 +11255,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -10487,8 +11526,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -10760,14 +11800,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10775,8 +11865,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11018,8 +12136,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -11291,14 +12410,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -11306,8 +12475,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11549,8 +12746,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -11822,14 +13020,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -11837,8 +13085,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -12080,8 +13356,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights index 9666b69c6..ff133121a 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights @@ -168,72 +168,6 @@ true - - Catalog.УдалитьКлассификаторВалют - - Read - true - - - Insert - true - - - Update - true - - - Delete - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InteractiveDeleteMarked - true - - - InputByString - true - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору - - Read - true - - - Update - true - - - View - true - - - Edit - true - - InformationRegister.ВерсииОбъектовАдресногоКлассификатора diff --git a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights index 610ba5128..8b898359d 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights @@ -4,11 +4,7 @@ true false - Constant.РежимИспользованияИнформационнойБазы - - Read - true - + CommonForm.ГруппыПользователей View true @@ -53,6 +49,13 @@ true + + Catalog.ГруппыПользователей.Command.ГруппыПользователя + + View + true + + InformationRegister.СоставыГруппПользователей diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index ad9ee9b74..8b747cf5d 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -60,37 +60,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск @@ -157,6 +126,37 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка diff --git a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights new file mode 100644 index 000000000..9cb2d7f58 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/Rights.rights @@ -0,0 +1,17634 @@ + + + false + true + false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Дата + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.СвязиПараметровВыбора + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.ДобавлениеЗапрещено + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Выполнено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентПредставление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.СвободныйОпрос + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Описание + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.ДатаРождения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПредопределенная + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипЗначенияДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заключение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.УдалитьПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Тема + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Вступление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.ДатаРедактирования + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.ЧтениеЗапрещено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Содержание + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Executed + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Description + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Date + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВыборГруппИЭлементов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Проверяющий + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Кратность + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Серия + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Профиль + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияТом + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВидОперации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсия + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаБезГруппЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.НомерВходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ОсновнаяВалюта + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.УдалитьТипОбъекта + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипОтчета + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.МестоПроведенияВстречи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Изменять + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Состояние + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НомерИтерации + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Свойство + + View + false + + + Edit + false + + + + Catalog.СтраныМира + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ВысотаЭлементаФормулировкиВопроса + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ХранитьВерсии + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ГлавнаяЗадача + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Type + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Date + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Posted + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Dimension.ИмяКомпьютера + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ЗаблокированныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.УдалитьПользователь + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Входящий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.Наценка + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоЧтения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРасширение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ТипРеспондентов + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияНомерВерсии + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ПараметрыВыбора + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Подтверждено + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Важность + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокПроверки + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ИмяРеквизита + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПропускатьПриветствие + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияКод + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.УдалитьВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Наименование + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Опрос + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Dimension.Валюта + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.Пол + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРазмер + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопСведений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.НомерВерсии + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.ИзменениеЗапрещено + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Dimension.Право + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.СклоненияПредмета + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Текст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Вопрос + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.УдалениеЗапрещено + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СсылкаНаОбъект + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Представление + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заголовок + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.РедактируемыйРаздел + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ПоказыватьВАрхивеАнкет + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Started + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.HeadTask + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Completed + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Date + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + DataProcessor.СписокРеспондента.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЧерезПраваПоЗначениямДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопРеквизитов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияАвтор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НаПроверке + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.УдалитьРоль + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.УдалитьРоль + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Респондент + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ВидКонтактнойИнформации + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаСоздания + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ШаблонАнкеты + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.ТипПользователей + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации + + View + false + + + Edit + false + + + + InformationRegister.УдалитьПраваПоЗначениямДоступа.Resource.Запрещено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo new file mode 100644 index 000000000..d3919e5fe --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеСтранМира/ДобавлениеИзменениеСтранМира.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеСтранМира + + ru + Добавление и изменение стран мира + + diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index 20de0bc75..7f38fa75e 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -6812,37 +6812,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11991,6 +11960,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index f9b907c6e..aea860eeb 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -6702,37 +6702,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11837,6 +11806,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index 8534f5e9e..464f5620c 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -6702,37 +6702,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11837,6 +11806,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index 3d98ff0fc..afff0083c 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -6702,37 +6702,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11837,6 +11806,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index ab210de5a..c70e2398b 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -184,13 +184,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -231,7 +241,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -253,7 +266,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -370,14 +383,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -385,8 +448,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -628,8 +719,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -901,14 +993,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -916,8 +1058,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1159,8 +1329,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -1432,14 +1603,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1447,8 +1668,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1690,8 +1939,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -1963,14 +2213,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1978,8 +2278,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2221,8 +2549,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -2494,14 +2823,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -2509,8 +2888,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2752,8 +3159,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -3025,14 +3433,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3040,8 +3498,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3283,8 +3769,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -3556,14 +4043,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3571,8 +4108,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3814,8 +4379,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -4087,14 +4653,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4102,8 +4718,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4345,8 +4989,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -4618,14 +5263,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4633,8 +5328,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4876,8 +5599,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -5149,14 +5873,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5164,8 +5938,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5407,8 +6209,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -5680,14 +6483,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5695,8 +6548,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5938,8 +6819,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -6211,14 +7093,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6226,8 +7158,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6469,8 +7429,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -6742,14 +7703,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6757,8 +7768,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7000,8 +8039,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -7273,14 +8313,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7288,8 +8378,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7531,8 +8649,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -7804,14 +8923,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7819,8 +8988,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8062,8 +9259,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -8335,14 +9533,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8350,8 +9598,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8593,8 +9869,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index 5c96e1f33..f173cc898 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -17530,7 +17530,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). diff --git a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights index 1ead875e9..91ab2e781 100644 --- a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights +++ b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights @@ -3,17 +3,6 @@ false true false - - Constant.РежимИспользованияИнформационнойБазы - - Read - true - - - View - true - - Catalog.Пользователи diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index 39acef81c..089a97f67 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -405,7 +405,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). @@ -3888,13 +3888,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -3935,7 +3945,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -3957,7 +3970,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -4074,14 +4087,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4089,8 +4152,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4332,8 +4423,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -4605,14 +4697,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4620,8 +4762,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4863,8 +5033,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -5136,14 +5307,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5151,8 +5372,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5394,8 +5643,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -5667,14 +5917,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5682,8 +5982,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5925,8 +6253,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -6198,14 +6527,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6213,8 +6592,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6456,8 +6863,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -6729,14 +7137,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6744,8 +7202,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6987,8 +7473,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -7260,14 +7747,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7275,8 +7812,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7518,8 +8083,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -7791,14 +8357,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7806,8 +8422,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8049,8 +8693,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -8322,14 +8967,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8337,8 +9032,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8580,8 +9303,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -8853,14 +9577,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8868,8 +9642,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9111,8 +9913,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -9384,14 +10187,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9399,8 +10252,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -9642,8 +10523,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -9915,14 +10797,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -9930,8 +10862,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -10173,8 +11133,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -10446,14 +11407,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10461,8 +11472,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -10704,8 +11743,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -10977,14 +12017,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -10992,8 +12082,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11235,8 +12353,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -11508,14 +12627,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -11523,8 +12692,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -11766,8 +12963,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -12039,14 +13237,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -12054,8 +13302,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -12297,8 +13573,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда @@ -12510,7 +13787,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, @@ -16080,8 +17357,18 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает -// безусловно выбирать группы иерархического справочника. +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ВладелецНаборов - имя поля, содержащего ссылку на объект-владелец // наборов значений доступа в регистре сведений НаборыЗначенийДоступа. @@ -16098,7 +17385,10 @@ // Пример4: ПоНаборамЗначений("Справочник.ВложенияЭлектронныхПисем", "Чтение", "", "Владелец" ) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -16115,7 +17405,7 @@ Т ГДЕ // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -16157,7 +17447,66 @@ И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ - Истина В +#Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НомераНаборов.Объект = Т.Ссылка + #Иначе + НомераНаборов.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Ссылка = Т.Ссылка + #КонецЕсли + И НомераНаборов.#Параметр(2) + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НаборыЗначений.Объект = Т.Ссылка + #Иначе + НаборыЗначений.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Ссылка = Т.Ссылка + #КонецЕсли + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ +#Иначе + ( +#КонецЕсли + Истина В ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. #Если "#Параметр(2)" = "Чтение" #Тогда @@ -16174,7 +17523,44 @@ НомераНаборов.Ссылка = Т.Ссылка #КонецЕсли И НомераНаборов.#Параметр(2) - И НЕ Ложь В + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + #Если "#Параметр(2)" = "Чтение" #Тогда + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + #Если "#Параметр(4)" = "" #Тогда + НаборыЗначений.Объект = Т.Ссылка + #Иначе + НаборыЗначений.Объект = Т.#Параметр(4) + #КонецЕсли + #Иначе + ИЗ #Параметр(1).НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Ссылка = Т.Ссылка + #КонецЕсли + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. #Если "#Параметр(2)" = "Чтение" #Тогда @@ -16192,7 +17578,6 @@ #КонецЕсли И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора И НЕ - ( Выбор // Проверка заведомого ложного или заведомо истинного однострочного набора значений. Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) @@ -16247,7 +17632,7 @@ #КонецЕсли Тогда ( - НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. ( Выбрать Истина ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды @@ -16439,9 +17824,9 @@ Иначе Ложь Конец Конец - ) - ) // НЕ Ложь В + ) // НЕ Ложь В ) + ) ) #КонецЕсли diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index 6c0ffc5f1..15df11b0e 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -6812,41 +6812,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись @@ -11995,6 +11960,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена diff --git a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights index 78945eb56..55078e1be 100644 --- a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights @@ -5,10 +5,6 @@ false Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение - - View - false - Edit false @@ -346,10 +342,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды - - View - false - Edit false @@ -1809,10 +1801,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор - - View - false - Edit false @@ -2150,10 +2138,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID - - View - false - Edit false @@ -2821,10 +2805,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный - - View - false - Edit false @@ -3162,10 +3142,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.УдалитьПолноеИмяОбъектаМетаданных - - View - false - Edit false @@ -3935,10 +3911,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор - - View - false - Edit false @@ -4562,10 +4534,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий - - View - false - Edit false @@ -5130,10 +5098,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим - - View - false - Edit false @@ -6123,10 +6087,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия - - View - false - Edit false @@ -7131,10 +7091,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид - - View - false - Edit false @@ -7439,10 +7395,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта - - View - false - Edit false @@ -9000,10 +8952,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение - - View - false - Edit false @@ -9825,10 +9773,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы - - View - false - Edit false @@ -10177,10 +10121,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела - - View - false - Edit false @@ -10610,13 +10550,17 @@ Read true + + View + true + + + InputByString + true + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined - - View - false - Edit false @@ -10624,10 +10568,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref - - View - false - Edit false @@ -10635,10 +10575,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark - - View - false - Edit false @@ -10646,10 +10582,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder - - View - false - Edit false @@ -10657,10 +10589,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner - - View - false - Edit false @@ -10668,10 +10596,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent - - View - false - Edit false @@ -10679,10 +10603,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description - - View - false - Edit false @@ -10690,10 +10610,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code - - View - false - Edit false @@ -12549,10 +12465,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла - - View - false - Edit false @@ -13539,10 +13451,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки - - View - false - Edit false @@ -13623,10 +13531,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - Edit false @@ -14135,10 +14039,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление - - View - false - Edit false @@ -15828,10 +15728,6 @@ Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска - - View - false - Edit false @@ -16693,10 +16589,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация - - View - false - Edit false @@ -17815,10 +17707,6 @@ Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка - - View - false - Edit false diff --git a/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights index c6a589773..b9886d073 100644 --- a/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights +++ b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights @@ -3,6 +3,17 @@ false true false + + Constant.ИмяПользователяКонференцииИнформационногоЦентра + + Read + true + + + View + true + + Catalog.ОбщиеДанныеИнформационногоЦентра @@ -26,14 +37,41 @@ - CommonForm.ОтображениеНовостей + Constant.ПарольПользователяКонференцииИнформационногоЦентра + + Read + true + View true - CommonForm.ОтправкаСообщенияВТехподдержку + InformationRegister.ПросмотренныеДанныеИнформационногоЦентра + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных + + Read + true + View true @@ -46,6 +84,17 @@ true + + Constant.АдресУправленияКонференцией + + Read + true + + + View + true + + DataProcessor.ИнформационныйЦентр diff --git a/SSL/src/Roles/ИспользованиеСтруктурыПодчиненности/Rights.rights b/SSL/src/Roles/ИспользованиеСтруктурыПодчиненности/Rights.rights index 058f4e20b..a58ee7195 100644 --- a/SSL/src/Roles/ИспользованиеСтруктурыПодчиненности/Rights.rights +++ b/SSL/src/Roles/ИспользованиеСтруктурыПодчиненности/Rights.rights @@ -1,7 +1,7 @@ false - false + true false CommonForm.СтруктураПодчиненности diff --git a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights index 8da1dbee7..6c3de18fc 100644 --- a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -249,7 +249,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 7cca0f8e4..2c8ad02d4 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -126,13 +126,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное - - Edit - false - - InformationRegister.УдалитьОчередьЗаданий.Resource.НомерПопытки @@ -249,6 +242,17 @@ false + + Constant.ИмяПользователяКонференцииИнформационногоЦентра + + Update + false + + + Edit + false + + Catalog.НаборыДополнительныхРеквизитовИСведений @@ -922,13 +926,6 @@ false - - Catalog.СтраныМира.Attribute.КодАльфа2 - - Edit - false - - InformationRegister.ЗависимостиПравДоступа @@ -997,17 +994,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ОбластьДанных - - View - false - - - Edit - false - - Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме @@ -2154,13 +2140,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность - - Edit - false - - DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация @@ -2384,6 +2363,17 @@ false + + Constant.ПарольПользователяКонференцииИнформационногоЦентра + + Update + false + + + Edit + false + + Constant.СписокРасширенийТекстовыхФайлов @@ -2801,101 +2791,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных - - Read - false - - - Update - false - - - View - false - - - Edit - false - - - ReadDataHistory - false - - - ReadDataHistoryOfMissingData - false - - - UpdateDataHistory - false - - - UpdateDataHistoryOfMissingData - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Period - - View - false - - - Edit - false - - Catalog.Пользователи @@ -2908,7 +2803,7 @@ - Constant.ЗапуститьОбновлениеИнформационнойБазы + Constant.ЗагрузитьСообщениеОбменаДанными Read false @@ -2991,45 +2886,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ExclusiveMode - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - InformationRegister.НастройкиОтправителя @@ -3413,6 +3269,13 @@ false + + Document.СообщениеSMS + + InteractiveDelete + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения @@ -4043,114 +3906,14 @@ Catalog.СтраныМира - - Insert - false - - - Update - false - - - Delete - false - - - InteractiveInsert - false - - - Edit - false - InteractiveDelete false - - InteractiveSetDeletionMark - false - - - InteractiveClearDeletionMark - false - - - InteractiveDeleteMarked - false - InteractiveDeletePredefinedData false - - InteractiveSetDeletionMarkPredefinedData - false - - - InteractiveClearDeletionMarkPredefinedData - false - - - InteractiveDeleteMarkedPredefinedData - false - - - - Catalog.СтраныМира.StandardAttribute.Predefined - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Ref - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.DeletionMark - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.IsFolder - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Owner - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Parent - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Description - - Edit - false - - - - Catalog.СтраныМира.StandardAttribute.Code - - Edit - false - Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки @@ -4163,6 +3926,13 @@ false + + CommonCommand.СоставОтправляемыхДанных + + View + false + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных @@ -4844,117 +4614,6 @@ false - - Catalog.УдалитьКлассификаторВалют - - Insert - false - - - Update - false - - - Delete - false - - - InteractiveInsert - false - - - Edit - false - - - InteractiveDelete - false - - - InteractiveSetDeletionMark - false - - - InteractiveClearDeletionMark - false - - - InteractiveDeleteMarked - false - - - InteractiveDeletePredefinedData - false - - - InteractiveSetDeletionMarkPredefinedData - false - - - InteractiveClearDeletionMarkPredefinedData - false - - - InteractiveDeleteMarkedPredefinedData - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code - - Edit - false - - InformationRegister.ПраваРолей.Resource.ЧтениеБезОграничения @@ -5133,45 +4792,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору - - Update - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period - - Edit - false - - Constant.ИспользоватьСинхронизациюДанныхВМоделиСервисаСПриложениемВИнтернете @@ -5346,6 +4966,13 @@ false + + CommonCommand.УдалитьНастройкуСинхронизации + + View + false + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active @@ -5431,6 +5058,45 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ExclusiveMode + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения @@ -6095,7 +5761,7 @@ - Catalog.Организации + Catalog.СообщениеSMSПрисоединенныеФайлы InteractiveDelete false @@ -6106,13 +5772,13 @@ - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных + Catalog.Организации - View + InteractiveDelete false - Edit + InteractiveDeletePredefinedData false @@ -6231,6 +5897,17 @@ false + + Constant.АдресУправленияКонференцией + + Update + false + + + Edit + false + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год @@ -6354,47 +6031,11 @@ - Constant.АдресВебСервисаОбменаДанными - - Read - false - - - Update - false - - - View - false - + InformationRegister.УдалитьСтраныМира.Dimension.ОбластьДанных Edit false - - ReadDataHistory - false - - - UpdateDataHistory - false - - - UpdateDataHistoryVersionComment - false - - - ViewDataHistory - false - - - EditDataHistoryVersionComment - false - - - SwitchToDataHistoryVersion - false - DataProcessor.УправлениеПолнотекстовымПоиском.Command.УправлениеПолнотекстовымПоиском @@ -6502,13 +6143,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском - - Edit - false - - InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы @@ -6746,13 +6380,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль @@ -7042,13 +6669,6 @@ false - - Catalog.СтраныМира.Attribute.КодАльфа3 - - Edit - false - - CommonForm.НастройкаОбменаСообщениями @@ -7110,6 +6730,13 @@ false + + InformationRegister.УдалитьСтраныМира.Resource.Значение + + Edit + false + + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы @@ -7172,9 +6799,9 @@ - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных + InformationRegister.УдалитьСтраныМира - View + Update false @@ -7182,6 +6809,34 @@ false + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Active + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.УдалитьСтраныМира.StandardAttribute.Period + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия @@ -7207,17 +6862,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Resource.РучноеИзменение - - View - false - - - Edit - false - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления @@ -7243,13 +6887,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта - - Edit - false - - Catalog.ТипыИнформацииИнформационногоЦентра @@ -7440,7 +7077,7 @@ - Constant.ВыполнитьЗагрузкуПараметровРаботыПрограммы + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском Read false @@ -7688,13 +7325,6 @@ false - - Catalog.СтраныМира.Attribute.НаименованиеПолное - - Edit - false - - Catalog.СообщенияСистемы diff --git a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights index 2747a194f..828bd03df 100644 --- a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights +++ b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights @@ -1,7 +1,7 @@ false - false + true false Configuration.БиблиотекаСтандартныхПодсистем diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights index 9452e8f76..e191880e4 100644 --- a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights @@ -17207,7 +17207,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). @@ -20690,13 +20690,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -20737,7 +20747,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -20759,7 +20772,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -20876,14 +20889,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -20891,8 +20954,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -21134,8 +21225,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -21407,14 +21499,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -21422,8 +21564,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -21665,8 +21835,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -21938,14 +22109,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -21953,8 +22174,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -22196,8 +22445,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -22469,14 +22719,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -22484,8 +22784,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -22727,8 +23055,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -23000,14 +23329,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -23015,8 +23394,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -23258,8 +23665,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -23531,14 +23939,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -23546,8 +24004,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -23789,8 +24275,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -24062,14 +24549,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -24077,8 +24614,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -24320,8 +24885,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -24593,14 +25159,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -24608,8 +25224,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -24851,8 +25495,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -25124,14 +25769,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -25139,8 +25834,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -25382,8 +26105,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -25655,14 +26379,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -25670,8 +26444,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -25913,8 +26715,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -26186,14 +26989,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -26201,8 +27054,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -26444,8 +27325,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -26717,14 +27599,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -26732,8 +27664,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -26975,8 +27935,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -27248,14 +28209,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -27263,8 +28274,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -27506,8 +28545,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -27779,14 +28819,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -27794,8 +28884,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -28037,8 +29155,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -28310,14 +29429,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -28325,8 +29494,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -28568,8 +29765,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -28841,14 +30039,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -28856,8 +30104,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -29099,8 +30375,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда diff --git a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights index 6399ba414..73a2e4268 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights @@ -740,17 +740,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное - - View - false - - - Edit - false - - InformationRegister.УдалитьОчередьЗаданий.Resource.НомерПопытки @@ -3442,17 +3431,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ОбластьДанных - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер @@ -7001,17 +6979,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения @@ -8277,50 +8244,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Period - - View - false - - - Edit - false - - Catalog.Пользователи.StandardAttribute.Predefined @@ -14524,94 +14447,6 @@ false - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты @@ -14964,50 +14799,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов @@ -17365,17 +17156,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена @@ -18813,17 +18593,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника @@ -19484,17 +19253,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс - - View - false - - - Edit - false - - Document.Встреча.Attribute.Комментарий @@ -20595,17 +20353,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных - - View - false - - - Edit - false - - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации @@ -20749,17 +20496,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Resource.РучноеИзменение - - View - false - - - Edit - false - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления @@ -20881,17 +20617,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights index dd1b455a1..07089d444 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights @@ -729,17 +729,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное - - View - false - - - Edit - false - - InformationRegister.УдалитьОчередьЗаданий.Resource.НомерПопытки @@ -3361,17 +3350,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ОбластьДанных - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер @@ -6858,17 +6836,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения @@ -8148,50 +8115,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьСвязиПоставляемыхДанных.StandardAttribute.Period - - View - false - - - Edit - false - - Catalog.Пользователи.StandardAttribute.Predefined @@ -14234,94 +14157,6 @@ false - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description - - View - false - - - Edit - false - - - - Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты @@ -14659,50 +14494,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов @@ -17053,17 +16844,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена @@ -18475,17 +18255,6 @@ false - - Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника @@ -19091,17 +18860,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс - - View - false - - - Edit - false - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла @@ -20147,17 +19905,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных - - View - false - - - Edit - false - - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации @@ -20301,17 +20048,6 @@ false - - InformationRegister.УдалитьСвязиПоставляемыхДанных.Resource.РучноеИзменение - - View - false - - - Edit - false - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления @@ -20433,17 +20169,6 @@ false - - InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения diff --git a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights index e45024492..0d2dae6fd 100644 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights @@ -10,13 +10,6 @@ true - - CommonForm.ВводТелефона - - View - true - - Catalog.НаборыДополнительныхРеквизитовИСведений @@ -74,13 +67,6 @@ true - - CommonForm.ВводАдреса - - View - true - - Catalog.Календари @@ -140,17 +126,6 @@ false - - Constant.РежимИспользованияИнформационнойБазы - - Read - true - - - View - true - - InformationRegister.АдресныеСокращения @@ -600,7 +575,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). @@ -4088,7 +4063,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 0322e3245..eb004de4f 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -17731,7 +17731,7 @@ // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". // Модификатор - изменяет шаблон. -// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 0848e4c4b..56a7672c8 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -154,13 +154,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -201,7 +211,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -223,7 +236,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -340,14 +353,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -355,8 +418,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -598,8 +689,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -871,14 +963,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -886,8 +1028,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1129,8 +1299,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -1402,14 +1573,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1417,8 +1638,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1660,8 +1909,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -1933,14 +2183,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1948,8 +2248,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2191,8 +2519,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -2464,14 +2793,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -2479,8 +2858,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2722,8 +3129,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -2995,14 +3403,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3010,8 +3468,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3253,8 +3739,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -3526,14 +4013,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3541,8 +4078,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3784,8 +4349,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -4057,14 +4623,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4072,8 +4688,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4315,8 +4959,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -4588,14 +5233,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4603,8 +5298,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4846,8 +5569,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -5119,14 +5843,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5134,8 +5908,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5377,8 +6179,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -5650,14 +6453,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5665,8 +6518,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5908,8 +6789,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -6181,14 +7063,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6196,8 +7128,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6439,8 +7399,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -6712,14 +7673,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6727,8 +7738,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6970,8 +8009,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -7243,14 +8283,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7258,8 +8348,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7501,8 +8619,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -7774,14 +8893,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7789,8 +8958,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8032,8 +9229,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -8305,14 +9503,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8320,8 +9568,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8563,8 +9839,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index 60d4ba69c..81a0071ca 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -138,13 +138,23 @@ ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В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-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// 2-й модификатор - строка "РасширенноеИЛИ" указывает для ограничений, +// например, "ПоОрганизациям или ПоУчетнымЗаписям" делать расширенную +// проверку, при которой вариант настройки вида доступа в группах доступа +// "Все разрешены, без запрещенных" считается, как "Вид доступа не используется". +// Если этого модификатора нет, тогда результат проверки Истина, что приводит +// к итоговому результату Истина, если "Все разрешены, без запрещенных" +// хотя бы по одному из видов доступа (либо ПоОрганизациям, либо ПоУчетнымЗаписям). +// Модификатор имеет смысл только при проверке наборов значений доступа. +// Можно использовать комбинации модификаторов: "НеОграничиватьДоступКГруппам", +// "РасширенноеИЛИ", "НеОграничиватьДоступКГруппам,РасширенноеИЛИ". // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 @@ -185,7 +195,10 @@ // "Объект","Т.ОсновнойДокумент","", "","","", ...) // Проверка правильности параметра Модификатор. -#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда +#Если НЕ ( "#Параметр(3)" = "НеОграничиватьДоступКГруппам" + ИЛИ "#Параметр(3)" = "РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" + ИЛИ "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли @@ -207,7 +220,7 @@ ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). -#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли @@ -324,14 +337,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(7) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -339,8 +402,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -582,8 +673,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда @@ -855,14 +947,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(10) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -870,8 +1012,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1113,8 +1283,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда @@ -1386,14 +1557,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(13) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1401,8 +1622,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -1644,8 +1893,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда @@ -1917,14 +2167,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(16) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -1932,8 +2232,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2175,8 +2503,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда @@ -2448,14 +2777,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(19) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -2463,8 +2842,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -2706,8 +3113,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда @@ -2979,14 +3387,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(22) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -2994,8 +3452,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3237,8 +3723,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда @@ -3510,14 +3997,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(25) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -3525,8 +4062,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -3768,8 +4333,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда @@ -4041,14 +4607,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(28) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4056,8 +4672,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4299,8 +4943,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда @@ -4572,14 +5217,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(31) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -4587,8 +5282,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -4830,8 +5553,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда @@ -5103,14 +5827,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(34) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5118,8 +5892,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5361,8 +6163,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда @@ -5634,14 +6437,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(37) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -5649,8 +6502,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -5892,8 +6773,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда @@ -6165,14 +7047,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(40) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6180,8 +7112,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6423,8 +7383,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда @@ -6696,14 +7657,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(43) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -6711,8 +7722,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -6954,8 +7993,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда @@ -7227,14 +8267,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(46) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7242,8 +8332,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -7485,8 +8603,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда @@ -7758,14 +8877,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(49) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -7773,8 +8942,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8016,8 +9213,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда @@ -8289,14 +9487,64 @@ ) ) // Проверка ограничения права - И Истина В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + НЕ + ( + Истина В // Не все проверки отключены. + ( + Выбрать Первые 1 Истина // Выбор первого набора с не отключенной проверкой. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + ) И НЕ + #Иначе + ( + #КонецЕсли + Истина В + ( Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов ГДЕ НомераНаборов.Объект = #Параметр(52) #Если "#Параметр(2)" = "Чтение" #Тогда // Предполагается, что право Чтение может зависеть только от права Чтение + И НомераНаборов.Чтение = Истина #Иначе И НЕ ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) @@ -8304,8 +9552,36 @@ И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) ) #КонецЕсли - И НЕ Ложь В - ( + И + #Если "#Параметр(3)" = "РасширенноеИЛИ" ИЛИ "#Параметр(3)" = "НеОграничиватьДоступКГруппам,РасширенноеИЛИ" #Тогда + Истина В // Не все проверки текущего набора отключены. + ( + Выбрать Первые 1 Истина // Выбор первой не отключенной проверки текущего набора. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + И НЕ + (НЕ НаборыЗначений.ВидДоступа В ( + Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), + Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НЕ Истина В + ( + Выбрать Первые 1 Истина // Поиск настроек по виду доступа + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + ГДЕ + ЗначенияГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка + И ЗначенияГруппДоступа.ВидДоступа = НаборыЗначений.ВидДоступа + ) + ) + ) + И + #КонецЕсли + НЕ Ложь В // Все проверки успешны. + ( Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений ГДЕ @@ -8547,8 +9823,9 @@ Иначе Ложь Конец Конец - ) // НЕ Ложь В - ) + ) // НЕ Ложь В + ) + ) ) #ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда diff --git a/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo b/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo new file mode 100644 index 000000000..63b875624 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеСтатусовДоставкиSMS/ОбновлениеСтатусовДоставкиSMS.mdo @@ -0,0 +1,14 @@ + + + ОбновлениеСтатусовДоставкиSMS + + ru + Обновление статусов доставки SMS + + CommonModule.Взаимодействия.ОбновлениеСтатусовДоставкиSMS + Обновление статусов доставки SMS + true + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/Schedule.schedule b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/Schedule.schedule new file mode 100644 index 000000000..5513b3374 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo new file mode 100644 index 000000000..b4381d188 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтложенноеОбновлениеИБ/ОтложенноеОбновлениеИБ.mdo @@ -0,0 +1,11 @@ + + + ОтложенноеОбновлениеИБ + + ru + Отложенное обновление ИБ + + CommonModule.ОбновлениеИнформационнойБазы.ВыполнитьОтложенноеОбновление + Отложенное обновление ИБ + true + diff --git a/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo b/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo new file mode 100644 index 000000000..c3ff3733c --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтправкаSMS/ОтправкаSMS.mdo @@ -0,0 +1,14 @@ + + + ОтправкаSMS + + ru + Отправка SMS + + CommonModule.Взаимодействия.ОтправкаSMS + Отправка SMS + true + true + 3 + 10 + diff --git a/SSL/src/SessionParameters/ВыполняетсяОбновлениеИБ/ВыполняетсяОбновлениеИБ.mdo b/SSL/src/SessionParameters/ВыполняетсяОбновлениеИБ/ВыполняетсяОбновлениеИБ.mdo new file mode 100644 index 000000000..5bf453475 --- /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..adf791269 --- /dev/null +++ b/SSL/src/SessionParameters/ПаролиСинхронизацииДанных/ПаролиСинхронизацииДанных.mdo @@ -0,0 +1,11 @@ + + + ПаролиСинхронизацииДанных + + ru + Пароли синхронизации данных + + + FixedMap + + diff --git a/SSL/src/SessionParameters/ПриоритетныеДанныеОбмена/ПриоритетныеДанныеОбмена.mdo b/SSL/src/SessionParameters/ПриоритетныеДанныеОбмена/ПриоритетныеДанныеОбмена.mdo new file mode 100644 index 000000000..cad62b811 --- /dev/null +++ b/SSL/src/SessionParameters/ПриоритетныеДанныеОбмена/ПриоритетныеДанныеОбмена.mdo @@ -0,0 +1,12 @@ + + + ПриоритетныеДанныеОбмена + + ru + Приоритетные данные обмена + + Выгруженные данные, которые необходимо загружать самыми первыми до загрузки всех остальных данных, например, предопределенные данные. + + FixedArray + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html index 2076129d7..9a2a264a1 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Что бы выбрать вариант отчета необходимо установить курсор на нужный вариант отчета и нажать на кнопку "Выбрать".

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

                      См. также: Вариант отчета, Общая информация о формах.

                      \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index 861b03047..2a9f24023 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -123,8 +123,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(Вариант.ИндексКартинки = 4, НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), НСтр("ru = 'Пометить ""%1"" на удаление?'")), - Вариант.Наименование - ); + Вариант.Наименование); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); Если Ответ <> КодВозвратаДиалога.Да Тогда @@ -202,9 +201,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"), - Вариант.Наименование - ) - ); + Вариант.Наименование)); Возврат; КонецЕсли; ОткрытьЗначение(Вариант.Ссылка); @@ -376,8 +373,7 @@ НСтр("ru = 'Не удалось получить список предопределенных вариантов |внешнего отчета ""%1"":'"), ОтчетИнформация.ОтчетИмя - ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html index 1b6e9675f..e64619404 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                      diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index a96134355..83a747f77 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -51,8 +51,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Поле ""Наименование"" не заполнено'"), , - "Наименование" - ); + "Наименование"); Отказ = Истина; ИначеЕсли ВариантыОтчетов.НаименованиеЗанято(ОтчетИнформация.Отчет, ВариантСсылка, ВариантНаименование) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -61,8 +60,7 @@ ВариантНаименование ), , - "Наименование" - ); + "Наименование"); Отказ = Истина; КонецЕсли; КонецПроцедуры @@ -128,8 +126,7 @@ ВариантОписание, ВариантОписание, Модифицированность, - НСтр("ru = 'Описание'") - ); + НСтр("ru = 'Описание'")); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -167,9 +164,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа для удаления варианта отчета ""%1"".'"), - Вариант.Наименование - ) - ); + Вариант.Наименование)); Возврат; КонецЕсли; @@ -180,8 +175,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(Вариант.ПометкаУдаления, НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), НСтр("ru = 'Пометить ""%1"" на удаление?'")), - Вариант.Наименование - ); + Вариант.Наименование); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); Если Ответ <> КодВозвратаДиалога.Да Тогда @@ -246,8 +240,7 @@ ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Поле ""Наименование"" не заполнено'"), , - "ВариантНаименование" - ); + "ВариантНаименование"); Возврат Ложь; КонецЕсли; @@ -261,8 +254,7 @@ ВариантНаименование ), , - "ВариантНаименование" - ); + "ВариантНаименование"); Возврат Ложь; КонецЕсли; @@ -306,9 +298,7 @@ Предупреждение( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"), - Вариант.Наименование - ) - ); + Вариант.Наименование)); Возврат; КонецЕсли; ОткрытьЗначение(Вариант.Ссылка); @@ -467,8 +457,7 @@ ВариантНаименование ), , - "ВариантНаименование" - ); + "ВариантНаименование"); Возврат Ложь; КонецЕсли; @@ -586,8 +575,7 @@ НСтр("ru = 'Не удалось получить список предопределенных вариантов |внешнего отчета ""%1"":'"), ОтчетИнформация.ОтчетИмя - ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo index 1bc325108..2153d608c 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo @@ -1,7 +1,7 @@ - + ХранилищеВариантовОтчетов diff --git a/SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряВоскресеньеЦвет/ВидДняПроизводственногоКалендаряВоскресеньеЦвет.mdo similarity index 76% rename from SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряВоскресеньеЦвет/ВидДняПроизводственногоКалендаряВоскресеньеЦвет.mdo index 52c9e22f8..0b3c5d438 100644 --- a/SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряВоскресеньеЦвет/ВидДняПроизводственногоКалендаряВоскресеньеЦвет.mdo @@ -1,9 +1,9 @@ - ВидДняВоскресеньеЦвет + ВидДняПроизводственногоКалендаряВоскресеньеЦвет ru - Вид дня производственного календаря "Воскресенье" + Вид дня производственного календаря «Воскресенье» diff --git a/SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряНеУказанЦвет/ВидДняПроизводственногоКалендаряНеУказанЦвет.mdo similarity index 84% rename from SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряНеУказанЦвет/ВидДняПроизводственногоКалендаряНеУказанЦвет.mdo index 18f17f570..6626e6621 100644 --- a/SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряНеУказанЦвет/ВидДняПроизводственногоКалендаряНеУказанЦвет.mdo @@ -1,6 +1,6 @@ - ВидДняНеУказанЦвет + ВидДняПроизводственногоКалендаряНеУказанЦвет ru Вид дня производственного календаря не указан diff --git a/SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПраздникЦвет/ВидДняПроизводственногоКалендаряПраздникЦвет.mdo similarity index 77% rename from SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПраздникЦвет/ВидДняПроизводственногоКалендаряПраздникЦвет.mdo index 25a94c950..060e6214f 100644 --- a/SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПраздникЦвет/ВидДняПроизводственногоКалендаряПраздникЦвет.mdo @@ -1,9 +1,9 @@ - ВидДняПраздникЦвет + ВидДняПроизводственногоКалендаряПраздникЦвет ru - Вид дня производственного календаря "Праздник" + Вид дня производственного календаря «Праздник» diff --git a/SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет.mdo similarity index 74% rename from SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет.mdo index f6f7f9b20..6e6326141 100644 --- a/SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет/ВидДняПроизводственногоКалендаряПредпраздничныйЦвет.mdo @@ -1,9 +1,9 @@ - ВидДняПредпраздничныйЦвет + ВидДняПроизводственногоКалендаряПредпраздничныйЦвет ru - Вид дня производственного календаря "Предпраздничный" + Вид дня производственного календаря «Предпраздничный» diff --git a/SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряРабочийЦвет/ВидДняПроизводственногоКалендаряРабочийЦвет.mdo similarity index 77% rename from SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряРабочийЦвет/ВидДняПроизводственногоКалендаряРабочийЦвет.mdo index 4d75960e4..6d1fe558d 100644 --- a/SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряРабочийЦвет/ВидДняПроизводственногоКалендаряРабочийЦвет.mdo @@ -1,9 +1,9 @@ - ВидДняРабочийЦвет + ВидДняПроизводственногоКалендаряРабочийЦвет ru - Вид дня производственного календаря "Рабочий" + Вид дня производственного календаря «Рабочий» diff --git a/SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряСубботаЦвет/ВидДняПроизводственногоКалендаряСубботаЦвет.mdo similarity index 78% rename from SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo rename to SSL/src/StyleItems/ВидДняПроизводственногоКалендаряСубботаЦвет/ВидДняПроизводственногоКалендаряСубботаЦвет.mdo index 6d689792b..acde9041c 100644 --- a/SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo +++ b/SSL/src/StyleItems/ВидДняПроизводственногоКалендаряСубботаЦвет/ВидДняПроизводственногоКалендаряСубботаЦвет.mdo @@ -1,9 +1,9 @@ - ВидДняСубботаЦвет + ВидДняПроизводственногоКалендаряСубботаЦвет ru - Вид дня производственного календаря "Суббота" + Вид дня производственного календаря «Суббота» diff --git a/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo b/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo index ecb7e7002..2ac732d5d 100644 --- a/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo +++ b/SSL/src/StyleItems/ВидимыйВариантОтчетаЦвет/ВидимыйВариантОтчетаЦвет.mdo @@ -3,7 +3,7 @@ ВидимыйВариантОтчетаЦвет ru - Видимый вариант отчета цвет + Видимый вариант отчета diff --git a/SSL/src/StyleItems/ГруппаВариантовОтчетовЦвет/ГруппаВариантовОтчетовЦвет.mdo b/SSL/src/StyleItems/ГруппаВариантовОтчетовЦвет/ГруппаВариантовОтчетовЦвет.mdo index 5c74a2bb5..9770bdec2 100644 --- a/SSL/src/StyleItems/ГруппаВариантовОтчетовЦвет/ГруппаВариантовОтчетовЦвет.mdo +++ b/SSL/src/StyleItems/ГруппаВариантовОтчетовЦвет/ГруппаВариантовОтчетовЦвет.mdo @@ -3,7 +3,7 @@ ГруппаВариантовОтчетовЦвет ru - Группа вариантов отчетов цвет + Группа вариантов отчетов diff --git a/SSL/src/StyleItems/ДатаГрафикаИзмененнаяФон/ДатаГрафикаИзмененнаяФон.mdo b/SSL/src/StyleItems/ДатаГрафикаИзмененнаяФон/ДатаГрафикаИзмененнаяФон.mdo index ea2a329bf..1083a44b8 100644 --- a/SSL/src/StyleItems/ДатаГрафикаИзмененнаяФон/ДатаГрафикаИзмененнаяФон.mdo +++ b/SSL/src/StyleItems/ДатаГрафикаИзмененнаяФон/ДатаГрафикаИзмененнаяФон.mdo @@ -3,7 +3,7 @@ ДатаГрафикаИзмененнаяФон ru - Дата графика измененная фон + Дата графика измененная diff --git a/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo b/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo index 032eda3cf..ce9e6f509 100644 --- a/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo +++ b/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo @@ -3,7 +3,7 @@ ДобавленныйРеквизитФон ru - Добавленный реквизит фон + Добавленный реквизит diff --git a/SSL/src/StyleItems/ЗаблокированныйРеквизитЦвет/ЗаблокированныйРеквизитЦвет.mdo b/SSL/src/StyleItems/ЗаблокированныйРеквизитЦвет/ЗаблокированныйРеквизитЦвет.mdo index c6f6e7ffd..c958e19c2 100644 --- a/SSL/src/StyleItems/ЗаблокированныйРеквизитЦвет/ЗаблокированныйРеквизитЦвет.mdo +++ b/SSL/src/StyleItems/ЗаблокированныйРеквизитЦвет/ЗаблокированныйРеквизитЦвет.mdo @@ -3,7 +3,7 @@ ЗаблокированныйРеквизитЦвет ru - Заблокированный реквизит цвет + Заблокированный реквизит diff --git a/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo b/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo index 807a17454..78d1d660d 100644 --- a/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo +++ b/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo @@ -3,7 +3,7 @@ ЗаголовокУдаленногоРеквизитаФон ru - Заголовок удаленного реквизита фон + Заголовок удаленного реквизита diff --git a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo index a83339682..291886664 100644 --- a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo +++ b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo @@ -3,7 +3,7 @@ ИзмененноеЗначениеРеквизитаФон ru - Измененное значение реквизита фон + Измененное значение реквизита (фон) diff --git a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo index 6985c2bc8..ece5b366b 100644 --- a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo +++ b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo @@ -3,7 +3,7 @@ ИзмененноеЗначениеРеквизитаЦвет ru - Измененное значение реквизита цвет + Измененное значение реквизита (цвет) diff --git a/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo b/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo index 949f70950..d81d6dc0f 100644 --- a/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo +++ b/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo @@ -3,7 +3,7 @@ КонтактнаяИнформацияСРедактированиемВДиалогеЦвет ru - Контактная информация с редактированием в диалоге цвет + Контактная информация с редактированием в диалоге diff --git a/SSL/src/StyleItems/МоиВариантыОтчетовЦвет/МоиВариантыОтчетовЦвет.mdo b/SSL/src/StyleItems/МоиВариантыОтчетовЦвет/МоиВариантыОтчетовЦвет.mdo index 923571785..4eb1d095c 100644 --- a/SSL/src/StyleItems/МоиВариантыОтчетовЦвет/МоиВариантыОтчетовЦвет.mdo +++ b/SSL/src/StyleItems/МоиВариантыОтчетовЦвет/МоиВариантыОтчетовЦвет.mdo @@ -3,7 +3,7 @@ МоиВариантыОтчетовЦвет ru - Мои варианты отчетов цвет + Мои варианты отчетов diff --git a/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo b/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo index 2620bfee5..151aec2ea 100644 --- a/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo +++ b/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo @@ -3,7 +3,7 @@ НедоступныеДанныеЦвет ru - Недоступные данные цвет + Недоступные данные diff --git a/SSL/src/StyleItems/ОшибкаПолнотекстовыйПоискФон/ОшибкаПолнотекстовыйПоискФон.mdo b/SSL/src/StyleItems/ОшибкаПолнотекстовыйПоискФон/ОшибкаПолнотекстовыйПоискФон.mdo index 366b450ff..1ed93ac14 100644 --- a/SSL/src/StyleItems/ОшибкаПолнотекстовыйПоискФон/ОшибкаПолнотекстовыйПоискФон.mdo +++ b/SSL/src/StyleItems/ОшибкаПолнотекстовыйПоискФон/ОшибкаПолнотекстовыйПоискФон.mdo @@ -3,7 +3,7 @@ ОшибкаПолнотекстовыйПоискФон ru - Ошибка полнотекстовый поиск фон + Ошибка полнотекстовый поиск diff --git a/SSL/src/StyleItems/СкрытыйВариантОтчетаЦвет/СкрытыйВариантОтчетаЦвет.mdo b/SSL/src/StyleItems/СкрытыйВариантОтчетаЦвет/СкрытыйВариантОтчетаЦвет.mdo index 96344c97c..e09f76a18 100644 --- a/SSL/src/StyleItems/СкрытыйВариантОтчетаЦвет/СкрытыйВариантОтчетаЦвет.mdo +++ b/SSL/src/StyleItems/СкрытыйВариантОтчетаЦвет/СкрытыйВариантОтчетаЦвет.mdo @@ -3,7 +3,7 @@ СкрытыйВариантОтчетаЦвет ru - Скрытый вариант отчета цвет + Скрытый вариант отчета diff --git a/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитШрифт/УдаленныйДополнительныйРеквизитШрифт.mdo b/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитШрифт/УдаленныйДополнительныйРеквизитШрифт.mdo index a5f9a2222..d003c589a 100644 --- a/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитШрифт/УдаленныйДополнительныйРеквизитШрифт.mdo +++ b/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитШрифт/УдаленныйДополнительныйРеквизитШрифт.mdo @@ -3,7 +3,7 @@ УдаленныйДополнительныйРеквизитШрифт ru - Удаленный дополнительный реквизит шрифт + Удаленный дополнительный реквизит Font diff --git a/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo b/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo index dcf1eb477..c2391bad4 100644 --- a/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo +++ b/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo @@ -3,7 +3,7 @@ УдаленныйРеквизитФон ru - Удаленный реквизит фон + Удаленный реквизит diff --git a/SSL/src/Subsystems/НастройкаИАдминистрирование/CommandInterface.cmi b/SSL/src/Subsystems/НастройкаИАдминистрирование/CommandInterface.cmi index 95126159c..df9a2dc53 100644 --- a/SSL/src/Subsystems/НастройкаИАдминистрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/НастройкаИАдминистрирование/CommandInterface.cmi @@ -81,10 +81,6 @@ Catalog.ВариантыОтчетов.StandardCommand.OpenList - - InformationRegister.АдресныйКлассификатор.StandardCommand.OpenList - - CommonCommand.ОткрытьИнформационныйЦентр @@ -367,7 +363,6 @@ InformationRegister.ПользовательскиеМакетыПечати.StandardCommand.OpenList CommonCommand.ОткрытьОбменыДанными Catalog.ВариантыОтчетов.StandardCommand.OpenList - InformationRegister.АдресныйКлассификатор.StandardCommand.OpenList CommonCommand.ОткрытьИнформационныйЦентр CommonCommand.СинхронизацияДанныхВМоделиСервиса Catalog.Валюты.StandardCommand.OpenList @@ -410,7 +405,6 @@ Catalog.ДополнительныеОтчетыИОбработки.StandardCommand.CreateFolder Catalog.СценарииОбменовДанными.StandardCommand.Create Catalog.ВариантыОтчетов.StandardCommand.Create - InformationRegister.АдресныйКлассификатор.StandardCommand.Create Catalog.ВидыКонтактнойИнформации.StandardCommand.Create Catalog.ВидыКонтактнойИнформации.StandardCommand.CreateFolder Catalog.РассылкиОтчетов.StandardCommand.Create diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html index 04ebc76f4..718276ac0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                       

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index 5e35c3749..7c047f88f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -51,7 +51,6 @@ CommonForm.ВключениеЖурналаРегистрации CommonModule.СтандартныеПодсистемыСервер CommonModule.СтандартныеПодсистемыКлиент - CommonForm.НерекомендуемаяВерсияПлатформы CommonForm.ВыборУзловПлановОбмена CommonModule.ЖурналРегистрации CommonModule.ЖурналРегистрацииКлиент @@ -136,8 +135,34 @@ CommandGroup.Информация CommonCommand.СведенияОПользователе CommonPicture.ИнформацияПоНедоступнымПолям - XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 CommonPicture.ОтправитьЭлектронноеПисьмо SessionParameter.ПараметрыКлиентаНаСервере + CommonForm.РедактированиеТабличногоДокумента + CommonPicture.ИзменитьШрифт + CommonPicture.ВыравниваниеПоЛевомуКраю + CommonPicture.ВыравниваниеПоПравомуКраю + CommonPicture.ВыравниваниеПоЦентру + CommonPicture.ВыравниваниеПоШирине + CommonPicture.ПолужирноеНачертание + CommonPicture.КурсивноеНачертание + CommonPicture.Подчеркивание + CommonPicture.УвеличитьШрифт + CommonPicture.УменьшитьШрифт + CommonPicture.ЦветТекста + CommonPicture.ЦветФона + CommonPicture.ГраницаВезде + CommonPicture.ГраницаВнутри + CommonPicture.ГраницаВокруг + CommonPicture.ГраницаСверху + CommonPicture.ГраницаСлева + CommonPicture.ГраницаСнизу + CommonPicture.ГраницаСправа + CommonPicture.ОбъединитьЯчейки + CommonPicture.НетГраницы + CommonPicture.ТолстаяГраницаВокруг + CommonPicture.ТолстаяГраницаСверху + CommonPicture.ТолстаяГраницаСнизу + CommonPicture.ПоказатьОтличия + CommonPicture.Скрепка Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html index 7c71ef9e6..00a298d6f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Help/ru.html index e694b883a..b0c3a12c7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Help/ru.html @@ -1,2 +1,2 @@ - +

                      Программа поддерживает многовалютный учет, и позволяет вводить операции и просматривать отчеты в любой валюте, представленной в справочнике Валюты. Конфигурация поставляется с «Общероссийским классификатором валют» (ОКВ). Существует возможность загрузки курсов валют с сайта «РосБизнесКонсалтинг».

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html index 63a0969d0..d75be6ee3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html @@ -1,3 +1,3 @@ - +

                      Конфигурация позволяет вести историю изменений объектов информационной базы. Эта функция позволяет ответить на вопросы: "Кто изменил объект?", "Когда произошли изменения?" и "Что изменено в объекте?". Версионируемыми объектами могут быть справочники и документы. Конфигурация позволяет просматривать любую версию объекта или сравнивать любые версии объекта между собой.

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo index 76eeb4608..8bf2804e1 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo @@ -31,8 +31,8 @@ StyleItem.ИзмененноеЗначениеРеквизитаЦвет StyleItem.УдаленныйРеквизитФон Enum.ТипыВерсийОбъекта - CommonPicture.ПоказатьОтличия Role.ЧтениеИнформацииОВерсияхОбъектов EventSubscription.УдалитьИнформациюОбАвтореВерсии + EventSubscription.ЗаписатьВерсиюОбъектаПриОбменеДанными Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo index b0d11719c..8d782a701 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo @@ -84,5 +84,13 @@ FunctionalOption.ИспользоватьПризнакРассмотрено StyleItem.ОшибкаПолнотекстовыйПоискФон EventSubscription.ПереопределитьПолучаемуюФормуПрисоединенногоФайлаВзаимодействия + Document.СообщениеSMS + CommonPicture.НаписатьSMS + ScheduledJob.ОбновлениеСтатусовДоставкиSMS + ScheduledJob.ОтправкаSMS + Catalog.СообщениеSMSПрисоединенныеФайлы + Enum.СостоянияСообщенияSMS + Enum.СостоянияДокументаСообщениеSMS + Constant.АдресПубликацииИнформационнойБазыВИнтернете Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html index 4062f023e..a9775005a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html @@ -1 +1 @@ -С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file +С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html index 0c5c38f63..2697792be 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Конфигурация позволяет подключать и использовать дополнительные (внешние) отчеты и обработки к ИБ в режиме «1С:Предприятия». Они позволяют расширять функциональность конфигурации, не внося в неё изменений.

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

                      diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index 59ff38e7b..736cedbad 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -48,5 +48,8 @@ CommonModule.ДополнительныеОтчетыИОбработкиРегламентныеЗадания CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежиме CommonModule.ДополнительныеОтчетыИОбработкиКлиентПереопределяемый + XDTOPackage.ApplicationExtensionsPermissions_1_0_0_1 + XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 + Constant.УдалитьПоказыватьКомандуДополнительныеПечатныеФормы Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html index 1d86a91a7..1874c4b6e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html index 712d921b6..29f4acff7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo index 4fad8b0eb..b0f3e9b18 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo @@ -10,23 +10,31 @@ CommonModule.ИнформационныйЦентрСервер CommonModule.ИнформационныйЦентрСерверПереопределяемый Role.ИспользованиеИнформационногоЦентра - CommonForm.ОтправкаСообщенияВТехподдержку Catalog.ОбщиеДанныеИнформационногоЦентра CommonModule.СообщенияИнформационногоЦентраОбработчикСообщения - CommonForm.ОтображениеНовостей CommonCommand.ОткрытьИнформационныйЦентр Catalog.ТипыИнформацииИнформационногоЦентра DataProcessor.ИнформационныйЦентр + CommonModule.ИнформационныйЦентрСлужебный CommonTemplate.СоответствиеТэговОбщимФормам Catalog.ИнформационныеСсылкиДляФорм Catalog.ПолныеПутиКФормам + CommonModule.ИнформационныйЦентрСерверПовтИсп CommonPicture.СообщениеВТехПоддержку CommonPicture.ПодатьИдею CommonTemplate.ИнформационныеСсылки CommonPicture.УведомлениеСервиса CommonPicture.ФорумСервиса CommonPicture.СообщениеСервиса - CommonModule.ИнформационныйЦентрСерверПовтИсп - CommonModule.ИнформационныйЦентрСлужебный + InformationRegister.ПросмотренныеДанныеИнформационногоЦентра + CommonPicture.ИсходящееСообщение + CommonPicture.ВходящееСообщение + CommonModule.СообщенияИнформационногоЦентраОбработчикСообщения_1_0_1_1 + XDTOPackage.MessageInfoCenter_1_0_1_1 + Constant.ИмяПользователяКонференцииИнформационногоЦентра + Constant.ПарольПользователяКонференцииИнформационногоЦентра + Constant.АдресУправленияКонференцией + CommonModule.СообщенияИнформационногоЦентраИнтерфейс + CommonModule.СообщенияИнформационногоЦентраРеализация Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html index f386d9b47..c90200a89 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                       

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo index 6ce0da9f2..724fbe744 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -20,12 +20,12 @@ Catalog.ПроизводственныеКалендари Enum.ВидыДнейПроизводственногоКалендаря Enum.УдалитьВидыКалендарей - StyleItem.ВидДняВоскресеньеЦвет - StyleItem.ВидДняНеУказанЦвет - StyleItem.ВидДняПраздникЦвет - StyleItem.ВидДняПредпраздничныйЦвет - StyleItem.ВидДняРабочийЦвет - StyleItem.ВидДняСубботаЦвет + StyleItem.ВидДняПроизводственногоКалендаряВоскресеньеЦвет + StyleItem.ВидДняПроизводственногоКалендаряНеУказанЦвет + StyleItem.ВидДняПроизводственногоКалендаряПраздникЦвет + StyleItem.ВидДняПроизводственногоКалендаряПредпраздничныйЦвет + StyleItem.ВидДняПроизводственногоКалендаряРабочийЦвет + StyleItem.ВидДняПроизводственногоКалендаряСубботаЦвет Enum.СпособыЗаполненияГрафикаРаботы CommonModule.КалендарныеГрафикиКлиентСервер StyleItem.ДатаГрафикаИзмененнаяФон diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html index b075c7fe7..28dc74013 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo index 754ad7cb8..de2e5cbc5 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo @@ -15,21 +15,17 @@ CommonModule.УправлениеКонтактнойИнформациейКлиент CommonModule.УправлениеКонтактнойИнформацией CommonForm.ПоискПоИндексу - CommonForm.ВводАдреса - CommonForm.ВводТелефона Catalog.ВидыКонтактнойИнформации Catalog.СтраныМира Enum.ТипыКонтактнойИнформации Subsystem.СтандартныеПодсистемы.Subsystem.КонтактнаяИнформация EventSubscription.ЗаполнитьКонтактнуюИнформацию - CommonModule.УправлениеКонтактнойИнформациейСобытия EventSubscription.ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания EventSubscription.ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания CommonModule.УправлениеКонтактнойИнформациейКлиентСервер StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет CommonModule.УправлениеКонтактнойИнформациейКлассификаторы CommonPicture.КонтактнаяИнформацияПерейтиПоСсылке - CommonModule.КонтактнаяИнформацияКлиент CommonModule.КонтактнаяИнформацияСлужебный CommonModule.КонтактнаяИнформацияКлиентСервер CommonModule.КонтактнаяИнформацияКлиентСерверПовтИсп @@ -37,6 +33,10 @@ XDTOPackage.КонтактнаяИнформация CommonPicture.Подменю CommonPicture.КонтактнаяИнформацияНеактуально - CommonModule.КонтактнаяИнформацияВызовСервера + CommonModule.КонтактнаяИнформацияСлужебныйВызовСервера + CommonModule.КонтактнаяИнформацияXML + CommonModule.КонтактнаяИнформацияСлужебныйПовтИсп + InformationRegister.УдалитьСтраныМира + Role.ДобавлениеИзменениеСтранМира Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html index c9f13d4bd..bcc434591 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Платформа 1С:Предприятие 8 позволяет вносить изменения в конфигурацию ИБ без завершения работы пользователей. Такое обновление конфигурации называется динамическим. Конфигурация позволяет оповещать работающих в системе пользователей о динамическом изменении конфигурации. Проверка факта изменения конфигурации осуществляется каждые 20 минут. В случае изменения конфигурации система сообщает об этом пользователю и предлагает ему перезапустить программу.

                       

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html index 23dab57de..4e77273a3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                      diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html index de12f54c8..dcf3b554d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Конфигурация позволяет выполнять обмен данными между различными информационными базами по правилам обмена.

                      Правила обмена создаются при помощи конфигурации «Конвертация данных, редакция 2.1».

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

                      diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo index cc3469521..fd26e3844 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -119,7 +119,13 @@ EventSubscription.ОчиститьСсылкиНаУзелИнформационнойБазы CommonPicture.СинхронизацияДанныхАнализДанных48 SessionParameter.ЗагрузкаПараметровРаботыПрограммы - Constant.ВыполнитьЗагрузкуПараметровРаботыПрограммы + Constant.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском CommonPicture.СинхронизацияДанныхДанныеПолучены + DataProcessor.РегистрацияИзмененийДляОбменаДанными + CommonCommand.СоставОтправляемыхДанных + CommonCommand.УдалитьНастройкуСинхронизации + SessionParameter.ПаролиСинхронизацииДанных + SessionParameter.ПриоритетныеДанныеОбмена + Constant.ЗагрузитьСообщениеОбменаДанными Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index 33a501d73..62cf5c991 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -11,16 +11,20 @@ CommonModule.ОбновлениеИнформационнойБазыПереопределяемый CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый CommonForm.ОписаниеИзмененийСистемы - Constant.ЗапуститьОбновлениеИнформационнойБазы CommonModule.ОбновлениеИнформационнойБазыСобытия CommonModule.ОбновлениеИнформационнойБазыВызовСервера CommonModule.ОбновлениеИнформационнойБазыСлужебныйПовтИсп - CommonForm.СообщениеОНеудачномОбновлении Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации Constant.РазделыОписанияИзмененийСистемы CommonTemplate.ПолучениеДереваОбработчиковОбновления Role.ПросмотрОписанияИзмененийПрограммы InformationRegister.УдалитьВерсииПодсистем InformationRegister.ВерсииПодсистем + DataProcessor.ОбновлениеИнформационнойБазы + Constant.СведенияОбОбновленииИБ + ScheduledJob.ОтложенноеОбновлениеИБ + CommonPicture.Успешно + SessionParameter.ВыполняетсяОбновлениеИБ + CommonModule.ОбновлениеИнформационнойБазыГлобальный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html index 0d0673665..333936f72 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html index 77b3e06a0..3089f7eab 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html @@ -1,4 +1,4 @@ - +

                      Многие документы конфигурации имеют печатные формы. Все печатные формы используют единый механизм, позволяющий редактировать макеты печатных форм, не изменяя саму конфигурацию. Печатные формы объектов могут формироваться на основе табличных макетов (MXL) или макетов офисных документов в форматах Microsoft Word и OpenOffice.org Writer.

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

                      diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo index 5793ddfe7..3069215dd 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -33,5 +33,6 @@ CommonForm.ВыборФорматаВложений CommonModule.УправлениеПечатьюВызовСервера CommonPicture.ИспользованиеМакета + CommonModule.УправлениеПечатьюКлиентПовтИсп Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html index b47023610..143c12c27 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                      diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html index 54f0a5b9b..c4c348c9e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html index c810da009..64d38fef3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                       

                      Важно: рекомендуется вести список пользователей ИБ, а также настраивать им права доступа только в режиме «1С:Предприятие». В режиме «Конфигуратор» допускается создавать только пользователей с полными правами – администраторов системы. При входе таких пользователей в ИБ в режиме «1С:Предприятие», в справочнике «Пользователи» будут созданы соответствующие элементы автоматически.

                      \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html index 0354ad3cf..286c78b0f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                      В общем виде, номер или код объекта складывается по следующей схеме:
                      "ОР" + "ИБ" + "-" + номер/код,
                      где:

                      • "ОР" — 2 символа префикса организации; если префикс организации не задан, то "00". diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПроверкаЛегальностиПолученияОбновления/ПроверкаЛегальностиПолученияОбновления.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПроверкаЛегальностиПолученияОбновления/ПроверкаЛегальностиПолученияОбновления.mdo index 105303d25..6db886876 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПроверкаЛегальностиПолученияОбновления/ПроверкаЛегальностиПолученияОбновления.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПроверкаЛегальностиПолученияОбновления/ПроверкаЛегальностиПолученияОбновления.mdo @@ -7,5 +7,6 @@ DataProcessor.ЛегальностьПолученияОбновлений CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент + CommonModule.ПроверкаЛегальностиПолученияОбновленияГлобальный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo index c92045217..62a5022d8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo @@ -46,9 +46,9 @@ EventSubscription.КонтрольНеразделенныхНаборовЗаписейПриЗаписи Catalog.СообщенияОбластейДанных XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_4 - XDTOPackage.ApplicationExtensionsManifest_1_0_0_1 CommonAttribute.ОбластьДанныхВспомогательныеДанные CommonModule.ИнтерфейсыСообщенийВМоделиСервисаСтандартныеПодсистемы InformationRegister.ОбластиДанных + XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5 Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo index bc02b89b5..8e2be4368 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo @@ -6,8 +6,6 @@ Валюты в модели сервиса true - InformationRegister.УдалитьКурсыВалютПоКлассификатору - Catalog.УдалитьКлассификаторВалют CommonModule.КурсыВалютСлужебныйВМоделиСервиса CommonCommand.ЗагрузитьКурсыВалют XDTOPackage.CurrencyRates diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo index 8e7745d82..d03eae18a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo @@ -27,5 +27,12 @@ CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебныйВМоделиСервиса FunctionalOption.НезависимоеИспользованиеДополнительныхОтчетовИОбработокВМоделиСервиса + CommonModule.СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс + CommonModule.СообщенияКонтрольДополнительныхОтчетовИОбработокОбработчикТрансляции_1_0_0_1 + CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиИнтерфейс + CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиОбработчикСообщения_1_0_1_1 + CommonModule.СообщенияУправленияДополнительнымиОтчетамиИОбработкамиРеализация + XDTOPackage.ApplicationExtensionsControl_1_0_1_1 + XDTOPackage.ApplicationExtensionsManagement_1_0_1_1 Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo index d42d3e2c4..c211dc4b0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo @@ -8,7 +8,6 @@ CommonModule.СообщенияОбменаДаннымиОбработчикСообщения WebService.RemoteAdministrationOfExchange Constant.ЗарегистрированыИзмененияДанных - Constant.АдресВебСервисаОбменаДанными CommonModule.ОбменДаннымиВМоделиСервиса CommonModule.ОбменДаннымиВМоделиСервисаПовтИсп FunctionalOption.ЗарегистрированыИзмененияДанных @@ -31,7 +30,6 @@ Constant.НастройкаАвтономногоРабочегоМестаЗавершена EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете CommonModule.АвтономнаяРаботаСлужебныйВызовСервера - CommonForm.ПарольДляСинхронизацииДанных FunctionalOption.ИспользоватьАвтономнуюРаботуВМоделиСервиса XDTOPackage.АдминистрированиеОбменаДаннымиУправление XDTOPackage.АдминистрированиеОбменаДаннымиКонтроль diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo index ced8dfb9e..ce2028ab2 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -6,8 +6,6 @@ Поставляемые данные true - InformationRegister.УдалитьСвязиПоставляемыхДанных - Enum.УдалитьВидыПоставляемыхДанных CommonModule.ПоставляемыеДанные CommonModule.ПоставляемыеДанныеПереопределяемый XDTOPackage.SuppliedData diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo index dac5e9825..455920117 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo @@ -7,7 +7,6 @@ true CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп - CommonForm.НастройкиРезервногоКопированияПриложений CommonCommand.СоздатьРезервнуюКопию CommonForm.СозданиеРезервнойКопии CommonModule.РезервноеКопированиеОбластейДанных @@ -21,5 +20,13 @@ CommonModule.СообщенияУправлениеРезервнымКопированиемИнтерфейс CommonModule.СообщенияУправлениеРезервнымКопированиемРеализация Constant.ВыполнитьРезервноеКопированиеОбластиДанных + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса + CommonModule.РезервноеКопированиеОбластейДанныхДанныеФормИнтерфейс + CommonModule.РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис + DataProcessor.НастройкаРезервногоКопированияПриложения + XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1 + XDTOPackage.КонтрольРезервногоКопированияОбластейДанных_1_0_3_1 + CommonModule.СообщенияКонтрольРезервногоКопированияОбработчикТрансляции_1_0_2_1 + CommonModule.СообщенияУправлениеРезервнымКопированиемОбработчикСообщения_1_0_3_1 Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo index df4fe3c4d..807af5d40 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo @@ -23,5 +23,8 @@ CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_4 XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_3 CommonModule.СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_3 + CommonModule.СообщенияКонтрольУдаленногоАдминистрированияОбработчикТрансляции_1_0_2_4 + CommonModule.СообщенияУдаленногоАдминистрированияОбработчикСообщения_1_0_3_5 + XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_5 Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html index a4e94675d..54ca338b0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html index ae872d42b..3edecea16 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                        См. также

                        diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html index 40f9ffea5..4133789ae 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html index a5b814ede..b1148f0cc 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html @@ -1,3 +1,3 @@ - +

                        Конфигурация позволяет создавать и редактировать в режиме «1С:Предприятие» дополнительные свойства произвольных документов и справочников. Имеется возможность назначать наборы дополнительных свойств как в целом для всех элементов справочника, так и для части его элементов по определенным критериям.

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

                        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo index e647afd29..af15f39eb 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -35,6 +35,5 @@ CommonPicture.ДокументЗаписанКоннекторЛевоВерх CommonModule.СтруктураПодчиненностиПереопределяемый Role.ИспользованиеСтруктурыПодчиненности - CommonModule.СтруктураПодчиненности Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html index c41cf5b37..ff513a8b7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html index 359dde0a9..b4f2f5b81 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                        \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo index 9d0b59e5e..69664f8f0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo @@ -35,7 +35,6 @@ CommonPicture.РедактироватьФайл CommonPicture.КоллекцияПиктограммФайлов CommonPicture.РабочийКаталогПоУмолчанию - CommonPicture.Скрепка Constant.ЗапрещатьЗагрузкуФайловПоРасширению Constant.СписокЗапрещенныхРасширений StyleItem.ФайлЗанятыйДругимПользователем diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo index 96cbfdf13..952179dde 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo @@ -17,5 +17,6 @@ Role.ЧтениеФизическихЛиц CommonModule.ФизическиеЛицаКлиент CommonModule.ФизическиеЛицаКлиентСервер + CommonTemplate.КомпонентаСклоненияФИО Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html index 2288a7c15..7f55e047f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                        См. также:

                        • Задачи diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Attributes/Список/ExtInfo/ListSettings.dcss index 5c43e7b70..07f8e7059 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,17 +1,6 @@ - - DeletionMark - Equal - false - - - false - Executed - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index 6875d0e62..df716edbb 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -23,7 +23,7 @@ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Задачи бизнес-процесса %1'"), Строка(Параметры.ЗначениеОтбора)); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); @@ -33,7 +33,11 @@ Список,"БизнесПроцесс", Параметры.ЗначениеОтбора); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Выполнена", Ложь); - КонецЕсли; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры @@ -116,12 +120,12 @@ Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); Иначе - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Выполнена"); Если НЕ ПоказыватьВыполненные Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Выполнена", Ложь); КонецЕсли; - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецЕсли; diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Attributes/Список/ExtInfo/ListSettings.dcss index 1ab0d6e0e..b01be3d37 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,18 +1,6 @@ - - false - DeletionMark - Equal - false - - - false - Executed - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index eef877652..de536be2b 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -27,12 +27,17 @@ Заголовок = НСтр("ru = 'Задачи по предмету'"); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); УстановитьОтбор(Новый Структура("ПоказыватьВыполненные", ПоказыватьВыполненные)); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); - КонецЕсли; + КонецЕсли; + + // Установка отбора динамического списка. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , Ложь, + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры @@ -100,12 +105,12 @@ &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); Если НЕ ПараметрыОтбора["ПоказыватьВыполненные"] Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Выполнена", Ложь); КонецЕсли; + КонецПроцедуры &НаСервере @@ -127,7 +132,7 @@ Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); Иначе - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецЕсли; @@ -211,7 +216,7 @@ Если РеквизитГлавнаяЗадача = Неопределено Тогда Продолжить; КонецЕсли; - + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Attributes/Список/ExtInfo/ListSettings.dcss index c3f284718..508f56fa9 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ - - DeletionMark - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb @@ -26,22 +21,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - ПринятаКИсполнению - Equal - false - - - - - Шрифт - - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html index 282d29c12..ed2a191a3 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                          См. также:

                          \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl index 7e56ac602..d6c6d6901 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -12,15 +12,19 @@ Список.Параметры.УстановитьЗначениеПараметра("НезаполненнаяДата", Дата(1,1,1)); ПараметрыОтбора = Новый Соответствие(); - ПараметрыОтбора.Вставить("ПоказыватьВыполненные", ПоказыватьВыполненные); - УстановитьОтбор(ПараметрыОтбора); + ПараметрыОтбора.Вставить("ПоказыватьВыполненные", ПоказыватьВыполненные); + УстановитьОтбор(ПараметрыОтбора); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.ДатаНачала.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры @@ -114,22 +118,22 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте -Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРевизита) - РежимГруппировки = ИмяКолонкиРевизита; +Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРеквизита) + РежимГруппировки = ИмяКолонкиРеквизита; Если НЕ ПустаяСтрока(РежимГруппировки) Тогда ПоказыватьВыполненные = Ложь; УстановитьОтборНаКлиенте(); КонецЕсли; Список.Группировка.Элементы.Очистить(); - Если НЕ ПустаяСтрока(ИмяКолонкиРевизита) Тогда + Если НЕ ПустаяСтрока(ИмяКолонкиРеквизита) Тогда ПолеГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРевизита); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРеквизита); КонецЕсли; КонецПроцедуры &НаСервере -Процедура СгруппироватьПоКолонкеНаСервере(Знач ИмяКолонкиРевизита) - РежимГруппировки = ИмяКолонкиРевизита; +Процедура СгруппироватьПоКолонкеНаСервере(Знач ИмяКолонкиРеквизита) + РежимГруппировки = ИмяКолонкиРеквизита; Если НЕ ПустаяСтрока(РежимГруппировки) Тогда ПоказыватьВыполненные = Ложь; ПараметрыОтбора = Новый Соответствие(); @@ -137,9 +141,9 @@ УстановитьОтбор(ПараметрыОтбора); КонецЕсли; Список.Группировка.Элементы.Очистить(); - Если НЕ ПустаяСтрока(ИмяКолонкиРевизита) Тогда + Если НЕ ПустаяСтрока(ИмяКолонкиРеквизита) Тогда ПолеГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРевизита); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРеквизита); КонецЕсли; КонецПроцедуры @@ -155,7 +159,7 @@ &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Выполнена"); Если ПараметрыОтбора["ПоказыватьВыполненные"] Тогда СгруппироватьПоКолонкеНаСервере(""); @@ -170,7 +174,7 @@ Процедура ОбновитьСписокЗадачНаСервере() Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss index c3f284718..508f56fa9 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,11 +1,6 @@ - - DeletionMark - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb @@ -26,22 +21,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - ПринятаКИсполнению - Equal - false - - - - - Шрифт - - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html index 282d29c12..ed2a191a3 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                          См. также:

                          \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl index 79952d082..1c8128b63 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -7,6 +7,10 @@ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + + Если ОбщегоНазначения.ПриСозданииФормыНаСервере(ЭтаФорма, СтандартнаяОбработка, Отказ) Тогда + Возврат; + КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); Список.Параметры.УстановитьЗначениеПараметра("НезаполненнаяДата", Дата(1,1,1)); @@ -19,7 +23,12 @@ Элементы.ДатаНачала.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + + // Установка отбора динамического списка. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); КонецПроцедуры @@ -110,22 +119,22 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте -Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРевизита) - РежимГруппировки = ИмяКолонкиРевизита; +Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРеквизита) + РежимГруппировки = ИмяКолонкиРеквизита; Список.Группировка.Элементы.Очистить(); - Если НЕ ПустаяСтрока(ИмяКолонкиРевизита) Тогда + Если НЕ ПустаяСтрока(ИмяКолонкиРеквизита) Тогда ПолеГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРевизита); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРеквизита); КонецЕсли; КонецПроцедуры &НаСервере -Процедура СгруппироватьПоКолонкеНаСервере(Знач ИмяКолонкиРевизита) - РежимГруппировки = ИмяКолонкиРевизита; +Процедура СгруппироватьПоКолонкеНаСервере(Знач ИмяКолонкиРеквизита) + РежимГруппировки = ИмяКолонкиРеквизита; Список.Группировка.Элементы.Очистить(); - Если НЕ ПустаяСтрока(ИмяКолонкиРевизита) Тогда + Если НЕ ПустаяСтрока(ИмяКолонкиРеквизита) Тогда ПолеГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРевизита); + ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРеквизита); КонецЕсли; КонецПроцедуры @@ -133,7 +142,7 @@ Процедура ОбновитьСписокЗадачНаСервере() Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html index 601873f7c..223d74cde 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                          См. также

                          • Задачи diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 238ccdcfa..4358093bb 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,12 +1,6 @@ - - false - DeletionMark - Equal - false - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb @@ -19,22 +13,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - ПринятаКИсполнению - Equal - false - - - - - Шрифт - - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index 346a5e22f..b582597d1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -44,8 +44,13 @@ Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.ДатаИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); - + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + + // Установка отбора динамического списка. + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , + РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ); + КонецПроцедуры &НаКлиенте @@ -161,7 +166,7 @@ Процедура УстановитьОтборСписка(Список, ПараметрыОтбора) Если ПараметрыОтбора["ПоАвтору"].Пустая() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Автор"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Автор"); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Автор", ПараметрыОтбора["ПоАвтору"]); @@ -173,7 +178,7 @@ Список.Параметры.УстановитьЗначениеПараметра("Исполнитель", ПараметрыОтбора["ПоИсполнителю"]); КонецЕсли; - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Выполнена"); Если ПараметрыОтбора["ПоказыватьЗадачи"] <> 0 Тогда Если ПараметрыОтбора["ПоказыватьЗадачи"] = 1 Тогда @@ -193,7 +198,7 @@ &НаСервере Процедура ОбновитьСписокЗадачНаСервере() - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index 682d8a9d2..a3294ca79 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                            Настройка уведомлений о задачах

                            diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index b28eda059..315b7d99a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -47,11 +47,16 @@ Возврат; КонецЕсли; - ЗадачаБылаВыполнена = Ложь; Если НЕ Ссылка.Пустая() Тогда - ЗадачаБылаВыполнена = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Выполнена"); + ИсходныеРеквизиты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Ссылка, + "Выполнена, ПометкаУдаления, СостояниеБизнесПроцесса"); + Иначе + ИсходныеРеквизиты = Новый Структура( + "Выполнена, ПометкаУдаления, СостояниеБизнесПроцесса", + Ложь, Ложь, Перечисления.СостоянияБизнесПроцессов.ПустаяСсылка()); КонецЕсли; - Если НЕ ЗадачаБылаВыполнена И Выполнена Тогда + + Если НЕ ИсходныеРеквизиты.Выполнена И Выполнена Тогда Если СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда ВызватьИсключение НСтр("ru = 'Нельзя выполнять задачи остановленных бизнес-процессов.'"); @@ -79,20 +84,12 @@ ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Предмет); - ПредыдущаяПометкаУдаления = Ложь; - Если НЕ Ссылка.Пустая() Тогда - ПредыдущаяПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления"); - КонецЕсли; - - Если ПредыдущаяПометкаУдаления <> ПометкаУдаления Тогда + Если ИсходныеРеквизиты.ПометкаУдаления <> ПометкаУдаления Тогда БизнесПроцессыИЗадачиСервер.ПриПометкеУдаленияЗадачи(Ссылка, ПометкаУдаления); КонецЕсли; - Если НЕ Ссылка.Пустая() Тогда - ПредыдущееСостояние = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "СостояниеБизнесПроцесса"); - Если ПредыдущееСостояние <> СостояниеБизнесПроцесса Тогда - УстановитьСостояниеПодчиненныхБизнесПроцессов(СостояниеБизнесПроцесса); - КонецЕсли; + Если НЕ Ссылка.Пустая() И ИсходныеРеквизиты.СостояниеБизнесПроцесса <> СостояниеБизнесПроцесса Тогда + УстановитьСостояниеПодчиненныхБизнесПроцессов(СостояниеБизнесПроцесса); КонецЕсли; Если Выполнена И Не ПринятаКИсполнению Тогда diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index b352068ff..ed0bbe60e 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -40,8 +40,7 @@ ИдентификаторФайлаСтрокой, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) ПроверитьБлокировкуИнформационнойБазыДляОбновления(); @@ -68,8 +67,7 @@ ИдентификаторФайлаСтрокой, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) ПроверитьБлокировкуИнформационнойБазыДляОбновления(); @@ -147,8 +145,7 @@ ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( Отказ, ЗначениеИзСтрокиВнутр(НастройкаОтборовСтрокой), - ЗначениеИзСтрокиВнутр(ЗначенияПоУмолчаниюСтрокой) - ); + ЗначениеИзСтрокиВнутр(ЗначенияПоУмолчаниюСтрокой)); Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); @@ -276,8 +273,7 @@ УдалитьФайлы(ВременныйКаталогВыгрузки(TransferId)); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецФункции @@ -315,8 +311,7 @@ Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. |Необходимо убедиться, что в настройках программы заданы параметры - |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'" - ); + |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -336,8 +331,7 @@ УдалитьФайлы(ВременныйКаталог); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; @@ -412,8 +406,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) Параметры = Новый Массив; Параметры.Добавить(ИмяПланаОбмена); @@ -423,8 +416,7 @@ ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", Параметры, КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") - ); + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); @@ -469,8 +461,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) Параметры = Новый Массив; Параметры.Добавить(ИмяПланаОбмена); @@ -480,8 +471,7 @@ ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", Параметры, КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") - ); + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); 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 b7e62e2da..d2d457703 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -40,8 +40,7 @@ ИдентификаторФайлаСтрокой, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) ПроверитьБлокировкуИнформационнойБазыДляОбновления(); @@ -68,8 +67,7 @@ ИдентификаторФайлаСтрокой, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) ПроверитьБлокировкуИнформационнойБазыДляОбновления(); @@ -144,8 +142,7 @@ ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( Отказ, СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO), - СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO) - ); + СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO)); Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); @@ -271,8 +268,7 @@ УдалитьФайлы(ВременныйКаталогВыгрузки(TransferId)); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецФункции @@ -310,8 +306,7 @@ Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. |Необходимо убедиться, что в настройках программы заданы параметры - |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'" - ); + |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -331,8 +326,7 @@ УдалитьФайлы(ВременныйКаталог); Исключение ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; @@ -442,8 +436,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) Параметры = Новый Массив; Параметры.Добавить(ИмяПланаОбмена); @@ -453,8 +446,7 @@ ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", Параметры, КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") - ); + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); @@ -499,8 +491,7 @@ ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ) + ДлительнаяОперацияРазрешена) Параметры = Новый Массив; Параметры.Добавить(ИмяПланаОбмена); @@ -510,8 +501,7 @@ ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", Параметры, КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), - НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") - ); + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'")); Попытка Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl index 9552bc7a7..8925cd029 100644 --- a/SSL/src/WebServices/MessageExchange/Module.bsl +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -26,8 +26,7 @@ Отправитель, ПотокХранилище.Получить(), ЗагруженныеСообщения, - ДанныеПрочитаныЧастично - ); + ДанныеПрочитаныЧастично); // Обрабатываем очередь сообщений Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -65,8 +64,7 @@ ЭтотУзелОбъект.Код = Строка(Новый УникальныйИдентификатор()); ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), - НаименованиеЭтойКонечнойТочки - ); + НаименованиеЭтойКонечнойТочки); ЭтотУзелОбъект.Записать(); ИначеЕсли ПустаяСтрока(ОбменСообщениямиВнутренний.НаименованиеЭтогоУзла()) Тогда @@ -74,8 +72,7 @@ ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), - НаименованиеЭтойКонечнойТочки - ); + НаименованиеЭтойКонечнойТочки); ЭтотУзелОбъект.Записать(); КонецЕсли; 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 1ee7865b4..c4ce5700d 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -26,8 +26,7 @@ Отправитель, ПотокХранилище.Получить(), ЗагруженныеСообщения, - ДанныеПрочитаныЧастично - ); + ДанныеПрочитаныЧастично); // Обрабатываем очередь сообщений Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -65,8 +64,7 @@ ЭтотУзелОбъект.Код = Строка(Новый УникальныйИдентификатор()); ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), - НаименованиеЭтойКонечнойТочки - ); + НаименованиеЭтойКонечнойТочки); ЭтотУзелОбъект.Записать(); ИначеЕсли ПустаяСтрока(ОбменСообщениямиВнутренний.НаименованиеЭтогоУзла()) Тогда @@ -74,8 +72,7 @@ ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), - НаименованиеЭтойКонечнойТочки - ); + НаименованиеЭтойКонечнойТочки); ЭтотУзелОбъект.Записать(); КонецЕсли; @@ -98,8 +95,7 @@ Отказ, Код, Наименование, - СериализаторXDTO.ПрочитатьXDTO(НастройкиПодключенияПолучателяXDTO) - ); + СериализаторXDTO.ПрочитатьXDTO(НастройкиПодключенияПолучателяXDTO)); Возврат Не Отказ; КонецФункции diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl index 647462826..e61119a94 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl @@ -8,8 +8,7 @@ Функция ПолучитьПланыОбменаКонфигурации() Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок( - ОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных() - ); + ОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных()); КонецФункции // Соответствует операции PrepareExchangeExecution @@ -118,8 +117,7 @@ ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, ЗначениеИзСтрокиВнутр(СтруктураНастроекСтрокой), Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], - СообщениеОбОшибке - ); + СообщениеОбОшибке); Если Отказ Тогда Возврат Ложь; diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl index 3992da713..fd00dd1b7 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl @@ -8,8 +8,7 @@ Функция ПолучитьПланыОбменаКонфигурации() Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок( - ОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных() - ); + ОбменДаннымиВМоделиСервисаПовтИсп.ПланыОбменаСинхронизацииДанных()); КонецФункции // Соответствует операции PrepareExchangeExecution @@ -62,8 +61,7 @@ ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазеИзНеразделенногоСеанса", Параметры, - Ключ - ); + Ключ); Возврат ""; КонецФункции @@ -84,8 +82,7 @@ ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазеИзНеразделенногоСеанса", Параметры, - Ключ - ); + Ключ); Возврат ""; КонецФункции @@ -99,8 +96,7 @@ ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, СериализаторXDTO.ПрочитатьXDTO(СтруктураНастроекXDTO), Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], - СообщениеОбОшибке - ); + СообщениеОбОшибке); Если Отказ Тогда Возврат Ложь; diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo b/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo new file mode 100644 index 000000000..27417ac43 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/ApplicationExtensionsControl_1_0_1_1.mdo @@ -0,0 +1,9 @@ + + + ApplicationExtensionsControl_1_0_1_1 + + ru + Application extensions control 1 0 1 1 + + http://www.1c.ru/1cFresh/ApplicationExtensions/Control/1.0.1.1 + diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto b/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto new file mode 100644 index 000000000..3acfccc26 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationExtensionsControl_1_0_1_1/Package.xdto @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo b/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo new file mode 100644 index 000000000..6ce4984cd --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/ApplicationExtensionsManagement_1_0_1_1.mdo @@ -0,0 +1,9 @@ + + + ApplicationExtensionsManagement_1_0_1_1 + + ru + Application extensions management 1 0 1 1 + + http://www.1c.ru/1cFresh/ApplicationExtensions/Management/1.0.1.1 + diff --git a/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto b/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto new file mode 100644 index 000000000..7d26a94d7 --- /dev/null +++ b/SSL/src/XDTOPackages/ApplicationExtensionsManagement_1_0_1_1/Package.xdto @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/MessageInfoCenter_1_0_1_1.mdo b/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/MessageInfoCenter_1_0_1_1.mdo new file mode 100644 index 000000000..0df81431f --- /dev/null +++ b/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/MessageInfoCenter_1_0_1_1.mdo @@ -0,0 +1,9 @@ + + + MessageInfoCenter_1_0_1_1 + + ru + Message info center 1 0 1 1 + + http://www.1c.ru/SaaS/1.0/XMLSchema/ManageInfoCenter/Messages/1.0.1.1 + diff --git a/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/Package.xdto b/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/Package.xdto new file mode 100644 index 000000000..8e5c85363 --- /dev/null +++ b/SSL/src/XDTOPackages/MessageInfoCenter_1_0_1_1/Package.xdto @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/Package.xdto b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/Package.xdto new file mode 100644 index 000000000..a75f135a5 --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/Package.xdto @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1.mdo b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1.mdo new file mode 100644 index 000000000..81c166110 --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1/КонтрольРезервногоКопированияОбластейДанных_1_0_3_1.mdo @@ -0,0 +1,9 @@ + + + КонтрольРезервногоКопированияОбластейДанных_1_0_3_1 + + ru + Контроль резервного копирования областей данных 1.0.3.1 + + http://www.1c.ru/SaaS/ControlZonesBackup/1.0.3.1 + diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/Package.xdto b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/Package.xdto new file mode 100644 index 000000000..068d2d455 --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/Package.xdto @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo new file mode 100644 index 000000000..ca506481d --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_5/КонтрольУдаленногоАдминистрирования_1_0_2_5.mdo @@ -0,0 +1,9 @@ + + + КонтрольУдаленногоАдминистрирования_1_0_2_5 + + ru + Контроль удаленного администрирования 1.0.2.4 + + http://www.1c.ru/1cFresh/RemoteAdministration/Control/1.0.2.5 + diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/Package.xdto b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/Package.xdto new file mode 100644 index 000000000..c45d3851c --- /dev/null +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/Package.xdto @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo new file mode 100644 index 000000000..4fc803c04 --- /dev/null +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5/УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5.mdo @@ -0,0 +1,9 @@ + + + УдаленноеАдминистрированиеВМоделиСервиса_1_0_3_5 + + ru + Удаленное администрирование в модели сервиса 1.0.3.4 + + http://www.1c.ru/1cFresh/RemoteAdministration/App/1.0.3.5 + diff --git a/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/Package.xdto b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/Package.xdto new file mode 100644 index 000000000..b96e9857e --- /dev/null +++ b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/Package.xdto @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1.mdo b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1.mdo new file mode 100644 index 000000000..ee37c25cf --- /dev/null +++ b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1.mdo @@ -0,0 +1,9 @@ + + + УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1 + + ru + Управление резервным копированием областей данных 1.0.3.1 + + http://www.1c.ru/SaaS/ManageZonesBackup/1.0.3.1 +
            Отбор Описание
            По состоянию